diff -Nru geary-0.11.4/AUTHORS geary-0.12.0/AUTHORS --- geary-0.11.4/AUTHORS 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/AUTHORS 2017-10-02 11:25:21.000000000 +0000 @@ -4,4 +4,4 @@ Matthew Pirocchi Charles Lindsay Robert Schroll - +Michael Gratton diff -Nru geary-0.11.4/bindings/metadata/JSCore-3.0.metadata geary-0.12.0/bindings/metadata/JSCore-3.0.metadata --- geary-0.11.4/bindings/metadata/JSCore-3.0.metadata 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/bindings/metadata/JSCore-3.0.metadata 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -GlobalContextRef skip -ObjectRef skip - diff -Nru geary-0.11.4/bindings/metadata/WebKit2-4.0.metadata geary-0.12.0/bindings/metadata/WebKit2-4.0.metadata --- geary-0.11.4/bindings/metadata/WebKit2-4.0.metadata 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/bindings/metadata/WebKit2-4.0.metadata 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,15 @@ + +JavascriptResult + .get_global_context nullable=false unowned=true + .get_value nullable=false unowned=true + +//Forward upstream +Download + .failed#signal.error type="WebKit.DownloadError" +PrintOperation + .failed#signal.error type="WebKit.PrintError" +WebResource + .failed#signal.error type="GLib.Error" +WebView + .load_failed#signal.error type="GLib.Error" + .show_option_menu#signal skip diff -Nru geary-0.11.4/bindings/metadata/WebKit2WebExtension-4.0-custom.vala geary-0.12.0/bindings/metadata/WebKit2WebExtension-4.0-custom.vala --- geary-0.11.4/bindings/metadata/WebKit2WebExtension-4.0-custom.vala 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/bindings/metadata/WebKit2WebExtension-4.0-custom.vala 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,5 @@ +namespace WebKit { + namespace DOM { + public delegate void EventTargetFunc (WebKit.DOM.EventTarget target, WebKit.DOM.Event event); + } +} diff -Nru geary-0.11.4/bindings/metadata/WebKit2WebExtension-4.0.metadata geary-0.12.0/bindings/metadata/WebKit2WebExtension-4.0.metadata --- geary-0.11.4/bindings/metadata/WebKit2WebExtension-4.0.metadata 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/bindings/metadata/WebKit2WebExtension-4.0.metadata 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,9 @@ +DOM* parent="WebKit.DOM" name="DOM(.+)" + +DOMEventTarget.add_event_listener skip +_ContextMenu skip +_ContextMenuItem skip + +Frame.get_javascript_* nullable=false unowned=true + +DOMEventTarget.add_event_listener_with_closure.handler type="owned WebKit.DOM.EventTargetFunc" diff -Nru geary-0.11.4/bindings/metadata/webkitgtk-1.10/WebKit-3.0.metadata geary-0.12.0/bindings/metadata/webkitgtk-1.10/WebKit-3.0.metadata --- geary-0.11.4/bindings/metadata/webkitgtk-1.10/WebKit-3.0.metadata 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/bindings/metadata/webkitgtk-1.10/WebKit-3.0.metadata 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -DOM* parent="WebKit.DOM" name="DOM(.+)" - -DOMEventTarget.add_event_listener skip=false -DOMEventTarget.remove_event_listener skip=false - -WebView.entering_fullscreen#signal name="entering_fullscreen_signal" -WebView.leaving_fullscreen#signal name="leaving_fullscreen_signal" - -WebView.move_cursor#virtual_method name="leaving_fullscreen_method" -WebSettings.enable_default_context_menu#property deprecated=false - -DOMNode.dispatch_event type="void" -DOMWebKitNamedFlow.dispatch_event type="void" -DOMDOMApplicationCache.dispatch_event type="void" -DOMDOMWindow.dispatch_event type="void" - diff -Nru geary-0.11.4/bindings/metadata/webkitgtk-2.0/WebKit-3.0.metadata geary-0.12.0/bindings/metadata/webkitgtk-2.0/WebKit-3.0.metadata --- geary-0.11.4/bindings/metadata/webkitgtk-2.0/WebKit-3.0.metadata 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/bindings/metadata/webkitgtk-2.0/WebKit-3.0.metadata 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -DOM* parent="WebKit.DOM" name="DOM(.+)" - -DOMEventTarget.add_event_listener skip=false -DOMEventTarget.remove_event_listener skip=false - -WebView.entering_fullscreen#signal name="entering_fullscreen_signal" -WebView.leaving_fullscreen#signal name="leaving_fullscreen_signal" - -WebView.move_cursor#virtual_method name="leaving_fullscreen_method" -WebSettings.enable_default_context_menu#property deprecated=false - -DOMNode.dispatch_event type="void" -DOMWebKitNamedFlow.dispatch_event type="void" -DOMDOMApplicationCache.dispatch_event type="void" -DOMDOMWindow.dispatch_event type="void" -DOMTextTrackCue.dispatch_event type="void" -DOMTextTrack.dispatch_event type="void" -DOMTextTrackList.dispatch_event type="void" - diff -Nru geary-0.11.4/bindings/metadata/webkitgtk-2.2/WebKit-3.0.metadata geary-0.12.0/bindings/metadata/webkitgtk-2.2/WebKit-3.0.metadata --- geary-0.11.4/bindings/metadata/webkitgtk-2.2/WebKit-3.0.metadata 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/bindings/metadata/webkitgtk-2.2/WebKit-3.0.metadata 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -DOM* parent="WebKit.DOM" name="DOM(.+)" - -DOMEventTarget.add_event_listener skip=false -DOMEventTarget.add_event_listener.handler closure=-1 -DOMEventTarget.add_event_listener.user_data closure=-1 -DOMEventTarget.remove_event_listener skip=false - -WebView.entering_fullscreen#signal name="entering_fullscreen_signal" -WebView.leaving_fullscreen#signal name="leaving_fullscreen_signal" - -WebView.move_cursor#virtual_method name="leaving_fullscreen_method" -WebSettings.enable_default_context_menu#property deprecated=false - -DOMBatteryManager.dispatch_event type="void" -DOMAudioTrackList.dispatch_event type="void" -DOMTextTrackCue.dispatch_event type="void" -DOMTextTrack.dispatch_event type="void" -DOMTextTrackList.dispatch_event type="void" -DOMVideoTrackList.dispatch_event type="void" -DOMNode.dispatch_event type="void" -DOMWebKitNamedFlow.dispatch_event type="void" -DOMDOMApplicationCache.dispatch_event type="void" -DOMDOMWindow.dispatch_event type="void" - -WebFrame.get_global_context skip - diff -Nru geary-0.11.4/bindings/metadata/webkitgtk-2.4/WebKit-3.0-custom.vala geary-0.12.0/bindings/metadata/webkitgtk-2.4/WebKit-3.0-custom.vala --- geary-0.11.4/bindings/metadata/webkitgtk-2.4/WebKit-3.0-custom.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/bindings/metadata/webkitgtk-2.4/WebKit-3.0-custom.vala 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -namespace WebKit { - namespace DOM { - [CCode (cheader_filename="webkit/webkit.h", type_id="webkit_dom_event_target_get_type()")] - public interface EventTarget { - public abstract bool add_event_listener(string event_name, GLib.Callback handler, bool use_capture, GLib.Object? object); - public abstract bool remove_event_listener(string event_name, GLib.Callback handler, bool use_capture); - } - } -} - diff -Nru geary-0.11.4/bindings/metadata/webkitgtk-2.4/WebKit-3.0.metadata geary-0.12.0/bindings/metadata/webkitgtk-2.4/WebKit-3.0.metadata --- geary-0.11.4/bindings/metadata/webkitgtk-2.4/WebKit-3.0.metadata 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/bindings/metadata/webkitgtk-2.4/WebKit-3.0.metadata 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -DOM* parent="WebKit.DOM" name="DOM(.+)" - -DOMEventTarget.add_event_listener skip=true -DOMEventTarget.add_event_listener_with_closure skip=true -DOMEventTarget.remove_event_listener skip=true -DOMEventTarget.remove_event_listener_with_closure skip=true - -WebView.entering_fullscreen#signal name="entering_fullscreen_signal" -WebView.leaving_fullscreen#signal name="leaving_fullscreen_signal" - -WebView.move_cursor#virtual_method name="leaving_fullscreen_method" -WebSettings.enable_default_context_menu#property deprecated=false - -WebFrame.get_global_context skip diff -Nru geary-0.11.4/bindings/vapi/enchant.vapi geary-0.12.0/bindings/vapi/enchant.vapi --- geary-0.11.4/bindings/vapi/enchant.vapi 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/bindings/vapi/enchant.vapi 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,34 @@ +[CCode (cheader_filename = "enchant.h")] +namespace Enchant { + public delegate void BrokerDescribeFn (string provider_name, string provider_desc, string provider_dll_file); + public delegate void DictDescribeFn (string lang_tag, string provider_name, string provider_desc, string provider_file); + + [Compact] + [CCode (free_function = "enchant_broker_free")] + public class Broker { + [CCode (cname = "enchant_broker_init")] + public Broker (); + + public unowned Dict request_dict (string tag); + public unowned Dict request_pwl_dict (string pwl); + public void free_dict (Dict dict); + public int dict_exists (string tag); + public void set_ordering (string tag, string ordering); + public void describe (BrokerDescribeFn fn); + public void list_dicts (DictDescribeFn fn); + public unowned string get_error (); + } + + [Compact] + public class Dict { + public int check (string word, long len = -1); + public unowned string[] suggest (string word, long len = -1); + public void free_string_list ([CCode (array_length = false)] string[] string_list); + public void add_to_session (string word, long len = -1); + public int is_in_session (string word, long len = -1); + public void store_replacement ( string mis, long mis_len, string cor, long cor_len); + public void add_to_pwl ( string word, long len = -1); + public void describe (DictDescribeFn fn); + public unowned string get_error (); + } +} diff -Nru geary-0.11.4/bindings/vapi/javascriptcore-4.0.vapi geary-0.12.0/bindings/vapi/javascriptcore-4.0.vapi --- geary-0.11.4/bindings/vapi/javascriptcore-4.0.vapi 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/bindings/vapi/javascriptcore-4.0.vapi 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,155 @@ +/* + * Copyright 2017 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +[CCode (cprefix = "JS", + gir_namespace = "JavaScriptCore", + gir_version = "4.0", + lower_case_cprefix = "JS_", + cheader_filename = "JavaScriptCore/JavaScript.h")] +namespace JS { + + [CCode (cname = "JSContextRef")] + [SimpleType] + public struct Context { + + [CCode (cname = "JSEvaluateScript")] + public Value evaluate_script(String script, + Object? thisObject, + String? sourceURL, + int startingLineNumber, + out Value? exception); + + [CCode (cname = "JSCheckScriptSyntax")] + public Value check_script_syntax(String script, + String? sourceURL, + int startingLineNumber, + out Value? exception); + + } + + [CCode (cname = "JSGlobalContextRef")] + [SimpleType] + public struct GlobalContext : Context { + + [CCode (cname = "JSGlobalContextRetain")] + public bool retain(); + + [CCode (cname = "JSGlobalContextRelease")] + public bool release(); + + } + + [CCode (cname = "JSType", has_type_id = false)] + public enum Type { + + [CCode (cname = "kJSTypeUndefined")] + UNDEFINED, + + [CCode (cname = "kJSTypeNull")] + NULL, + + [CCode (cname = "kJSTypeBoolean")] + BOOLEAN, + + [CCode (cname = "kJSTypeNumber")] + NUMBER, + + [CCode (cname = "kJSTypeString")] + STRING, + + [CCode (cname = "kJSTypeObject")] + OBJECT + } + + [CCode (cname = "JSObjectRef")] + [SimpleType] + public struct Object { + + [CCode (cname = "JSObjectMakeFunction")] + public Object.make_function(String? name, + [CCode (array_length_pos=1.5)] + String[]? parameterNames, + String body, + String? sourceURL, + int startingLineNumber, + out Value? exception); + + [CCode (cname = "JSObjectCallAsFunction", instance_pos = 1.1)] + public Value call_as_function(Context ctx, + Object? thisObject, + [CCode (array_length_pos=2.5)] + Value[]? arguments, + out Value? exception); + + [CCode (cname = "JSObjectHasProperty", instance_pos = 1.1)] + public bool has_property(Context ctx, String property_name); + + [CCode (cname = "JSObjectGetProperty", instance_pos = 1.1)] + public Value get_property(Context ctx, + String property_name, + out Value? exception); + + } + + [CCode (cname = "JSValueRef")] + [SimpleType] + public struct Value { + + [CCode (cname = "JSValueGetType", instance_pos = 1.1)] + public Type get_type(Context context); + + [CCode (cname = "JSValueIsBoolean", instance_pos = 1.1)] + public bool is_boolean(Context ctx); + + [CCode (cname = "JSValueIsNumber", instance_pos = 1.1)] + public bool is_number(Context ctx); + + [CCode (cname = "JSValueIsObject", instance_pos = 1.1)] + public bool is_object(Context ctx); + + [CCode (cname = "JSValueIsString", instance_pos = 1.1)] + public bool is_string(Context ctx); + + [CCode (cname = "JSValueToBoolean", instance_pos = 1.1)] + public bool to_boolean(Context ctx); + + [CCode (cname = "JSValueToNumber", instance_pos = 1.1)] + public double to_number(Context ctx, out Value exception); + + [CCode (cname = "JSValueToObject", instance_pos = 1.1)] + public Object to_object(Context ctx, out Value exception); + + [CCode (cname = "JSValueToStringCopy", instance_pos = 1.1)] + public String to_string_copy(Context ctx, out Value exception); + + } + + [CCode (cname = "JSStringRef")] + [SimpleType] + public struct String { + + [CCode (cname = "JSStringCreateWithUTF8CString")] + public String.create_with_utf8_cstring(string str); + + [CCode (cname = "JSStringGetLength")] + public int String.get_length(); + + [CCode (cname = "JSStringGetMaximumUTF8CStringSize")] + public int String.get_maximum_utf8_cstring_size(); + + [CCode (cname = "JSStringGetUTF8CString")] + public void String.get_utf8_cstring(string* buffer, int bufferSize); + + [CCode (cname = "JSStringRetain")] + public void String.retain(); + + [CCode (cname = "JSStringRelease")] + public void String.release(); + + } + +} diff -Nru geary-0.11.4/cmake/FindDesktopFileValidate.cmake geary-0.12.0/cmake/FindDesktopFileValidate.cmake --- geary-0.11.4/cmake/FindDesktopFileValidate.cmake 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/cmake/FindDesktopFileValidate.cmake 2017-10-02 11:25:21.000000000 +0000 @@ -13,8 +13,8 @@ if (DESKTOP_FILE_VALIDATE_FOUND) macro (VALIDATE_DESKTOP_FILE desktop_id) - add_custom_command (TARGET ${desktop_id}.desktop POST_BUILD - COMMAND ${DESKTOP_FILE_VALIDATE_EXECUTABLE} ${desktop_id}.desktop + add_custom_command (TARGET ${desktop_id} POST_BUILD + COMMAND ${DESKTOP_FILE_VALIDATE_EXECUTABLE} ${desktop_id} ) endmacro (VALIDATE_DESKTOP_FILE desktop_id) endif (DESKTOP_FILE_VALIDATE_FOUND) diff -Nru geary-0.11.4/cmake/FindIntltool.cmake geary-0.12.0/cmake/FindIntltool.cmake --- geary-0.11.4/cmake/FindIntltool.cmake 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/cmake/FindIntltool.cmake 2017-10-02 11:25:21.000000000 +0000 @@ -12,24 +12,31 @@ endif (INTLTOOL_MERGE_EXECUTABLE) if (INTLTOOL_MERGE_FOUND) + macro (INTLTOOL_MERGE_APPDATA appstream_name po_dir) + add_custom_target (${appstream_name}.in ALL + ${INTLTOOL_MERGE_EXECUTABLE} --xml-style ${CMAKE_SOURCE_DIR}/${po_dir} + ${CMAKE_CURRENT_SOURCE_DIR}/${appstream_name}.in ${appstream_name} + ) + install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${appstream_name} DESTINATION ${CMAKE_INSTALL_PREFIX}/share/appdata) + endmacro (INTLTOOL_MERGE_APPDATA appstream_name po_dir) macro (INTLTOOL_MERGE_DESKTOP desktop_id po_dir) - add_custom_target (geary.desktop ALL + add_custom_target (org.gnome.Geary.desktop ALL ${INTLTOOL_MERGE_EXECUTABLE} --desktop-style ${CMAKE_SOURCE_DIR}/${po_dir} - ${CMAKE_CURRENT_SOURCE_DIR}/${desktop_id}.desktop.in ${desktop_id}.desktop + ${CMAKE_CURRENT_SOURCE_DIR}/${desktop_id}.in ${desktop_id} ) - install (FILES ${CMAKE_CURRENT_BINARY_DIR}/geary.desktop DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications) + install (FILES ${CMAKE_CURRENT_BINARY_DIR}/org.gnome.Geary.desktop DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications) endmacro (INTLTOOL_MERGE_DESKTOP desktop_id po_dir) macro (INTLTOOL_MERGE_AUTOSTART_DESKTOP desktop_id po_dir) add_custom_target (geary-autostart.desktop ALL ${INTLTOOL_MERGE_EXECUTABLE} --desktop-style ${CMAKE_SOURCE_DIR}/${po_dir} - ${CMAKE_CURRENT_SOURCE_DIR}/${desktop_id}.desktop.in ${desktop_id}.desktop + ${CMAKE_CURRENT_SOURCE_DIR}/${desktop_id}.in ${desktop_id} ) install (FILES ${CMAKE_CURRENT_BINARY_DIR}/geary-autostart.desktop DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications) endmacro (INTLTOOL_MERGE_AUTOSTART_DESKTOP desktop_id po_dir) macro (INTLTOOL_MERGE_CONTRACT desktop_id po_dir) add_custom_target (geary-attach.contract ALL ${INTLTOOL_MERGE_EXECUTABLE} --desktop-style ${CMAKE_SOURCE_DIR}/${po_dir} - ${CMAKE_CURRENT_SOURCE_DIR}/${desktop_id}.contract.in ${desktop_id}.contract + ${CMAKE_CURRENT_SOURCE_DIR}/${desktop_id}.in ${desktop_id} ) install (FILES ${CMAKE_CURRENT_BINARY_DIR}/geary-attach.contract DESTINATION ${CMAKE_INSTALL_PREFIX}/share/contractor) endmacro (INTLTOOL_MERGE_CONTRACT desktop_id po_dir) diff -Nru geary-0.11.4/cmake/gitversion.cmake geary-0.12.0/cmake/gitversion.cmake --- geary-0.11.4/cmake/gitversion.cmake 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/cmake/gitversion.cmake 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,14 @@ +if (VERSION MATCHES "-dev$") + find_package(Git QUIET) + if (GIT_FOUND) + execute_process(COMMAND ${GIT_EXECUTABLE} describe --all --long --dirty + WORKING_DIRECTORY ${SRC_DIR} + OUTPUT_VARIABLE "GIT_VERSION" + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET) + string(REGEX REPLACE "^heads\\/(.*)-0-(g.*)$" "\\1~\\2" GIT_VERSION "${GIT_VERSION}") + set(VERSION ${GIT_VERSION}) + endif() +endif() + +configure_file("${SRC_DIR}/geary-version.vala.in" "${DST_DIR}/geary-version.vala") diff -Nru geary-0.11.4/cmake/GSettings.cmake geary-0.12.0/cmake/GSettings.cmake --- geary-0.11.4/cmake/GSettings.cmake 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/cmake/GSettings.cmake 2017-10-02 11:25:21.000000000 +0000 @@ -18,7 +18,7 @@ endif () macro(add_schemas GSETTINGS_TARGET SCHEMA_DIRECTORY PREFIX) - set(PKG_CONFIG_EXECUTABLE pkg-config) + find_package(PkgConfig) # Locate all schema files. file(GLOB all_schema_files diff -Nru geary-0.11.4/CMakeLists.txt geary-0.12.0/CMakeLists.txt --- geary-0.11.4/CMakeLists.txt 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/CMakeLists.txt 2017-10-02 11:25:21.000000000 +0000 @@ -19,22 +19,60 @@ # set(GETTEXT_PACKAGE "geary") set(RELEASE_NAME "Lightweight email client for GNOME.") -set(VERSION "0.11.3") +set(VERSION "0.12.0") set(VERSION_INFO "Release") set(LANGUAGE_SUPPORT_DIRECTORY ${CMAKE_INSTALL_PREFIX}/share/locale) +# +# Primary library minimum version requirements. See src/CMakeLists.txt +# for others. +# +set(TARGET_GLIB 2.42) # Also passed to valac, so don't include a point rev +set(TARGET_GTK 3.14.0) +set(TARGET_WEBKIT 2.10) + +if (NOT ISO_CODE_639_XML) + find_path(ISOCODES_DIRECTORY NAMES iso_639.xml PATHS ${CMAKE_INSTALL_PREFIX} /usr/share/xml/iso-codes) + if (ISOCODES_DIRECTORY) + set(ISO_CODE_639_XML ${ISOCODES_DIRECTORY}/iso_639.xml) + else () + message(WARNING "File iso_639.xml not found. Please specify it manually using cmake -DISO_CODE_639_XML=/path/to/iso_639.xml") + endif () +else () + if (NOT EXISTS ${ISO_CODE_639_XML}) + message(WARNING "The path to iso_639.xml specified in ISO_CODE_639_XML is not valid.") + endif () +endif () + +if (NOT ISO_CODE_3166_XML) + find_path(ISOCODES_DIRECTORY NAMES iso_3166.xml PATHS ${CMAKE_INSTALL_PREFIX} /usr/share/xml/iso-codes) + if (ISOCODES_DIRECTORY) + set(ISO_CODE_3166_XML ${ISOCODES_DIRECTORY}/iso_3166.xml) + else () + message(WARNING "File iso_3166.xml not found. Please specify it manually using cmake -DISO_CODE_3166_XML=/path/to/iso_3166.xml") + endif () +else () + if (NOT EXISTS ${ISO_CODE_3166_XML}) + message(WARNING "The path to iso_3166.xml specified in ISO_CODE_3166_XML is not valid.") + endif () +endif () + # Packaging filenamesnames. set(ARCHIVE_BASE_NAME ${CMAKE_PROJECT_NAME}-${VERSION}) set(ARCHIVE_FULL_NAME ${ARCHIVE_BASE_NAME}.tar.xz) set(ARCHIVE_DEBUILD_FULL_NAME ${CMAKE_PROJECT_NAME}_${VERSION}.orig.tar.xz) -option(DEBUG "Build for debugging." OFF) +if (NOT CMAKE_BUILD_TYPE) + #default build is -O2 -g + set(CMAKE_BUILD_TYPE "RelWithDebInfo") +endif() + option(ICON_UPDATE "Run gtk-update-icon-cache after the install." ON) option(DESKTOP_UPDATE "Run update-desktop-database after the install." ON) option(DESKTOP_VALIDATE "Check generated desktop file for errors during build." ON) option(TRANSLATE_HELP "Generate and install translated help documentation." ON) -if (DEBUG) +IF(CMAKE_BUILD_TYPE MATCHES Debug) message(STATUS "Debug build") endif () @@ -58,20 +96,46 @@ pkg_check_modules(LIBUNITY QUIET unity>=5.12.0) pkg_check_modules(LIBMESSAGINGMENU QUIET messaging-menu>=12.10.2) -# CMake's range-checking syntax doesn't allow for a bare less-than, so using -# improbably high version numbers to indicate maximum -pkg_check_modules(WEBKITGTK24X QUIET webkitgtk-3.0>=2.3.0) -pkg_check_modules(WEBKITGTK22X QUIET webkitgtk-3.0>=2.2.0 webkitgtk-3.0<=2.2.100) -pkg_check_modules(WEBKITGTK20X QUIET webkitgtk-3.0>=2.0.0 webkitgtk-3.0<=2.0.100) -pkg_check_modules(WEBKITGTK110X QUIET webkitgtk-3.0>=1.10.0 webkitgtk-3.0<=1.10.2) - -pkg_check_modules(GTK312X QUIET gtk+-3.0>=3.12.0) - -pkg_check_modules(SQLITE311 QUIET sqlite3>=3.11.0) -pkg_check_modules(SQLITE312 QUIET sqlite3>=3.12.0) -if (SQLITE311_FOUND AND NOT SQLITE312_FOUND) - message(WARNING "SQLite 3.11.x found. Ensure it has been compiled with -DSQLITE_ENABLE_FTS3_TOKENIZER or upgrade to SQLite 3.12.x. See https://bugzilla.gnome.org/show_bug.cgi?id=763203 for details.") -endif () +pkg_check_modules(ENCHANT QUIET enchant) + +pkg_check_modules(SQLITE3 sqlite3 REQUIRED) +if (NOT ${SQLITE3_VERSION} VERSION_LESS 3.12) + include(CheckSymbolExists) + check_symbol_exists(SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER sqlite3.h HAVE_FTS3_TOKENIZER) + if (NOT HAVE_FTS3_TOKENIZER) + message(FATAL_ERROR "SQLite3 is missing FTS3 tokenizer support. Please compile it with -DSQLITE_ENABLE_FTS3." + " See https://bugzilla.gnome.org/show_bug.cgi?id=763203 for details.") + endif() +else() + # detect that the current sqlite3 library has FTS3 support (at run time) + include(CMakePushCheckState) + include(CheckCSourceRuns) + cmake_push_check_state(RESET) + set(CMAKE_REQUIRED_LIBRARIES sqlite3) + check_c_source_runs(" + #include + #include + int main() { + sqlite3 *db; + char tmpfile[] = \"sqliteXXXXXX\"; + mkstemp(tmpfile); + if (sqlite3_open(tmpfile, &db) == SQLITE_OK) { + return sqlite3_exec(db, \"CREATE VIRTUAL TABLE mail USING fts3(subject, body);\", 0, 0, 0); + } + return -1; + } + " HAVE_FTS3) + cmake_pop_check_state() + if (NOT HAVE_FTS3) + if (${SQLITE3_VERSION} VERSION_LESS 3.11) + message(FATAL_ERROR "SQLite3 is missing FTS3 support. Please compile it with -DSQLITE_ENABLE_FTS3.") + else() + message(FATAL_ERROR "SQLite3 is missing FTS3 tokenizer support. Please compile it with -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_TOKENIZER.") + endif() + endif() +endif() + +find_package(Git QUIET) # intl include(Gettext) @@ -85,6 +149,14 @@ include(GlibCompileResourcesSupport) # +# Unit tests. +# +# We don't use CMake's enable_testing/add_test built-ins because they +# use ctest. It's not called "test" because that is cmake reserved. +add_custom_target(tests geary-test) +add_dependencies(tests geary-test) + +# # Uninstall target # configure_file( @@ -95,9 +167,9 @@ add_custom_target( uninstall-base - COMMAND + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake - COMMAND + COMMAND ${glib_schema_compiler} ${GSETTINGS_DIR} ) @@ -113,17 +185,19 @@ # everything has has been removed add_custom_target( post-uninstall -) + ) # Dist # This generates the dist tarballs -add_custom_target( - dist - COMMAND - git archive --prefix=${ARCHIVE_BASE_NAME}/ HEAD - | xz -z > ${CMAKE_BINARY_DIR}/${ARCHIVE_FULL_NAME} - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} -) +if (GIT_FOUND) + add_custom_target( + dist + COMMAND + ${GIT_EXECUTABLE} archive --prefix=${ARCHIVE_BASE_NAME}/ HEAD + | xz -z > ${CMAKE_BINARY_DIR}/${ARCHIVE_FULL_NAME} + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ) +endif() # Ubuntu # Builds the source Debian package used for the Launchpad PPA @@ -131,7 +205,7 @@ ubuntu_pre DEPENDS dist - COMMAND + COMMAND ${CMAKE_COMMAND} -E copy ${ARCHIVE_FULL_NAME} ${ARCHIVE_DEBUILD_FULL_NAME} COMMAND tar xvfx ${ARCHIVE_FULL_NAME} @@ -142,9 +216,9 @@ DEPENDS ubuntu_pre COMMAND - ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/debian" + ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/debian" "${CMAKE_CURRENT_BINARY_DIR}/${ARCHIVE_BASE_NAME}/debian" - COMMAND + COMMAND debuild -S -k$ENV{GPGKEY} COMMAND @@ -158,4 +232,4 @@ add_subdirectory(sql) add_subdirectory(ui) add_subdirectory(src) -add_subdirectory(theming) +add_subdirectory(test) diff -Nru geary-0.11.4/configure geary-0.12.0/configure --- geary-0.11.4/configure 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/configure 2017-10-02 11:25:21.000000000 +0000 @@ -13,39 +13,40 @@ configure_help() { cat <<- EOT - Usage: - ./configure [OPTIONS]... - - Options: - -h, --help Print this help and exit. - --prefix=PREFIX Prepend PREFIX to program installation paths. - [$DEFAULT_PREFIX] - --debug Build for debugging. - - --disable-fatal-warnings - Disable Vala fatal warnings when compiling. - --enable-ref-tracking - Enable reference tracking which is dumped to stdout when the program exits. - --disable-schemas-compile - Disable compiling the GSettings schema. - --disable-desktop-update - Disable desktop database update. - --disable-desktop-validate - Disable checking for errors in generated desktop file. - --disable-icon-update - Disable icon cache update. - --disable-documentation - Disable generating and installing translated help documentation. - --disable-contractor - Disable installing Contractor files. - --disable-poodle-ssl3 - Disable POODLE SSLv3 GnuTLS priority fix. (Not recommended.) + Usage: + ./configure [OPTIONS]... + + Options: + -h, --help Print this help and exit. + --prefix=PREFIX Prepend PREFIX to program installation paths. + [$DEFAULT_PREFIX] + --debug Build for debugging. + + --disable-fatal-warnings + Disable Vala fatal warnings when compiling. + --enable-ref-tracking + Enable reference tracking which is dumped to stdout when the program exits. + --disable-schemas-compile + Disable compiling the GSettings schema. + --disable-desktop-update + Disable desktop database update. + --disable-desktop-validate + Disable checking for errors in generated desktop file. + --disable-icon-update + Disable icon cache update. + --disable-documentation + Disable generating and installing translated help documentation. + --disable-contractor + Disable installing Contractor files. + --disable-poodle-ssl3 + Disable POODLE SSLv3 GnuTLS priority fix. (Not recommended.) Some influential environment variables: - PKG_CONFIG_PATH Adds directories to pkg-config's search path. - PKG_CONFIG_LIBDIR Overrides pkg-config's built-in search path. + PKG_CONFIG_PATH Adds directories to pkg-config's search path. + PKG_CONFIG_LIBDIR Overrides pkg-config's built-in search path. - VALAC Name of the vala compiler to use, e.g. "valac-0.18". + VALAC Name of the vala compiler to use, e.g. "valac-0.18". + VALADOC Name of the valadoc executable to use, e.g. "valadoc-0.18". EOT } @@ -71,38 +72,49 @@ -h | --help) configure_help exit 0 ;; - - --prefix) [ ! $value ] && abort $1 + + --prefix) if [ -z "$value" ]; then + # handle jhbuild's use of "--prefix /path" + value="$2" + shift + fi + [ ! "$value" ] && abort $1 CMDLINE="${CMDLINE} -DCMAKE_INSTALL_PREFIX=${value}" ;; - -# ignored for autotools compatibility - --bindir | --libdir | --sbindir |--datadir | --localstatedir | --includedir) ;; - --infodir | --sysconfdir | --mandir | --libexecdir) ;; + + # ignored for autotools compatibility + --bindir | --libdir | --sbindir | --datadir | --localstatedir | \ + --includedir | --infodir | --sysconfdir | --mandir | --libexecdir) + if [ -z "$value" ]; then + # handle jhbuild's use of "--option /path" + value="$2" + shift + fi + ;; --build | --host | --target) ;; - --disable-silent-rules | --disable-static ) ;; - + --disable-gtk-doc | --disable-silent-rules | --disable-static ) ;; + --debug) - CMDLINE="${CMDLINE} -DDEBUG=ON" + CMDLINE="${CMDLINE} -DCMAKE_BUILD_TYPE=Debug" ;; - + --disable-fatal-warnings) CMDLINE="${CMDLINE} -DNO_FATAL_WARNINGS=ON" ;; - + --enable-ref-tracking) CMDLINE="${CMDLINE} -DREF_TRACKING=ON" ;; - + --disable-schemas-compile) CMDLINE="${CMDLINE} -DGSETTINGS_COMPILE=OFF" CMDLINE="${CMDLINE} -DGSETTINGS_COMPILE_IN_PLACE=OFF" ;; - + --disable-icon-update) CMDLINE="${CMDLINE} -DICON_UPDATE=OFF" ;; - + --disable-desktop-update) CMDLINE="${CMDLINE} -DDESKTOP_UPDATE=OFF" ;; @@ -114,23 +126,23 @@ --disable-documentation) CMDLINE="${CMDLINE} -DTRANSLATE_HELP=OFF" ;; - + --disable-contractor) CMDLINE="${CMDLINE} -DDISABLE_CONTRACT=ON" ;; - + --disable-poodle-ssl3) CMDLINE="${CMDLINE} -DDISABLE_POODLE=ON" ;; - + VALAC) [ ! $value ] && abort $1 VALAC=$value ;; - + *) abort $option ;; esac - + shift done @@ -148,6 +160,21 @@ CMDLINE="${CMDLINE} -DVALA_EXECUTABLE='$VALA_EXECUTABLE'" fi +# Verify use supplied valadoc executable +if [ -n "$VALADOC" ] +then + VALADOC_EXECUTABLE=`type -p "$VALADOC"` + + if [ -z "$VALADOC_EXECUTABLE" ] + then + printf "$VALADOC is not an executable program.\n" + exit 1 + fi + + CMDLINE="${CMDLINE} -DVALADOC_EXECUTABLE='$VALADOC_EXECUTABLE'" +fi + + # Verify cmake is installed # TODO: Check for minimum version number if ! cmake --version diff -Nru geary-0.11.4/COPYING.icons geary-0.12.0/COPYING.icons --- geary-0.11.4/COPYING.icons 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/COPYING.icons 2017-10-02 11:25:21.000000000 +0000 @@ -26,10 +26,6 @@ Document designed by Edward Boatman from The Noun Project http://thenounproject.com/noun/document/#icon-No453 -mail-spam-symbolic.svg - Pig designed by aLf from The Noun Project - http://thenounproject.com/noun/pig/#icon-No5271 - close-symbolic.svg Close designed by Icomatic from The Noun Project http://thenounproject.com/noun/close/#icon-No18932 diff -Nru geary-0.11.4/debian/changelog geary-0.12.0/debian/changelog --- geary-0.11.4/debian/changelog 2017-10-03 02:52:13.000000000 +0000 +++ geary-0.12.0/debian/changelog 2017-10-03 03:11:03.000000000 +0000 @@ -1,69 +1,29 @@ -geary (0.11.4-1~zesty1) zesty; urgency=medium +geary (0.12.0-1~zesty1) zesty; urgency=medium - * 0.11.4 rebuild for zesty. + * 0.12.0 rebuild for zesty. - -- Michael Gratton Tue, 03 Oct 2017 13:52:13 +1100 + -- Michael Gratton Tue, 03 Oct 2017 14:11:03 +1100 -geary (0.11.4-1~xenial1) xenial; urgency=medium +geary (0.12.0-1~xenial1) xenial; urgency=medium - * Crasher fixes (#776139, #776383, #777138) - * Server compatibility fixes (#755424, #776875) - * Translation updates - - -- Michael Gratton Mon, 02 Oct 2017 20:07:07 +1100 - -geary (0.11.3-1~xenial1) xenial; urgency=medium - - * Fix drafts not being saved when closing composer (#747627) - * Fix breaking due to full-text-search table corruption (#772522) - * Fix Inboxes never being prefetched or sync'ed (#776029) - * Fix composers not being closed when started hidden (#770037) - * Fix password being lost when server rejects connections (#772808) - * Fix compilatuon under Vala >= 0.35.1 (#775533) - * Make account setup placeholder translatable (#771930) - * Updated UI translations - - -- Michael Gratton Sun, 25 Dec 2016 11:41:46 +1030 - -geary (0.11.2-1~xenial1) xenial; urgency=medium - - * Improve showing RTL email with no direction set as RTL (#713062) - * Improve composer not showing RTL messages as RTL (#713607) - * Fix crash when archiving, deleting, etc. specific messages (#769010) - * Fix crash from invalid window sizes in settings (#730356) - * Fix crash connecting to tiscali.it/poste.it & other Dovecot (#66509) - * Fix maximised state not being saved (#755359) - * Fix unresponsive after sending long line starting with '>' (#768642) - * Fix warning/crash when unable to contact notification server (#768911) - * Fix using incorrect From address restoring from a draft (#768419) - * Fix format=flowed when sending non-Latin text (#753528) - * Fix encoding problems with non ASCII/Latin-1/UTF-8 headers (#753870) - * Don't double spaces after address autocomplete in composer (#755589) - * Add Language headers to po files - * Don't rely on a the GEdit app icon for the draft folder (#753672) - * Fix a number of edge-case critical warnings/errors - * Updated UI translations - * Updated User Guide translations - - -- Michael Gratton Sun, 28 Aug 2016 16:53:05 +1000 - -geary (0.11.1-1~xenial1) xenial; urgency=medium - - * Fix frequent crashes on 32-bit/i686 OS installations (#758621) - * Fix error connecting to certain Outlook.com accounts (#766552) - * Find special folders with lower case names (#748183) - * Find Exchange Sent and Deleted special folders (#748183) - * Don't create Archive folders for GMail accounts (#767259) - * Use HTTPS for accessing Gravatar.com (#766595) - * Fix text not show when only plain text and image parts (#767438) - * Fix crash when is:foo is not translated (#766837) - * Make English versions of search ops always work (#766837) - * Allow to:me and from:me to be translated separately (#767291) - * Fix date typo in NEWS - * Updated UI translations - * Updated Doc translations + * Insert images inline when composing rich text messages + * Improved interface for inserting links in rich text messages + * Choose multiple spell-checker languages when composing messages + * Support message archiving for Yahoo! Mail and Outlook.com + * Improved interface when displaying conversations + * Improved interface when moving and labelling conversations + * Improved support for right-to-left languages + * Automatically unfold starred messages in a conversation + * Support saving remote inline images + * Improved keyboard navigation for conversations + * Added in-application keyboard shortcut help (Ctrl + ?) + * Support for distribution via Flatpak + * Improved security when displaying messages + * Numerous bug fixes and minor user interface improvements + * Numerous user interface translation updates + * Updated UI & doc translations - -- Michael Gratton Mon, 27 Jun 2016 21:49:01 +1000 + -- Michael Gratton Tue, 02 Oct 2017 17:58:00 +1100 geary (0.11.0-1~xenial1) xenial; urgency=medium diff -Nru geary-0.11.4/debian/control geary-0.12.0/debian/control --- geary-0.11.4/debian/control 2017-10-03 02:52:11.000000000 +0000 +++ geary-0.12.0/debian/control 2017-10-03 03:11:03.000000000 +0000 @@ -4,15 +4,16 @@ Maintainer: Michael Gratton Build-Depends: debhelper (>= 8), libgee-0.8-dev, - libglib2.0-dev (>= 2.38.0), - libgtk-3-dev (>= 3.10.0), + libglib2.0-dev (>= 2.42.0), + libgtk-3-dev (>= 3.14.0), + libsoup2.4-dev (>= 2.48), libnotify-dev (>=0.7.5), libcanberra-dev (>= 0.28), - libwebkitgtk-3.0-dev (>= 1.10.0), + libwebkit2gtk-4.0-dev (>= 2.10), libxml2-dev (>= 2.7.8), libsecret-1-dev (>= 0.11), libgmime-2.6-dev (>= 2.6.14), - valac, + valac (>=0.26), cmake (>= 2.8.0), libsqlite3-dev (>= 3.7.4), libmessaging-menu-dev (>= 12.10.2), @@ -21,7 +22,8 @@ libgirepository1.0-dev (>= 1.32.0), desktop-file-utils, gnome-doc-utils, - libgcr-3-dev (>= 3.10.1) + libgcr-3-dev (>= 3.10.1), + libenchant-dev (>= 1.6.0) Standards-Version: 3.8.3 Homepage: https://wiki.gnome.org/Apps/Geary @@ -29,11 +31,12 @@ Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, libgee-0.8-2, - libglib2.0-0 (>= 2.34.0), - libgtk-3-0 (>= 3.10.0), + libglib2.0-0 (>= 2.42.0), + libgtk-3-0 (>= 3.14.0), + libsoup2.4-1 (>= 2.48), libnotify4 (>= 0.7.5), libcanberra0 (>= 0.28), - libwebkitgtk-3.0-0 (>= 1.10.0), + libwebkit2gtk-4.0-37 (>= 2.10), libxml2 (>= 2.7.8), libsqlite3-0 (>= 3.7.4), libgmime-2.6-0 (>= 2.6.14), @@ -41,17 +44,23 @@ libmessaging-menu0 (>= 12.10.2), libunity9 (>= 5.12.0), libgcr-base-3-1 (>= 3.10.1), - libgcr-ui-3-1 (>= 3.10.1) -Description: Email client - Geary is an mail application for GNOME designed to let you manage - your email quickly and effortlessly. + libgcr-ui-3-1 (>= 3.10.1), + libenchant1c2a (>= 1.6.0) +Description: Email application + Geary is an email application built around conversations, for the + GNOME 3 desktop. It allows you to read, find and send email with a + straightforward, modern interface. . - Its interface is based on conversations, so you can read an entire - discussion without having to click from message to message. + Conversations allow you to read a complete discussion without having + to find and click from message to message. . - Geary is still in development and has a limited but growing set of - features. It works with Gmail, Yahoo! Mail, Outlook.com - (experimental), and other popular IMAP servers. + Geary's features include: + - Quick email account setup + - Shows related messages together in conversations + - Fast, full text and keyword search + - Full-featured HTML and plain text message composer + - Desktop notification of new mail + - Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers Package: geary-dbg Architecture: any @@ -60,13 +69,5 @@ Depends: geary (= ${binary:Version}), ${misc:Depends} Enhances: geary Description: Email client (debugging symbols) - Geary is an mail application for GNOME designed to let you manage - your email quickly and effortlessly. - . - Its interface is based on conversations, so you can read an entire - discussion without having to click from message to message. - . - Geary is still in development and has a limited but growing set of - features. It works with Gmail, Yahoo! Mail, Outlook.com - (experimental), and other popular IMAP servers. - + Geary is an mail application for GNOME. This package contains files + required for producing useful stack traces when debugging Geary. diff -Nru geary-0.11.4/debian/rules geary-0.12.0/debian/rules --- geary-0.11.4/debian/rules 2017-10-03 02:52:11.000000000 +0000 +++ geary-0.12.0/debian/rules 2017-10-03 03:11:03.000000000 +0000 @@ -20,3 +20,6 @@ override_dh_auto_install: dh_auto_install --destdir=debian/geary --parallel + +override_dh_auto_test: + # Disable for now since some tests require a GUI diff -Nru geary-0.11.4/desktop/CMakeLists.txt geary-0.12.0/desktop/CMakeLists.txt --- geary-0.11.4/desktop/CMakeLists.txt 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/desktop/CMakeLists.txt 2017-10-02 11:25:21.000000000 +0000 @@ -1,19 +1,18 @@ # -# Build and install geary.desktop +# Build and install org.gnome.Geary.desktop # -install(FILES geary.appdata.xml DESTINATION share/appdata) - include (FindIntltool) include (FindDesktopFileValidate) if (INTLTOOL_MERGE_FOUND) - INTLTOOL_MERGE_DESKTOP (geary po) - INTLTOOL_MERGE_AUTOSTART_DESKTOP (geary-autostart po) - + INTLTOOL_MERGE_APPDATA (org.gnome.Geary.appdata.xml po) + INTLTOOL_MERGE_DESKTOP (org.gnome.Geary.desktop po) + INTLTOOL_MERGE_AUTOSTART_DESKTOP (geary-autostart.desktop po) + if (DESKTOP_VALIDATE) if (DESKTOP_FILE_VALIDATE_FOUND) - VALIDATE_DESKTOP_FILE (geary) - VALIDATE_DESKTOP_FILE (geary-autostart) + VALIDATE_DESKTOP_FILE (org.gnome.Geary.desktop) + VALIDATE_DESKTOP_FILE (geary-autostart.desktop) else (DESKTOP_FILE_VALIDATE_FOUND) message (FATAL_ERROR "desktop-file-validate must be installed to validate generated .desktop file") endif (DESKTOP_FILE_VALIDATE_FOUND) @@ -23,7 +22,7 @@ endif (INTLTOOL_MERGE_FOUND) # Optional: run update-desktop-database at install time. -# (This has to happen after the geary.desktop file is installed.) +# (This has to happen after the org.gnome.Geary.desktop file is installed.) if (DESKTOP_UPDATE) install( CODE @@ -50,15 +49,20 @@ else (DISABLE_CONTRACT) message (STATUS "Install Contractor contract: ON") if (INTLTOOL_MERGE_FOUND) - INTLTOOL_MERGE_CONTRACT (geary-attach po) - - if (DESKTOP_VALIDATE) - if (DESKTOP_FILE_VALIDATE_FOUND) - VALIDATE_DESKTOP_FILE (geary-attach) - else (DESKTOP_FILE_VALIDATE_FOUND) - message (FATAL_ERROR "desktop-file-validate must be installed to validate generated .desktop file") - endif (DESKTOP_FILE_VALIDATE_FOUND) - endif (DESKTOP_VALIDATE) + INTLTOOL_MERGE_CONTRACT (geary-attach.contract po) + +# Can't validate Contractor file since it isn't a valid Desktop +# file according to desktop-file-validate from desktop-file-utils 0.22: +# - geary-attach.contract: error: first group is not "Desktop Entry" +# - geary-attach.contract: error: file contains group "Contractor Entry", +# but groups extending the format should start with "X-" +# - geary-attach.contract: error: filename does not have a .desktop extension +# +# if (DESKTOP_VALIDATE) +# if (DESKTOP_FILE_VALIDATE_FOUND) +# VALIDATE_DESKTOP_FILE (geary-attach.contract) +# endif (DESKTOP_FILE_VALIDATE_FOUND) +# endif (DESKTOP_VALIDATE) endif (INTLTOOL_MERGE_FOUND) install (PROGRAMS geary-attach DESTINATION bin) endif (DISABLE_CONTRACT) diff -Nru geary-0.11.4/desktop/geary.appdata.xml geary-0.12.0/desktop/geary.appdata.xml --- geary-0.11.4/desktop/geary.appdata.xml 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/desktop/geary.appdata.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ - - - - geary.desktop - CC0-1.0 - LGPL-2.1+ - Geary - Lightweight mail client - -

- Geary is a mail application for GNOME designed to let you manage your email - quickly and effortlessly. - Its interface is based on conversations, so you can read an entire - discussion without having to click from message to message. - Geary is still in development and has a limited but growing set of features. -

-

- Geary is designed to integrate with the GNOME desktop and is completely free. -

-
    -
  • Lightweight mail client with full IMAP support
  • -
  • Mail grouped into conversations, not a tree of threads
  • -
  • As-you-type searching
  • -
  • Desktop notifications
  • -
  • Multiple account support
  • -
  • Inline HTML composer that saves drafts to the server
  • -
  • Works with Gmail, Yahoo! Mail, Outlook.com (experimental), and other popular IMAP servers
  • -
-
- https://wiki.gnome.org/Apps/Geary - https://bugzilla.gnome.org/enter_bug.cgi?product=geary - http://www.gnome.org/friends/ - - - http://yorba.org/geary/geary.png - - - geary@yorba.org - GNOME - - AppMenu - ModernToolkit - -
diff -Nru geary-0.11.4/desktop/geary-autostart.desktop.in geary-0.12.0/desktop/geary-autostart.desktop.in --- geary-0.11.4/desktop/geary-autostart.desktop.in 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/desktop/geary-autostart.desktop.in 2017-10-02 11:25:21.000000000 +0000 @@ -1,6 +1,6 @@ [Desktop Entry] _Name=Geary -_GenericName=Mail Client +_GenericName=Email _X-GNOME-FullName=Geary Mail _Comment=Send and receive email _Keywords=Email;E-mail;Mail; diff -Nru geary-0.11.4/desktop/geary.desktop.in geary-0.12.0/desktop/geary.desktop.in --- geary-0.11.4/desktop/geary.desktop.in 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/desktop/geary.desktop.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -[Desktop Entry] -_Name=Geary -_GenericName=Mail Client -_X-GNOME-FullName=Geary Mail -_Comment=Send and receive email -_Keywords=Email;E-mail;Mail; -Icon=geary -TryExec=geary -Exec=geary %U -Type=Application -Terminal=false -Categories=GNOME;GTK;Network;Email; -MimeType=x-scheme-handler/mailto; -StartupNotify=true -Actions=Compose; - -[Desktop Action Compose] -_Name=Compose Message -Exec=geary mailto: -OnlyShowIn=X-Messaging Menu;Unity; - diff -Nru geary-0.11.4/desktop/org.gnome.Geary.appdata.xml.in geary-0.12.0/desktop/org.gnome.Geary.appdata.xml.in --- geary-0.11.4/desktop/org.gnome.Geary.appdata.xml.in 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/desktop/org.gnome.Geary.appdata.xml.in 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,182 @@ + + + + + org.gnome.Geary.desktop + CC0-1.0 + LGPL-2.1+ + geary-list@gnome.org + + + <_name>Geary + + <_developer_name>Geary Development Team + + <_summary>Send and receive email + + <_p> + Geary is an email application built around conversations, for + the GNOME 3 desktop. It allows you to read, find and send email + with a straightforward, modern interface. + + <_p> + Conversations allow you to read a complete discussion without + having to find and click from message to message. + + <_p>Geary’s features include: +
    + <_li>Quick email account setup + <_li>Shows related messages together in conversations + <_li>Fast, full text and keyword search + <_li>Full-featured HTML and plain text message composer + <_li>Desktop notification of new mail + <_li>Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers +
+
+ + https://wiki.gnome.org/Apps/Geary + https://wiki.gnome.org/Apps/Geary/Contact + https://wiki.gnome.org/Apps/Geary/FAQ + https://wiki.gnome.org/Apps/Geary/ReportingABug + https://wiki.gnome.org/Apps/Geary/Translating + https://www.gnome.org/friends/ + + + + + <_caption>Geary displaying a conversation + https://wiki.gnome.org/Apps/Geary?action=AttachFile&do=get&target=geary-conversation-0.12.png + + + + <_caption>Geary showing the rich text composer + https://wiki.gnome.org/Apps/Geary?action=AttachFile&do=get&target=geary-composer-0.12.png + + + + GNOME + + Office + Network + Email + ​ + + + AppMenu + HiDpiIcon + HighContrast + ModernToolkit + Notifications + UserDocs + + + org.gnome.Geary.desktop + + geary + + geary + + + + +

Enhances included in this release:

+
    +
  • Insert images inline when composing rich text messages
  • +
  • Improved interface for inserting links in rich text messages
  • +
  • Choose multiple spell-checker languages when composing messages
  • +
  • Support message archiving for Yahoo! Mail and Outlook.com
  • +
  • Improved interface when displaying conversations
  • +
  • Improved interface when moving and labelling conversations
  • +
  • Improved support for right-to-left languages
  • +
  • Automatically unfold starred messages in a conversation
  • +
  • Support saving remote inline images
  • +
  • Improved keyboard navigation for conversations
  • +
  • Added in-application keyboard shortcut help (Ctrl + ?)
  • +
  • Support for distribution via Flatpak
  • +
  • Improved security when displaying messages
  • +
  • Numerous bug fixes and minor user interface improvements
  • +
  • Numerous user interface translation updates
  • +
+

Thanks to all who contributed code fixes and enhancements + to this release, in particular the many first-time + contributors:

+
    +
  • Alex Henrie
  • +
  • Colin Vidal
  • +
  • Federico Bruni
  • +
  • Gautier Pelloux-Prayer
  • +
  • Heiko Becker
  • +
  • Jeremy Bicha
  • +
  • Jiri Cerny
  • +
  • Kacper Bielecki
  • +
  • Leonardo Robol
  • +
  • Michael Gratton
  • +
  • Michael James Gratton
  • +
  • Niels De Graef
  • +
  • Oskar Viljasaar
  • +
  • Piotr Drąg
  • +
  • Ralph Plawetzki
  • +
  • Rico Tzschichholz
  • +
  • Timo Kluck
  • +
  • Ville Korhonen
  • +
  • Yosef Or Boczko
  • +
+

Thanks also to the many that contributed translations, for the user interface:

+
    +
  • Alan Mortensen (da)
  • +
  • Alexandre Franke (fr)
  • +
  • Anders Jonsson (sv)
  • +
  • Andika Triwidada (id)
  • +
  • Ask Hjorth Larsen (da)
  • +
  • Aurimas Černius (lt)
  • +
  • Balázs Meskó (hu)
  • +
  • Balázs Úr (hu)
  • +
  • Baurzhan Muftakhidinov (kk)
  • +
  • Benedikt M. Thoma (de)
  • +
  • Daniel Korostil (uk)
  • +
  • Daniel Mustieles (es)
  • +
  • Daniel Șerbănescu (ro)
  • +
  • Dušan Kazik (sk)
  • +
  • Emin Tufan Çetin (tr)
  • +
  • E T (tr)
  • +
  • Federico Bruni (it)
  • +
  • Flo H (de)
  • +
  • Gábor Kelemen (hu)
  • +
  • Hannie Dumoleyn (nl)
  • +
  • hanniedu (nl)
  • +
  • Jeremy Bicha (bs)
  • +
  • Jiri Grönroos (fi)
  • +
  • Jordi Mas (ca)
  • +
  • Josef Andersson (sv)
  • +
  • Kjartan Maraas (nb)
  • +
  • Laudivan Freire de Almeida (pt_BR)
  • +
  • Marek Černocký (cs)
  • +
  • Mario Blättermann (de)
  • +
  • Matej Urbančič (sl)
  • +
  • Muhammet Kara (tr)
  • +
  • Piotr Drąg (hi) (hu) (ja) (km) (ms) (pl) (nl) (sl) (sr@latin)
  • +
  • Rafael Fontenelle (pt_BR)
  • +
  • Ronan Arraes Jardim Chagas (pt_BR)
  • +
  • Stas Solovey (ru)
  • +
  • Tiago Santos (pt)
  • +
  • Wolfgang Stöggl (de)
  • +
  • Yosef Or Boczko (he)
  • +
  • Мирослав Николић (sr) (sr@latin)
  • +
+

And for the user manual:

+
    +
  • Anders Jonsson (sv)
  • +
  • Andre Klapper (el)
  • +
  • Christian Kirbach (de)
  • +
  • Daniel Mustieles (es)
  • +
  • Federico Bruni (it)
  • +
  • Josef Andersson (sv)
  • +
  • Marek Černocký (cs)
  • +
  • Mario Blättermann (de)
  • +
  • Piotr Drąg (pl)
  • +
  • Rafael Fontenelle (pt_BR)
  • +
+
+
+
+
diff -Nru geary-0.11.4/desktop/org.gnome.Geary.desktop.in geary-0.12.0/desktop/org.gnome.Geary.desktop.in --- geary-0.11.4/desktop/org.gnome.Geary.desktop.in 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/desktop/org.gnome.Geary.desktop.in 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,20 @@ +[Desktop Entry] +_Name=Geary +_GenericName=Email +_X-GNOME-FullName=Geary Email +_Comment=Send and receive email +# Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +_Keywords=Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook; +Icon=geary +TryExec=geary +Exec=geary %U +Type=Application +Terminal=false +Categories=GNOME;GTK;Network;Email; +MimeType=x-scheme-handler/mailto; +StartupNotify=true +Actions=Compose; + +[Desktop Action Compose] +_Name=Compose Message +Exec=geary mailto: diff -Nru geary-0.11.4/desktop/org.gnome.Geary.gschema.xml geary-0.12.0/desktop/org.gnome.Geary.gschema.xml --- geary-0.11.4/desktop/org.gnome.Geary.gschema.xml 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/desktop/org.gnome.Geary.gschema.xml 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,139 @@ + + + + + + '' + Default attachments directory + Location used when opening and saving attachments + + + + '' + Default print output directory + Location used when printing to a file + + + + false + maximize window + True if library application is maximized, false otherwise. + + + + 1024 + width of window + The last recorded width of the application window. + + + + 768 + height of window + The last recorded height of the application window. + + + + 100 + position of folder list pane + Position of the folder list Paned grabber. + + + + -1 + position of folder list pane when horizontal + Position of the folder list Paned grabber in the horizontal orientation. + + + + 200 + position of folder list pane when vertical + Position of the folder list Paned grabber in the vertical orientation. + + + + true + orientation of the folder list pane + True if the folder list Paned is in the horizontal orientation. + + + + 250 + position of message list pane + Position of the message list Paned grabber. + + + + true + autoselect next message + True if we should autoselect the next available conversation. + + + + true + display message previews + True if we should display a short preview of each message. + + + + [] + Languages that shall be used in the spell checker + List of the languages to use in the spell checker + + + + [] + Languages that are displayed in the spell checker popover. + List of languages that are always displayed in the popover of the spell checker. + + + + true + enable notification sounds + True to play sounds for notifications and sending. + + + + true + show notifications for new mail + True to show notification bubbles. + + + + false + notify of new mail at startup + True to notify of new mail at startup. + + + + true + ask when opening an attachment + True to ask when opening an attachment. + + + + true + whether to compose emails in HTML + True to compose emails in HTML; false for plain text. + + + + "conservative" + Advisory strategy for full-text searching + Acceptable values are EXACT, CONSERVATIVE, AGGRESSIVE, and HORIZON. + + + + 1 + zoom of conversation viewer + The zoom to apply on the conservation view. + + + + false + Whether we migrated the old settings + False to check for the old 'org.yorba.geary'-schema and copy its values + + + + + diff -Nru geary-0.11.4/desktop/org.yorba.geary.gschema.xml geary-0.12.0/desktop/org.yorba.geary.gschema.xml --- geary-0.11.4/desktop/org.yorba.geary.gschema.xml 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/desktop/org.yorba.geary.gschema.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,110 +0,0 @@ - - - - - - false - maximize window - True if library application is maximized, false otherwise. - - - - 1024 - width of window - The last recorded width of the application window. - - - - 768 - height of window - The last recorded height of the application window. - - - - 100 - position of folder list pane - Position of the folder list Paned grabber. - - - - -1 - position of folder list pane when horizontal - Position of the folder list Paned grabber in the horizontal orientation. - - - - 200 - position of folder list pane when vertical - Position of the folder list Paned grabber in the vertical orientation. - - - - true - orientation of the folder list pane - True if the folder list Paned is in the horizontal orientation. - - - - 250 - position of message list pane - Position of the message list Paned grabber. - - - - 350 - position of the composer pane - Position of the composer Paned grabber, when open. - - - - true - autoselect next message - True if we should autoselect the next available conversation. - - - - true - display message previews - True if we should display a short preview of each message. - - - - true - enable inline spell checking - True to spell check while typing. - - - true - enable notification sounds - True to play sounds for notifications and sending. - - - true - show notifications for new mail - True to show notification bubbles. - - - false - notify of new mail at startup - True to notify of new mail at startup. - - - true - ask when opening an attachment - True to ask when opening an attachment. - - - true - whether to compose emails in HTML - True to compose emails in HTML; false for plain text. - - - - "conservative" - Advisory strategy for full-text searching - Acceptable values are EXACT, CONSERVATIVE, AGGRESSIVE, and HORIZON. - - - - - diff -Nru geary-0.11.4/geary.doap geary-0.12.0/geary.doap --- geary-0.11.4/geary.doap 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/geary.doap 2017-10-02 11:25:21.000000000 +0000 @@ -5,14 +5,18 @@ xmlns:gnome="http://api.gnome.org/doap-extensions#" xmlns="http://usefulinc.com/ns/doap#"> - geary - Email client - Geary is an IMAP email client built for the GNOME desktop environment. It - allows you to read and send email with a simple, modern interface. + Geary + geary + Send and receive email + Geary is an email application built +around conversations, for the GNOME 3 desktop. It allows you to +read, find and send email with a straightforward, modern +interface. + Vala diff -Nru geary-0.11.4/help/C/accounts.page geary-0.12.0/help/C/accounts.page --- geary-0.11.4/help/C/accounts.page 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/help/C/accounts.page 2017-10-02 11:25:21.000000000 +0000 @@ -9,7 +9,7 @@ Accounts -
+
Adding accounts

The first time you start Geary, you will be prompted to add an email account. On this screen, @@ -24,7 +24,7 @@ dialog. To add an account, click the + button.

-
+
Editing existing accounts

From the Accounts dialog, select an account and click the pencil icon to change various settings. @@ -59,7 +59,7 @@

-
+
Removing accounts

To delete an account, open the Accounts dialog, select the account, and press the - button. diff -Nru geary-0.11.4/help/C/label.page geary-0.12.0/help/C/label.page --- geary-0.11.4/help/C/label.page 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/help/C/label.page 2017-10-02 11:25:21.000000000 +0000 @@ -8,7 +8,7 @@ Label or move a conversation -

+
Label a conversation

Geary lets you apply one or more labels to each conversation. Geary labels correspond to labels in Gmail, or ordinary folders in other mail services.

@@ -21,7 +21,7 @@ conversation list to the label in the sidebar.

-
+
Move a conversation to a folder or label

To move one or more conversations to a folder or label, first select the conversation(s), then do either of the following:

diff -Nru geary-0.11.4/help/C/overview.page geary-0.12.0/help/C/overview.page --- geary-0.11.4/help/C/overview.page 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/help/C/overview.page 2017-10-02 11:25:21.000000000 +0000 @@ -16,7 +16,7 @@

The main Geary window is divided into several areas:

-
+
Folder list

The folder list at the left displays all folders and labels in your mail account. Geary uses the term label for any folder @@ -24,7 +24,7 @@ also uses this term; most other mail services do not.)

-
+
Conversation list

The conversation list displays a list of conversations in the selected folder. Newer conversations appear at the top.

@@ -40,7 +40,7 @@ conversation in a range, then hold down Shift and click the last conversation.

-
+
Message area

The message area displays all messages in the selected conversation, with the oldest message at the top.

diff -Nru geary-0.11.4/help/C/preferences.page geary-0.12.0/help/C/preferences.page --- geary-0.11.4/help/C/preferences.page 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/help/C/preferences.page 2017-10-02 11:25:21.000000000 +0000 @@ -13,7 +13,7 @@ shell. For GNOME Shell and Unity, the application menu is available near the top-left corner of the screen.)

-
+
Reading @@ -36,7 +36,7 @@
-
+
Composer @@ -47,7 +47,7 @@
-
+
Notifications diff -Nru geary-0.11.4/help/C/search.page geary-0.12.0/help/C/search.page --- geary-0.11.4/help/C/search.page 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/help/C/search.page 2017-10-02 11:25:21.000000000 +0000 @@ -19,7 +19,7 @@

Keywords that match your search are highlighted in the message view. Geary will match different forms of the same word, for example searching for "walk" will also match "walking" and "walked."

-
+
Search operators

Geary supports the following operators to limit the scope of searches:

diff -Nru geary-0.11.4/help/C/shortcuts.page geary-0.12.0/help/C/shortcuts.page --- geary-0.11.4/help/C/shortcuts.page 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/help/C/shortcuts.page 2017-10-02 11:25:21.000000000 +0000 @@ -55,21 +55,21 @@ - - - - - - + + + + + + - + - + @@ -92,14 +92,6 @@ - - - - - - - - @@ -120,12 +112,16 @@

Mark unread

CtrlU or ShiftU

Move focus to the next/previous pane

F6 / ShiftF6

Move focus to conversation list

CtrlB

Move the conversation

M

Label the conversation

L

Jump to next (older) conversation

j

J

Jump to previous (newer) conversation

k

K

Toggle spam

Ctrl0 or 0

Preferences

CtrlE

Accounts

CtrlM

Close composer window

CtrlW

CtrlShiftG

- +
Composer shortcuts

These shortcuts are active whenever focus is in a composer.

+ + + + @@ -142,7 +138,7 @@

Attach file

CtrlT

Quote text

Ctrl]

CtrlD

- +

These shortcuts are only active in composers in rich text mode.

@@ -172,5 +168,39 @@
- +
+ Keyboard navigation +

These shortcuts can be used to move the keyboard focus in the main window.

+ + + + + + + + + + + + + + + + + + + + + +

Move focus to the next/previous pane

F6 / ShiftF6

Move focus to conversation list

CtrlB

Move to the next message in a conversation

+ Space +

Move to the next/previous message in a conversation

+ CtrlDown / + CtrlUp +

Move to the first/last message in a conversation

+ CtrlHome / + CtrlEnd +

+
+ diff -Nru geary-0.11.4/help/C/star.page geary-0.12.0/help/C/star.page --- geary-0.11.4/help/C/star.page 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/help/C/star.page 2017-10-02 11:25:21.000000000 +0000 @@ -8,13 +8,13 @@ Star a message or mark it as read/unread -
+
Star messages

You can star messages to indicate that they're important to you. To mark a conversation with a star, click its star icon in the conversation list. You can star an individual message by clicking the star at the upper right of the message itself.

With Gmail accounts, starred messages appear in the Starred folder in the folder list.

-
+
Mark messages as read or unread

Geary marks messages as read automatically as you read them. To manually toggle a conversation as read or unread, click the circle icon in the conversation list.

diff -Nru geary-0.11.4/help/C/write.page geary-0.12.0/help/C/write.page --- geary-0.11.4/help/C/write.page 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/help/C/write.page 2017-10-02 11:25:21.000000000 +0000 @@ -8,7 +8,8 @@ Write a message -
+
+ Composing and replying

To compose a new message in Geary, press the New Message button on the toolbar.

@@ -16,7 +17,7 @@
-
+
Features

Geary's email composer lets you adjust the font, size and color of text. You can also insert hyperlinks into messages.

@@ -38,7 +39,7 @@ dialog.

-
+
Drafts

For mail servers that support drafts, Geary will automatically save the message as you type. diff -Nru geary-0.11.4/help/cs/cs.po geary-0.12.0/help/cs/cs.po --- geary-0.11.4/help/cs/cs.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/help/cs/cs.po 2017-10-02 11:25:21.000000000 +0000 @@ -1,13 +1,13 @@ # Czech translation for geary. # Copyright (C) 2014 geary's COPYRIGHT HOLDER # This file is distributed under the same license as the geary package. -# Marek Černocký , 2014, 2015, 2016. +# Marek Černocký , 2014, 2015, 2016, 2017. # msgid "" msgstr "" -"Project-Id-Version: geary geary-0.11\n" -"POT-Creation-Date: 2016-05-18 05:56+0000\n" -"PO-Revision-Date: 2016-08-23 13:51+0200\n" +"Project-Id-Version: geary master\n" +"POT-Creation-Date: 2017-09-25 16:02+0000\n" +"PO-Revision-Date: 2017-09-25 19:00+0200\n" "Last-Translator: Marek Černocký \n" "Language-Team: čeština \n" "Language: cs\n" @@ -21,7 +21,11 @@ msgid "Write a message" msgstr "Psaní zprávy" -#: C/write.page:12(p) +#: C/write.page:12(title) +msgid "Composing and replying" +msgstr "Psaní zpráv a odpovídání" + +#: C/write.page:13(p) msgid "" "To compose a new message in Geary, press the New Message button " "on the toolbar." @@ -29,7 +33,7 @@ "Když chcete v Geary napsat novou zprávu, zmáčkněte na nástrojové liště " "tlačítko Nová zpráva." -#: C/write.page:15(p) +#: C/write.page:16(p) msgid "" "To reply to a message, open the message menu in the upper right corner of " "the message and choose Reply, Reply All or " @@ -43,11 +47,11 @@ "přes tlačítka Odpovědět, Odpovědět všem nebo " "Přeposlat na nástrojové liště." -#: C/write.page:20(title) +#: C/write.page:21(title) msgid "Features" msgstr "Funkce" -#: C/write.page:22(p) +#: C/write.page:23(p) msgid "" "Geary's email composer lets you adjust the font, size and color of text. You " "can also insert hyperlinks into messages." @@ -55,7 +59,7 @@ "Při psaní e-mailů v Geary si můžete přizpůsobit písmo, velikost a barvu " "textu. Rovněž můžete do zpráv vkládat hypertextové odkazy." -#: C/write.page:24(p) +#: C/write.page:25(p) msgid "" "Geary can also send plain text messages. In the drop-down menu, check or " "uncheck \"Rich Text\" to toggle between plain text and rich text mode." @@ -64,12 +68,12 @@ "zaškrtněte nebo zrušte zaškrtnutí „Formátovaný text“, abyste se přepnuli " "mezi režimy prostého textu a formátovaného textu." -#: C/write.page:27(p) +#: C/write.page:28(p) msgid "" "You can attach a file to a message you're writing in either of these ways:" msgstr "K napsané zprávě můžete přiložit soubory a to následujícími způsoby:" -#: C/write.page:29(p) +#: C/write.page:30(p) msgid "" "Press the Attach File button at the lower left of the composer " "window, then select a file to attach." @@ -77,7 +81,7 @@ "Zmáčkněte tlačítko Přiložit soubor v levém dolním rohu okna " "editoru a následně vyberte soubor, který chcete přiložit." -#: C/write.page:31(p) +#: C/write.page:32(p) msgid "" "Drag the file from the Nautilus file manager to the composer window, and " "drop it either on the text fields at the top of the window or on the toolbar " @@ -86,7 +90,7 @@ "Přetáhněte soubor ze správce souborů Nautilus do okna editoru a upusťte jej " "buď na textových polích v horní části okna nebo na nástrojové liště dole." -#: C/write.page:35(p) +#: C/write.page:36(p) msgid "" "A number of keyboard shortcuts are available in the composer; see for details." @@ -94,7 +98,7 @@ "Řada klávesových zkratek je dostupná v editoru zpráv, podrobnosti viz ." -#: C/write.page:37(p) +#: C/write.page:38(p) msgid "" "You may specify a signature to be inserted into the composer in the dialog." @@ -102,11 +106,11 @@ "V dialogovém okně můžete zadat patičku, která se " "bude vkládat do editoru." -#: C/write.page:42(title) +#: C/write.page:43(title) msgid "Drafts" msgstr "Koncepty" -#: C/write.page:44(p) +#: C/write.page:45(p) msgid "" "For mail servers that support drafts, Geary will automatically save the " "message as you type. If you close the composer without sending, Geary will " @@ -116,7 +120,7 @@ "během psaní. Pokud zavřete okno editoru, aniž byste zprávu odeslali, Geary " "se vás dotáže, jestli má zprávu uchovat v konceptech nebo ji zahodit." -#: C/write.page:47(p) +#: C/write.page:48(p) msgid "" "To edit an existing draft, select the Drafts folder in the folder list, " "select the message, and click \"Edit Draft\" in the message viewer." @@ -125,7 +129,7 @@ "složku Koncepty, vyberte zprávu a klikněte v prohlížeči zpráv na „Upravit " "koncept“ ." -#: C/write.page:50(p) +#: C/write.page:51(p) msgid "Geary deletes the draft when you send the message." msgstr "Po odeslání zprávy Geary koncept smaže." @@ -265,7 +269,7 @@ msgid "Star" msgstr "Přidělit hvězdičku" -#: C/shortcuts.page:44(key) C/shortcuts.page:108(key) +#: C/shortcuts.page:44(key) C/shortcuts.page:100(key) msgid "S" msgstr "S" @@ -273,7 +277,7 @@ msgid "Unstar" msgstr "Odebrat hvězdičku" -#: C/shortcuts.page:48(key) C/shortcuts.page:142(key) +#: C/shortcuts.page:48(key) C/shortcuts.page:138(key) msgid "D" msgstr "D" @@ -302,52 +306,36 @@ "key>U" #: C/shortcuts.page:59(p) -msgid "Move focus to the next/previous pane" -msgstr "Přesunout zaměření na následující/předchozí panel" +msgid "Move the conversation" +msgstr "Přesunout konverzaci" -#: C/shortcuts.page:60(p) -msgid "" -"F6 / ShiftF6" -msgstr "" -"F6 / ShiftF6" +#: C/shortcuts.page:60(key) +msgid "M" +msgstr "M" #: C/shortcuts.page:63(p) -msgid "Move focus to conversation list" -msgstr "Přesunout zaměření na seznam konverzací" - -#: C/shortcuts.page:64(key) C/shortcuts.page:80(key) C/shortcuts.page:96(key) -#: C/shortcuts.page:100(key) C/shortcuts.page:104(key) -#: C/shortcuts.page:108(key) C/shortcuts.page:112(key) -#: C/shortcuts.page:116(key) C/shortcuts.page:120(key) -#: C/shortcuts.page:130(key) C/shortcuts.page:134(key) -#: C/shortcuts.page:142(key) C/shortcuts.page:150(key) -#: C/shortcuts.page:154(key) C/shortcuts.page:158(key) -#: C/shortcuts.page:162(key) C/shortcuts.page:166(key) -#: C/shortcuts.page:170(key) -msgid "Ctrl" -msgstr "Ctrl" +msgid "Label the conversation" +msgstr "Přidat konverzaci štítek" -#: C/shortcuts.page:64(key) C/shortcuts.page:150(key) -msgid "B" -msgstr "B" +#: C/shortcuts.page:64(key) C/shortcuts.page:162(key) +msgid "L" +msgstr "L" #: C/shortcuts.page:67(p) msgid "Jump to next (older) conversation" msgstr "Přejít na následující (starší) konverzaci" #: C/shortcuts.page:68(key) -msgid "j" -msgstr "j" +msgid "J" +msgstr "J" #: C/shortcuts.page:71(p) msgid "Jump to previous (newer) conversation" msgstr "Přejít na předchozí (novější) konverzaci" -#: C/shortcuts.page:72(key) -msgid "k" -msgstr "k" +#: C/shortcuts.page:72(key) C/shortcuts.page:158(key) +msgid "K" +msgstr "K" #: C/shortcuts.page:75(p) msgid "Toggle spam" @@ -361,6 +349,17 @@ msgid "Quit" msgstr "Ukončit" +#: C/shortcuts.page:80(key) C/shortcuts.page:96(key) C/shortcuts.page:100(key) +#: C/shortcuts.page:104(key) C/shortcuts.page:108(key) +#: C/shortcuts.page:112(key) C/shortcuts.page:122(key) +#: C/shortcuts.page:126(key) C/shortcuts.page:130(key) +#: C/shortcuts.page:138(key) C/shortcuts.page:146(key) +#: C/shortcuts.page:150(key) C/shortcuts.page:154(key) +#: C/shortcuts.page:158(key) C/shortcuts.page:162(key) +#: C/shortcuts.page:166(key) C/shortcuts.page:181(key) +msgid "Ctrl" +msgstr "Ctrl" + #: C/shortcuts.page:80(key) msgid "Q" msgstr "Q" @@ -389,145 +388,188 @@ msgid "Ctrl0 or 0" msgstr "Ctrl0 nebo 0" -#: C/shortcuts.page:95(p) C/preferences.page:10(title) -msgid "Preferences" -msgstr "Předvolby" - -#: C/shortcuts.page:96(key) -msgid "E" -msgstr "E" - -#: C/shortcuts.page:99(p) C/accounts.page:10(title) -msgid "Accounts" -msgstr "Účty" - -#: C/shortcuts.page:100(key) -msgid "M" -msgstr "M" - -#: C/shortcuts.page:103(p) +#: C/shortcuts.page:95(p) msgid "Close composer window" msgstr "Zavřít okno editoru" -#: C/shortcuts.page:104(key) +#: C/shortcuts.page:96(key) msgid "W" msgstr "W" -#: C/shortcuts.page:107(p) +#: C/shortcuts.page:99(p) msgid "Jump to search box" msgstr "Přejít do vyhledávacího pole" -#: C/shortcuts.page:111(p) +#: C/shortcuts.page:103(p) msgid "Find in current conversation" msgstr "Hledat v aktuální konverzaci" -#: C/shortcuts.page:112(key) +#: C/shortcuts.page:104(key) msgid "F" msgstr "F" -#: C/shortcuts.page:115(p) +#: C/shortcuts.page:107(p) msgid "Find next in current conversation" msgstr "Najít následující v aktuální konverzaci" -#: C/shortcuts.page:116(key) C/shortcuts.page:120(key) +#: C/shortcuts.page:108(key) C/shortcuts.page:112(key) msgid "G" msgstr "G" -#: C/shortcuts.page:119(p) +#: C/shortcuts.page:111(p) msgid "Find previous in current conversation" msgstr "Najít předchozí v aktuální konverzaci" -#: C/shortcuts.page:120(key) +#: C/shortcuts.page:112(key) msgid "Shift" msgstr "Shift" -#: C/shortcuts.page:125(title) +#: C/shortcuts.page:117(title) msgid "Composer shortcuts" msgstr "Klávesové zkratky editoru" -#: C/shortcuts.page:126(p) +#: C/shortcuts.page:118(p) msgid "These shortcuts are active whenever focus is in a composer." msgstr "" "Následující klávesové zkratky jsou funkční, kdykoliv je aktivní editor zpráv." -#: C/shortcuts.page:129(p) +#: C/shortcuts.page:121(p) +msgid "Attach file" +msgstr "Přiložit soubor" + +#: C/shortcuts.page:122(key) +msgid "T" +msgstr "T" + +#: C/shortcuts.page:125(p) msgid "Quote text" msgstr "Citovat text" -#: C/shortcuts.page:130(key) +#: C/shortcuts.page:126(key) msgid "]" msgstr "]" -#: C/shortcuts.page:133(p) +#: C/shortcuts.page:129(p) msgid "Unquote text" msgstr "Ukončit citaci textu" -#: C/shortcuts.page:134(key) +#: C/shortcuts.page:130(key) msgid "[" msgstr "[" -#: C/shortcuts.page:137(p) +#: C/shortcuts.page:133(p) msgid "Close composer" msgstr "Zavřít okno editoru" -#: C/shortcuts.page:138(p) +#: C/shortcuts.page:134(p) msgid "CtrlW or Esc" msgstr "CtrlW nebo Esc" -#: C/shortcuts.page:141(p) +#: C/shortcuts.page:137(p) msgid "Detach composer" msgstr "Odpojit okno editor" -#: C/shortcuts.page:146(p) +#: C/shortcuts.page:142(p) msgid "These shortcuts are only active in composers in rich text mode." msgstr "" "Následující klávesové zkratky jsou funkční pouze když je editor v režimu " "formátovaného textu." -#: C/shortcuts.page:149(p) +#: C/shortcuts.page:145(p) msgid "Bold text" msgstr "Tučný text" -#: C/shortcuts.page:153(p) +#: C/shortcuts.page:146(key) C/shortcuts.page:181(key) +msgid "B" +msgstr "B" + +#: C/shortcuts.page:149(p) msgid "Italicize text" msgstr "Text kurzívou" -#: C/shortcuts.page:154(key) +#: C/shortcuts.page:150(key) msgid "I" msgstr "I" -#: C/shortcuts.page:157(p) +#: C/shortcuts.page:153(p) msgid "Underline text" msgstr "Podtržený text" -#: C/shortcuts.page:158(key) +#: C/shortcuts.page:154(key) msgid "U" msgstr "U" -#: C/shortcuts.page:161(p) +#: C/shortcuts.page:157(p) msgid "Strike text" msgstr "Přeškrtnutý text" -#: C/shortcuts.page:162(key) -msgid "K" -msgstr "K" - -#: C/shortcuts.page:165(p) +#: C/shortcuts.page:161(p) msgid "Insert a link" msgstr "Vložit odkaz" -#: C/shortcuts.page:166(key) -msgid "L" -msgstr "L" - -#: C/shortcuts.page:169(p) +#: C/shortcuts.page:165(p) msgid "Remove formatting" msgstr "Odstranit formátování" -#: C/shortcuts.page:170(key) +#: C/shortcuts.page:166(key) C/shortcuts.page:186(key) msgid "Space" msgstr "mezerník" +#: C/shortcuts.page:172(title) +msgid "Keyboard navigation" +msgstr "Navigace" + +#: C/shortcuts.page:173(p) +msgid "" +"These shortcuts can be used to move the keyboard focus in the main window." +msgstr "" +"Následující klávesové zkratky se dají použít k přesunu zaměření v hlavním " +"okně." + +#: C/shortcuts.page:176(p) +msgid "Move focus to the next/previous pane" +msgstr "Přesunout zaměření na následující/předchozí panel" + +#: C/shortcuts.page:177(p) +msgid "" +"F6 / ShiftF6" +msgstr "" +"F6 / ShiftF6" + +#: C/shortcuts.page:180(p) +msgid "Move focus to conversation list" +msgstr "Přesunout zaměření na seznam konverzací" + +#: C/shortcuts.page:184(p) +msgid "Move to the next message in a conversation" +msgstr "Přesunout se na následující zprávu v konverzaci" + +#: C/shortcuts.page:190(p) +msgid "Move to the next/previous message in a conversation" +msgstr "Přesunout se na následující/předchozí zprávu v konverzaci" + +#: C/shortcuts.page:191(p) +msgid "" +"CtrlDown / CtrlUp" +msgstr "" +"Ctrl / Ctrl" + +#: C/shortcuts.page:197(p) +msgid "Move to the first/last message in a conversation" +msgstr "Přesunout se na první/poslední zprávu v konverzaci" + +#: C/shortcuts.page:198(p) +msgid "" +"CtrlHome / CtrlEnd" +msgstr "" +"CtrlHome / CtrlEnd" + #: C/search.page:10(title) msgid "Search" msgstr "Hledání" @@ -649,7 +691,7 @@ #: C/search.page:52(p) msgid "Finds messages that have been marked as starred." -msgstr "Najít zprávy, které jsou označené hvězdičkou." +msgstr "Najít zprávy, které jsou označené hvězdičkou" #: C/search.page:55(input) msgid "is:unread" @@ -689,6 +731,10 @@ "input>, from a to argument me, " "který hledá e-mailové adresy účtu v příslušném kontextu." +#: C/preferences.page:10(title) +msgid "Preferences" +msgstr "Předvolby" + #: C/preferences.page:11(p) msgid "" "The Preferences option is available in either Geary's application " @@ -1156,6 +1202,10 @@ "složky koš na serveru, kde je uživatel může smazat ručně. Případně je smaže " "server automaticky po 30 dnech." +#: C/accounts.page:10(title) +msgid "Accounts" +msgstr "Účty" + #: C/accounts.page:13(title) msgid "Adding accounts" msgstr "Přidávání účtů" diff -Nru geary-0.11.4/help/de/de.po geary-0.12.0/help/de/de.po --- geary-0.11.4/help/de/de.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/help/de/de.po 2017-10-02 11:25:21.000000000 +0000 @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Geary master\n" -"POT-Creation-Date: 2017-03-17 03:44+0000\n" -"PO-Revision-Date: 2017-03-29 21:06+0200\n" +"POT-Creation-Date: 2017-03-26 00:20+0000\n" +"PO-Revision-Date: 2017-03-29 21:16+0200\n" "Last-Translator: Mario Blättermann \n" "Language-Team: Deutsch \n" "Language: de\n" @@ -276,7 +276,7 @@ msgid "Star" msgstr "Mit Sternchen markieren" -#: C/shortcuts.page:44(key) C/shortcuts.page:108(key) +#: C/shortcuts.page:44(key) C/shortcuts.page:100(key) msgid "S" msgstr "S" @@ -284,7 +284,7 @@ msgid "Unstar" msgstr "Sternchen-Markierung entfernen" -#: C/shortcuts.page:48(key) C/shortcuts.page:142(key) +#: C/shortcuts.page:48(key) C/shortcuts.page:138(key) msgid "D" msgstr "D" @@ -313,52 +313,36 @@ "UmschalttasteU" #: C/shortcuts.page:59(p) -msgid "Move focus to the next/previous pane" -msgstr "Fokus in die nächste bzw. vorige Ansicht wechseln" +msgid "Move the conversation" +msgstr "Eine Konversation verschieben" -#: C/shortcuts.page:60(p) -msgid "" -"F6 / ShiftF6" -msgstr "" -"F6I oder UmschalttasteF6" +#: C/shortcuts.page:60(key) +msgid "M" +msgstr "M" #: C/shortcuts.page:63(p) -msgid "Move focus to conversation list" -msgstr "Fokus auf Konversationsliste wechseln" - -#: C/shortcuts.page:64(key) C/shortcuts.page:80(key) C/shortcuts.page:96(key) -#: C/shortcuts.page:100(key) C/shortcuts.page:104(key) -#: C/shortcuts.page:108(key) C/shortcuts.page:112(key) -#: C/shortcuts.page:116(key) C/shortcuts.page:120(key) -#: C/shortcuts.page:130(key) C/shortcuts.page:134(key) -#: C/shortcuts.page:142(key) C/shortcuts.page:150(key) -#: C/shortcuts.page:154(key) C/shortcuts.page:158(key) -#: C/shortcuts.page:162(key) C/shortcuts.page:166(key) -#: C/shortcuts.page:170(key) -msgid "Ctrl" -msgstr "Strg" +msgid "Label the conversation" +msgstr "Eine Konversation mit einer Beschriftung versehen" -#: C/shortcuts.page:64(key) C/shortcuts.page:150(key) -msgid "B" -msgstr "B" +#: C/shortcuts.page:64(key) C/shortcuts.page:162(key) +msgid "L" +msgstr "L" #: C/shortcuts.page:67(p) msgid "Jump to next (older) conversation" msgstr "Zur nächsten (älteren) Konversation wechseln" #: C/shortcuts.page:68(key) -msgid "j" -msgstr "j" +msgid "J" +msgstr "J" #: C/shortcuts.page:71(p) msgid "Jump to previous (newer) conversation" msgstr "Zur vorhergehenden (jüngeren) Konversation wechseln" -#: C/shortcuts.page:72(key) -msgid "k" -msgstr "k" +#: C/shortcuts.page:72(key) C/shortcuts.page:158(key) +msgid "K" +msgstr "K" #: C/shortcuts.page:75(p) msgid "Toggle spam" @@ -372,6 +356,17 @@ msgid "Quit" msgstr "Beenden" +#: C/shortcuts.page:80(key) C/shortcuts.page:96(key) C/shortcuts.page:100(key) +#: C/shortcuts.page:104(key) C/shortcuts.page:108(key) +#: C/shortcuts.page:112(key) C/shortcuts.page:122(key) +#: C/shortcuts.page:126(key) C/shortcuts.page:130(key) +#: C/shortcuts.page:138(key) C/shortcuts.page:146(key) +#: C/shortcuts.page:150(key) C/shortcuts.page:154(key) +#: C/shortcuts.page:158(key) C/shortcuts.page:162(key) +#: C/shortcuts.page:166(key) C/shortcuts.page:181(key) +msgid "Ctrl" +msgstr "Strg" + #: C/shortcuts.page:80(key) msgid "Q" msgstr "Q" @@ -400,145 +395,194 @@ msgid "Ctrl0 or 0" msgstr "Strg0 oder 0" -#: C/shortcuts.page:95(p) C/preferences.page:10(title) -msgid "Preferences" -msgstr "Einstellungen" - -#: C/shortcuts.page:96(key) -msgid "E" -msgstr "E" - -#: C/shortcuts.page:99(p) C/accounts.page:10(title) -msgid "Accounts" -msgstr "Konten" - -#: C/shortcuts.page:100(key) -msgid "M" -msgstr "M" - -#: C/shortcuts.page:103(p) +#: C/shortcuts.page:95(p) msgid "Close composer window" msgstr "Editor-Fenster schließen" -#: C/shortcuts.page:104(key) +#: C/shortcuts.page:96(key) msgid "W" msgstr "W" -#: C/shortcuts.page:107(p) +#: C/shortcuts.page:99(p) msgid "Jump to search box" msgstr "Zur Suche springen" -#: C/shortcuts.page:111(p) +#: C/shortcuts.page:103(p) msgid "Find in current conversation" msgstr "Aktuelle Konversation durchsuchen" -#: C/shortcuts.page:112(key) +#: C/shortcuts.page:104(key) msgid "F" msgstr "F" -#: C/shortcuts.page:115(p) +#: C/shortcuts.page:107(p) msgid "Find next in current conversation" msgstr "Nächstes in aktueller Konversation finden" -#: C/shortcuts.page:116(key) C/shortcuts.page:120(key) +#: C/shortcuts.page:108(key) C/shortcuts.page:112(key) msgid "G" msgstr "G" -#: C/shortcuts.page:119(p) +#: C/shortcuts.page:111(p) msgid "Find previous in current conversation" msgstr "Vorheriges in aktueller Konversation finden" -#: C/shortcuts.page:120(key) +#: C/shortcuts.page:112(key) msgid "Shift" msgstr "Umschalttaste" -#: C/shortcuts.page:125(title) +#: C/shortcuts.page:117(title) msgid "Composer shortcuts" msgstr "Tastenkombinationen des Editors" -#: C/shortcuts.page:126(p) +#: C/shortcuts.page:118(p) msgid "These shortcuts are active whenever focus is in a composer." msgstr "" "Diese Tastenkombinationen stehen zur Verfügung, sobald der Editor aktiv ist." -#: C/shortcuts.page:129(p) +#: C/shortcuts.page:121(p) +msgid "Attach file" +msgstr "Datei anhängen" + +#: C/shortcuts.page:122(key) +msgid "T" +msgstr "T" + +#: C/shortcuts.page:125(p) msgid "Quote text" msgstr "Text zitieren" -#: C/shortcuts.page:130(key) +#: C/shortcuts.page:126(key) msgid "]" msgstr "]" -#: C/shortcuts.page:133(p) +#: C/shortcuts.page:129(p) msgid "Unquote text" msgstr "Text nicht mehr zitieren" -#: C/shortcuts.page:134(key) +#: C/shortcuts.page:130(key) msgid "[" msgstr "[" -#: C/shortcuts.page:137(p) +#: C/shortcuts.page:133(p) msgid "Close composer" msgstr "Editor schließen" -#: C/shortcuts.page:138(p) +#: C/shortcuts.page:134(p) msgid "CtrlW or Esc" msgstr "StrgW oder Esc" -#: C/shortcuts.page:141(p) +#: C/shortcuts.page:137(p) msgid "Detach composer" msgstr "Editor abtrennen" -#: C/shortcuts.page:146(p) +#: C/shortcuts.page:142(p) msgid "These shortcuts are only active in composers in rich text mode." msgstr "" "Diese Tastenkombinationen stehen nur in Editoren mit Rich-Text-Modus zur " "Verfügung." -#: C/shortcuts.page:149(p) +#: C/shortcuts.page:145(p) msgid "Bold text" msgstr "Fetter Text" -#: C/shortcuts.page:153(p) +#: C/shortcuts.page:146(key) C/shortcuts.page:181(key) +msgid "B" +msgstr "B" + +#: C/shortcuts.page:149(p) msgid "Italicize text" msgstr "Kursiver Text" -#: C/shortcuts.page:154(key) +#: C/shortcuts.page:150(key) msgid "I" msgstr "I" -#: C/shortcuts.page:157(p) +#: C/shortcuts.page:153(p) msgid "Underline text" msgstr "Text unterstreichen" -#: C/shortcuts.page:158(key) +#: C/shortcuts.page:154(key) msgid "U" msgstr "U" -#: C/shortcuts.page:161(p) +#: C/shortcuts.page:157(p) msgid "Strike text" msgstr "Text durchstreichen" -#: C/shortcuts.page:162(key) -msgid "K" -msgstr "K" - -#: C/shortcuts.page:165(p) +#: C/shortcuts.page:161(p) msgid "Insert a link" msgstr "Verweis einfügen" -#: C/shortcuts.page:166(key) -msgid "L" -msgstr "L" - -#: C/shortcuts.page:169(p) +#: C/shortcuts.page:165(p) msgid "Remove formatting" msgstr "Formatierung entfernen" -#: C/shortcuts.page:170(key) +#: C/shortcuts.page:166(key) C/shortcuts.page:186(key) msgid "Space" msgstr "Leerzeichen" +#: C/shortcuts.page:172(title) +msgid "Keyboard navigation" +msgstr "Tastatursteuerung" + +#: C/shortcuts.page:173(p) +msgid "" +"These shortcuts can be used to move the keyboard focus in the main window." +msgstr "" +"Diese Tastenkombinationen können dazu verwendet werden, um den Tastaturfokus " +"in das Hauptfenster zu verschieben." + +#: C/shortcuts.page:176(p) +msgid "Move focus to the next/previous pane" +msgstr "Fokus in die nächste bzw. vorige Ansicht wechseln" + +#: C/shortcuts.page:177(p) +msgid "" +"F6 / ShiftF6" +msgstr "" +"F6I oder UmschalttasteF6" + +#: C/shortcuts.page:180(p) +msgid "Move focus to conversation list" +msgstr "Fokus auf Konversationsliste wechseln" + +#: C/shortcuts.page:184(p) +msgid "Move to the next message in a conversation" +msgstr "Zur nächsten Nachricht in einer Konversation wechseln" + +#: C/shortcuts.page:190(p) +msgid "Move to the next/previous message in a conversation" +msgstr "Zur nächsten/vorigen Nachricht in einer Konversation wechseln" + +#: C/shortcuts.page:191(p) +#| msgid "" +#| "CtrlU or ShiftU" +msgid "" +"CtrlDown / CtrlUp" +msgstr "" +"StrgRunter / StrgHoch" + +#: C/shortcuts.page:197(p) +msgid "Move to the first/last message in a conversation" +msgstr "Zur ersten/letzten Nachricht in einer Konversation wechseln" + +#: C/shortcuts.page:198(p) +#| msgid "" +#| "CtrlI or ShiftI" +msgid "" +"CtrlHome / CtrlEnd" +msgstr "" +"StrgPos1 / StrgEnde" + #: C/search.page:10(title) msgid "Search" msgstr "Suche" @@ -657,7 +701,6 @@ msgstr "Findet Nachrichten, die mit einem Sternchen markiert sind." #: C/search.page:55(input) -#| msgid "Mark unread" msgid "is:unread" msgstr "is:unread" @@ -695,6 +738,10 @@ "input>. Damit wird in den genannten Feldern nach der E-Mail-Adresse des " "Kontos gesucht." +#: C/preferences.page:10(title) +msgid "Preferences" +msgstr "Einstellungen" + #: C/preferences.page:11(p) msgid "" "The Preferences option is available in either Geary's application " @@ -1177,6 +1224,10 @@ "Verzeichnisses auf dem Server, von wo Sie sie von Hand löschen können. Der " "Server löscht sie automatisch nach 30 Tagen." +#: C/accounts.page:10(title) +msgid "Accounts" +msgstr "Konten" + #: C/accounts.page:13(title) msgid "Adding accounts" msgstr "Konten hinzufügen" @@ -1316,3 +1367,4 @@ "Frank Schiersner , 2014\n" "Simon Linden , 2017" + diff -Nru geary-0.11.4/help/el/el.po geary-0.12.0/help/el/el.po --- geary-0.11.4/help/el/el.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/help/el/el.po 2017-10-02 11:25:21.000000000 +0000 @@ -373,7 +373,7 @@ #: C/search.page:40(p) msgid "Finds messages where recipient matches the CC header." -msgstr "Βρίσκει μηνύματα όπου ο παραλήπτης ταιριάζει με την κεφαλίδα Κοιν." +msgstr "Βρίσκει μηνύματα όπου ο παραλήπτης ταιριάζει με την κεφαλίδα Κοιν." #: C/search.page:43(var) msgid "sender" @@ -385,7 +385,7 @@ #: C/search.page:44(p) msgid "Finds messages where sender matches the From header." -msgstr "Βρίσκει μηνύματα όπου ο αποστολέας ταιριάζει με την κεφαλίδα Από." +msgstr "Βρίσκει μηνύματα όπου ο αποστολέας ταιριάζει με την κεφαλίδα Από." #: C/search.page:47(input) msgid "subject:" @@ -401,7 +401,7 @@ #: C/search.page:52(p) msgid "Finds messages where sender matches the To, CC, or BCC header." -msgstr "Βρίσκει μηνύματα όπου ο αποστολέας ταιριάζει με τις κεφαλίδες Πρός, Κοιν., Κρυφή Κοιν.." +msgstr "Βρίσκει μηνύματα όπου ο αποστολέας ταιριάζει με τις κεφαλίδες Πρός, Κοιν., Κρυφή Κοιν.." #: C/search.page:56(p) msgid "As a special case, the bcc, cc, from, and to operators support me as their argument, which searches for the account's email address in the appropriate context." @@ -635,7 +635,7 @@ #: C/archive.page:16(p) msgid "With other mail servers, you can trash or delete, but not archive, messages. To move one or more conversations to the Trash folder, select them and press the Trash button on the toolbar. To permanently delete the conversations, hold down Shift and press the Delete button that appears in place of the Trash button." -msgstr "Με άλλους διακομιστές αλληλογραφίας, μπορείτε να στείλετε στα απορρίματα ή να διαγράψετε, αλλά όχι να αρχειοθετήσετε, μηνύματα. Για να μετακινήσετε μία ή περισσότερες συνομιλίες στον φάκελοΑπορρίματα, επιλέξτε και πατήστε το κουμπίΑπορρίματα στη γραμμή εργαλείων. Για να διαγράψετε οριστικά τις συζητήσεις, κρατήστε πατημένο το πλήκτρο Shift και πιέστε το κουμπί Delete που εμφανίζεται στη θέση του κουμπιού Απορρίματα." +msgstr "Με άλλους διακομιστές αλληλογραφίας, μπορείτε να στείλετε στα απορρίματα ή να διαγράψετε, αλλά όχι να αρχειοθετήσετε, μηνύματα. Για να μετακινήσετε μία ή περισσότερες συνομιλίες στον φάκελοΑπορρίματα, επιλέξτε και πατήστε το κουμπίΑπορρίματα στη γραμμή εργαλείων. Για να διαγράψετε οριστικά τις συζητήσεις, κρατήστε πατημένο το πλήκτρο Shift και πιέστε το κουμπί Delete που εμφανίζεται στη θέση του κουμπιού Απορρίματα." #: C/archive.page:21(p) msgid "Delete is not available from every folder, such as Search. Delete is also unavailable for Gmail. For Gmail, Trash will move messages to the Trash folder on the server, where the user can then manually delete them. The server will automatically remove trashed messages after 30 days." @@ -651,7 +651,7 @@ #: C/accounts.page:19(p) msgid "Additional accounts can be added from the Accounts dialog. The Accounts option is available in either Geary's application menu or the gear menu in the upper-right of the toolbar. (The location depends on the install desktop shell. For GNOME Shell and Unity, the application menu is available near the top-left corner of the screen.) Alternately, CtrlM will open the Accounts dialog. To add an account, click the + button." -msgstr "Πρόσθετοι λογαριασμοί μπορούν να προστεθούν από το παράθυρο διαλόγου Λογαριασμοί. Η επιλογή Λογαριασμοί είναι διαθέσιμη είτε στο μενού εφαρμογών Geary ή στο μενού με το γρανάζι στην επάνω δεξιά γωνία της γραμμής εργαλείων. (Η θέση εξαρτάται από την εγκατάσταση του κελύφους επιφάνειας εργασίας. Για το κέλυφος GNOME και Unity, το μενού της εφαρμογής είναι διαθέσιμο κοντά στην επάνω αριστερή γωνία της οθόνης.) Εναλλακτικά, το CtrlM θα ανοίξει το παράθυρο διαλόγου Λογαριασμοί. Για να προσθέσετε ένα λογαριασμό, πατήστε το κουμπί +." +msgstr "Πρόσθετοι λογαριασμοί μπορούν να προστεθούν από το παράθυρο διαλόγου Λογαριασμοί. Η επιλογή Λογαριασμοί είναι διαθέσιμη είτε στο μενού εφαρμογών Geary ή στο μενού με το γρανάζι στην επάνω δεξιά γωνία της γραμμής εργαλείων. (Η θέση εξαρτάται από την εγκατάσταση του κελύφους επιφάνειας εργασίας. Για το κέλυφος GNOME και Unity, το μενού της εφαρμογής είναι διαθέσιμο κοντά στην επάνω αριστερή γωνία της οθόνης.) Εναλλακτικά, το CtrlM θα ανοίξει το παράθυρο διαλόγου Λογαριασμοί. Για να προσθέσετε ένα λογαριασμό, πατήστε το κουμπί +." #: C/accounts.page:28(title) msgid "Editing existing accounts" diff -Nru geary-0.11.4/help/es/es.po geary-0.12.0/help/es/es.po --- geary-0.11.4/help/es/es.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/help/es/es.po 2017-10-02 11:25:21.000000000 +0000 @@ -3,15 +3,15 @@ # This file is distributed under the same license as the geary package. # FIRST AUTHOR , YEAR. # Adolfo Jayme Barrientos , 2014, 2016. -# Daniel Mustieles , 2014, 2016. +# Daniel Mustieles , 2014, 2016, 2017. # msgid "" msgstr "" "Project-Id-Version: geary master\n" -"POT-Creation-Date: 2016-06-18 14:06+0000\n" -"PO-Revision-Date: 2016-06-20 15:08+0200\n" +"POT-Creation-Date: 2017-09-25 16:02+0000\n" +"PO-Revision-Date: 2017-09-26 16:51+0200\n" "Last-Translator: Daniel Mustieles \n" -"Language-Team: Español; Castellano \n" +"Language-Team: es \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,7 +23,11 @@ msgid "Write a message" msgstr "Redactar un mensaje" -#: C/write.page:12(p) +#: C/write.page:12(title) +msgid "Composing and replying" +msgstr "Redactar y responder" + +#: C/write.page:13(p) msgid "" "To compose a new message in Geary, press the New Message button " "on the toolbar." @@ -31,7 +35,7 @@ "Para redactar un mensaje nuevo en Geary, pulse el botón Mensaje nuevo de la barra de herramientas." -#: C/write.page:15(p) +#: C/write.page:16(p) msgid "" "To reply to a message, open the message menu in the upper right corner of " "the message and choose Reply, Reply All or " @@ -45,11 +49,11 @@ "conversación usando los botones Responder, Responder a " "todos o Reenviar de la barra de herramientas." -#: C/write.page:20(title) +#: C/write.page:21(title) msgid "Features" msgstr "Características" -#: C/write.page:22(p) +#: C/write.page:23(p) msgid "" "Geary's email composer lets you adjust the font, size and color of text. You " "can also insert hyperlinks into messages." @@ -58,7 +62,7 @@ "tamaño y el color del texto. También puede insertar hiperenlaces en los " "mensajes." -#: C/write.page:24(p) +#: C/write.page:25(p) msgid "" "Geary can also send plain text messages. In the drop-down menu, check or " "uncheck \"Rich Text\" to toggle between plain text and rich text mode." @@ -67,14 +71,14 @@ "desplegable, marque o desmarque «Texto enriquecido» para cambiar entre los " "modos de texto sencillo y texto con formato." -#: C/write.page:27(p) +#: C/write.page:28(p) msgid "" "You can attach a file to a message you're writing in either of these ways:" msgstr "" "Puede adjuntar un archivo a un mensaje que esté redactando de las siguientes " "maneras:" -#: C/write.page:29(p) +#: C/write.page:30(p) msgid "" "Press the Attach File button at the lower left of the composer " "window, then select a file to attach." @@ -83,7 +87,7 @@ "izquierda de la ventana del editor, y seleccione el archivo que quiere " "adjuntar." -#: C/write.page:31(p) +#: C/write.page:32(p) msgid "" "Drag the file from the Nautilus file manager to the composer window, and " "drop it either on the text fields at the top of the window or on the toolbar " @@ -93,7 +97,7 @@ "del editor, y suéltelo en los campos de texto en la parte superior de la " "ventana o en la barra de herramientas inferior." -#: C/write.page:35(p) +#: C/write.page:36(p) msgid "" "A number of keyboard shortcuts are available in the composer; see for details." @@ -101,7 +105,7 @@ "Hay disponibles varios atajos de teclado en la ventana del editor; consulte " " para obtener más información." -#: C/write.page:37(p) +#: C/write.page:38(p) msgid "" "You may specify a signature to be inserted into the composer in the dialog." @@ -109,11 +113,11 @@ "Debe especificar una firma para insertarla dentro del editor en el diálogo " "." -#: C/write.page:42(title) +#: C/write.page:43(title) msgid "Drafts" msgstr "Borradores" -#: C/write.page:44(p) +#: C/write.page:45(p) msgid "" "For mail servers that support drafts, Geary will automatically save the " "message as you type. If you close the composer without sending, Geary will " @@ -124,7 +128,7 @@ "editor sin enviarlo, Geary le preguntará si quiere mantener o descartar el " "borrador." -#: C/write.page:47(p) +#: C/write.page:48(p) msgid "" "To edit an existing draft, select the Drafts folder in the folder list, " "select the message, and click \"Edit Draft\" in the message viewer." @@ -133,7 +137,7 @@ "lista de carpetas, elija el mensaje y pulse en «Editar el borrador» en el " "visor de mensajes." -#: C/write.page:50(p) +#: C/write.page:51(p) msgid "Geary deletes the draft when you send the message." msgstr "Geary eliminará el borrador cuando envíe el mensaje." @@ -274,7 +278,7 @@ msgid "Star" msgstr "Destacar" -#: C/shortcuts.page:44(key) C/shortcuts.page:108(key) +#: C/shortcuts.page:44(key) C/shortcuts.page:100(key) msgid "S" msgstr "S" @@ -282,7 +286,7 @@ msgid "Unstar" msgstr "Quitar el destaque" -#: C/shortcuts.page:48(key) C/shortcuts.page:142(key) +#: C/shortcuts.page:48(key) C/shortcuts.page:138(key) msgid "D" msgstr "D" @@ -311,52 +315,38 @@ "key>U" #: C/shortcuts.page:59(p) -msgid "Move focus to the next/previous pane" -msgstr "Mover el foco al panel siguiente/anterior" +#| msgid "Label a conversation" +msgid "Move the conversation" +msgstr "Mover la conversación" -#: C/shortcuts.page:60(p) -msgid "" -"F6 / ShiftF6" -msgstr "" -"F6 / MayúsF6" +#: C/shortcuts.page:60(key) +msgid "M" +msgstr "M" #: C/shortcuts.page:63(p) -msgid "Move focus to conversation list" -msgstr "Mover el foco a lista de conversaciones" - -#: C/shortcuts.page:64(key) C/shortcuts.page:80(key) C/shortcuts.page:96(key) -#: C/shortcuts.page:100(key) C/shortcuts.page:104(key) -#: C/shortcuts.page:108(key) C/shortcuts.page:112(key) -#: C/shortcuts.page:116(key) C/shortcuts.page:120(key) -#: C/shortcuts.page:130(key) C/shortcuts.page:134(key) -#: C/shortcuts.page:142(key) C/shortcuts.page:150(key) -#: C/shortcuts.page:154(key) C/shortcuts.page:158(key) -#: C/shortcuts.page:162(key) C/shortcuts.page:166(key) -#: C/shortcuts.page:170(key) -msgid "Ctrl" -msgstr "Ctrl" +#| msgid "Label a conversation" +msgid "Label the conversation" +msgstr "Etiquetar la conversación" -#: C/shortcuts.page:64(key) C/shortcuts.page:150(key) -msgid "B" -msgstr "B" +#: C/shortcuts.page:64(key) C/shortcuts.page:162(key) +msgid "L" +msgstr "L" #: C/shortcuts.page:67(p) msgid "Jump to next (older) conversation" msgstr "Ir a la siguiente conversación (más antigua)" #: C/shortcuts.page:68(key) -msgid "j" -msgstr "j" +msgid "J" +msgstr "J" #: C/shortcuts.page:71(p) msgid "Jump to previous (newer) conversation" msgstr "Ir a la conversación anterior (más reciente)" -#: C/shortcuts.page:72(key) -msgid "k" -msgstr "k" +#: C/shortcuts.page:72(key) C/shortcuts.page:158(key) +msgid "K" +msgstr "K" #: C/shortcuts.page:75(p) msgid "Toggle spam" @@ -370,6 +360,17 @@ msgid "Quit" msgstr "Salir" +#: C/shortcuts.page:80(key) C/shortcuts.page:96(key) C/shortcuts.page:100(key) +#: C/shortcuts.page:104(key) C/shortcuts.page:108(key) +#: C/shortcuts.page:112(key) C/shortcuts.page:122(key) +#: C/shortcuts.page:126(key) C/shortcuts.page:130(key) +#: C/shortcuts.page:138(key) C/shortcuts.page:146(key) +#: C/shortcuts.page:150(key) C/shortcuts.page:154(key) +#: C/shortcuts.page:158(key) C/shortcuts.page:162(key) +#: C/shortcuts.page:166(key) C/shortcuts.page:181(key) +msgid "Ctrl" +msgstr "Ctrl" + #: C/shortcuts.page:80(key) msgid "Q" msgstr "Q" @@ -398,146 +399,198 @@ msgid "Ctrl0 or 0" msgstr "Ctrl0 o 0" -#: C/shortcuts.page:95(p) C/preferences.page:10(title) -msgid "Preferences" -msgstr "Preferencias" - -#: C/shortcuts.page:96(key) -msgid "E" -msgstr "E" - -#: C/shortcuts.page:99(p) C/accounts.page:10(title) -msgid "Accounts" -msgstr "Cuentas" - -#: C/shortcuts.page:100(key) -msgid "M" -msgstr "M" - -#: C/shortcuts.page:103(p) +#: C/shortcuts.page:95(p) msgid "Close composer window" msgstr "Cerrar la ventana del editor" -#: C/shortcuts.page:104(key) +#: C/shortcuts.page:96(key) msgid "W" msgstr "W" -#: C/shortcuts.page:107(p) +#: C/shortcuts.page:99(p) msgid "Jump to search box" msgstr "Enfocar el cuadro de búsqueda" -#: C/shortcuts.page:111(p) +#: C/shortcuts.page:103(p) msgid "Find in current conversation" msgstr "Buscar en la conversación actual" -#: C/shortcuts.page:112(key) +#: C/shortcuts.page:104(key) msgid "F" msgstr "F" -#: C/shortcuts.page:115(p) +#: C/shortcuts.page:107(p) msgid "Find next in current conversation" msgstr "Buscar la siguiente ocurrencia en la conversación" -#: C/shortcuts.page:116(key) C/shortcuts.page:120(key) +#: C/shortcuts.page:108(key) C/shortcuts.page:112(key) msgid "G" msgstr "G" -#: C/shortcuts.page:119(p) +#: C/shortcuts.page:111(p) msgid "Find previous in current conversation" msgstr "Buscar la ocurrencia anterior en la conversación" -#: C/shortcuts.page:120(key) +#: C/shortcuts.page:112(key) msgid "Shift" msgstr "Mayús" -#: C/shortcuts.page:125(title) +#: C/shortcuts.page:117(title) msgid "Composer shortcuts" msgstr "Atajos de teclado de la ventana del editor" -#: C/shortcuts.page:126(p) +#: C/shortcuts.page:118(p) msgid "These shortcuts are active whenever focus is in a composer." msgstr "" "Estas combinaciones de teclas se activan siempre que la ventana del editor " "tenga el foco." -#: C/shortcuts.page:129(p) +#: C/shortcuts.page:121(p) +msgid "Attach file" +msgstr "Adjuntar archivo" + +#: C/shortcuts.page:122(key) +msgid "T" +msgstr "T" + +#: C/shortcuts.page:125(p) msgid "Quote text" msgstr "Citar texto" -#: C/shortcuts.page:130(key) +#: C/shortcuts.page:126(key) msgid "]" msgstr "]" -#: C/shortcuts.page:133(p) +#: C/shortcuts.page:129(p) msgid "Unquote text" msgstr "Eliminar cita de texto" -#: C/shortcuts.page:134(key) +#: C/shortcuts.page:130(key) msgid "[" msgstr "[" -#: C/shortcuts.page:137(p) +#: C/shortcuts.page:133(p) msgid "Close composer" msgstr "Cerrar la ventana del editor" -#: C/shortcuts.page:138(p) +#: C/shortcuts.page:134(p) msgid "CtrlW or Esc" msgstr "CtrlW o Esc" -#: C/shortcuts.page:141(p) +#: C/shortcuts.page:137(p) msgid "Detach composer" msgstr "Desacoplar la ventana del editor" -#: C/shortcuts.page:146(p) +#: C/shortcuts.page:142(p) msgid "These shortcuts are only active in composers in rich text mode." msgstr "" "Éstos atajos están activos sólo en ventanas de redacción en modo texto " "enriquecido." -#: C/shortcuts.page:149(p) +#: C/shortcuts.page:145(p) msgid "Bold text" msgstr "Texto en negritas" -#: C/shortcuts.page:153(p) +#: C/shortcuts.page:146(key) C/shortcuts.page:181(key) +msgid "B" +msgstr "B" + +#: C/shortcuts.page:149(p) msgid "Italicize text" msgstr "Texto en cursiva" -#: C/shortcuts.page:154(key) +#: C/shortcuts.page:150(key) msgid "I" msgstr "I" -#: C/shortcuts.page:157(p) +#: C/shortcuts.page:153(p) msgid "Underline text" msgstr "Subrayar el texto" -#: C/shortcuts.page:158(key) +#: C/shortcuts.page:154(key) msgid "U" msgstr "U" -#: C/shortcuts.page:161(p) +#: C/shortcuts.page:157(p) msgid "Strike text" msgstr "Tachar el texto" -#: C/shortcuts.page:162(key) -msgid "K" -msgstr "K" - -#: C/shortcuts.page:165(p) +#: C/shortcuts.page:161(p) msgid "Insert a link" msgstr "Insertar un enlace" -#: C/shortcuts.page:166(key) -msgid "L" -msgstr "L" - -#: C/shortcuts.page:169(p) +#: C/shortcuts.page:165(p) msgid "Remove formatting" msgstr "Eliminar el formato" -#: C/shortcuts.page:170(key) +#: C/shortcuts.page:166(key) C/shortcuts.page:186(key) msgid "Space" msgstr "Espacio" +#: C/shortcuts.page:172(title) +msgid "Keyboard navigation" +msgstr "Navegación con el teclado" + +#: C/shortcuts.page:173(p) +#| msgid "These shortcuts are active whenever focus is in a composer." +msgid "" +"These shortcuts can be used to move the keyboard focus in the main window." +msgstr "" +"Estos atajos se pueden usar para mover el foco del teclado en la ventana " +"principal." + +#: C/shortcuts.page:176(p) +msgid "Move focus to the next/previous pane" +msgstr "Mover el foco al panel siguiente/anterior" + +#: C/shortcuts.page:177(p) +msgid "" +"F6 / ShiftF6" +msgstr "" +"F6 / MayúsF6" + +#: C/shortcuts.page:180(p) +msgid "Move focus to conversation list" +msgstr "Mover el foco a lista de conversaciones" + +#: C/shortcuts.page:184(p) +#| msgid "Jump to next (older) conversation" +msgid "Move to the next message in a conversation" +msgstr "Mover al siguiente mensaje en una conversación" + +#: C/shortcuts.page:190(p) +#| msgid "Move focus to the next/previous pane" +msgid "Move to the next/previous message in a conversation" +msgstr "Mover al mensaje siguiente/anterior en una conversación" + +#: C/shortcuts.page:191(p) +#| msgid "" +#| "CtrlU or ShiftU" +msgid "" +"CtrlDown / CtrlUp" +msgstr "" +"CtrlAbajo / CtrlArriba" + +#: C/shortcuts.page:197(p) +msgid "Move to the first/last message in a conversation" +msgstr "Mover al primer/último mensaje en una conversación" + +#: C/shortcuts.page:198(p) +#| msgid "" +#| "CtrlI or ShiftI" +msgid "" +"CtrlHome / CtrlEnd" +msgstr "" +"CtrlInicio / CtrlFin" + #: C/search.page:10(title) msgid "Search" msgstr "Búsqueda" @@ -700,6 +753,10 @@ "argumento, que busca la cuenta de dirección de correo electrónico en el " "contexto apropiado." +#: C/preferences.page:10(title) +msgid "Preferences" +msgstr "Preferencias" + #: C/preferences.page:11(p) msgid "" "The Preferences option is available in either Geary's application " @@ -1176,6 +1233,10 @@ "usuario puede eliminarlos manualmente. El servidor eliminará automáticamente " "los mensajes de esta carpeta pasados 30 días." +#: C/accounts.page:10(title) +msgid "Accounts" +msgstr "Cuentas" + #: C/accounts.page:13(title) msgid "Adding accounts" msgstr "Añadir cuentas" @@ -1312,3 +1373,20 @@ msgstr "" "Adolfo Jayme Barrientos , 2014\n" "Daniel Mustieles , 2014" + +#~| msgid "Label a conversation" +#~ msgid "Open the Label Conversation menu" +#~ msgstr "Abrir el menú Etiquetar una conversación" + +#~| msgid "Label or move a conversation" +#~ msgid "Open the Move Conversation menu" +#~ msgstr "Abrir el menú Mover una conversación" + +#~ msgid "j" +#~ msgstr "j" + +#~ msgid "k" +#~ msgstr "k" + +#~ msgid "E" +#~ msgstr "E" diff -Nru geary-0.11.4/help/it/it.po geary-0.12.0/help/it/it.po --- geary-0.11.4/help/it/it.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/help/it/it.po 2017-10-02 11:25:21.000000000 +0000 @@ -1,13 +1,13 @@ # Italian translation for geary. # Copyright (C) 2014 geary's COPYRIGHT HOLDER # This file is distributed under the same license as the geary package. -# Federico Bruni , 2014, 2015, 2016. +# Federico Bruni , 2014, 2015, 2016, 2017. # msgid "" msgstr "" "Project-Id-Version: geary help master\n" -"POT-Creation-Date: 2016-06-08 12:24+0200\n" -"PO-Revision-Date: 2016-06-08 12:24+0200\n" +"POT-Creation-Date: 2017-02-23 03:08+0000\n" +"PO-Revision-Date: 2017-03-03 13:18+0100\n" "Last-Translator: Federico Bruni \n" "Language-Team: Italiano <>\n" "Language: it\n" @@ -270,7 +270,7 @@ msgid "Star" msgstr "Speciale" -#: C/shortcuts.page:44(key) C/shortcuts.page:108(key) +#: C/shortcuts.page:44(key) C/shortcuts.page:100(key) msgid "S" msgstr "S" @@ -278,7 +278,7 @@ msgid "Unstar" msgstr "Non speciale" -#: C/shortcuts.page:48(key) C/shortcuts.page:142(key) +#: C/shortcuts.page:48(key) C/shortcuts.page:138(key) msgid "D" msgstr "D" @@ -307,52 +307,38 @@ "key>U" #: C/shortcuts.page:59(p) -msgid "Move focus to the next/previous pane" -msgstr "Sposta lo stato attivo al riquadro successivo/precedente" +#| msgid "Label a conversation" +msgid "Move the conversation" +msgstr "Sposta la conversazione" -#: C/shortcuts.page:60(p) -msgid "" -"F6 / ShiftF6" -msgstr "" -"F6 / MaiuscF6" +#: C/shortcuts.page:60(key) +msgid "M" +msgstr "M" #: C/shortcuts.page:63(p) -msgid "Move focus to conversation list" -msgstr "Sposta lo stato attivo sull'elenco delle conversazioni" +#| msgid "Label a conversation" +msgid "Label the conversation" +msgstr "Etichettare la conversazione" -#: C/shortcuts.page:64(key) C/shortcuts.page:80(key) C/shortcuts.page:96(key) -#: C/shortcuts.page:100(key) C/shortcuts.page:104(key) -#: C/shortcuts.page:108(key) C/shortcuts.page:112(key) -#: C/shortcuts.page:116(key) C/shortcuts.page:120(key) -#: C/shortcuts.page:130(key) C/shortcuts.page:134(key) -#: C/shortcuts.page:142(key) C/shortcuts.page:150(key) -#: C/shortcuts.page:154(key) C/shortcuts.page:158(key) -#: C/shortcuts.page:162(key) C/shortcuts.page:166(key) -#: C/shortcuts.page:170(key) -msgid "Ctrl" -msgstr "Ctrl" - -#: C/shortcuts.page:64(key) C/shortcuts.page:150(key) -msgid "B" -msgstr "B" +#: C/shortcuts.page:64(key) C/shortcuts.page:162(key) +msgid "L" +msgstr "L" #: C/shortcuts.page:67(p) msgid "Jump to next (older) conversation" msgstr "Passa alla conversazione successiva (più vecchia)" #: C/shortcuts.page:68(key) -msgid "j" -msgstr "j" +msgid "J" +msgstr "J" #: C/shortcuts.page:71(p) msgid "Jump to previous (newer) conversation" msgstr "Passa alla conversazione precedente (più recente)" -#: C/shortcuts.page:72(key) -msgid "k" -msgstr "k" +#: C/shortcuts.page:72(key) C/shortcuts.page:158(key) +msgid "K" +msgstr "K" #: C/shortcuts.page:75(p) msgid "Toggle spam" @@ -366,6 +352,17 @@ msgid "Quit" msgstr "Esci" +#: C/shortcuts.page:80(key) C/shortcuts.page:96(key) C/shortcuts.page:100(key) +#: C/shortcuts.page:104(key) C/shortcuts.page:108(key) +#: C/shortcuts.page:112(key) C/shortcuts.page:122(key) +#: C/shortcuts.page:126(key) C/shortcuts.page:130(key) +#: C/shortcuts.page:138(key) C/shortcuts.page:146(key) +#: C/shortcuts.page:150(key) C/shortcuts.page:154(key) +#: C/shortcuts.page:158(key) C/shortcuts.page:162(key) +#: C/shortcuts.page:166(key) C/shortcuts.page:181(key) +msgid "Ctrl" +msgstr "Ctrl" + #: C/shortcuts.page:80(key) msgid "Q" msgstr "Q" @@ -394,146 +391,198 @@ msgid "Ctrl0 or 0" msgstr "Ctrl0 o 0" -#: C/shortcuts.page:95(p) C/preferences.page:10(title) -msgid "Preferences" -msgstr "Preferenze" - -#: C/shortcuts.page:96(key) -msgid "E" -msgstr "E" - -#: C/shortcuts.page:99(p) C/accounts.page:10(title) -msgid "Accounts" -msgstr "Account" - -#: C/shortcuts.page:100(key) -msgid "M" -msgstr "M" - -#: C/shortcuts.page:103(p) +#: C/shortcuts.page:95(p) msgid "Close composer window" msgstr "Chiudi la finestra di composizione" -#: C/shortcuts.page:104(key) +#: C/shortcuts.page:96(key) msgid "W" msgstr "W" -#: C/shortcuts.page:107(p) +#: C/shortcuts.page:99(p) msgid "Jump to search box" msgstr "Passa alla casella di ricerca" -#: C/shortcuts.page:111(p) +#: C/shortcuts.page:103(p) msgid "Find in current conversation" msgstr "Trova nella conversazione corrente" -#: C/shortcuts.page:112(key) +#: C/shortcuts.page:104(key) msgid "F" msgstr "F" -#: C/shortcuts.page:115(p) +#: C/shortcuts.page:107(p) msgid "Find next in current conversation" msgstr "Trova successivo nella conversazione corrente" -#: C/shortcuts.page:116(key) C/shortcuts.page:120(key) +#: C/shortcuts.page:108(key) C/shortcuts.page:112(key) msgid "G" msgstr "G" -#: C/shortcuts.page:119(p) +#: C/shortcuts.page:111(p) msgid "Find previous in current conversation" msgstr "Trova precedente nella conversazione corrente" -#: C/shortcuts.page:120(key) +#: C/shortcuts.page:112(key) msgid "Shift" msgstr "Maiusc" -#: C/shortcuts.page:125(title) +#: C/shortcuts.page:117(title) msgid "Composer shortcuts" msgstr "Scorciatoie della finestra di composizione" -#: C/shortcuts.page:126(p) +#: C/shortcuts.page:118(p) msgid "These shortcuts are active whenever focus is in a composer." msgstr "" "Queste scorciatoie da tastiera sono attive quando si lavora nella finestra " "di composizione." -#: C/shortcuts.page:129(p) +#: C/shortcuts.page:121(p) +msgid "Attach file" +msgstr "Allega file" + +#: C/shortcuts.page:122(key) +msgid "T" +msgstr "T" + +#: C/shortcuts.page:125(p) msgid "Quote text" msgstr "Cita testo" -#: C/shortcuts.page:130(key) +#: C/shortcuts.page:126(key) msgid "]" msgstr "]" -#: C/shortcuts.page:133(p) +#: C/shortcuts.page:129(p) msgid "Unquote text" msgstr "Togli citazione" -#: C/shortcuts.page:134(key) +#: C/shortcuts.page:130(key) msgid "[" msgstr "[" -#: C/shortcuts.page:137(p) +#: C/shortcuts.page:133(p) msgid "Close composer" msgstr "Chiudi la finestra di composizione" -#: C/shortcuts.page:138(p) +#: C/shortcuts.page:134(p) msgid "CtrlW or Esc" msgstr "CtrlW o Esc" -#: C/shortcuts.page:141(p) +#: C/shortcuts.page:137(p) msgid "Detach composer" msgstr "Stacca la finestra di composizione" -#: C/shortcuts.page:146(p) +#: C/shortcuts.page:142(p) msgid "These shortcuts are only active in composers in rich text mode." msgstr "" "Queste scorciatoie sono attive solo se nella finestra di composizione è " "spuntata la modalità di testo formattato." -#: C/shortcuts.page:149(p) +#: C/shortcuts.page:145(p) msgid "Bold text" msgstr "Testo in grassetto" -#: C/shortcuts.page:153(p) +#: C/shortcuts.page:146(key) C/shortcuts.page:181(key) +msgid "B" +msgstr "B" + +#: C/shortcuts.page:149(p) msgid "Italicize text" msgstr "Testo in corsivo" -#: C/shortcuts.page:154(key) +#: C/shortcuts.page:150(key) msgid "I" msgstr "I" -#: C/shortcuts.page:157(p) +#: C/shortcuts.page:153(p) msgid "Underline text" msgstr "Testo sottolineato" -#: C/shortcuts.page:158(key) +#: C/shortcuts.page:154(key) msgid "U" msgstr "U" -#: C/shortcuts.page:161(p) +#: C/shortcuts.page:157(p) msgid "Strike text" msgstr "Testo barrato" -#: C/shortcuts.page:162(key) -msgid "K" -msgstr "K" - -#: C/shortcuts.page:165(p) +#: C/shortcuts.page:161(p) msgid "Insert a link" msgstr "Inserisci un collegamento" -#: C/shortcuts.page:166(key) -msgid "L" -msgstr "L" - -#: C/shortcuts.page:169(p) +#: C/shortcuts.page:165(p) msgid "Remove formatting" msgstr "Togli formattazione" -#: C/shortcuts.page:170(key) +#: C/shortcuts.page:166(key) C/shortcuts.page:186(key) msgid "Space" msgstr "Spazio" +#: C/shortcuts.page:172(title) +msgid "Keyboard navigation" +msgstr "Navigazione con la tastiera" + +#: C/shortcuts.page:173(p) +#| msgid "These shortcuts are active whenever focus is in a composer." +msgid "" +"These shortcuts can be used to move the keyboard focus in the main window." +msgstr "" +"Queste scorciatoie possono essere usate per spostare lo stato attivo della " +"tastiera nella finestra principale." + +#: C/shortcuts.page:176(p) +msgid "Move focus to the next/previous pane" +msgstr "Sposta lo stato attivo al riquadro successivo/precedente" + +#: C/shortcuts.page:177(p) +msgid "" +"F6 / ShiftF6" +msgstr "" +"F6 / MaiuscF6" + +#: C/shortcuts.page:180(p) +msgid "Move focus to conversation list" +msgstr "Sposta lo stato attivo sull'elenco delle conversazioni" + +#: C/shortcuts.page:184(p) +#| msgid "Jump to next (older) conversation" +msgid "Move to the next message in a conversation" +msgstr "Passa al messaggio successivo in una conversazione" + +#: C/shortcuts.page:190(p) +#| msgid "Move focus to the next/previous pane" +msgid "Move to the next/previous message in a conversation" +msgstr "Passa al messaggio successivo/precedente in una conversazione" + +#: C/shortcuts.page:191(p) +#| msgid "" +#| "CtrlU or ShiftU" +msgid "" +"CtrlDown / CtrlUp" +msgstr "" +"CtrlGiù / Ctrl" + +#: C/shortcuts.page:197(p) +msgid "Move to the first/last message in a conversation" +msgstr "Passa al primo/ultimo messaggio in una conversazione" + +#: C/shortcuts.page:198(p) +#| msgid "" +#| "CtrlI or ShiftI" +msgid "" +"CtrlHome / CtrlEnd" +msgstr "" +"CtrlInizio / CtrlFine" + #: C/search.page:10(title) msgid "Search" msgstr "Ricerca" @@ -698,6 +747,10 @@ "argomento, abilitando la ricerca dell'indirizzo email del proprio account " "nel contesto appropriato." +#: C/preferences.page:10(title) +msgid "Preferences" +msgstr "Preferenze" + #: C/preferences.page:11(p) msgid "" "The Preferences option is available in either Geary's application " @@ -1172,6 +1225,10 @@ "manualmente. Il server eliminerà automaticamente i messaggi cestinati dopo " "30 giorni." +#: C/accounts.page:10(title) +msgid "Accounts" +msgstr "Account" + #: C/accounts.page:13(title) msgid "Adding accounts" msgstr "Aggiungere account" @@ -1316,6 +1373,3 @@ #~| msgid "Label or move a conversation" #~ msgid "Open the Move Conversation menu" #~ msgstr "Apri il menu Sposta conversazione" - -#~ msgid "J" -#~ msgstr "J" diff -Nru geary-0.11.4/help/pl/pl.po geary-0.12.0/help/pl/pl.po --- geary-0.11.4/help/pl/pl.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/help/pl/pl.po 2017-10-02 11:25:21.000000000 +0000 @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: geary-help\n" -"POT-Creation-Date: 2017-04-29 20:51+0000\n" -"PO-Revision-Date: 2017-09-06 17:38+0200\n" +"POT-Creation-Date: 2017-09-25 16:02+0000\n" +"PO-Revision-Date: 2017-09-26 16:45+0200\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" "Language: pl\n" @@ -22,7 +22,11 @@ msgid "Write a message" msgstr "Pisanie wiadomości" -#: C/write.page:12(p) +#: C/write.page:12(title) +msgid "Composing and replying" +msgstr "Tworzenie wiadomości i odpowiadanie" + +#: C/write.page:13(p) msgid "" "To compose a new message in Geary, press the New Message button " "on the toolbar." @@ -30,7 +34,7 @@ "Aby napisać nową wiadomość, kliknij przycisk Nowa wiadomość na " "pasku narzędziowym." -#: C/write.page:15(p) +#: C/write.page:16(p) msgid "" "To reply to a message, open the message menu in the upper right corner of " "the message and choose Reply, Reply All or " @@ -44,11 +48,11 @@ "za pomocą przycisków Odpowiedz, Odpowiedz wszystkim " "i Przekaż na pasku narzędziowym." -#: C/write.page:20(title) +#: C/write.page:21(title) msgid "Features" msgstr "Funkcje" -#: C/write.page:22(p) +#: C/write.page:23(p) msgid "" "Geary's email composer lets you adjust the font, size and color of text. You " "can also insert hyperlinks into messages." @@ -56,7 +60,7 @@ "Okno tworzenia wiadomości umożliwia dostosowanie czcionki, rozmiaru i koloru " "tekstu. Można także wstawiać odnośniki do wiadomości." -#: C/write.page:24(p) +#: C/write.page:25(p) msgid "" "Geary can also send plain text messages. In the drop-down menu, check or " "uncheck \"Rich Text\" to toggle between plain text and rich text mode." @@ -65,12 +69,12 @@ "sformatowany” w rozwijanym menu, aby przełączyć między zwykłym " "a sformatowanym tekstem." -#: C/write.page:27(p) +#: C/write.page:28(p) msgid "" "You can attach a file to a message you're writing in either of these ways:" msgstr "Można dołączyć plik do pisanej wiadomości na trzy różne sposoby:" -#: C/write.page:29(p) +#: C/write.page:30(p) msgid "" "Press the Attach File button at the lower left of the composer " "window, then select a file to attach." @@ -78,7 +82,7 @@ "Kliknij przycisk Załącz plik w dolnym lewym rogu okna tworzenia " "wiadomości, a następnie wybierz plik do dołączenia." -#: C/write.page:31(p) +#: C/write.page:32(p) msgid "" "Drag the file from the Nautilus file manager to the composer window, and " "drop it either on the text fields at the top of the window or on the toolbar " @@ -87,7 +91,7 @@ "Przeciągnij plik z menedżera plików Nautilus do pól tekstowych na górze okna " "tworzenia wiadomości lub do paska narzędziowego na dole." -#: C/write.page:35(p) +#: C/write.page:36(p) msgid "" "A number of keyboard shortcuts are available in the composer; see for details." @@ -95,7 +99,7 @@ "Okno tworzenia wiadomości obsługuje wiele skrótów klawiszowych. zawiera więcej informacji." -#: C/write.page:37(p) +#: C/write.page:38(p) msgid "" "You may specify a signature to be inserted into the composer in the dialog." @@ -103,11 +107,11 @@ "Można określić podpis do wstawiania do okna tworzenia wiadomości w oknie " "." -#: C/write.page:42(title) +#: C/write.page:43(title) msgid "Drafts" msgstr "Szkice" -#: C/write.page:44(p) +#: C/write.page:45(p) msgid "" "For mail servers that support drafts, Geary will automatically save the " "message as you type. If you close the composer without sending, Geary will " @@ -118,7 +122,7 @@ "wiadomości jest zamykane bez wysłania, zostanie wyświetlone pytanie, czy " "zachować lub odrzucić szkic." -#: C/write.page:47(p) +#: C/write.page:48(p) msgid "" "To edit an existing draft, select the Drafts folder in the folder list, " "select the message, and click \"Edit Draft\" in the message viewer." @@ -126,7 +130,7 @@ "Aby zmodyfikować istniejący szkic, wybierz katalog Szkice z listy katalogów, " "wybierz wiadomość i kliknij „Modyfikuj szkic” w przeglądarce wiadomości." -#: C/write.page:50(p) +#: C/write.page:51(p) msgid "Geary deletes the draft when you send the message." msgstr "Szkic jest usuwany po wysłaniu wiadomości." @@ -266,7 +270,7 @@ msgid "Star" msgstr "Wyróżnienie" -#: C/shortcuts.page:44(key) C/shortcuts.page:108(key) +#: C/shortcuts.page:44(key) C/shortcuts.page:100(key) msgid "S" msgstr "S" @@ -274,7 +278,7 @@ msgid "Unstar" msgstr "Usunięcie wyróżnienia" -#: C/shortcuts.page:48(key) C/shortcuts.page:142(key) +#: C/shortcuts.page:48(key) C/shortcuts.page:138(key) msgid "D" msgstr "D" @@ -303,51 +307,36 @@ "key>U" #: C/shortcuts.page:59(p) -msgid "Move focus to the next/previous pane" -msgstr "Przejście do następnego/poprzedniego panelu" +msgid "Move the conversation" +msgstr "Przeniesienie wątku" -#: C/shortcuts.page:60(p) -msgid "" -"F6 / ShiftF6" -msgstr "" -"F6/ShiftF6" +#: C/shortcuts.page:60(key) +msgid "M" +msgstr "M" #: C/shortcuts.page:63(p) -msgid "Move focus to conversation list" -msgstr "Przejście do listy wątków" +msgid "Label the conversation" +msgstr "Nadanie etykiety wątkowi" -#: C/shortcuts.page:64(key) C/shortcuts.page:80(key) C/shortcuts.page:96(key) -#: C/shortcuts.page:100(key) C/shortcuts.page:104(key) -#: C/shortcuts.page:108(key) C/shortcuts.page:112(key) -#: C/shortcuts.page:116(key) C/shortcuts.page:120(key) -#: C/shortcuts.page:130(key) C/shortcuts.page:134(key) -#: C/shortcuts.page:142(key) C/shortcuts.page:150(key) -#: C/shortcuts.page:154(key) C/shortcuts.page:158(key) -#: C/shortcuts.page:162(key) C/shortcuts.page:166(key) -#: C/shortcuts.page:170(key) -msgid "Ctrl" -msgstr "Ctrl" - -#: C/shortcuts.page:64(key) C/shortcuts.page:150(key) -msgid "B" -msgstr "B" +#: C/shortcuts.page:64(key) C/shortcuts.page:162(key) +msgid "L" +msgstr "L" #: C/shortcuts.page:67(p) msgid "Jump to next (older) conversation" msgstr "Przejście do następnego (starszego) wątku" #: C/shortcuts.page:68(key) -msgid "j" -msgstr "j" +msgid "J" +msgstr "J" #: C/shortcuts.page:71(p) msgid "Jump to previous (newer) conversation" msgstr "Przejście do poprzedniego (nowszego) wątku" -#: C/shortcuts.page:72(key) -msgid "k" -msgstr "k" +#: C/shortcuts.page:72(key) C/shortcuts.page:158(key) +msgid "K" +msgstr "K" #: C/shortcuts.page:75(p) msgid "Toggle spam" @@ -361,6 +350,17 @@ msgid "Quit" msgstr "Zakończenie działania" +#: C/shortcuts.page:80(key) C/shortcuts.page:96(key) C/shortcuts.page:100(key) +#: C/shortcuts.page:104(key) C/shortcuts.page:108(key) +#: C/shortcuts.page:112(key) C/shortcuts.page:122(key) +#: C/shortcuts.page:126(key) C/shortcuts.page:130(key) +#: C/shortcuts.page:138(key) C/shortcuts.page:146(key) +#: C/shortcuts.page:150(key) C/shortcuts.page:154(key) +#: C/shortcuts.page:158(key) C/shortcuts.page:162(key) +#: C/shortcuts.page:166(key) C/shortcuts.page:181(key) +msgid "Ctrl" +msgstr "Ctrl" + #: C/shortcuts.page:80(key) msgid "Q" msgstr "Q" @@ -389,144 +389,184 @@ msgid "Ctrl0 or 0" msgstr "Ctrl0 lub 0" -#: C/shortcuts.page:95(p) C/preferences.page:10(title) -msgid "Preferences" -msgstr "Preferencje" - -#: C/shortcuts.page:96(key) -msgid "E" -msgstr "E" - -#: C/shortcuts.page:99(p) C/accounts.page:10(title) -msgid "Accounts" -msgstr "Konta" - -#: C/shortcuts.page:100(key) -msgid "M" -msgstr "M" - -#: C/shortcuts.page:103(p) +#: C/shortcuts.page:95(p) msgid "Close composer window" msgstr "Zamknięcie okna pisania wiadomości" -#: C/shortcuts.page:104(key) +#: C/shortcuts.page:96(key) msgid "W" msgstr "W" -#: C/shortcuts.page:107(p) +#: C/shortcuts.page:99(p) msgid "Jump to search box" msgstr "Przejście do wyszukiwania" -#: C/shortcuts.page:111(p) +#: C/shortcuts.page:103(p) msgid "Find in current conversation" msgstr "Wyszukiwanie w obecnym wątku" -#: C/shortcuts.page:112(key) +#: C/shortcuts.page:104(key) msgid "F" msgstr "F" -#: C/shortcuts.page:115(p) +#: C/shortcuts.page:107(p) msgid "Find next in current conversation" msgstr "Wyszukiwanie następnego wystąpienia w obecnym wątku" -#: C/shortcuts.page:116(key) C/shortcuts.page:120(key) +#: C/shortcuts.page:108(key) C/shortcuts.page:112(key) msgid "G" msgstr "G" -#: C/shortcuts.page:119(p) +#: C/shortcuts.page:111(p) msgid "Find previous in current conversation" msgstr "Wyszukiwanie poprzedniego wystąpienia w obecnym wątku" -#: C/shortcuts.page:120(key) +#: C/shortcuts.page:112(key) msgid "Shift" msgstr "Shift" -#: C/shortcuts.page:125(title) +#: C/shortcuts.page:117(title) msgid "Composer shortcuts" msgstr "Skróty okna pisania wiadomości" -#: C/shortcuts.page:126(p) +#: C/shortcuts.page:118(p) msgid "These shortcuts are active whenever focus is in a composer." msgstr "Poniższe skróty są aktywne w oknie pisania wiadomości." -#: C/shortcuts.page:129(p) +#: C/shortcuts.page:121(p) +msgid "Attach file" +msgstr "Załączenie pliku" + +#: C/shortcuts.page:122(key) +msgid "T" +msgstr "T" + +#: C/shortcuts.page:125(p) msgid "Quote text" msgstr "Cytowanie tekstu" -#: C/shortcuts.page:130(key) +#: C/shortcuts.page:126(key) msgid "]" msgstr "]" -#: C/shortcuts.page:133(p) +#: C/shortcuts.page:129(p) msgid "Unquote text" msgstr "Zakończenie cytowania tekstu" -#: C/shortcuts.page:134(key) +#: C/shortcuts.page:130(key) msgid "[" msgstr "[" -#: C/shortcuts.page:137(p) +#: C/shortcuts.page:133(p) msgid "Close composer" msgstr "Zamknięcie okna pisania wiadomości" -#: C/shortcuts.page:138(p) +#: C/shortcuts.page:134(p) msgid "CtrlW or Esc" msgstr "CtrlW lub Esc" -#: C/shortcuts.page:141(p) +#: C/shortcuts.page:137(p) msgid "Detach composer" msgstr "Odłączenie okna pisania wiadomości" -#: C/shortcuts.page:146(p) +#: C/shortcuts.page:142(p) msgid "These shortcuts are only active in composers in rich text mode." msgstr "" "Poniższe skróty są aktywne tylko, gdy okno pisania wiadomości jest w trybie " "tekstu sformatowanego." -#: C/shortcuts.page:149(p) +#: C/shortcuts.page:145(p) msgid "Bold text" msgstr "Pogrubienie tekstu" -#: C/shortcuts.page:153(p) +#: C/shortcuts.page:146(key) C/shortcuts.page:181(key) +msgid "B" +msgstr "B" + +#: C/shortcuts.page:149(p) msgid "Italicize text" msgstr "Pochylenie tekstu" -#: C/shortcuts.page:154(key) +#: C/shortcuts.page:150(key) msgid "I" msgstr "I" -#: C/shortcuts.page:157(p) +#: C/shortcuts.page:153(p) msgid "Underline text" msgstr "Podkreślenie tekstu" -#: C/shortcuts.page:158(key) +#: C/shortcuts.page:154(key) msgid "U" msgstr "U" -#: C/shortcuts.page:161(p) +#: C/shortcuts.page:157(p) msgid "Strike text" msgstr "Przekreślenie tekstu" -#: C/shortcuts.page:162(key) -msgid "K" -msgstr "K" - -#: C/shortcuts.page:165(p) +#: C/shortcuts.page:161(p) msgid "Insert a link" msgstr "Wstawienie odnośnika" -#: C/shortcuts.page:166(key) -msgid "L" -msgstr "L" - -#: C/shortcuts.page:169(p) +#: C/shortcuts.page:165(p) msgid "Remove formatting" msgstr "Usunięcie formatowania" -#: C/shortcuts.page:170(key) +#: C/shortcuts.page:166(key) C/shortcuts.page:186(key) msgid "Space" msgstr "Spacja" +#: C/shortcuts.page:172(title) +msgid "Keyboard navigation" +msgstr "Nawigacja za pomocą klawiatury" + +#: C/shortcuts.page:173(p) +msgid "" +"These shortcuts can be used to move the keyboard focus in the main window." +msgstr "Poniższe skróty mogą być używane do nawigacji w głównym oknie." + +#: C/shortcuts.page:176(p) +msgid "Move focus to the next/previous pane" +msgstr "Przejście do następnego/poprzedniego panelu" + +#: C/shortcuts.page:177(p) +msgid "" +"F6 / ShiftF6" +msgstr "" +"F6/ShiftF6" + +#: C/shortcuts.page:180(p) +msgid "Move focus to conversation list" +msgstr "Przejście do listy wątków" + +#: C/shortcuts.page:184(p) +msgid "Move to the next message in a conversation" +msgstr "Przejście do następnej wiadomości w wątku" + +#: C/shortcuts.page:190(p) +msgid "Move to the next/previous message in a conversation" +msgstr "Przejście do następnej/poprzedniej wiadomości w wątku" + +#: C/shortcuts.page:191(p) +msgid "" +"CtrlDown / CtrlUp" +msgstr "" +"CtrlW dół/CtrlW górę" + +#: C/shortcuts.page:197(p) +msgid "Move to the first/last message in a conversation" +msgstr "Przejście do pierwszej/ostatniej wiadomości w wątku" + +#: C/shortcuts.page:198(p) +msgid "" +"CtrlHome / CtrlEnd" +msgstr "" +"CtrlHome/CtrlEnd" + #: C/search.page:10(title) msgid "Search" msgstr "Wyszukiwanie" @@ -688,6 +728,10 @@ "i do obsługują specjalny parametr ja, który " "wyszukuje własny adres e-mail użytkownika w odpowiednim kontekście." +#: C/preferences.page:10(title) +msgid "Preferences" +msgstr "Preferencje" + #: C/preferences.page:11(p) msgid "" "The Preferences option is available in either Geary's application " @@ -1145,6 +1189,10 @@ "katalogu Kosz na serwerze, gdzie użytkownik może je usuwać. Serwer " "automatycznie usuwa wiadomości z kosza po 30 dniach." +#: C/accounts.page:10(title) +msgid "Accounts" +msgstr "Konta" + #: C/accounts.page:13(title) msgid "Adding accounts" msgstr "Dodawanie kont" diff -Nru geary-0.11.4/help/pt_BR/pt_BR.po geary-0.12.0/help/pt_BR/pt_BR.po --- geary-0.11.4/help/pt_BR/pt_BR.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/help/pt_BR/pt_BR.po 2017-10-02 11:25:21.000000000 +0000 @@ -1,12 +1,12 @@ # Brazilian Portuguese translation for geary. -# Copyright (C) 2016 geary's COPYRIGHT HOLDER +# Copyright 2017 Software Freedom Conservancy Inc. # This file is distributed under the same license as the geary package. -# Rafael Fontenelle , 2016. +# Rafael Fontenelle , 2016, 2017. msgid "" msgstr "" -"Project-Id-Version: geary geary-0.11\n" -"POT-Creation-Date: 2016-06-20 05:18+0000\n" -"PO-Revision-Date: 2016-06-20 07:54-0200\n" +"Project-Id-Version: geary master\n" +"POT-Creation-Date: 2017-09-25 16:02+0000\n" +"PO-Revision-Date: 2017-09-26 19:29-0200\n" "Last-Translator: Rafael Fontenelle \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" @@ -14,13 +14,17 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Virtaal 0.7.1\n" +"X-Generator: Virtaal 1.0.0-beta1\n" #: C/write.page:9(title) msgid "Write a message" msgstr "Escrevendo uma mensagem" -#: C/write.page:12(p) +#: C/write.page:12(title) +msgid "Composing and replying" +msgstr "Composição e resposta" + +#: C/write.page:13(p) msgid "" "To compose a new message in Geary, press the New Message button " "on the toolbar." @@ -28,7 +32,7 @@ "Para compor uma nova mensagem no Geary, pressione o botão Nova " "mensagem na barra de ferramentas." -#: C/write.page:15(p) +#: C/write.page:16(p) msgid "" "To reply to a message, open the message menu in the upper right corner of " "the message and choose Reply, Reply All or " @@ -37,16 +41,16 @@ "on the toolbar." msgstr "" "Para responder a uma mensagem, abra o menu de mensagem no canto direito " -"superior da mensagem e escolha Responder, Responder " -"todos ou Encaminhar. Você também pode responder à última " -"mensagem em uma conversa via os botões Responder, Responder " -"todos ou Encaminhar na barra de ferramentas." +"superior da mensagem e escolha Responder, Responder todos ou Encaminhar. Você também pode responder à última mensagem " +"em uma conversa via os botões Responder, Responder todos ou Encaminhar na barra de ferramentas." -#: C/write.page:20(title) +#: C/write.page:21(title) msgid "Features" msgstr "Recursos" -#: C/write.page:22(p) +#: C/write.page:23(p) msgid "" "Geary's email composer lets you adjust the font, size and color of text. You " "can also insert hyperlinks into messages." @@ -54,7 +58,7 @@ "O compositor de e-mail do Geary permite que você ajuste a fonte, tamanho e " "cor do texto. Você também pode inserir hyperlinks nas mensagens." -#: C/write.page:24(p) +#: C/write.page:25(p) msgid "" "Geary can also send plain text messages. In the drop-down menu, check or " "uncheck \"Rich Text\" to toggle between plain text and rich text mode." @@ -63,14 +67,14 @@ "marque ou desmarque \"Texto rico\" para alternar entre modos texto simples " "ou texto rico." -#: C/write.page:27(p) +#: C/write.page:28(p) msgid "" "You can attach a file to a message you're writing in either of these ways:" msgstr "" "Você pode anexar um arquivo a uma mensagem que você está escrever de duas " "formas:" -#: C/write.page:29(p) +#: C/write.page:30(p) msgid "" "Press the Attach File button at the lower left of the composer " "window, then select a file to attach." @@ -78,7 +82,7 @@ "Pressione o botão Anexar arquivo na esquerda inferior da janela " "do compositor e, então, selecione um arquivo para anexar." -#: C/write.page:31(p) +#: C/write.page:32(p) msgid "" "Drag the file from the Nautilus file manager to the composer window, and " "drop it either on the text fields at the top of the window or on the toolbar " @@ -88,15 +92,15 @@ "então, solte-o nos campos de texto no topo da janela ou na barra de " "ferramentas em baixo." -#: C/write.page:35(p) +#: C/write.page:36(p) msgid "" "A number of keyboard shortcuts are available in the composer; see for details." msgstr "" -"Uma quantidade de teclas de atalho estão disponíveis no compositor; veja <" -"link xref=\"shortcuts#composer\"/> para detalhes." +"Uma quantidade de teclas de atalho estão disponíveis no compositor; veja " +" para detalhes." -#: C/write.page:37(p) +#: C/write.page:38(p) msgid "" "You may specify a signature to be inserted into the composer in the dialog." @@ -104,11 +108,11 @@ "Você pode especificar uma assinatura a ser inserida no compositor no diálogo " "." -#: C/write.page:42(title) +#: C/write.page:43(title) msgid "Drafts" msgstr "Rascunhos" -#: C/write.page:44(p) +#: C/write.page:45(p) msgid "" "For mail servers that support drafts, Geary will automatically save the " "message as you type. If you close the composer without sending, Geary will " @@ -119,7 +123,7 @@ "compositor sem enviar, Geary vai perguntar se deseja manter o rascunho ou " "descartá-lo." -#: C/write.page:47(p) +#: C/write.page:48(p) msgid "" "To edit an existing draft, select the Drafts folder in the folder list, " "select the message, and click \"Edit Draft\" in the message viewer." @@ -128,7 +132,7 @@ "pastas, selecione a mensagem e, então, clique em \"Editar rascunho\" no " "visualizador de mensagem." -#: C/write.page:50(p) +#: C/write.page:51(p) msgid "Geary deletes the draft when you send the message." msgstr "Geary exclui o rascunho quando você envia a mensagem." @@ -261,14 +265,14 @@ "ShiftDelete or ShiftBackspace" msgstr "" -"ShiftDelete ou " -"ShiftBackspace" +"ShiftDelete ou ShiftBackspace" #: C/shortcuts.page:43(p) msgid "Star" msgstr "Marcar estrela" -#: C/shortcuts.page:44(key) C/shortcuts.page:108(key) +#: C/shortcuts.page:44(key) C/shortcuts.page:100(key) msgid "S" msgstr "S" @@ -276,7 +280,7 @@ msgid "Unstar" msgstr "Desmarcar estrela" -#: C/shortcuts.page:48(key) C/shortcuts.page:142(key) +#: C/shortcuts.page:48(key) C/shortcuts.page:138(key) msgid "D" msgstr "D" @@ -289,8 +293,8 @@ "CtrlI or ShiftI" msgstr "" -"CtrlI ou " -"ShiftI" +"CtrlI ou ShiftI" #: C/shortcuts.page:55(p) msgid "Mark unread" @@ -301,56 +305,40 @@ "CtrlU or ShiftU" msgstr "" -"CtrlU ou " -"ShiftU" +"CtrlU ou ShiftU" #: C/shortcuts.page:59(p) -msgid "Move focus to the next/previous pane" -msgstr "Mover o foco ao próximo painel ou ao anterior" +msgid "Move the conversation" +msgstr "Mover a conversação" -#: C/shortcuts.page:60(p) -msgid "" -"F6 / ShiftF6" -msgstr "" -"F6 / " -"ShiftF6" +#: C/shortcuts.page:60(key) +msgid "M" +msgstr "M" #: C/shortcuts.page:63(p) -msgid "Move focus to conversation list" -msgstr "Mover foco para a lista de conversa" +msgid "Label the conversation" +msgstr "Rotular a conversa" -#: C/shortcuts.page:64(key) C/shortcuts.page:80(key) C/shortcuts.page:96(key) -#: C/shortcuts.page:100(key) C/shortcuts.page:104(key) -#: C/shortcuts.page:108(key) C/shortcuts.page:112(key) -#: C/shortcuts.page:116(key) C/shortcuts.page:120(key) -#: C/shortcuts.page:130(key) C/shortcuts.page:134(key) -#: C/shortcuts.page:142(key) C/shortcuts.page:150(key) -#: C/shortcuts.page:154(key) C/shortcuts.page:158(key) -#: C/shortcuts.page:162(key) C/shortcuts.page:166(key) -#: C/shortcuts.page:170(key) -msgid "Ctrl" -msgstr "Ctrl" - -#: C/shortcuts.page:64(key) C/shortcuts.page:150(key) -msgid "B" -msgstr "B" +#: C/shortcuts.page:64(key) C/shortcuts.page:162(key) +msgid "L" +msgstr "L" #: C/shortcuts.page:67(p) msgid "Jump to next (older) conversation" msgstr "Saltar para a próxima (mais antiga) conversa" #: C/shortcuts.page:68(key) -msgid "j" -msgstr "j" +msgid "J" +msgstr "J" #: C/shortcuts.page:71(p) msgid "Jump to previous (newer) conversation" msgstr "Saltar para a conversa anterior (mais nova)" -#: C/shortcuts.page:72(key) -msgid "k" -msgstr "k" +#: C/shortcuts.page:72(key) C/shortcuts.page:158(key) +msgid "K" +msgstr "K" #: C/shortcuts.page:75(p) msgid "Toggle spam" @@ -364,6 +352,17 @@ msgid "Quit" msgstr "Sair" +#: C/shortcuts.page:80(key) C/shortcuts.page:96(key) C/shortcuts.page:100(key) +#: C/shortcuts.page:104(key) C/shortcuts.page:108(key) +#: C/shortcuts.page:112(key) C/shortcuts.page:122(key) +#: C/shortcuts.page:126(key) C/shortcuts.page:130(key) +#: C/shortcuts.page:138(key) C/shortcuts.page:146(key) +#: C/shortcuts.page:150(key) C/shortcuts.page:154(key) +#: C/shortcuts.page:158(key) C/shortcuts.page:162(key) +#: C/shortcuts.page:166(key) C/shortcuts.page:181(key) +msgid "Ctrl" +msgstr "Ctrl" + #: C/shortcuts.page:80(key) msgid "Q" msgstr "Q" @@ -392,142 +391,195 @@ msgid "Ctrl0 or 0" msgstr "Ctrl0 ou 0" -#: C/shortcuts.page:95(p) C/preferences.page:10(title) -msgid "Preferences" -msgstr "Preferências" - -#: C/shortcuts.page:96(key) -msgid "E" -msgstr "E" - -#: C/shortcuts.page:99(p) C/accounts.page:10(title) -msgid "Accounts" -msgstr "Contas" - -#: C/shortcuts.page:100(key) -msgid "M" -msgstr "M" - -#: C/shortcuts.page:103(p) +#: C/shortcuts.page:95(p) msgid "Close composer window" msgstr "Fechar a janela do compositor" -#: C/shortcuts.page:104(key) +#: C/shortcuts.page:96(key) msgid "W" msgstr "W" -#: C/shortcuts.page:107(p) +#: C/shortcuts.page:99(p) msgid "Jump to search box" msgstr "Saltar para a caixa de pesquisa" -#: C/shortcuts.page:111(p) +#: C/shortcuts.page:103(p) msgid "Find in current conversation" msgstr "Localizar na conversa atual" -#: C/shortcuts.page:112(key) +#: C/shortcuts.page:104(key) msgid "F" msgstr "F" -#: C/shortcuts.page:115(p) +#: C/shortcuts.page:107(p) msgid "Find next in current conversation" msgstr "Localizar próximo na conversa atual" -#: C/shortcuts.page:116(key) C/shortcuts.page:120(key) +#: C/shortcuts.page:108(key) C/shortcuts.page:112(key) msgid "G" msgstr "G" -#: C/shortcuts.page:119(p) +#: C/shortcuts.page:111(p) msgid "Find previous in current conversation" msgstr "Localizar anterior na conversa atual" -#: C/shortcuts.page:120(key) +#: C/shortcuts.page:112(key) msgid "Shift" msgstr "Shift" -#: C/shortcuts.page:125(title) +#: C/shortcuts.page:117(title) msgid "Composer shortcuts" msgstr "Atalhos do compositor" -#: C/shortcuts.page:126(p) +#: C/shortcuts.page:118(p) msgid "These shortcuts are active whenever focus is in a composer." msgstr "Esses atalhos estão ativos sem que o foco estiver em um compositor." -#: C/shortcuts.page:129(p) +#: C/shortcuts.page:121(p) +msgid "Attach file" +msgstr "Anexar arquivo" + +#: C/shortcuts.page:122(key) +msgid "T" +msgstr "T" + +#: C/shortcuts.page:125(p) msgid "Quote text" msgstr "Texto citado" -#: C/shortcuts.page:130(key) +#: C/shortcuts.page:126(key) msgid "]" msgstr "]" -#: C/shortcuts.page:133(p) +#: C/shortcuts.page:129(p) msgid "Unquote text" msgstr "Texto não-citado" -#: C/shortcuts.page:134(key) +#: C/shortcuts.page:130(key) msgid "[" msgstr "[" -#: C/shortcuts.page:137(p) +#: C/shortcuts.page:133(p) msgid "Close composer" msgstr "Fechar o compositor" -#: C/shortcuts.page:138(p) +#: C/shortcuts.page:134(p) msgid "CtrlW or Esc" msgstr "CtrlW ou Esc" -#: C/shortcuts.page:141(p) +#: C/shortcuts.page:137(p) msgid "Detach composer" msgstr "Desanexar o compositor" -#: C/shortcuts.page:146(p) +#: C/shortcuts.page:142(p) msgid "These shortcuts are only active in composers in rich text mode." msgstr "Esses atalhos estão ativos apenas em compositores em modo texto rico." -#: C/shortcuts.page:149(p) +#: C/shortcuts.page:145(p) msgid "Bold text" msgstr "Texto em negrito" -#: C/shortcuts.page:153(p) +#: C/shortcuts.page:146(key) C/shortcuts.page:181(key) +msgid "B" +msgstr "B" + +#: C/shortcuts.page:149(p) msgid "Italicize text" msgstr "Texto em itálico" -#: C/shortcuts.page:154(key) +#: C/shortcuts.page:150(key) msgid "I" msgstr "I" -#: C/shortcuts.page:157(p) +#: C/shortcuts.page:153(p) msgid "Underline text" msgstr "Sublinhar o texto" -#: C/shortcuts.page:158(key) +#: C/shortcuts.page:154(key) msgid "U" msgstr "U" -#: C/shortcuts.page:161(p) +#: C/shortcuts.page:157(p) msgid "Strike text" msgstr "Riscar o texto" -#: C/shortcuts.page:162(key) -msgid "K" -msgstr "K" - -#: C/shortcuts.page:165(p) +#: C/shortcuts.page:161(p) msgid "Insert a link" msgstr "Inserir um link" -#: C/shortcuts.page:166(key) -msgid "L" -msgstr "L" - -#: C/shortcuts.page:169(p) +#: C/shortcuts.page:165(p) msgid "Remove formatting" msgstr "Remover formatação" -#: C/shortcuts.page:170(key) +#: C/shortcuts.page:166(key) C/shortcuts.page:186(key) msgid "Space" msgstr "Espaço" +#: C/shortcuts.page:172(title) +msgid "Keyboard navigation" +msgstr "Navegação pelo teclado" + +#: C/shortcuts.page:173(p) +#| msgid "These shortcuts are active whenever focus is in a composer." +msgid "" +"These shortcuts can be used to move the keyboard focus in the main window." +msgstr "" +"Esses atalhos pode ser usados para mover o foco do teclado na janela " +"principal." + +#: C/shortcuts.page:176(p) +msgid "Move focus to the next/previous pane" +msgstr "Mover o foco ao próximo painel ou ao anterior" + +#: C/shortcuts.page:177(p) +msgid "" +"F6 / ShiftF6" +msgstr "" +"F6 / " +"ShiftF6" + +#: C/shortcuts.page:180(p) +msgid "Move focus to conversation list" +msgstr "Mover foco para a lista de conversa" + +#: C/shortcuts.page:184(p) +#| msgid "Move the conversation" +msgid "Move to the next message in a conversation" +msgstr "Mover para a próxima mensagem em uma conversa" + +#: C/shortcuts.page:190(p) +#| msgid "Move focus to the next/previous pane" +msgid "Move to the next/previous message in a conversation" +msgstr "Mover para a mensagem seguinte/anterior em uma conversa" + +#: C/shortcuts.page:191(p) +#| msgid "" +#| "CtrlU or ShiftU" +msgid "" +"CtrlDown / CtrlUp" +msgstr "" +"CtrlDown / " +"CtrlUp" + +#: C/shortcuts.page:197(p) +#| msgid "Move the conversation" +msgid "Move to the first/last message in a conversation" +msgstr "Mover para a primeira/última mensagem em uma conversa" + +#: C/shortcuts.page:198(p) +#| msgid "" +#| "CtrlI or ShiftI" +msgid "" +"CtrlHome / CtrlEnd" +msgstr "" +"CtrlHome / " +"CtrlEnd" + #: C/search.page:10(title) msgid "Search" msgstr "Pesquisando" @@ -550,8 +602,8 @@ "The full text search includes email text, email addresses (to, from, and " "cc), subject lines and attachment filenames." msgstr "" -"A pesquisa completa de texto inclui texto de e-mail, endereços de e-mail (" -"para, de e cc), linhas de assunto e nomes de arquivos de anexos." +"A pesquisa completa de texto inclui texto de e-mail, endereços de e-mail " +"(para, de e cc), linhas de assunto e nomes de arquivos de anexos." #: C/search.page:19(p) msgid "" @@ -561,8 +613,8 @@ msgstr "" "Palavras-chave que correspondem à sua pesquisa são destacadas na visão da " "mensagem. Geary vai corresponder formas diferentes da mesma mensagem; por " -"exemplo, pesquisar por \"caminha\" também retornará \"caminhando\" e \"" -"caminhada.\"" +"exemplo, pesquisar por \"caminha\" também retornará \"caminhando\" e " +"\"caminhada.\"" #: C/search.page:23(title) msgid "Search operators" @@ -585,8 +637,8 @@ #: C/search.page:28(p) msgid "Finds messages with attachments whose name matches filename." msgstr "" -"Localiza mensagens com anexos cujo nome corresponda a nome de " -"arquivo." +"Localiza mensagens com anexos cujo nome corresponda a nome de arquivo." #: C/search.page:31(var) C/search.page:39(var) C/search.page:63(var) msgid "recipient" @@ -690,6 +742,10 @@ "como seu argumento, o qual pesquisa pelo endereço de e-mail da conta no " "contexto apropriado." +#: C/preferences.page:10(title) +msgid "Preferences" +msgstr "Preferências" + #: C/preferences.page:11(p) msgid "" "The Preferences option is available in either Geary's application " @@ -774,7 +830,8 @@ #: C/preferences.page:55(p) msgid "When set, Geary plays a sound whenever a new message arrives." -msgstr "Quando definido, Geary toca um som sempre que uma nova mensagem chegar." +msgstr "" +"Quando definido, Geary toca um som sempre que uma nova mensagem chegar." #: C/preferences.page:58(gui) msgid "Show notifications for new mail" @@ -977,8 +1034,8 @@ "page." msgstr "" "Para saber mais sobre os recursos nos quais estamos trabalhando e o futuro " -"do Geary, por favor visite a página wiki do Geary." +"do Geary, por favor visite a página wiki do Geary." #: C/label.page:10(title) msgid "Label or move a conversation" @@ -1089,8 +1146,8 @@ "product=geary\">bug database to see if someone else has reported the " "bug." msgstr "" -"Pesquise o banco de dados de erros do Geary para ver se alguém já relatou o " +"Pesquise o banco de dados de erros do Geary para ver se alguém já relatou o " "error." #: C/bugs.page:13(p) @@ -1114,9 +1171,8 @@ "For general inquiries, please join the Geary mailing list." msgstr "" -"Para questões genéricas, por favor entre na lista de discussão do " -"Geary." +"Para questões genéricas, por favor entre na lista de discussão do Geary." #: C/archive.page:10(title) msgid "Delete or archive a message" @@ -1128,10 +1184,10 @@ "messages. The Archive toolbar button archives the selected " "conversation(s). Archived messages appear in the All Mail folder." msgstr "" -"Quando você usa o Geary com uma conta do Gmail, Geary permite " -"arquivar mensagens. O botão Arquivar da barra de " -"ferramentas arquiva a conversa selecionada. Mensagens arquivadas aparecem na " -"pasta Todos os e-mails." +"Quando você usa o Geary com uma conta do Gmail, Geary permite arquivar mensagens. O botão Arquivar da barra de ferramentas arquiva a " +"conversa selecionada. Mensagens arquivadas aparecem na pasta Todos os e-" +"mails." #: C/archive.page:16(p) msgid "" @@ -1162,6 +1218,10 @@ "exclui-las. O servidor vai remover automaticamente mensagens da lixeira após " "30 dias." +#: C/accounts.page:10(title) +msgid "Accounts" +msgstr "Contas" + #: C/accounts.page:13(title) msgid "Adding accounts" msgstr "Adicionando contas" @@ -1193,9 +1253,9 @@ "quanto no menu de engrenagens no canto direito superior da barra de " "ferramentas. (A localização depende do shell de ambiente instalado. Para o " "GNOME Shell e Unity, o menu de aplicativo está disponível próximo ao canto " -"superior esquerdo da tela.) Alternativamente, " -"CtrlM vai abrir o diálogo de Contas. " -"Para adicionar uma conta, clique no botão +." +"superior esquerdo da tela.) Alternativamente, CtrlM vai abrir o diálogo de Contas. Para adicionar uma conta, " +"clique no botão +." #: C/accounts.page:28(title) msgid "Editing existing accounts" @@ -1293,4 +1353,19 @@ #. Put one translator per line, in the form of NAME , YEAR1, YEAR2 #: C/accounts.page:0(None) msgid "translator-credits" -msgstr "Rafael Fontenelle , 2016" +msgstr "Rafael Fontenelle , 2016, 2017" + +#~ msgid "Open the Label Conversation menu" +#~ msgstr "Abrir o menu de conversa de rótulo" + +#~ msgid "Open the Move Conversation menu" +#~ msgstr "Abrir o menu de conversa de rótulo" + +#~ msgid "j" +#~ msgstr "j" + +#~ msgid "k" +#~ msgstr "k" + +#~ msgid "E" +#~ msgstr "E" diff -Nru geary-0.11.4/help/sv/sv.po geary-0.12.0/help/sv/sv.po --- geary-0.11.4/help/sv/sv.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/help/sv/sv.po 2017-10-02 11:25:21.000000000 +0000 @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: geary master\n" -"POT-Creation-Date: 2017-09-06 15:41+0000\n" -"PO-Revision-Date: 2017-09-29 10:52+0200\n" +"POT-Creation-Date: 2017-09-28 17:54+0000\n" +"PO-Revision-Date: 2017-09-29 10:55+0200\n" "Last-Translator: Anders Jonsson \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -21,7 +21,11 @@ msgid "Write a message" msgstr "Skriv ett meddelande" -#: C/write.page:12(p) +#: C/write.page:12(title) +msgid "Composing and replying" +msgstr "Skriva meddelanden och svara" + +#: C/write.page:13(p) msgid "" "To compose a new message in Geary, press the New Message button " "on the toolbar." @@ -29,7 +33,7 @@ "För att skapa ett nytt meddelande i Geary, tryck ned knappen Nytt " "meddelande i verktygsfältet." -#: C/write.page:15(p) +#: C/write.page:16(p) msgid "" "To reply to a message, open the message menu in the upper right corner of " "the message and choose Reply, Reply All or " @@ -43,11 +47,11 @@ "en konversation med knapparna Svara, Svara alla eller " "Vidarebefordra i verktygsfältet." -#: C/write.page:20(title) +#: C/write.page:21(title) msgid "Features" msgstr "Egenskaper" -#: C/write.page:22(p) +#: C/write.page:23(p) msgid "" "Geary's email composer lets you adjust the font, size and color of text. You " "can also insert hyperlinks into messages." @@ -55,7 +59,7 @@ "Gearys e-postredigerare låter dig justera en texts typsnitt, storlek och " "färg. Du kan också infoga länkar i meddelanden." -#: C/write.page:24(p) +#: C/write.page:25(p) msgid "" "Geary can also send plain text messages. In the drop-down menu, check or " "uncheck \"Rich Text\" to toggle between plain text and rich text mode." @@ -63,13 +67,13 @@ "Geary kan också skicka vanliga textmeddelanden. I rullgardinsmenyn, kryssa i " "eller av ”Rich text” för att växla mellan lägena vanlig text och rich text." -#: C/write.page:27(p) +#: C/write.page:28(p) msgid "" "You can attach a file to a message you're writing in either of these ways:" msgstr "" "Du kan bifoga en fil med ett meddelande du skriver på ett av dessa sätt:" -#: C/write.page:29(p) +#: C/write.page:30(p) msgid "" "Press the Attach File button at the lower left of the composer " "window, then select a file to attach." @@ -77,7 +81,7 @@ "Tryck ned knappen Bifoga fil längst ned till vänster på " "redigerarfönstret och välj sedan fil att bifoga." -#: C/write.page:31(p) +#: C/write.page:32(p) msgid "" "Drag the file from the Nautilus file manager to the composer window, and " "drop it either on the text fields at the top of the window or on the toolbar " @@ -86,7 +90,7 @@ "Dra filen från Nautilus filhanterare till redigerarfönstret och släpp den, " "antingen på textfälten överst i fönstret eller på verktygsfältet längst ned." -#: C/write.page:35(p) +#: C/write.page:36(p) msgid "" "A number of keyboard shortcuts are available in the composer; see for details." @@ -94,7 +98,7 @@ "Ett antal tangentbordsgenvägar är tillgängliga i redigeraren; se för detaljer." -#: C/write.page:37(p) +#: C/write.page:38(p) msgid "" "You may specify a signature to be inserted into the composer in the dialog." @@ -102,11 +106,11 @@ "Du kan ange en signatur att infoga i redigeraren i dialogen ." -#: C/write.page:42(title) +#: C/write.page:43(title) msgid "Drafts" msgstr "Utkast" -#: C/write.page:44(p) +#: C/write.page:45(p) msgid "" "For mail servers that support drafts, Geary will automatically save the " "message as you type. If you close the composer without sending, Geary will " @@ -116,7 +120,7 @@ "meddelandet allt eftersom du skriver. Om du stänger redigeraren utan att " "skicka det kommer Geary att fråga om utkastet ska behållas eller kastas." -#: C/write.page:47(p) +#: C/write.page:48(p) msgid "" "To edit an existing draft, select the Drafts folder in the folder list, " "select the message, and click \"Edit Draft\" in the message viewer." @@ -124,7 +128,7 @@ "För att redigera ett existerande utkast, välj mappen Utkast i mapplistan, " "välj meddelanden och klicka på ”Redigera utkast” i meddelandevisaren." -#: C/write.page:50(p) +#: C/write.page:51(p) msgid "Geary deletes the draft when you send the message." msgstr "Geary tar bort utkastet när du skickar meddelandet." @@ -264,7 +268,7 @@ msgid "Star" msgstr "Stjärnmärk" -#: C/shortcuts.page:44(key) C/shortcuts.page:108(key) +#: C/shortcuts.page:44(key) C/shortcuts.page:100(key) msgid "S" msgstr "S" @@ -272,7 +276,7 @@ msgid "Unstar" msgstr "Ta bort stjärnmärkning" -#: C/shortcuts.page:48(key) C/shortcuts.page:142(key) +#: C/shortcuts.page:48(key) C/shortcuts.page:138(key) msgid "D" msgstr "D" @@ -301,52 +305,36 @@ "key>U" #: C/shortcuts.page:59(p) -msgid "Move focus to the next/previous pane" -msgstr "Flytta fokus till nästa/föregående panel" +msgid "Move the conversation" +msgstr "Flytta konversationen" -#: C/shortcuts.page:60(p) -msgid "" -"F6 / ShiftF6" -msgstr "" -"F6 / SkiftF6" +#: C/shortcuts.page:60(key) +msgid "M" +msgstr "M" #: C/shortcuts.page:63(p) -msgid "Move focus to conversation list" -msgstr "Flytta fokus till konversationslistan" +msgid "Label the conversation" +msgstr "Lägg till en etikett till konversationen" -#: C/shortcuts.page:64(key) C/shortcuts.page:80(key) C/shortcuts.page:96(key) -#: C/shortcuts.page:100(key) C/shortcuts.page:104(key) -#: C/shortcuts.page:108(key) C/shortcuts.page:112(key) -#: C/shortcuts.page:116(key) C/shortcuts.page:120(key) -#: C/shortcuts.page:130(key) C/shortcuts.page:134(key) -#: C/shortcuts.page:142(key) C/shortcuts.page:150(key) -#: C/shortcuts.page:154(key) C/shortcuts.page:158(key) -#: C/shortcuts.page:162(key) C/shortcuts.page:166(key) -#: C/shortcuts.page:170(key) -msgid "Ctrl" -msgstr "Ctrl" - -#: C/shortcuts.page:64(key) C/shortcuts.page:150(key) -msgid "B" -msgstr "B" +#: C/shortcuts.page:64(key) C/shortcuts.page:162(key) +msgid "L" +msgstr "L" #: C/shortcuts.page:67(p) msgid "Jump to next (older) conversation" msgstr "Hoppa till nästa (äldre) konversation" #: C/shortcuts.page:68(key) -msgid "j" -msgstr "j" +msgid "J" +msgstr "J" #: C/shortcuts.page:71(p) msgid "Jump to previous (newer) conversation" msgstr "Hoppa till föregående (nyare) konversation" -#: C/shortcuts.page:72(key) -msgid "k" -msgstr "k" +#: C/shortcuts.page:72(key) C/shortcuts.page:158(key) +msgid "K" +msgstr "K" #: C/shortcuts.page:75(p) msgid "Toggle spam" @@ -360,6 +348,17 @@ msgid "Quit" msgstr "Avsluta" +#: C/shortcuts.page:80(key) C/shortcuts.page:96(key) C/shortcuts.page:100(key) +#: C/shortcuts.page:104(key) C/shortcuts.page:108(key) +#: C/shortcuts.page:112(key) C/shortcuts.page:122(key) +#: C/shortcuts.page:126(key) C/shortcuts.page:130(key) +#: C/shortcuts.page:138(key) C/shortcuts.page:146(key) +#: C/shortcuts.page:150(key) C/shortcuts.page:154(key) +#: C/shortcuts.page:158(key) C/shortcuts.page:162(key) +#: C/shortcuts.page:166(key) C/shortcuts.page:181(key) +msgid "Ctrl" +msgstr "Ctrl" + #: C/shortcuts.page:80(key) msgid "Q" msgstr "Q" @@ -388,142 +387,185 @@ msgid "Ctrl0 or 0" msgstr "Ctrl0 eller 0" -#: C/shortcuts.page:95(p) C/preferences.page:10(title) -msgid "Preferences" -msgstr "Inställningar" - -#: C/shortcuts.page:96(key) -msgid "E" -msgstr "E" - -#: C/shortcuts.page:99(p) C/accounts.page:10(title) -msgid "Accounts" -msgstr "Konton" - -#: C/shortcuts.page:100(key) -msgid "M" -msgstr "M" - -#: C/shortcuts.page:103(p) +#: C/shortcuts.page:95(p) msgid "Close composer window" msgstr "Stäng redigerarfönstret" -#: C/shortcuts.page:104(key) +#: C/shortcuts.page:96(key) msgid "W" msgstr "W" -#: C/shortcuts.page:107(p) +#: C/shortcuts.page:99(p) msgid "Jump to search box" msgstr "Hoppa till sökfältet" -#: C/shortcuts.page:111(p) +#: C/shortcuts.page:103(p) msgid "Find in current conversation" msgstr "Hitta i aktuell konversation" -#: C/shortcuts.page:112(key) +#: C/shortcuts.page:104(key) msgid "F" msgstr "F" -#: C/shortcuts.page:115(p) +#: C/shortcuts.page:107(p) msgid "Find next in current conversation" msgstr "Hitta nästa i aktuell konversation" -#: C/shortcuts.page:116(key) C/shortcuts.page:120(key) +#: C/shortcuts.page:108(key) C/shortcuts.page:112(key) msgid "G" msgstr "G" -#: C/shortcuts.page:119(p) +#: C/shortcuts.page:111(p) msgid "Find previous in current conversation" msgstr "Hitta föregående i aktuell konversation" -#: C/shortcuts.page:120(key) +#: C/shortcuts.page:112(key) msgid "Shift" msgstr "Skift" -#: C/shortcuts.page:125(title) +#: C/shortcuts.page:117(title) msgid "Composer shortcuts" msgstr "Redigeringsgenvägar" -#: C/shortcuts.page:126(p) +#: C/shortcuts.page:118(p) msgid "These shortcuts are active whenever focus is in a composer." msgstr "Dessa genvägar är aktiva då redigerare har fokus." -#: C/shortcuts.page:129(p) +#: C/shortcuts.page:121(p) +msgid "Attach file" +msgstr "Bifoga fil" + +#: C/shortcuts.page:122(key) +msgid "T" +msgstr "T" + +#: C/shortcuts.page:125(p) msgid "Quote text" msgstr "Citera text" -#: C/shortcuts.page:130(key) +#: C/shortcuts.page:126(key) msgid "]" msgstr "]" -#: C/shortcuts.page:133(p) +#: C/shortcuts.page:129(p) msgid "Unquote text" msgstr "Avcitera text" -#: C/shortcuts.page:134(key) +#: C/shortcuts.page:130(key) msgid "[" msgstr "[" -#: C/shortcuts.page:137(p) +#: C/shortcuts.page:133(p) msgid "Close composer" msgstr "Stäng redigerare" -#: C/shortcuts.page:138(p) +#: C/shortcuts.page:134(p) msgid "CtrlW or Esc" msgstr "CtrlW eller Esc" -#: C/shortcuts.page:141(p) +#: C/shortcuts.page:137(p) msgid "Detach composer" msgstr "Koppla loss redigerare" -#: C/shortcuts.page:146(p) +#: C/shortcuts.page:142(p) msgid "These shortcuts are only active in composers in rich text mode." msgstr "Dessa genvägar är endast aktiva i redigerarens ”rich text”-läge." -#: C/shortcuts.page:149(p) +#: C/shortcuts.page:145(p) msgid "Bold text" msgstr "Fet text" -#: C/shortcuts.page:153(p) +#: C/shortcuts.page:146(key) C/shortcuts.page:181(key) +msgid "B" +msgstr "B" + +#: C/shortcuts.page:149(p) msgid "Italicize text" msgstr "Kursiv text" -#: C/shortcuts.page:154(key) +#: C/shortcuts.page:150(key) msgid "I" msgstr "I" -#: C/shortcuts.page:157(p) +#: C/shortcuts.page:153(p) msgid "Underline text" msgstr "Understruken text" -#: C/shortcuts.page:158(key) +#: C/shortcuts.page:154(key) msgid "U" msgstr "U" -#: C/shortcuts.page:161(p) +#: C/shortcuts.page:157(p) msgid "Strike text" msgstr "Genomstruken text" -#: C/shortcuts.page:162(key) -msgid "K" -msgstr "K" - -#: C/shortcuts.page:165(p) +#: C/shortcuts.page:161(p) msgid "Insert a link" msgstr "Infoga en länk" -#: C/shortcuts.page:166(key) -msgid "L" -msgstr "L" - -#: C/shortcuts.page:169(p) +#: C/shortcuts.page:165(p) msgid "Remove formatting" msgstr "Ta bort formatering" -#: C/shortcuts.page:170(key) +#: C/shortcuts.page:166(key) C/shortcuts.page:186(key) msgid "Space" msgstr "Blanksteg" +#: C/shortcuts.page:172(title) +msgid "Keyboard navigation" +msgstr "Tangentbordsnavigering" + +#: C/shortcuts.page:173(p) +msgid "" +"These shortcuts can be used to move the keyboard focus in the main window." +msgstr "" +"Dessa kortkommandon kan användas för att flytta tangentbordets fokus i " +"huvudfönstret." + +#: C/shortcuts.page:176(p) +msgid "Move focus to the next/previous pane" +msgstr "Flytta fokus till nästa/föregående panel" + +#: C/shortcuts.page:177(p) +msgid "" +"F6 / ShiftF6" +msgstr "" +"F6 / SkiftF6" + +#: C/shortcuts.page:180(p) +msgid "Move focus to conversation list" +msgstr "Flytta fokus till konversationslistan" + +#: C/shortcuts.page:184(p) +msgid "Move to the next message in a conversation" +msgstr "Gå till nästa meddelande i en konversationen" + +#: C/shortcuts.page:190(p) +msgid "Move to the next/previous message in a conversation" +msgstr "Gå till nästa/föregående meddelande i en konversation" + +#: C/shortcuts.page:191(p) +msgid "" +"CtrlDown / CtrlUp" +msgstr "" +"CtrlNed / CtrlUpp" + +#: C/shortcuts.page:197(p) +msgid "Move to the first/last message in a conversation" +msgstr "Gå till första/sista meddelandet i en konversation" + +#: C/shortcuts.page:198(p) +msgid "" +"CtrlHome / CtrlEnd" +msgstr "" +"CtrlHome / CtrlEnd" + #: C/search.page:10(title) msgid "Search" msgstr "Sök" @@ -677,6 +719,10 @@ "input>, from och to att ta mig " "som sitt argument, vilket söker efter kontots e-postadress i sammanhanget." +#: C/preferences.page:10(title) +msgid "Preferences" +msgstr "Inställningar" + #: C/preferences.page:11(p) msgid "" "The Preferences option is available in either Geary's application " @@ -1143,6 +1189,10 @@ "manuellt kan ta bort dem. Servern tar automatiskt bort meddelanden i " "papperskorgen efter 30 dagar." +#: C/accounts.page:10(title) +msgid "Accounts" +msgstr "Konton" + #: C/accounts.page:13(title) msgid "Adding accounts" msgstr "Lägga till konton" @@ -1273,50 +1323,3 @@ #: C/accounts.page:0(None) msgid "translator-credits" msgstr "Josef Andersson , 2017" - -#~ msgid "Move the conversation" -#~ msgstr "Flytta konversationen" - -#~ msgid "Label the conversation" -#~ msgstr "Lägg till en etikett till konversationen" - -#~ msgid "J" -#~ msgstr "J" - -#~ msgid "Attach file" -#~ msgstr "Bifoga fil" - -#~ msgid "T" -#~ msgstr "T" - -#~ msgid "Keyboard navigation" -#~ msgstr "Tangentbordsnavigering" - -#~ msgid "" -#~ "These shortcuts can be used to move the keyboard focus in the main window." -#~ msgstr "" -#~ "Dessa kortkommandon kan användas för att flytta tangentbordets fokus i " -#~ "huvudfönstret." - -#~ msgid "Move to the next message in a conversation" -#~ msgstr "Gå till nästa meddelande i en konversationen" - -#~ msgid "Move to the next/previous message in a conversation" -#~ msgstr "Gå till nästa/föregående meddelande i en konversation" - -#~ msgid "" -#~ "CtrlDown / CtrlUp" -#~ msgstr "" -#~ "CtrlNed / CtrlUpp" - -#~ msgid "Move to the first/last message in a conversation" -#~ msgstr "Gå till första/sista meddelandet i en konversation" - -#~ msgid "" -#~ "CtrlHome / CtrlEnd" -#~ msgstr "" -#~ "CtrlHome / CtrlEnd" diff -Nru geary-0.11.4/icons/CMakeLists.txt geary-0.12.0/icons/CMakeLists.txt --- geary-0.11.4/icons/CMakeLists.txt 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/icons/CMakeLists.txt 2017-10-02 11:25:21.000000000 +0000 @@ -8,22 +8,20 @@ edit-symbolic.svg format-text-remove-symbolic.svg mail-drafts-symbolic.svg - mail-drafts-rtl-symbolic.svg + mail-drafts-symbolic-rtl.svg mail-forward-symbolic.svg - mail-forward-rtl-symbolic.svg + mail-forward-symbolic-rtl.svg mail-inbox-symbolic.svg mail-outbox-symbolic.svg mail-reply-all-symbolic.svg - mail-reply-all-rtl-symbolic.svg + mail-reply-all-symbolic-rtl.svg mail-reply-sender-symbolic.svg - mail-reply-sender-rtl-symbolic.svg + mail-reply-sender-symbolic-rtl.svg mail-sent-symbolic.svg - mail-sent-rtl-symbolic.svg - mail-spam-symbolic.svg - mail-spam-rtl-symbolic.svg + mail-sent-symbolic-rtl.svg marker-symbolic.svg tag-symbolic.svg - tag-rtl-symbolic.svg + tag-symbolic-rtl.svg ) install(FILES ${ICON_FILES} DESTINATION ${ICONS_DEST}) diff -Nru geary-0.11.4/icons/hicolor/symbolic/apps/geary-symbolic.svg geary-0.12.0/icons/hicolor/symbolic/apps/geary-symbolic.svg --- geary-0.11.4/icons/hicolor/symbolic/apps/geary-symbolic.svg 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/icons/hicolor/symbolic/apps/geary-symbolic.svg 2017-10-02 11:25:21.000000000 +0000 @@ -20,22 +20,22 @@ id="defs8572" /> + spacingx="0.25" + spacingy="0.25" + visible="true" + enabled="true" /> @@ -61,7 +63,7 @@ image/svg+xml - + @@ -70,44 +72,54 @@ inkscape:groupmode="layer" id="layer1" transform="translate(0,-1036.3622)"> + + + + + + + + - - - - - - diff -Nru geary-0.11.4/icons/mail-drafts-rtl-symbolic.svg geary-0.12.0/icons/mail-drafts-rtl-symbolic.svg --- geary-0.11.4/icons/mail-drafts-rtl-symbolic.svg 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/icons/mail-drafts-rtl-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,174 +0,0 @@ - - - - - - - - image/svg+xml - - Gnome Symbolic Icon Theme - - - - - - - Gnome Symbolic Icon Theme - - - - - - - - - - - - - - - - - - - - - diff -Nru geary-0.11.4/icons/mail-drafts-symbolic-rtl.svg geary-0.12.0/icons/mail-drafts-symbolic-rtl.svg --- geary-0.11.4/icons/mail-drafts-symbolic-rtl.svg 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/icons/mail-drafts-symbolic-rtl.svg 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,174 @@ + + + + + + + + image/svg+xml + + Gnome Symbolic Icon Theme + + + + + + + Gnome Symbolic Icon Theme + + + + + + + + + + + + + + + + + + + + + diff -Nru geary-0.11.4/icons/mail-forward-rtl-symbolic.svg geary-0.12.0/icons/mail-forward-rtl-symbolic.svg --- geary-0.11.4/icons/mail-forward-rtl-symbolic.svg 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/icons/mail-forward-rtl-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ - -image/svg+xml \ No newline at end of file diff -Nru geary-0.11.4/icons/mail-forward-symbolic-rtl.svg geary-0.12.0/icons/mail-forward-symbolic-rtl.svg --- geary-0.11.4/icons/mail-forward-symbolic-rtl.svg 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/icons/mail-forward-symbolic-rtl.svg 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,47 @@ + +image/svg+xml \ No newline at end of file diff -Nru geary-0.11.4/icons/mail-reply-all-rtl-symbolic.svg geary-0.12.0/icons/mail-reply-all-rtl-symbolic.svg --- geary-0.11.4/icons/mail-reply-all-rtl-symbolic.svg 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/icons/mail-reply-all-rtl-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,53 +0,0 @@ - -image/svg+xml \ No newline at end of file diff -Nru geary-0.11.4/icons/mail-reply-all-symbolic-rtl.svg geary-0.12.0/icons/mail-reply-all-symbolic-rtl.svg --- geary-0.11.4/icons/mail-reply-all-symbolic-rtl.svg 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/icons/mail-reply-all-symbolic-rtl.svg 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,53 @@ + +image/svg+xml \ No newline at end of file diff -Nru geary-0.11.4/icons/mail-reply-sender-rtl-symbolic.svg geary-0.12.0/icons/mail-reply-sender-rtl-symbolic.svg --- geary-0.11.4/icons/mail-reply-sender-rtl-symbolic.svg 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/icons/mail-reply-sender-rtl-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ - -image/svg+xml \ No newline at end of file diff -Nru geary-0.11.4/icons/mail-reply-sender-symbolic-rtl.svg geary-0.12.0/icons/mail-reply-sender-symbolic-rtl.svg --- geary-0.11.4/icons/mail-reply-sender-symbolic-rtl.svg 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/icons/mail-reply-sender-symbolic-rtl.svg 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,47 @@ + +image/svg+xml \ No newline at end of file diff -Nru geary-0.11.4/icons/mail-sent-rtl-symbolic.svg geary-0.12.0/icons/mail-sent-rtl-symbolic.svg --- geary-0.11.4/icons/mail-sent-rtl-symbolic.svg 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/icons/mail-sent-rtl-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,53 +0,0 @@ - -image/svg+xml \ No newline at end of file diff -Nru geary-0.11.4/icons/mail-sent-symbolic-rtl.svg geary-0.12.0/icons/mail-sent-symbolic-rtl.svg --- geary-0.11.4/icons/mail-sent-symbolic-rtl.svg 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/icons/mail-sent-symbolic-rtl.svg 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,53 @@ + +image/svg+xml \ No newline at end of file diff -Nru geary-0.11.4/icons/mail-spam-rtl-symbolic.svg geary-0.12.0/icons/mail-spam-rtl-symbolic.svg --- geary-0.11.4/icons/mail-spam-rtl-symbolic.svg 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/icons/mail-spam-rtl-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,57 +0,0 @@ - -image/svg+xml \ No newline at end of file diff -Nru geary-0.11.4/icons/mail-spam-symbolic.svg geary-0.12.0/icons/mail-spam-symbolic.svg --- geary-0.11.4/icons/mail-spam-symbolic.svg 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/icons/mail-spam-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,52 +0,0 @@ - -image/svg+xml \ No newline at end of file diff -Nru geary-0.11.4/icons/tag-rtl-symbolic.svg geary-0.12.0/icons/tag-rtl-symbolic.svg --- geary-0.11.4/icons/tag-rtl-symbolic.svg 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/icons/tag-rtl-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,55 +0,0 @@ - -image/svg+xml \ No newline at end of file diff -Nru geary-0.11.4/icons/tag-symbolic-rtl.svg geary-0.12.0/icons/tag-symbolic-rtl.svg --- geary-0.11.4/icons/tag-symbolic-rtl.svg 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/icons/tag-symbolic-rtl.svg 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,55 @@ + +image/svg+xml \ No newline at end of file diff -Nru geary-0.11.4/INSTALL geary-0.12.0/INSTALL --- geary-0.11.4/INSTALL 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/INSTALL 2017-10-02 11:25:21.000000000 +0000 @@ -16,9 +16,25 @@ * Dependencies - Building Geary requires Vala 0.22.1 or higher with a full GObject - introspection repository, intltool, cmake, desktop-file-validate, and - xml2po. Vala's vapigen must be installed as well. + Building Geary requires at least the following major libraries: + + * GTK+ version 3.14 + * WebKitGTK+ 2.10 + * Vala 0.26 + + With a full GObject introspection repository, intltool, cmake, + desktop-file-validate, and xml2po. Vala's vapigen must be + installed as well. + + See the file `src/CMakeLists.txt` for the complete list of minimum + version requirements. + + Geary also requires SQLite to be built with the compiler flag + `-DSQLITE_ENABLE_FTS3`. Further, SQLite 3.11.x specifically must + also be built with `-DSQLITE_ENABLE_FTS3_TOKENIZER`. Most + distribution's packages meet these requirements, however Fedora 24 + users and others may be required to rebuild SQLite 3.11 with the + second flag, or install SQLite 3.12 and recompile Geary. The developer packages and headers for the following libraries are also required when building Geary: @@ -33,8 +49,9 @@ * libxml-2.0 * notify * sqlite3 - * webkitgtk-3.0 + * webkit2gtk-4.0 * gcr-3 + * enchant * messaging-menu (optional; enables support for Ubuntu Unity messaging menu) * unity (optional; enables support for Ubuntu Unity launcher) @@ -42,69 +59,44 @@ Most of these are standard libraries available from major distros' package repositories. - Geary requires WebKitGTK-3 1.10 or higher. However, it will not build with - WebKitGTK-3 versions 2.1.1 to 2.1.90.0. See - for details. - - Geary requires SQLite to be built with the compiler flag - `-DSQLITE_ENABLE_FTS3`. Further, SQLite version 3.11.x specifically - must also be built with `-DSQLITE_ENABLE_FTS3_TOKENIZER`. Most - distribution's packages meet these requirements, however Fedora - 24 users and others may be required to rebuild SQLite 3.11 with - the second flag. * Installing dependencies on Fedora - Fedora 20 ships with the correct version of Vala. Install it by running - this command: - - $ sudo yum install vala - - In Fedora versions prior to 20, you must install Vala from source. - Download and install the tarball from - . + Fedora 23 and later ships with the correct versions of the + required libraries. Install them by running this command: - You can install the rest of the build dependencies for Geary in any version - of Fedora by running this command: - - $ sudo yum install gobject-introspection-devel intltool cmake \ + $ sudo dnf install vala gobject-introspection-devel intltool cmake \ desktop-file-utils gnome-doc-utils libcanberra-devel libgee-devel \ glib2-devel gmime-devel gtk3-devel libnotify-devel sqlite-devel \ - unique3-devel webkitgtk3-devel libsecret-devel libxml2-devel \ - vala-tools gcr-devel + webkitgtk4-devel libsecret-devel libxml2-devel vala-tools \ + gcr-devel enchant-devel - * Installing dependencies on Ubuntu + * Installing dependencies on Ubuntu/Debian - Ubuntu 14.04 ships the correct version of Vala. In Ubuntu versions prior - to 14.04, you must add the Vala PPA first by running these commands: + Ubuntu 16.04 LTS (Xenial) and later ships with the correct + versions of the required libraries. - $ sudo add-apt-repository ppa:vala-team/ppa - $ sudo apt-get update + Debian 8 (Jessie) requires stable backports enabled for + WebKitGTK. See for + more information about using stable backports. Later versions + ships with the correct versions of the required libraries. - You can install the build dependencies for Geary in Ubuntu by running this - command: + Install them by running this command: - $ sudo apt-get install valac-0.20 libgirepository1.0-dev intltool \ + $ sudo apt-get install valac libgirepository1.0-dev intltool \ cmake desktop-file-utils gnome-doc-utils libcanberra-dev \ libgee-0.8-dev libglib2.0-dev libgmime-2.6-dev libgtk-3-dev \ libsecret-1-dev libxml2-dev libnotify-dev libsqlite3-dev \ - libunique-3.0-dev libwebkitgtk-3.0-dev libmessaging-menu-dev \ - libunity-dev libgcr-3-dev - - You should check that you are using the right version of valac by running: - - $ valac --version - Vala 0.22.1 + libwebkit2gtk-4.0-dev libgcr-3-dev libenchant-dev - If it reports anything less than 0.22.1, select the correct version when - running: + And for Ubuntu Unity integration: - $ sudo update-alternatives --config valac + $ sudo apt-get install libunity-dev libmessaging-menu-dev - Note that Ubuntu 12.04 does not have all the dependencies to build Geary. - See for details - and instructions. + Ubuntu 14.04 LTS (Trusty) does not have all the dependencies to + build this version Geary. Consier using the Geary 0.11 LTS series + instead. * Running diff -Nru geary-0.11.4/Makefile.in geary-0.12.0/Makefile.in --- geary-0.11.4/Makefile.in 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/Makefile.in 2017-10-02 11:25:21.000000000 +0000 @@ -37,16 +37,23 @@ @-rm -rf $(BUILD_DIR) @-rm -f Makefile +.PHONY: tests +tests: + @$(MAKE) -C $(BUILD_DIR) $@ + +.PHONY: test +test: + @$(MAKE) -C $(BUILD_DIR) tests + .PHONY: dist -dist: +dist: tests @$(MAKE) -C $(BUILD_DIR) dist @cp build/*.xz . .PHONY: ubuntu -ubuntu: +ubuntu: test @$(MAKE) -C $(BUILD_DIR) ubuntu .PHONY: valadoc valadoc: @$(MAKE) -C $(BUILD_DIR) valadoc - diff -Nru geary-0.11.4/NEWS geary-0.12.0/NEWS --- geary-0.11.4/NEWS 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/NEWS 2017-10-02 11:25:21.000000000 +0000 @@ -1,117 +1,98 @@ -Geary 0.11.4 - 2 October 2017 ------------------------------ - - * Crasher fixes (#776139, #776383, #777138) - * Server compatibility fixes (#755424,#776875) - * Bug fixes courtesy of: - Gautier Pelloux-Prayer - Ralph Plawetzki - * UI translations courtesy of: - Anders Jonsson (sv) - Andika Triwidada (id) - Baurzhan Muftakhidinov (kk) - Christian Kirbach (de) - Daniel Mustieles (es) - Inaki Larranaga Murgoitio (eu) - Stas Solovey (ru) - Мирослав Николић (sr) (sr@latin) - * User manual translations courtesy of: - Anders Jonsson (sv) - Josef Andersson (sv) - Mario Blättermann (de) - Piotr Drąg (pl) - -Geary 0.11.3 - 25 December 2016 -------------------------------- - - * Fix drafts not being saved when closing composer (#747627) - - Jiri Cerny, Gautier Pelloux-Prayer - * Fix breaking due to full-text-search table corruption (#772522) - - Gautier Pelloux-Prayer - * Fix Inboxes never being prefetched or sync'ed (#776029) - * Fix composers not being closed when started hidden (#770037) - * Fix password being lost when server rejects connections (#772808) - - Gautier Pelloux-Prayer - * Minor other bug fixes - * Updated UI translations: - Anders Jonsson (sv) - Balázs Meskó (hu) - Dušan Kazik (sk) - Federico Bruni (it) - Marek Černocký (cs) - Mario Blättermann (de) - Piotr Drąg (pl) - Rafael Fontenelle (pt_BR) - Мирослав Николић (sr) (sr@latin) - -Geary 0.11.2 - 29 August 2016 ------------------------------ - - * Improve showing RTL email with no direction set as RTL (#713062) - * Improve composer not showing RTL messages as RTL (#713607) - * Fix crash when archiving, deleting, etc. specific messages (#769010) - * Fix crash from invalid window sizes in settings (#730356) - * Fix crash connecting to tiscali.it/poste.it & other Dovecot (#66509) - * Fix maximised state not being saved (#755359) - * Fix unresponsive after sending long line starting with '>' (#768642) - * Fix warning/crash when unable to contact notification server (#768911) - * Fix using incorrect From address restoring from a draft (#768419) - * Fix format=flowed when sending non-Latin text (#753528) - * Fix encoding problems with non ASCII/Latin-1/UTF-8 headers (#753870) - * Don't double spaces after address autocomplete in composer (#755589) - -- Timo Kluck - * Add Language headers to po files - -- Piotr Drąg - * Don't rely on a the GEdit app icon for the draft folder (#753672) - * Fix a number of edge-case critical warnings/errors - * Updated UI translations: - Andika Triwidada (id) - Balázs Meskó (hu) - Jiri Grönroos (fi) - Marek Černocký (cs) - Piotr Drąg (hi) (hu) (ja) (km) (ms) (nl)(pl) (sl) (sr@latin) - Tiago Santos (pt) - Мирослав Николић (sr) (sr@latin) - * Updated User Guild translations: - Marek Černocký (cs) - Piotr Drąg (pl) - -Geary 0.11.1 - 27 June 2016 ---------------------------- - - * Fix frequent crashes on 32-bit/i686 OS installations (#758621) - * Fix error connecting to certain Outlook.com accounts (#766552) - * Find special folders with lower case names (#748183) - * Find Exchange Sent and Deleted special folders (#748183) - * Don't create Archive folders for GMail accounts (#767259) - * Use HTTPS for accessing Gravatar.com (#766595) - -- Ville Korhonen - * Fix text not show when only plain text and image parts (#767438) - * Fix crash when is:foo is not translated (#766837) - * Make English versions of search ops always work (#766837) - * Allow to:me and from:me to be translated separately (#767291) - * Fix date typo in NEWS - -- Ralph Plawetzki - * Updated UI translations: - Alexandre Franke (fr) - Anders Jonsson (sv) - Andika Triwidada (id) - Daniel Mustieles (es) - Dušan Kazik (sk) - Federico Bruni (it) - Freire de Almeida (pt_BR) - Marek Černocký (cs) - Mario Blättermann (de) - Muhammet Kara (tr) - Piotr Drąg (pl) - Rafael Fontenelle (pt_BR) - Stas Solovey (ru) - Wolfgang Stöggl (de) - * Updated Doc translations: - Daniel Mustieles (es) - Federico Bruni (it) - Piotr Drąg (pl) - Rafael Fontenelle (pt_BR) +Version 0.12 +~~~~~~~~~~~~ +Released: 2017-10-02 + +Enhancements included in this release: + * Insert images inline when composing rich text messages + * Improved interface for inserting links in rich text messages + * Choose multiple spell-checker languages when composing messages + * Support message archiving for Yahoo! Mail and Outlook.com + * Improved interface when displaying conversations + * Improved interface when moving and labelling conversations + * Improved support for right-to-left languages + * Automatically unfold starred messages in a conversation + * Support saving remote inline images + * Improved keyboard navigation for conversations + * Added in-application keyboard shortcut help (Ctrl + ?) + * Support for distribution via Flatpak + * Improved security when displaying messages + * Numerous bug fixes and minor user interface improvements + * Numerous user interface translation updates + +Thanks to all who contributed code fixes and enhancements to this release, in +particular the many first-time contributors: + * Alex Henrie + * Colin Vidal + * Federico Bruni + * Gautier Pelloux-Prayer + * Heiko Becker + * Jeremy Bicha + * Jiri Cerny + * Kacper Bielecki + * Leonardo Robol + * Michael Gratton + * Michael James Gratton + * Niels De Graef + * Oskar Viljasaar + * Piotr Drąg + * Ralph Plawetzki + * Rico Tzschichholz + * Timo Kluck + * Ville Korhonen + * Yosef Or Boczko + +Thanks also to the many that contributed translations, for the user interface: + * Alan Mortensen (da) + * Alexandre Franke (fr) + * Anders Jonsson (sv) + * Andika Triwidada (id) + * Ask Hjorth Larsen (da) + * Aurimas Černius (lt) + * Balázs Meskó (hu) + * Balázs Úr (hu) + * Baurzhan Muftakhidinov (kk) + * Benedikt M. Thoma (de) + * Daniel Korostil (uk) + * Daniel Mustieles (es) + * Daniel Șerbănescu (ro) + * Dušan Kazik (sk) + * Emin Tufan Çetin (tr) + * E T (tr) + * Federico Bruni (it) + * Flo H (de) + * Gábor Kelemen (hu) + * Hannie Dumoleyn (nl) + * hanniedu (nl) + * Jeremy Bicha (bs) + * Jiri Grönroos (fi) + * Jordi Mas (ca) + * Josef Andersson (sv) + * Kjartan Maraas (nb) + * Laudivan Freire de Almeida (pt_BR) + * Marek Černocký (cs) + * Mario Blättermann (de) + * Matej Urbančič (sl) + * Muhammet Kara (tr) + * Piotr Drąg (hi) (hu) (ja) (km) (ms) (pl) (nl) (sl) (sr@latin) + * Rafael Fontenelle (pt_BR) + * Ronan Arraes Jardim Chagas (pt_BR) + * Stas Solovey (ru) + * Tiago Santos (pt) + * Wolfgang Stöggl (de) + * Yosef Or Boczko (he) + * Мирослав Николић (sr) (sr@latin) + +And for the user manual: + * Anders Jonsson (sv) + * Andre Klapper (el) + * Christian Kirbach (de) + * Daniel Mustieles (es) + * Federico Bruni (it) + * Josef Andersson (sv) + * Marek Černocký (cs) + * Mario Blättermann (de) + * Piotr Drąg (pl) + * Rafael Fontenelle (pt_BR) Geary 0.11.0 - 15 May 2016 -------------------------- diff -Nru geary-0.11.4/org.gnome.Geary.json geary-0.12.0/org.gnome.Geary.json --- geary-0.11.4/org.gnome.Geary.json 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/org.gnome.Geary.json 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,113 @@ +/* flatpak-builder config for Geary. */ +{ + "app-id": "org.gnome.Geary", + "runtime": "org.gnome.Platform", + "runtime-version": "3.26", + "sdk": "org.gnome.Sdk", + "command": "geary", + "tags": [], + "rename-icon": "geary", + "copy-icon": true, + "finish-args": [ + /* X11 + XShm access */ + "--share=ipc", "--socket=x11", + + /* Wayland access */ + "--socket=wayland", + + /* OpenGL access for WK2 */ + "--device=dri", + + /* Bus access */ + "--socket=session-bus", + + /* Pulseaudio */ + "--socket=pulseaudio", + + /* Needs to talk to the network: */ + "--share=network", + + /* Notification access */ + "--talk-name=org.freedesktop.Notifications", + + /* Secrets access */ + "--talk-name=org.freedesktop.secrets", + + /* Needed for dconf to work */ + "--filesystem=xdg-run/dconf", "--filesystem=~/.config/dconf:ro", + "--talk-name=ca.desrt.dconf", "--env=DCONF_USER_CONFIG_DIR=.config/dconf", + + /* Let view source keep on working as-sis for now. Bug 779311. */ + "--filesystem=/tmp" + ], + "build-options" : { + "cflags": "-O2 -g", + "cxxflags": "-O2 -g", + "env": { + "V": "1" + } + }, + "cleanup": ["/include", "/lib/pkgconfig", + "/share/pkgconfig", "/share/aclocal", + "/man", "/share/man", "/share/gtk-doc", + "/share/vala", + "*.la", "*.a"], + "modules": [ + { + "name": "gnome-doc-utils", + "build-options": { + "arch" : { + /* Lie about our arch - no actual compilation happens here. */ + "arm": { + "config-opts": [ "--build=amd64" ] + }, + "aarch64": { + "config-opts": [ "--build=amd64" ] + } + } }, + "sources": [ + { + "type": "archive", + "url": "https://download.gnome.org/sources/gnome-doc-utils/0.20/gnome-doc-utils-0.20.10.tar.xz", + "sha256": "cb0639ffa9550b6ddf3b62f3b1add92fb92ab4690d351f2353cffe668be8c4a6" + } + ] + }, + { + "name": "libgee", + "build-options" : { + "env": { + "PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_GIRDIR": "/app/share/gir-1.0", + "PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_TYPELIBDIR": "/app/lib/girepository-1.0" + } + }, + "sources": [ + { + "type": "git", + "url": "https://git.gnome.org/browse/libgee", + "tag": "0.20.0" + } + ] + }, + { + "name": "gmime", + "sources": [ + { + "type": "git", + "url": "https://git.gnome.org/browse/gmime", + "branch": "gmime-2-6" + } + ] + }, + { + "name": "geary", + "sources": [ + { + "type": "git", + "url": "https://git.gnome.org/browse/geary", + "branch": "geary-0.12" + } + ] + } + ] +} diff -Nru geary-0.11.4/po/bs.po geary-0.12.0/po/bs.po --- geary-0.11.4/po/bs.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/bs.po 2017-10-02 11:25:21.000000000 +0000 @@ -1690,7 +1690,7 @@ #: ../ui/composer.glade.h:10 msgid "Link (Ctrl+L)" -msgstr "Veza (Crtl+L)" +msgstr "Veza (Ctrl+L)" #: ../ui/composer.glade.h:11 msgid "C_olor" @@ -1702,7 +1702,7 @@ #: ../ui/composer.glade.h:13 msgid "Quote text (Ctrl+])" -msgstr "Citiraj tekst (Ctrl+J)" +msgstr "Citiraj tekst (Ctrl+])" #: ../ui/composer.glade.h:14 msgid "Unquote text (Ctrl+[)" diff -Nru geary-0.11.4/po/ca.po geary-0.12.0/po/ca.po --- geary-0.11.4/po/ca.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/ca.po 2017-10-02 11:25:21.000000000 +0000 @@ -6,12 +6,16 @@ # Translators: # Alfredo Hernández , 2012 # martin.steghoefer , 2013 +# Gerard Bertran , 2017 +# Jordi Mas i Hernàndez , 2017 +# Jordi Serratosa , 2017. msgid "" msgstr "" "Project-Id-Version: geary-0.4.1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-04-18 15:50+0200\n" -"PO-Revision-Date: 2013-09-20 19:28+0000\n" +"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" +"product=geary&keywords=I18N+L10N&component=internationalization\n" +"POT-Creation-Date: 2017-06-28 17:51+0000\n" +"PO-Revision-Date: 2017-05-28 22:07+0200\n" "Last-Translator: yorbajim \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/geary/language/" "ca/)\n" @@ -20,44 +24,108 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.8.7.1\n" -#: ../desktop/geary.desktop.in.h:1 ../desktop/geary-autostart.desktop.in.h:1 -#, fuzzy +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:1 +#: ../desktop/org.gnome.Geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" -msgstr "Geary Mail" - -#: ../desktop/geary.desktop.in.h:2 ../desktop/geary-autostart.desktop.in.h:2 -#: ../src/client/application/geary-application.vala:18 -msgid "Mail Client" -msgstr "Client de correu" - -#: ../desktop/geary.desktop.in.h:3 ../desktop/geary-autostart.desktop.in.h:3 -msgid "Geary Mail" -msgstr "Geary Mail" +msgstr "Geary " -#: ../desktop/geary.desktop.in.h:4 ../desktop/geary-autostart.desktop.in.h:4 +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:2 +#: ../desktop/org.gnome.Geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 msgid "Send and receive email" msgstr "Envieu i rebeu correus electrònics" -#: ../desktop/geary.desktop.in.h:5 ../desktop/geary-autostart.desktop.in.h:5 -msgid "Email;E-mail;Mail;" +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:3 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"Geary és una aplicació de correu electrònic al voltant de les converses, per " +"a l'escriptori GNOME 3. Permet llegir, trobar i enviar correu electrònic amb " +"una interfície senzilla i moderna." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:4 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"Les converses li permeten llegir una discussió completa sense haver de " +"buscar i fer clic de missatge en missatge." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:5 +msgid "Geary’s features include:" +msgstr "Les característiques de Geary inclouen:" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:6 +msgid "Quick email account setup" +msgstr "Configuració de comptes de correu electrònic" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:7 +msgid "Shows related messages together in conversations" +msgstr "Mostra missatges relacionats junts en converses" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:8 +msgid "Fast, full text and keyword search" +msgstr "Ràpid, text complet i recerca per paraula clau" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:9 +msgid "Full-featured HTML and plain text message composer" +msgstr "HTML amb totes les funcions i redacció de missatge de text" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:10 +msgid "Desktop notification of new mail" +msgstr "Notificació a l'escriptori quan arribi correu nou" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:11 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" msgstr "" +"Compatible amb GMail, Yahoo! Mail, Outlook.com i d'altres servidors IMAP" + +#: ../desktop/org.gnome.Geary.desktop.in.h:2 +msgid "Email" +msgstr "Correu electrònic" + +#: ../desktop/org.gnome.Geary.desktop.in.h:3 +msgid "Geary Email" +msgstr "Client de correu Geary" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/org.gnome.Geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" -#: ../desktop/geary.desktop.in.h:6 +#: ../desktop/org.gnome.Geary.desktop.in.h:7 ../ui/gtk/menus.ui.h:1 msgid "Compose Message" msgstr "Redacta un missatge" +#: ../desktop/geary-autostart.desktop.in.h:2 +#: ../src/client/application/geary-application.vala:21 +msgid "Mail Client" +msgstr "Client de correu" + +#: ../desktop/geary-autostart.desktop.in.h:3 +msgid "Geary Mail" +msgstr "Geary Mail" + +#: ../desktop/geary-autostart.desktop.in.h:5 +msgid "Email;E-mail;Mail;" +msgstr "Email;Correu electrònic;Correu;" + #: ../desktop/geary-attach.contract.in.h:1 -#, fuzzy msgid "Send by email" -msgstr "Envieu i rebeu correus electrònics" +msgstr "Envia per correu electrònic" #: ../desktop/geary-attach.contract.in.h:2 msgid "Send files using Geary" -msgstr "" +msgstr "Enviar fitxers a través de Geary" #: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:31 +#: ../ui/conversation-email-menus.ui.h:10 msgid "_Save" msgstr "De_sa" @@ -67,17 +135,17 @@ msgstr "_Afegeix" #. reset/clear widgets -#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 #, c-format msgid "Additional addresses for %s" -msgstr "" +msgstr "Adreces addicionals per a %s" #. Sets min size. #: ../src/client/accounts/account-dialog.vala:21 msgid "Accounts" msgstr "Comptes" -#. Copyright 2011-2015 Yorba Foundation +#. Copyright 2016 Software Freedom Conservancy Inc. #. * #. * This software is licensed under the GNU Lesser General Public License #. * (version 2.1 or later). See the COPYING file in this distribution. @@ -86,116 +154,128 @@ #. / Placeholder text indicating that the user should type their first name and last name #: ../src/client/accounts/add-edit-page.vala:10 msgid "First Last" -msgstr "" +msgstr "Primer últim" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." msgstr "Benvingut al Geary." -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." msgstr "Introduïu la informació del vostre compte per començar." -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "Fa 2 setmanes" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:254 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "Fa 1 mes" -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "Fa 3 mesos" -#: ../src/client/accounts/add-edit-page.vala:256 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "Fa 6 mesos" -#: ../src/client/accounts/add-edit-page.vala:257 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "Fa 1 any" -#: ../src/client/accounts/add-edit-page.vala:258 -#, fuzzy +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" -msgstr "Fa 1 any" +msgstr "Fa 2 anys" -#: ../src/client/accounts/add-edit-page.vala:259 -#, fuzzy +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" -msgstr "Fa 1 any" +msgstr "Fa 4 anys" #. Separator -#: ../src/client/accounts/add-edit-page.vala:261 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "Tot" -#: ../src/client/accounts/add-edit-page.vala:280 +#: ../src/client/accounts/add-edit-page.vala:283 msgid "Edit" -msgstr "" +msgstr "Edita" -#: ../src/client/accounts/add-edit-page.vala:282 +#: ../src/client/accounts/add-edit-page.vala:285 msgid "Preview" -msgstr "" +msgstr "Previsualització" -#: ../src/client/accounts/add-edit-page.vala:723 +#: ../src/client/accounts/add-edit-page.vala:751 msgid "Remem_ber passwords" -msgstr "" +msgstr "Recorda _contrasenyes" -#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:6 +#: ../src/client/accounts/add-edit-page.vala:758 ../ui/login.glade.h:7 msgid "Remem_ber password" -msgstr "" +msgstr "Recorda la _contrasenya" -#: ../src/client/accounts/add-edit-page.vala:764 +#: ../src/client/accounts/add-edit-page.vala:792 msgid "Unable to validate:\n" msgstr "No s'ha pogut validar:\n" -#: ../src/client/accounts/add-edit-page.vala:766 -msgid " • Invalid account nickname.\n" -msgstr " • Sobrenom del compte invàlid.\n" - -#: ../src/client/accounts/add-edit-page.vala:769 -msgid " • Email address already added to Geary.\n" -msgstr "" - -#: ../src/client/accounts/add-edit-page.vala:773 -msgid " • IMAP connection error.\n" -msgstr " • Error de connexió IMAP.\n" - -#: ../src/client/accounts/add-edit-page.vala:776 -msgid " • IMAP username or password incorrect.\n" -msgstr " • Nom d'usuari o contrasenya d'IMAP incorrecte(s).\n" - -#: ../src/client/accounts/add-edit-page.vala:779 -msgid " • SMTP connection error.\n" -msgstr " • Error de connexió SMTP.\n" - -#: ../src/client/accounts/add-edit-page.vala:782 -msgid " • SMTP username or password incorrect.\n" -msgstr " • Nom d'usuari o contrasenya d'SMTP incorrecte(s).\n" +#: ../src/client/accounts/add-edit-page.vala:794 +msgid " • Invalid account nickname.\n" +msgstr " • Sobrenom de compte no vàlid .\n" + +#: ../src/client/accounts/add-edit-page.vala:797 +msgid " • Email address already added to Geary.\n" +msgstr " • L'adreça de correu electrònic ja s'ha afegit a Geary.\n" + +#: ../src/client/accounts/add-edit-page.vala:801 +msgid " • IMAP connection error.\n" +msgstr " • Error de connexió d'IMAP.\n" + +#: ../src/client/accounts/add-edit-page.vala:804 +msgid " • IMAP username or password incorrect.\n" +msgstr " • Nom d'usuari o contrasenya d'IMAP incorrecte.\n" + +#: ../src/client/accounts/add-edit-page.vala:807 +msgid " • SMTP connection error.\n" +msgstr " • Error de connexió SMTP.\n" + +#: ../src/client/accounts/add-edit-page.vala:810 +msgid " • SMTP username or password incorrect.\n" +msgstr " • Nom d'usuari o contrasenya d'SMTP incorrecte.\n" + +#: ../src/client/accounts/add-edit-page.vala:814 +msgid " • Connection error.\n" +msgstr " • Error de connexió.\n" + +#: ../src/client/accounts/add-edit-page.vala:818 +msgid " • Username or password incorrect.\n" +msgstr " • Nom d'usuari o contrasenya incorrecte.\n" + +#: ../src/client/application/geary-application.vala:22 +msgid "Copyright 2016 Software Freedom Conservancy Inc." +msgstr "Copyright 2016 Software Freedom Conservancy Inc." + +#: ../src/client/application/geary-application.vala:24 +msgid "Visit the Geary web site" +msgstr "Visiteu el lloc web de Geary" -#: ../src/client/accounts/add-edit-page.vala:786 -msgid " • Connection error.\n" -msgstr " • Error de connexió.\n" - -#: ../src/client/accounts/add-edit-page.vala:790 -msgid " • Username or password incorrect.\n" -msgstr " • Nom d'usuari o contrasenya incorrecte(s).\n" - -#: ../src/client/application/geary-application.vala:19 -#, fuzzy -msgid "Copyright 2011-2015 Yorba Foundation" -msgstr "Copyright 2011-2013 Yorba Foundation" +#: ../src/client/application/geary-application.vala:464 +#, c-format +msgid "About %s" +msgstr "Quant al %s" -#: ../src/client/application/geary-application.vala:21 -msgid "Visit the Yorba web site" -msgstr "Visiteu el lloc web de Yorba" +#. Translators: add your name and email address to receive +#. credit in the About dialog For example: Yamada Taro +#. +#: ../src/client/application/geary-application.vala:468 +msgid "translator-credits" +msgstr "" +"Martin Steghöfer , 2013\n" +"Gerard Bertran , 2017\n" +"Jordi Mas i Hernàndez , 2017" #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" -msgstr "" +msgstr "Comença Geary amb la finestra principal oculta" #: ../src/client/application/geary-args.vala:11 msgid "Output debugging information" @@ -207,7 +287,7 @@ #: ../src/client/application/geary-args.vala:13 msgid "Log network deserialization" -msgstr "" +msgstr "Registra la deserialització de xarxa" #: ../src/client/application/geary-args.vala:14 msgid "Log network activity" @@ -244,281 +324,262 @@ #: ../src/client/application/geary-args.vala:26 msgid "Revoke all server certificates with TLS warnings" -msgstr "" +msgstr "Revoca tots els certificats del servidor amb advertències TLS" #: ../src/client/application/geary-args.vala:27 +msgid "Perform a graceful quit" +msgstr "Realitza la sortida amb èxit " + +#: ../src/client/application/geary-args.vala:28 msgid "Display program version" msgstr "Mostra la versió del programa" #. This gives a command-line hint on how to open new composer windows with mailto: -#: ../src/client/application/geary-args.vala:51 +#: ../src/client/application/geary-args.vala:53 #, c-format msgid "Use %s to open a new composer window" -msgstr "" +msgstr "Utilitza %s per obrir una nova finestra de l'editor" -#: ../src/client/application/geary-args.vala:52 +#: ../src/client/application/geary-args.vala:54 msgid "Please report comments, suggestions and bugs to:" -msgstr "Envieu comentaris, suggerències i errors a:" +msgstr "Envieu comentaris, suggeriments i errors a:" #. i18n: Command line arguments are invalid -#: ../src/client/application/geary-args.vala:59 +#: ../src/client/application/geary-args.vala:61 #, c-format msgid "Failed to parse command line options: %s\n" msgstr "No s'han pogut interpretar les opcions de la línia d'ordres: %s\n" -#: ../src/client/application/geary-args.vala:70 +#: ../src/client/application/geary-args.vala:72 #, c-format -msgid "Unrecognized command line option \"%s\"\n" +msgid "Unrecognized command line option “%s”\n" msgstr "Opció de la línia d'ordres no reconeguda «%s»\n" -#: ../src/client/application/geary-controller.vala:62 -#, fuzzy +#: ../src/client/application/geary-controller.vala:57 msgid "Delete conversation" -msgstr "Mou la conversa" +msgstr "Suprimeix la conversa" -#: ../src/client/application/geary-controller.vala:63 -#, fuzzy +#: ../src/client/application/geary-controller.vala:58 msgid "Delete conversation (Shift+Delete)" -msgstr "Esborra la conversa (Suprimir, Retrocés, A)" +msgstr "Suprimeix la conversa (Maj + Supr)" -#: ../src/client/application/geary-controller.vala:64 -#, fuzzy +#: ../src/client/application/geary-controller.vala:59 msgid "Delete conversations (Shift+Delete)" -msgstr "Esborra converses (Suprimir, Retrocés, A)" +msgstr "Suprimeix les converses (Maj + Supr)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:68 -#, fuzzy +#: ../src/client/application/geary-controller.vala:63 msgid "Move conversation to Trash (Delete, Backspace)" -msgstr "Arxiva converses (Suprimir, Retrocés, A)" +msgstr "Mou la conversa a la paperera (Esborrar, Retrocés)" -#: ../src/client/application/geary-controller.vala:69 -#, fuzzy +#: ../src/client/application/geary-controller.vala:64 msgid "Move conversations to Trash (Delete, Backspace)" -msgstr "Arxiva converses (Suprimir, Retrocés, A)" +msgstr "Mou les converses a la paperera (Esborrar, Retrocés)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:68 msgid "_Archive" msgstr "_Arxiva" -#: ../src/client/application/geary-controller.vala:74 -#, fuzzy +#: ../src/client/application/geary-controller.vala:69 msgid "Archive conversation (A)" -msgstr "Mou la conversa" +msgstr "Arxiva la conversa (A)" -#: ../src/client/application/geary-controller.vala:75 -#, fuzzy +#: ../src/client/application/geary-controller.vala:70 msgid "Archive conversations (A)" -msgstr "Mou les converses" +msgstr "Arxiva les converses (A)" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:73 msgid "Mark as S_pam" -msgstr "" +msgstr "Marca com a correu _brossa" -#: ../src/client/application/geary-controller.vala:79 +#: ../src/client/application/geary-controller.vala:74 msgid "Mark as not S_pam" -msgstr "" +msgstr "M_arca com a correu no brossa" -#: ../src/client/application/geary-controller.vala:81 -#: ../src/client/application/geary-controller.vala:397 +#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:448 msgid "Mark conversation" msgstr "Marca la conversa" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark conversations" msgstr "Marca les converses" -#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:78 msgid "Add label to conversation" msgstr "Afegeix etiqueta a la conversa" -#: ../src/client/application/geary-controller.vala:84 +#: ../src/client/application/geary-controller.vala:79 msgid "Add label to conversations" -msgstr "Afegeix etiqueta a converses" +msgstr "Afegeix etiqueta a les converses" -#: ../src/client/application/geary-controller.vala:85 -#: ../src/client/application/geary-controller.vala:436 +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:487 msgid "Move conversation" msgstr "Mou la conversa" -#: ../src/client/application/geary-controller.vala:86 +#: ../src/client/application/geary-controller.vala:81 msgid "Move conversations" msgstr "Mou les converses" -#: ../src/client/application/geary-controller.vala:373 -msgid "A_ccounts" -msgstr "_Comptes" - -#: ../src/client/application/geary-controller.vala:378 -#: ../src/client/components/stock.vala:27 -msgid "_Preferences" -msgstr "_Preferències" - -#: ../src/client/application/geary-controller.vala:382 -#: ../src/client/components/stock.vala:25 -msgid "_Help" -msgstr "A_juda" - -#: ../src/client/application/geary-controller.vala:386 -#: ../src/client/components/stock.vala:21 -msgid "_About" -msgstr "_Quant a" - -#: ../src/client/application/geary-controller.vala:390 -msgid "_Donate" -msgstr "" - -#: ../src/client/application/geary-controller.vala:394 -#: ../src/client/components/stock.vala:29 -msgid "_Quit" -msgstr "_Surt" - -#: ../src/client/application/geary-controller.vala:399 -msgid "_Mark as..." -msgstr "_Marca com a..." +#: ../src/client/application/geary-controller.vala:450 +msgid "_Mark as…" +msgstr "_Marca com..." -#: ../src/client/application/geary-controller.vala:405 +#: ../src/client/application/geary-controller.vala:456 msgid "Mark as _Read" -msgstr "" +msgstr "Ma_rca com a llegit" -#: ../src/client/application/geary-controller.vala:411 +#: ../src/client/application/geary-controller.vala:462 msgid "Mark as _Unread" -msgstr "" +msgstr "Marca com a no _llegit" -#: ../src/client/application/geary-controller.vala:417 +#: ../src/client/application/geary-controller.vala:468 msgid "_Star" msgstr "_Destaca" -#: ../src/client/application/geary-controller.vala:422 +#: ../src/client/application/geary-controller.vala:473 msgid "U_nstar" msgstr "_No destaquis" -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:483 msgid "Add label" -msgstr "" +msgstr "Afegeix etiqueta" -#: ../src/client/application/geary-controller.vala:433 +#: ../src/client/application/geary-controller.vala:484 msgid "_Label" msgstr "_Etiqueta" -#: ../src/client/application/geary-controller.vala:437 +#: ../src/client/application/geary-controller.vala:488 msgid "_Move" msgstr "_Mou" -#: ../src/client/application/geary-controller.vala:441 +#: ../src/client/application/geary-controller.vala:492 msgid "Compose new message (Ctrl+N, N)" -msgstr "" +msgstr "Redacta un nou missatge (Ctrl+N, N)" -#. Reply to a message. -#: ../src/client/application/geary-controller.vala:445 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1857 +#: ../src/client/application/geary-controller.vala:496 +#: ../ui/conversation-email-menus.ui.h:1 msgid "_Reply" msgstr "_Respon" -#: ../src/client/application/geary-controller.vala:446 +#: ../src/client/application/geary-controller.vala:497 msgid "Reply (Ctrl+R, R)" -msgstr "" +msgstr "Respon (Ctrl+R, R)" -#: ../src/client/application/geary-controller.vala:450 +#: ../src/client/application/geary-controller.vala:501 msgid "R_eply All" -msgstr "" +msgstr "R_espon tot" -#: ../src/client/application/geary-controller.vala:451 +#: ../src/client/application/geary-controller.vala:502 msgid "Reply all (Ctrl+Shift+R, Shift+R)" -msgstr "" +msgstr "Respon tot (Ctrl+Maj+R, Maj+R)" -#. Forward a message. -#: ../src/client/application/geary-controller.vala:456 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1867 +#: ../src/client/application/geary-controller.vala:507 +#: ../ui/conversation-email-menus.ui.h:3 msgid "_Forward" msgstr "_Reenvia" -#: ../src/client/application/geary-controller.vala:457 +#: ../src/client/application/geary-controller.vala:508 msgid "Forward (Ctrl+L, F)" -msgstr "" - -#: ../src/client/application/geary-controller.vala:496 -msgid "Empty" -msgstr "" - -#: ../src/client/application/geary-controller.vala:497 -msgid "Empty Spam or Trash folders" -msgstr "" +msgstr "Reenvia (Ctrl+L, F)" -#: ../src/client/application/geary-controller.vala:501 +#: ../src/client/application/geary-controller.vala:538 msgid "Empty _Spam…" -msgstr "" +msgstr "Buida _correu brossa..." -#: ../src/client/application/geary-controller.vala:505 +#: ../src/client/application/geary-controller.vala:542 msgid "Empty _Trash…" -msgstr "" +msgstr "Buida la _paperera..." #. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:538 +#: ../src/client/application/geary-controller.vala:574 msgid "Toggle search bar" -msgstr "" +msgstr "Selecciona la barra de cerca" + +#. No callback is connected, since we bind the toggle button to the find bar visibility +#: ../src/client/application/geary-controller.vala:579 +msgid "Toggle find bar" +msgstr "Selecciona la barra de cerca" -#: ../src/client/application/geary-controller.vala:752 +#: ../src/client/application/geary-controller.vala:757 msgid "Unable to store server trust exception" -msgstr "" +msgstr "No es pot emmagatzemar a excepció de la confiança del servidor" -#: ../src/client/application/geary-controller.vala:989 +#: ../src/client/application/geary-controller.vala:992 msgid "Your settings are insecure" msgstr "La vostra configuració no és segura" -#: ../src/client/application/geary-controller.vala:990 +#: ../src/client/application/geary-controller.vala:993 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " "you sure you want to do this?" msgstr "" -"Els paràmetres IMAP i/o SMTP no especifiquen SSL o TSL. Això vol dir que el " -"vostre nom d'usuari i contrasenya podrien ser llegits per una altra persona " -"de la xarxa. Esteu segur que voleu fer això?" +"Els paràmetres IMAP i/o SMTP no especifiquen SSL o TLS. Això vol dir que el " +"vostre nom d'usuari i la contrasenya podrien ser llegits per una altra " +"persona de la xarxa. Esteu segur que voleu fer això?" -#: ../src/client/application/geary-controller.vala:991 +#: ../src/client/application/geary-controller.vala:994 msgid "Co_ntinue" msgstr "Co_ntinua" +#: ../src/client/application/geary-controller.vala:1041 +msgid "Error connecting to the server" +msgstr "Ha fallat la connexió al servidor" + +#: ../src/client/application/geary-controller.vala:1042 +msgid "" +"Geary encountered an error while connecting to the server. Please try again " +"in a few moments." +msgstr "" +"Geary ha trobat un error en connectar amb el servidor. Si us plau, provi de " +"nou en uns moments." + #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:1069 +#: ../src/client/application/geary-controller.vala:1079 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" -msgstr "" +msgstr "Error en l'enviament de correu electrònic" -#: ../src/client/application/geary-controller.vala:1070 +#: ../src/client/application/geary-controller.vala:1080 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." msgstr "" +"Geary ha detectat un error enviant un correu electrònic. Si el problema " +"persisteix, elimini manualment el correu electrònic de la seva carpeta: " +"Safata de sortida." #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1074 +#: ../src/client/application/geary-controller.vala:1084 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" -msgstr "" +msgstr "Error en desar l'enviament de correu electrònic" -#: ../src/client/application/geary-controller.vala:1075 +#: ../src/client/application/geary-controller.vala:1085 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." msgstr "" +"Geary ha detectat un error en desar un missatge enviat al correu enviat. El " +"missatge romandrà a la carpeta: Bústia de sortida fins que s'elimini." -#: ../src/client/application/geary-controller.vala:1144 +#: ../src/client/application/geary-controller.vala:1154 msgid "Labels" msgstr "Etiquetes" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1156 +#: ../src/client/application/geary-controller.vala:1166 #, c-format msgid "Unable to open the database for %s" -msgstr "" +msgstr "No es pot obrir la base de dades per a %s" -#: ../src/client/application/geary-controller.vala:1157 +#: ../src/client/application/geary-controller.vala:1167 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -531,38 +592,52 @@ "Rebuilding the database will destroy all local email and its attachments. " "The mail on the your server will not be affected." msgstr "" +"Hi ha hagut un error en obrir la base de dades del correu local per a aquest " +"compte. Això és possiblement a causa de la corrupció de la base de dades de " +"fitxer en aquest directori:\n" +"\n" +"%s\n" +"\n" +"Geary pot reconstruir la base de dades i tornar a sincronitzar amb el " +"servidor o sortir.\n" +"\n" +"La reconstrucció de la base de dades va destruir tot el correu local i els " +"seus annexos. El correu al servidor no es veurà afectat." -#: ../src/client/application/geary-controller.vala:1159 +#: ../src/client/application/geary-controller.vala:1169 msgid "_Rebuild" -msgstr "" +msgstr "_Reconstrueix" -#: ../src/client/application/geary-controller.vala:1159 +#: ../src/client/application/geary-controller.vala:1169 msgid "E_xit" -msgstr "" +msgstr "_Surt" -#: ../src/client/application/geary-controller.vala:1168 +#: ../src/client/application/geary-controller.vala:1178 #, c-format -msgid "Unable to rebuild database for \"%s\"" -msgstr "" +msgid "Unable to rebuild database for “%s”" +msgstr "No es pot reconstruir la base de dades de «%s»" -#: ../src/client/application/geary-controller.vala:1169 +#: ../src/client/application/geary-controller.vala:1179 #, c-format msgid "" "Error during rebuild:\n" "\n" "%s" msgstr "" +"Error durant la reconstrucció:\n" +"\n" +"%s" #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1191 #: ../src/client/application/geary-controller.vala:1201 -#: ../src/client/application/geary-controller.vala:1212 +#: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:1222 #, c-format msgid "Unable to open local mailbox for %s" -msgstr "" +msgstr "No es pot obrir la bústia local per a %s" -#: ../src/client/application/geary-controller.vala:1192 +#: ../src/client/application/geary-controller.vala:1202 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -573,46 +648,49 @@ "\n" "%s" msgstr "" +"Hi ha hagut un error en obrir la base de dades de correu local per a aquest " +"compte. Això és possiblement a causa d'un problema de permisos de fitxer.\n" +"\n" +"Comproveu que tingui permís de lectura/escriptura per a tots els fitxers en " +"aquest directori:\n" +"\n" +"%s" -#: ../src/client/application/geary-controller.vala:1202 +#: ../src/client/application/geary-controller.vala:1212 msgid "" "The version number of the local mail database is formatted for a newer " -"version of Geary. Unfortunately, the database cannot be \"rolled back\" to " +"version of Geary. Unfortunately, the database cannot be “rolled back” to " "work with this version of Geary.\n" "\n" "Please install the latest version of Geary and try again." msgstr "" +"El número de versió de la base de dades de correu local està formatada per a " +"una nova versió del Geary. La base de dades no pot ser «desfeta» per " +"treballar amb aquesta versió del Geary.\n" +"\n" +"Instal·la l'última versió del Geary i torna a provar-ho." -#: ../src/client/application/geary-controller.vala:1213 +#: ../src/client/application/geary-controller.vala:1223 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" "\n" "Please check your network connection and restart Geary." msgstr "" +"Hi ha hagut un error en obrir el compte local. Això és probablement a causa " +"de problemes de connectivitat.\n" +"\n" +"Comprovi la seva connexió a la xarxa i reinici el Geary." -#: ../src/client/application/geary-controller.vala:1721 -#, c-format -msgid "About %s" -msgstr "Quant al %s" - -#. / Translators: add your name and email address to receive credit in the About dialog -#. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1724 -msgid "translator-credits" -msgstr "Martin Steghöfer , 2013" - -#: ../src/client/application/geary-controller.vala:1990 -#, fuzzy +#: ../src/client/application/geary-controller.vala:1999 msgid "Undo move (Ctrl+Z)" -msgstr "Subratllat (Ctrl+U)" +msgstr "Desfés el moviment (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2000 -#, c-format -msgid "Are you sure you want to open \"%s\"?" -msgstr "Esteu segur que voleu obrir «%s»?" +#: ../src/client/application/geary-controller.vala:2009 +msgid "Are you sure you want to open these attachments?" +msgstr "Esteu segur que voleu obrir aquests fitxers adjunts?" -#: ../src/client/application/geary-controller.vala:2001 +#: ../src/client/application/geary-controller.vala:2010 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -620,570 +698,497 @@ "Els fitxers adjunts podrien danyar el vostre sistema. Obriu només fitxers de " "fonts fiables." -#: ../src/client/application/geary-controller.vala:2002 -msgid "Don't _ask me again" -msgstr "No m'ho _tornis a preguntar" +#: ../src/client/application/geary-controller.vala:2011 +msgid "Don’t _ask me again" +msgstr "No m'ho tornis a pregunt_ar" -#: ../src/client/application/geary-controller.vala:2020 +#: ../src/client/application/geary-controller.vala:2121 #, c-format -msgid "A file named \"%s\" already exists. Do you want to replace it?" +msgid "A file named “%s” already exists. Do you want to replace it?" msgstr "Ja existeix un fitxer anomenat «%s». Voleu reemplaçar-lo?" -#: ../src/client/application/geary-controller.vala:2022 +#: ../src/client/application/geary-controller.vala:2123 #, c-format msgid "" -"The file already exists in \"%s\". Replacing it will overwrite its contents." +"The file already exists in “%s”. Replacing it will overwrite its contents." msgstr "" "El fitxer ja existeix a «%s». Reemplaçant-lo sobreescriureu el seu contingut." -#: ../src/client/application/geary-controller.vala:2025 +#: ../src/client/application/geary-controller.vala:2126 msgid "_Replace" msgstr "_Reemplaça" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2323 +#: ../src/client/application/geary-controller.vala:2374 msgid "Close open draft messages?" -msgstr "" +msgstr "Tanca els missatges oberts d'esborranys?" -#: ../src/client/application/geary-controller.vala:2453 +#: ../src/client/application/geary-controller.vala:2496 #, c-format msgid "Empty all email from your %s folder?" -msgstr "" +msgstr "Buida tot el correu electrònic de la carpeta %s?" -#: ../src/client/application/geary-controller.vala:2454 +#: ../src/client/application/geary-controller.vala:2497 msgid "This removes the email from Geary and your email server." msgstr "" +"Això elimina el correu electrònic del Geary i el seu servidor de correu " +"electrònic." -#: ../src/client/application/geary-controller.vala:2455 -#, fuzzy +#: ../src/client/application/geary-controller.vala:2498 msgid "This cannot be undone." -msgstr "No s'ha trobat \"%s\"." +msgstr "Això no es pot desfer." -#: ../src/client/application/geary-controller.vala:2456 +#: ../src/client/application/geary-controller.vala:2499 #, c-format msgid "Empty %s" -msgstr "" +msgstr "Buit %s" -#: ../src/client/application/geary-controller.vala:2473 +#: ../src/client/application/geary-controller.vala:2516 #, c-format msgid "Error emptying %s" -msgstr "" +msgstr "Error de buidatge %s" -#: ../src/client/application/geary-controller.vala:2503 -#, fuzzy +#: ../src/client/application/geary-controller.vala:2546 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" -msgstr[0] "Voleu descartar el missatge sense desar?" -msgstr[1] "Voleu descartar el missatge sense desar?" +msgstr[0] "Voleu descartar el missatge permanentment?" +msgstr[1] "Voleu descartar els missatges permanentment?" -#: ../src/client/application/geary-controller.vala:2505 -#, fuzzy +#: ../src/client/application/geary-controller.vala:2548 msgid "Delete" -msgstr "_Suprimeix" +msgstr "_Suprimeix " -#: ../src/client/application/geary-controller.vala:2536 -#, fuzzy +#: ../src/client/application/geary-controller.vala:2580 msgid "Undo archive (Ctrl+Z)" -msgstr "Subratllat (Ctrl+U)" +msgstr "Desfés el fitxer (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2551 -#, fuzzy +#: ../src/client/application/geary-controller.vala:2595 msgid "Undo trash (Ctrl+Z)" -msgstr "Subratllat (Ctrl+U)" +msgstr "Desfés la paperera (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2604 -#, fuzzy +#: ../src/client/application/geary-controller.vala:2649 msgid "Undo (Ctrl+Z)" -msgstr "Subratllat (Ctrl+U)" - -#: ../src/client/components/conversation-find-bar.vala:214 -#, c-format -msgid "%i match" -msgid_plural "%i matches" -msgstr[0] "" -msgstr[1] "" - -#: ../src/client/components/conversation-find-bar.vala:216 -#, c-format -msgid "%i match (wrapped)" -msgid_plural "%i matches (wrapped)" -msgstr[0] "" -msgstr[1] "" +msgstr "Desfés (Ctrl+Z)" -#: ../src/client/components/conversation-find-bar.vala:218 -msgid "not found" -msgstr "" +#: ../src/client/application/geary-controller.vala:2780 +msgid "Failed to open default text editor." +msgstr "No s'ha pogut obrir l'editor de text predeterminat." -#: ../src/client/components/main-window.vala:428 +#: ../src/client/components/main-window.vala:389 #, c-format msgid "%s (%d)" -msgstr "" +msgstr "%s (%d)" -#: ../src/client/components/search-bar.vala:10 +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" -msgstr "" +msgstr "Cerca" #. Search entry. -#: ../src/client/components/search-bar.vala:25 +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" -msgstr "" +msgstr "Cerca tots els missatges en el compte de paraules clau (Ctrl+S)" -#: ../src/client/components/search-bar.vala:118 +#: ../src/client/components/search-bar.vala:100 #, c-format msgid "Indexing %s account" -msgstr "" +msgstr "Compte d'indexació %s" -#: ../src/client/components/search-bar.vala:129 +#: ../src/client/components/search-bar.vala:111 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" -msgstr "" +msgstr "Compte de cerca %s" #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 -msgid "Sending..." -msgstr "" +msgid "Sending…" +msgstr "S'està enviant..." -#: ../src/client/components/stock.vala:18 -#: ../ui/account_cannot_remove.glade.h:3 +#: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 msgid "_OK" -msgstr "" +msgstr "_D'acord" -#: ../src/client/components/stock.vala:19 -#: ../ui/edit_alternate_emails.glade.h:3 ../ui/password-dialog.glade.h:5 -#: ../ui/remove_confirm.glade.h:5 +#: ../src/client/components/stock.vala:19 ../ui/edit_alternate_emails.glade.h:3 +#: ../ui/password-dialog.glade.h:5 ../ui/remove_confirm.glade.h:5 msgid "_Cancel" msgstr "_Cancel·la" +#: ../src/client/components/stock.vala:21 ../ui/gtk/menus.ui.h:6 +msgid "_About" +msgstr "_Quant a" + #: ../src/client/components/stock.vala:23 msgid "_Close" -msgstr "" +msgstr "Tanc_a" #: ../src/client/components/stock.vala:24 msgid "_Discard" -msgstr "" +msgstr "_Descarta" + +#: ../src/client/components/stock.vala:25 ../ui/gtk/menus.ui.h:5 +msgid "_Help" +msgstr "A_juda" -#: ../src/client/components/stock.vala:26 +#: ../src/client/components/stock.vala:26 ../ui/conversation-email-menus.ui.h:9 msgid "_Open" -msgstr "" +msgstr "_Obre" -#: ../src/client/components/stock.vala:28 -msgid "_Print..." -msgstr "" +#: ../src/client/components/stock.vala:27 ../ui/gtk/menus.ui.h:3 +msgid "_Preferences" +msgstr "_Preferències" + +#: ../src/client/components/stock.vala:28 ../ui/conversation-email-menus.ui.h:7 +msgid "_Print…" +msgstr "Im_primeix..." + +#: ../src/client/components/stock.vala:29 ../ui/gtk/menus.ui.h:7 +msgid "_Quit" +msgstr "_Surt" #: ../src/client/components/stock.vala:30 ../ui/remove_confirm.glade.h:6 msgid "_Remove" -msgstr "_Eliminar" +msgstr "_Elimina" -#. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1324 -msgid "Select _All" -msgstr "Selecciona-ho _tot" - -#: ../src/client/components/stock.vala:33 msgid "_Keep" +msgstr "_Mantén" + +#: ../src/client/composer/composer-link-popover.vala:150 +msgid "Link URL is not correctly formatted, e.g. http://example.com" msgstr "" +"L'URL de l'enllaç no té el format correcte, per exemple, http://exemple.com" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid link URL" +msgstr "Enllaç URL no vàlid" -#: ../src/client/composer/composer-widget.vala:73 +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid email address" +msgstr "Adreça de correu electrònic no vàlida" + +#: ../src/client/composer/composer-widget.vala:154 msgid "Saved" -msgstr "" +msgstr "Desat" -#: ../src/client/composer/composer-widget.vala:74 +#: ../src/client/composer/composer-widget.vala:155 msgid "Saving" -msgstr "" +msgstr "S'està desant" -#: ../src/client/composer/composer-widget.vala:75 +#: ../src/client/composer/composer-widget.vala:156 msgid "Error saving" -msgstr "" +msgstr "S'ha produït un error en desar" -#: ../src/client/composer/composer-widget.vala:76 +#: ../src/client/composer/composer-widget.vala:157 msgid "Press Backspace to delete quote" -msgstr "" +msgstr "Premi la tecla Retrocés per a esborrar la cita" -#: ../src/client/composer/composer-widget.vala:77 +#: ../src/client/composer/composer-widget.vala:158 msgid "New Message" msgstr "Missatge nou" -#. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since -#. this is full-word checking, include all variants of each word. No spaces are allowed. -#: ../src/client/composer/composer-widget.vala:138 +#. Translators: This is list of keywords, separated by pipe ("|") +#. characters, that suggest an attachment; since this is full-word +#. checking, include all variants of each word. No spaces are +#. allowed. +#: ../src/client/composer/composer-widget.vala:167 msgid "" "attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" "enclosing|encloses|enclosure|enclosures" msgstr "" +"adjunta|adjuntant|adjuntats|fitxer adjunt|fitxers adjunts|adjuntat|tancar|" +"tancat|tancant|tanca|recinte|recintes" -#: ../src/client/composer/composer-widget.vala:1102 -#: ../src/client/composer/composer-widget.vala:1106 +#: ../src/client/composer/composer-widget.vala:1122 +#: ../src/client/composer/composer-widget.vala:1141 msgid "Do you want to discard this message?" -msgstr "" +msgstr "Vols descartar aquest missatge?" -#: ../src/client/composer/composer-widget.vala:1262 +#: ../src/client/composer/composer-widget.vala:1245 msgid "Send message with an empty subject and body?" -msgstr "" +msgstr "Vols enviar un missatge amb un assumpte buit i el cos?" -#: ../src/client/composer/composer-widget.vala:1264 +#: ../src/client/composer/composer-widget.vala:1247 msgid "Send message with an empty subject?" -msgstr "" +msgstr "Vols enviar un missatge amb un assumpte buit?" -#: ../src/client/composer/composer-widget.vala:1266 +#: ../src/client/composer/composer-widget.vala:1249 msgid "Send message with an empty body?" -msgstr "" +msgstr "Vols enviar un missatge amb un cos buit?" -#: ../src/client/composer/composer-widget.vala:1268 +#: ../src/client/composer/composer-widget.vala:1253 msgid "Send message without an attachment?" -msgstr "" - -#: ../src/client/composer/composer-widget.vala:1530 -msgid "Cannot add attachment" -msgstr "No s'ha pogut adjuntar el fitxer" +msgstr "Vols enviar un missatge sense un fitxer adjunt?" -#: ../src/client/composer/composer-widget.vala:1541 +#: ../src/client/composer/composer-widget.vala:1515 #, c-format -msgid "\"%s\" could not be found." -msgstr "No s'ha trobat \"%s\"." +msgid "“%s” already attached for delivery." +msgstr "«%s» ja està seleccionat com a fitxer adjunt per a l'enviament." -#: ../src/client/composer/composer-widget.vala:1548 +#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" +#. Translators: The first argument will be a +#. description of the document type, the second will +#. be a human-friendly size string. For example: +#. Document (100.9MB) +#: ../src/client/composer/composer-widget.vala:1523 +#: ../src/client/conversation-viewer/conversation-email.vala:138 #, c-format -msgid "\"%s\" is a folder." -msgstr "\"%s\" és un directori." +msgid "%s (%s)" +msgstr "%s (%s)" -#: ../src/client/composer/composer-widget.vala:1555 +#: ../src/client/composer/composer-widget.vala:1560 #, c-format -msgid "\"%s\" is an empty file." -msgstr "\"%s\" és un fitxer buit." +msgid "“%s” could not be found." +msgstr "No es pot conèixer «%s»." -#: ../src/client/composer/composer-widget.vala:1569 +#: ../src/client/composer/composer-widget.vala:1566 #, c-format -msgid "\"%s\" could not be opened for reading." -msgstr "No s'ha pogut obrir \"%s\" per llegir." +msgid "“%s” is a folder." +msgstr "«%s» és una carpeta." -#: ../src/client/composer/composer-widget.vala:1576 +#: ../src/client/composer/composer-widget.vala:1572 #, c-format -msgid "\"%s\" already attached for delivery." -msgstr "\"%s\" ja està seleccionat com a fitxer adjunt." +msgid "“%s” is an empty file." +msgstr "«%s» és un fitxer buit." -#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" #: ../src/client/composer/composer-widget.vala:1585 #, c-format -msgid "%s (%s)" -msgstr "" +msgid "“%s” could not be opened for reading." +msgstr "No s'ha pogut obrir «%s» per llegir." + +#: ../src/client/composer/composer-widget.vala:1593 +msgid "Cannot add attachment" +msgstr "No s'ha pogut afegir el fitxer adjunt" #: ../src/client/composer/composer-widget.vala:1645 -#, fuzzy msgid "To: " -msgstr "Per a: %s\n" +msgstr "Per a:" #: ../src/client/composer/composer-widget.vala:1648 msgid "Cc: " -msgstr "" +msgstr "Cc:" #: ../src/client/composer/composer-widget.vala:1651 -#, fuzzy msgid "Bcc: " msgstr "CCO:" #: ../src/client/composer/composer-widget.vala:1654 -#, fuzzy msgid "Reply-To: " -msgstr "_Respon" +msgstr "_Respon a:" -#: ../src/client/composer/composer-widget.vala:1887 +#: ../src/client/composer/composer-widget.vala:1786 msgid "Select Color" msgstr "Selecciona el color" #. Displayed in the From dropdown to indicate an "alternate email address" #. for an account. The first printf argument will be the alternate email #. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2322 +#: ../src/client/composer/composer-widget.vala:1986 #, c-format msgid "%1$s via %2$s" -msgstr "" +msgstr "%1$s via %2$s" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2364 -#, fuzzy +#: ../src/client/composer/composer-widget.vala:2028 msgid "_From:" -msgstr "De:" +msgstr "_De:" + +#. Translators: This is the name of the file chooser filter +#. when inserting an image in the composer. +#: ../src/client/composer/composer-widget.vala:2252 +msgid "Images" +msgstr "Imatges" + +#: ../src/client/composer/spell-check-popover.vala:117 +msgid "Remove this language from the preferred list" +msgstr "Elimina aquest idioma de la llista preferida" + +#: ../src/client/composer/spell-check-popover.vala:121 +msgid "Add this language to the preferred list" +msgstr "Afegeix aquest idioma a la llista preferida" + +#: ../src/client/composer/spell-check-popover.vala:217 +msgid "Search for more languages" +msgstr "Cerca més idiomes" #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" -msgstr "Jo" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:413 -msgid "No conversations selected." -msgstr "No hi ha cap conversa seleccionada." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:415 -#, fuzzy, c-format -msgid "%u conversation selected." -msgid_plural "%u conversations selected." -msgstr[0] "%u converses seleccionades." -msgstr[1] "%u converses seleccionades." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:444 -msgid "No search results found." -msgstr "" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:446 -msgid "No conversations in folder." -msgstr "" +msgstr "En a mi" -#: ../src/client/conversation-viewer/conversation-viewer.vala:708 -msgid "This message contains remote images." -msgstr "" +#. Translators: This is the file type displayed for +#. attachments with unknown file types. +#: ../src/client/conversation-viewer/conversation-email.vala:124 +msgid "Unknown" +msgstr "Desconegut" + +#. Preview headers +#. Translators: This is displayed in place of the from address +#. when the message has no from address. +#: ../src/client/conversation-viewer/conversation-message.vala:331 +msgid "No sender" +msgstr "Sense remitent" + +#. Translators: This separates multiple 'from' +#. addresses in the header preview for a message. +#: ../src/client/conversation-viewer/conversation-message.vala:586 +msgid ", " +msgstr "," + +#. Translators: This string is used as the HTML IMG ALT +#. attribute value when displaying an inline image in an email +#. that did not specify a file name. E.g. ImageCannot remove account " @@ -1584,15 +1725,15 @@ #: ../ui/account_list.glade.h:1 msgid "Add account" -msgstr "" +msgstr "Afegeix compte" #: ../ui/account_list.glade.h:2 msgid "Edit account" -msgstr "" +msgstr "Edita compte" #: ../ui/account_list.glade.h:3 msgid "Remove account" -msgstr "" +msgstr "Elimina compte" #: ../ui/account_spinner.glade.h:1 msgid "Please wait while Geary validates your account." @@ -1600,515 +1741,898 @@ #: ../ui/certificate_warning_dialog.glade.h:1 msgid "Untrusted Connection" -msgstr "" +msgstr "Connexió no fiable" #: ../ui/certificate_warning_dialog.glade.h:2 msgid "_Always Trust This Server" -msgstr "" +msgstr "Sempre confi_a en aquest servidor" #: ../ui/certificate_warning_dialog.glade.h:3 msgid "_Trust This Server" -msgstr "" +msgstr "Confia en aques_t servidor" #: ../ui/certificate_warning_dialog.glade.h:4 -msgid "_Don't Trust This Server" -msgstr "" +msgid "_Don’t Trust This Server" +msgstr "No confiï aquest servi_dor" -#: ../ui/composer.glade.h:1 -msgid "_Undo" -msgstr "" +#: ../ui/composer-headerbar.ui.h:1 +msgid "Detach (Ctrl+D)" +msgstr "Separa (Ctrl+D)" -#: ../ui/composer.glade.h:2 -msgid "_Redo" -msgstr "" +#: ../ui/composer-headerbar.ui.h:2 +msgid "Attach File (Ctrl+T)" +msgstr "Adjunta fitxer (Ctrl+T)" -#: ../ui/composer.glade.h:3 -msgid "Cu_t" -msgstr "" +#: ../ui/composer-headerbar.ui.h:3 +msgid "Include Original Attachments" +msgstr "Inclou fitxers adjunts originals" -#: ../ui/composer.glade.h:5 -msgid "_Paste" -msgstr "" +#: ../ui/composer-headerbar.ui.h:4 +msgid "Send (Ctrl+Enter)" +msgstr "Envia (Ctrl+Enter)" + +#: ../ui/composer-headerbar.ui.h:5 +msgid "_Send" +msgstr "_Envia" -#: ../ui/composer.glade.h:6 -msgid "_Left" -msgstr "_Esquerra" - -#: ../ui/composer.glade.h:7 -msgid "_Right" -msgstr "_Dreta" - -#: ../ui/composer.glade.h:8 -msgid "_Center" -msgstr "_Centrat" - -#: ../ui/composer.glade.h:9 -msgid "_Justify" -msgstr "_Justificat" - -#: ../ui/composer.glade.h:10 -msgid "Link (Ctrl+L)" -msgstr "Enllaç (Ctrl+L)" +#: ../ui/composer-headerbar.ui.h:6 +msgid "Discard and Close" +msgstr "Descarta i tanca" + +#: ../ui/composer-headerbar.ui.h:7 +msgid "Save and Close" +msgstr "Desa i tanca" + +#. Note that this button and the Update button will never be shown at the same time to the user. +#: ../ui/composer-link-popover.ui.h:2 +msgid "Insert the new link with this URL" +msgstr "Insereix el nou enllaç amb aquesta URL" + +#: ../ui/composer-link-popover.ui.h:3 +msgid "Link URL" +msgstr "Enllaç URL" + +#. Note that this button and the Insert button will never be shown at the same time to the user. +#: ../ui/composer-link-popover.ui.h:5 +msgid "Update this link’s URL" +msgstr "Actualitza l'URL d'aquest enllaç" + +#: ../ui/composer-link-popover.ui.h:6 +msgid "Delete this link" +msgstr "Suprimeix aquest enllaç" + +#: ../ui/composer-link-popover.ui.h:7 +msgid "Open this link" +msgstr "Obre aquest enllaç" -#: ../ui/composer.glade.h:11 +#: ../ui/composer-menus.ui.h:1 +msgid "S_ans Serif" +msgstr "S_ans Serif" + +#: ../ui/composer-menus.ui.h:2 +msgid "S_erif" +msgstr "S_erif" + +#: ../ui/composer-menus.ui.h:3 +msgid "_Fixed Width" +msgstr "Ample _Fix" + +#: ../ui/composer-menus.ui.h:4 +msgid "_Small" +msgstr "_Petit" + +#: ../ui/composer-menus.ui.h:5 +msgid "_Medium" +msgstr "_Mitjà" + +#: ../ui/composer-menus.ui.h:6 +msgid "Lar_ge" +msgstr "_Gran" + +#: ../ui/composer-menus.ui.h:7 msgid "C_olor" msgstr "C_olor" -#: ../ui/composer.glade.h:12 -msgid "More options" -msgstr "" +#: ../ui/composer-menus.ui.h:8 +msgid "_Rich Text" +msgstr "Text en_riquit" -#: ../ui/composer.glade.h:13 -msgid "Quote text (Ctrl+])" -msgstr "" +#: ../ui/composer-menus.ui.h:9 +msgid "Show Extended Fields" +msgstr "Mostra camps estesos" -#: ../ui/composer.glade.h:14 -msgid "Unquote text (Ctrl+[)" -msgstr "" +#: ../ui/composer-menus.ui.h:10 +msgid "_Undo" +msgstr "_Desfés" + +#: ../ui/composer-menus.ui.h:11 +msgid "_Redo" +msgstr "_Refés" -#: ../ui/composer.glade.h:15 -msgid "Remove formatting (Ctrl+Space)" -msgstr "Suprimeix la formatació (Ctrl+Espai)" +#: ../ui/composer-menus.ui.h:12 +msgid "Cu_t" +msgstr "_Talla" + +#: ../ui/composer-menus.ui.h:13 ../ui/conversation-message-menus.ui.h:7 +msgid "_Copy" +msgstr "_Copia" -#: ../ui/composer.glade.h:16 +#: ../ui/composer-menus.ui.h:14 +msgid "_Paste" +msgstr "_Enganxa" + +#: ../ui/composer-menus.ui.h:15 msgctxt "Clipboard paste with rich text" msgid "Paste _With Formatting" -msgstr "" +msgstr "_Enganxa amb format" -#: ../ui/composer.glade.h:18 -msgid "Bold (Ctrl+B)" -msgstr "Negreta (Ctrl+B)" +#: ../ui/composer-menus.ui.h:16 +msgid "Select _All" +msgstr "Seleccion_a-ho tot" -#: ../ui/composer.glade.h:19 -msgid "Italic (Ctrl+I)" -msgstr "Cursiva (Ctrl+I)" +#: ../ui/composer-menus.ui.h:17 ../ui/conversation-message-menus.ui.h:9 +msgid "_Inspect…" +msgstr "_Inspecciona..." -#: ../ui/composer.glade.h:20 -msgid "Underline (Ctrl+U)" -msgstr "Subratllat (Ctrl+U)" +#. Address(es) e-mail is to be sent to +#: ../ui/composer-widget.ui.h:2 +msgid "_To" +msgstr "_Per a" -#: ../ui/composer.glade.h:21 -msgid "Strikethrough (Ctrl+K)" -msgstr "Barrat (Ctrl+K)" +#: ../ui/composer-widget.ui.h:3 +msgid "_Cc" +msgstr "_Cc" -#: ../ui/composer.glade.h:22 -msgid "_Rich Text" -msgstr "" +#: ../ui/composer-widget.ui.h:4 +msgid "_Subject" +msgstr "A_ssumpte" -#: ../ui/composer.glade.h:23 -msgid "Show Extended Fields" -msgstr "" +#: ../ui/composer-widget.ui.h:5 +msgid "_Bcc" +msgstr "_Bcc" -#: ../ui/composer.glade.h:24 -msgctxt "Label" -msgid "Close and Save" -msgstr "" +#: ../ui/composer-widget.ui.h:6 +msgid "_Reply-To" +msgstr "_Respon a" -#: ../ui/composer.glade.h:25 -msgctxt "Short Label" -msgid "Close and Save" -msgstr "" +#. Geary account mail will be sent from +#: ../ui/composer-widget.ui.h:8 +msgid "From" +msgstr "De" -#: ../ui/composer.glade.h:26 -msgctxt "Tooltip" -msgid "Close and Save" -msgstr "" +#: ../ui/composer-widget.ui.h:9 +msgid "Drop files here" +msgstr "Deixeu anar els fitxers aquí" -#: ../ui/composer.glade.h:27 -msgctxt "Label" -msgid "Close and Discard" -msgstr "" +#: ../ui/composer-widget.ui.h:10 +msgid "To add them as attachments" +msgstr "Per afegir-los com a fitxers adjunts" -#: ../ui/composer.glade.h:28 -msgctxt "Short Label" -msgid "Close and Discard" -msgstr "" +#: ../ui/composer-widget.ui.h:11 +msgid "Undo last edit (Ctrl+Z)" +msgstr "Desfés l'última edició (Ctrl+Z)" -#: ../ui/composer.glade.h:29 -msgctxt "Tooltip" -msgid "Close and Discard" -msgstr "" +#: ../ui/composer-widget.ui.h:12 +msgid "Redo last edit (Ctrl+Shift+Z)" +msgstr "Refés l'última edició (Ctrl+Maj+Z)" -#: ../ui/composer.glade.h:30 -msgid "Lar_ge" -msgstr "" +#: ../ui/composer-widget.ui.h:13 +msgid "Bold (Ctrl+B)" +msgstr "Negreta (Ctrl+B)" -#: ../ui/composer.glade.h:31 -msgid "Large" -msgstr "Gran" +#: ../ui/composer-widget.ui.h:14 +msgid "Italic (Ctrl+I)" +msgstr "Cursiva (Ctrl+I)" -#: ../ui/composer.glade.h:32 -msgid "_Medium" -msgstr "" +#: ../ui/composer-widget.ui.h:15 +msgid "Underline (Ctrl+U)" +msgstr "Subratllat (Ctrl+U)" -#: ../ui/composer.glade.h:33 -msgid "Medium" -msgstr "Mitjà" +#: ../ui/composer-widget.ui.h:16 +msgid "Strikethrough (Ctrl+K)" +msgstr "Barrat (Ctrl+K)" -#: ../ui/composer.glade.h:34 -msgid "_Small" -msgstr "" +#: ../ui/composer-widget.ui.h:17 +msgid "Quote text (Ctrl+])" +msgstr "Cita de text (Ctrl+])" -#: ../ui/composer.glade.h:35 -msgid "Small" -msgstr "Petit" +#: ../ui/composer-widget.ui.h:18 +msgid "Unquote text (Ctrl+[)" +msgstr "Fi de la cita de text (Ctrl+[)" + +#: ../ui/composer-widget.ui.h:19 +msgid "Insert or update selection link (Ctrl+L)" +msgstr "Insereix o actualitza l'enllaç de la selecció (Ctrl+L)" + +#: ../ui/composer-widget.ui.h:20 +msgid "Insert an image (Ctrl+G)" +msgstr "Insereix una imatge (Ctrl+G)" + +#: ../ui/composer-widget.ui.h:21 +msgid "Remove selection formatting (Ctrl+Space)" +msgstr "Suprimeix la selecció del format (Ctrl+Espai)" + +#: ../ui/composer-widget.ui.h:22 +msgid "Select spell checking languages" +msgstr "Seleccioneu els idiomes de la correcció ortogràfica" + +#: ../ui/conversation-email.ui.h:1 +msgid "Save all attachments" +msgstr "Desa tots els fitxers adjunts" + +#. Note: The application will never show this button at the same time as unstar_button, one will always be hidden. +#: ../ui/conversation-email.ui.h:3 +msgid "Mark this message as starred" +msgstr "Marca aquest missatge com a destacat" + +#. Note: The application will never show this button at the same time as star_button, one will always be hidden. +#: ../ui/conversation-email.ui.h:5 +msgid "Mark this message as not starred" +msgstr "Marca aquest missatge com a no destacat" + +#: ../ui/conversation-email.ui.h:6 +msgid "Display the message menu" +msgstr "Mostra el missatge del menú" + +#: ../ui/conversation-email.ui.h:7 +msgid "Open selected attachments" +msgstr "Obre els fitxers adjunts seleccionats" + +#: ../ui/conversation-email.ui.h:8 +msgid "Save selected attachments" +msgstr "Desa els fitxers adjunts seleccionats" + +#: ../ui/conversation-email.ui.h:9 +msgid "Select all attachments" +msgstr "Selecciona tots els fitxers adjunts" -#: ../ui/composer.glade.h:36 -msgid "S_ans Serif" -msgstr "" +#: ../ui/conversation-email.ui.h:10 +msgid "Edit Draft" +msgstr "Edita l'Esborrany" -#: ../ui/composer.glade.h:37 -msgid "Sans Serif" -msgstr "Sans Serif" +#: ../ui/conversation-email.ui.h:11 +msgid "Draft message" +msgstr "Missatge de l'esborrany" -#: ../ui/composer.glade.h:38 -msgid "S_erif" -msgstr "" +#: ../ui/conversation-email.ui.h:12 +msgid "This message has not yet been sent." +msgstr "Aquest missatge no s'ha enviat." -#: ../ui/composer.glade.h:39 -msgid "Serif" -msgstr "Serif" +#: ../ui/conversation-email.ui.h:13 +msgid "Try Again" +msgstr "Torna a provar" -#: ../ui/composer.glade.h:40 -msgid "_Fixed Width" -msgstr "" +#: ../ui/conversation-email.ui.h:14 +msgid "Message not saved" +msgstr "Missatge no desat" -#: ../ui/composer.glade.h:41 -msgid "Fixed Width" -msgstr "" +#: ../ui/conversation-email.ui.h:15 +msgid "This message was sent, but has not been saved to your account." +msgstr "Aquest missatge s'ha enviat, però no s'ha desat en el seu compte." -#: ../ui/composer.glade.h:42 -#, fuzzy -msgid "Detach" -msgstr "_Adjunta" +#: ../ui/conversation-email-menus.ui.h:2 +msgid "Reply to _All" +msgstr "Respon _a tots" -#: ../ui/composer.glade.h:43 -#, fuzzy -msgid "Detach (Ctrl+D)" -msgstr "Cursiva (Ctrl+I)" +#: ../ui/conversation-email-menus.ui.h:4 +msgid "_Mark Read" +msgstr "_Marca com a llegit" -#: ../ui/composer.glade.h:44 -msgid "_Send" -msgstr "_Envia" +#: ../ui/conversation-email-menus.ui.h:5 +msgid "_Mark Unread" +msgstr "_Marca com a no llegit" -#: ../ui/composer.glade.h:45 -#, fuzzy -msgid "Send" -msgstr "_Envia" +#: ../ui/conversation-email-menus.ui.h:6 +msgid "Mark Unread From _Here" +msgstr "Marca com a no llegit des _d'aquí" -#: ../ui/composer.glade.h:46 -#, fuzzy -msgid "Send (Ctrl+Enter)" -msgstr "Negreta (Ctrl+B)" +#: ../ui/conversation-email-menus.ui.h:8 +msgid "_View Source" +msgstr "_Visualitza la font" -#: ../ui/composer.glade.h:47 -msgid "_Attach File" -msgstr "_Adjunta fitxer" +#: ../ui/conversation-email-menus.ui.h:11 +msgid "_Save All" +msgstr "De_sa-ho tot" + +#: ../ui/conversation-message-menus.ui.h:1 +msgid "_Open Link" +msgstr "_Obre l'enllaç" + +#: ../ui/conversation-message-menus.ui.h:2 +msgid "Copy Link _Address" +msgstr "Copi_a l'enllaç de l'adreça electrònica" + +#: ../ui/conversation-message-menus.ui.h:3 +msgid "Send New _Message…" +msgstr "_Envia el correu nou..." + +#: ../ui/conversation-message-menus.ui.h:4 +msgid "Copy Email _Address" +msgstr "_Copia l'adreça del correu electrònic" + +#: ../ui/conversation-message-menus.ui.h:5 +msgid "Save _Image As…" +msgstr "Desa la _imatge com..." + +#: ../ui/conversation-message-menus.ui.h:6 +msgid "_Select All" +msgstr "_Selecciona-ho tot" + +#: ../ui/conversation-message-menus.ui.h:8 +msgid "Search for messages from" +msgstr "Cerca els missatges de" + +#: ../ui/conversation-message.ui.h:1 +msgid "From " +msgstr "De " + +#: ../ui/conversation-message.ui.h:2 +msgid "1/1/1970\t" +msgstr "1/1/1970\t" + +#: ../ui/conversation-message.ui.h:3 +msgid "Preview body text." +msgstr "Previsualització del cos del text." + +#: ../ui/conversation-message.ui.h:4 +msgid "Sent by:" +msgstr "Enviat per:" + +#: ../ui/conversation-message.ui.h:5 +msgid "Reply to:" +msgstr "Respon a:" + +#: ../ui/conversation-message.ui.h:6 +msgid "Subject" +msgstr "Assumpte" -#: ../ui/composer.glade.h:48 -#, fuzzy -msgid "Attach File" -msgstr "_Adjunta fitxer" +#: ../ui/conversation-message.ui.h:7 +msgid "To:" +msgstr "Per a:" -#: ../ui/composer.glade.h:49 -msgid "_Include Original Attachments" -msgstr "" +#: ../ui/conversation-message.ui.h:8 +msgid "Cc:" +msgstr "Cc:" -#: ../ui/composer.glade.h:50 -msgid "Include Original Attachments" -msgstr "" +#: ../ui/conversation-message.ui.h:9 +msgid "Bcc:" +msgstr "CCO:" -#: ../ui/composer.glade.h:51 -msgid "Application Menu" -msgstr "" +#: ../ui/conversation-message.ui.h:10 +msgid "Show Images" +msgstr "Mostra les imatges" -#. Address(es) e-mail is to be sent to -#: ../ui/composer.glade.h:53 -#, fuzzy -msgid "_To" -msgstr "Per a:" +#: ../ui/conversation-message.ui.h:11 +msgid "Always Show From Sender" +msgstr "Mostra sempre del remitent" -#: ../ui/composer.glade.h:54 -#, fuzzy -msgid "_Cc" -msgstr "CC:" +#: ../ui/conversation-message.ui.h:12 +msgid "Remote images not shown" +msgstr "Les imatges remotes no es mostren" -#: ../ui/composer.glade.h:55 -#, fuzzy -msgid "_Subject" -msgstr "Assumpte:" +#: ../ui/conversation-message.ui.h:13 +msgid "Only show remote images from senders you trust." +msgstr "Només es mostren les imatges remotes de remitents de confiança." -#: ../ui/composer.glade.h:56 -msgid "_Bcc" +#: ../ui/conversation-message.ui.h:14 +msgid "But actually goes to:" +msgstr "Però en realitat va a:" + +#: ../ui/conversation-message.ui.h:15 +msgid "The link appears to go to:" +msgstr "L'enllaç apareix a l'anar a:" + +#: ../ui/conversation-message.ui.h:16 +msgid "Deceptive link found" +msgstr "L'enllaç trobat és enganyós" + +#: ../ui/conversation-message.ui.h:17 +msgid "The email sender may be leading you to the wrong web site." msgstr "" +"El remitent de correu electrònic pot ser que et condueixi a un lloc web " +"maliciós." -#: ../ui/composer.glade.h:57 -#, fuzzy -msgid "_Reply-To" -msgstr "_Respon" +#: ../ui/conversation-message.ui.h:18 +msgid "If unsure, contact the sender and ask before continuing." +msgstr "" +"Si no esteu segur, poseu-vos en contacte amb el remitent i preguntar abans " +"de continuar." -#. Geary account mail will be sent from -#: ../ui/composer.glade.h:59 -#, fuzzy -msgid "From" -msgstr "De:" +#: ../ui/conversation-viewer.ui.h:1 +msgid "Find in conversation" +msgstr "Troba en la conversa" -#: ../ui/composer.glade.h:60 -msgid "Drop files here" -msgstr "Deixeu anar els fitxers aquí" +#: ../ui/conversation-viewer.ui.h:2 +msgid "Find the previous occurrence of the search string." +msgstr "Troba l'aparició anterior de la cadena de cerca." -#: ../ui/composer.glade.h:61 -msgid "To add them as attachments" -msgstr "Per afegir-los com a adjunts" +#: ../ui/conversation-viewer.ui.h:3 +msgid "Find the next occurrence of the search string." +msgstr "Troba la següent aparició de la cadena de cerca." #: ../ui/edit_alternate_emails.glade.h:1 -#, fuzzy msgid "Remove email address" -msgstr "Adreça de correu electrònic" +msgstr "Elimina l'adreça de correu electrònic" #: ../ui/edit_alternate_emails.glade.h:2 msgid "" "Some email services require additional addresses be configured on the " "server. Contact your email provider for more information." msgstr "" +"Alguns serveis de correu electrònic requereixen adreces addicionals per " +"poder configurar el servidor. Poseu-vos en contacte amb el proveïdor de " +"correu electrònic per obtenir més informació." #: ../ui/edit_alternate_emails.glade.h:4 msgid "_Update" -msgstr "" +msgstr "Act_ualització" #: ../ui/find_bar.glade.h:1 msgid "Find:" -msgstr "" +msgstr "Troba:" #: ../ui/find_bar.glade.h:2 msgid "_Previous" -msgstr "" +msgstr "_Anterior" #: ../ui/find_bar.glade.h:3 msgid "_Next" -msgstr "" +msgstr "_Següent" #: ../ui/find_bar.glade.h:4 msgid "_Case sensitive" -msgstr "" +msgstr "Distingeix entre majús_cules i minúscules" #: ../ui/find_bar.glade.h:5 -#, fuzzy msgid "label" -msgstr "Etiquetes" +msgstr "etiqueta" + +#: ../ui/gtk/help-overlay.ui.h:1 +msgid "Conversation Shortcuts" +msgstr "Dreceres de conversa" + +#: ../ui/gtk/help-overlay.ui.h:2 +msgctxt "shortcut window" +msgid "General" +msgstr "General" + +#: ../ui/gtk/help-overlay.ui.h:3 +msgctxt "shortcut window" +msgid "Move focus to the next/previous pane" +msgstr "Moure l'enfocament al panell següent/anterior" + +#: ../ui/gtk/help-overlay.ui.h:4 +msgctxt "shortcut window" +msgid "Move focus to conversation list" +msgstr "Mou el focus a la llista de conversa" + +#: ../ui/gtk/help-overlay.ui.h:5 +msgctxt "shortcut window" +msgid "Detach composer window" +msgstr "Separa finestra de l'editor" + +#: ../ui/gtk/help-overlay.ui.h:6 +msgctxt "shortcut window" +msgid "Close composer window" +msgstr "Tanca finestra de l'editor" + +#: ../ui/gtk/help-overlay.ui.h:7 +msgctxt "shortcut window" +msgid "Show keyboard shortcuts" +msgstr "Mostra dreceres de teclat" + +#: ../ui/gtk/help-overlay.ui.h:8 +msgctxt "shortcut window" +msgid "Show help" +msgstr "Mostra ajuda" + +#: ../ui/gtk/help-overlay.ui.h:9 +msgctxt "shortcut window" +msgid "Quit the application" +msgstr "Surt de l'aplicació" + +#: ../ui/gtk/help-overlay.ui.h:10 +msgctxt "shortcut window" +msgid "Search" +msgstr "Cerca" + +#: ../ui/gtk/help-overlay.ui.h:11 +msgctxt "shortcut window" +msgid "Jump to search box" +msgstr "Salta a la caixa de cerca" + +#: ../ui/gtk/help-overlay.ui.h:12 +msgctxt "shortcut window" +msgid "Find in current conversation" +msgstr "Troba en la conversa actual" + +#: ../ui/gtk/help-overlay.ui.h:13 +msgctxt "shortcut window" +msgid "Find next/previous in current conversation" +msgstr "Troba el següent/anterior a la conversa actual" + +#: ../ui/gtk/help-overlay.ui.h:14 +msgctxt "shortcut window" +msgid "Actions" +msgstr "Accions" + +#: ../ui/gtk/help-overlay.ui.h:15 +msgctxt "shortcut window" +msgid "Compose a new message" +msgstr "Redacta un missatge nou" + +#: ../ui/gtk/help-overlay.ui.h:16 +msgctxt "shortcut window" +msgid "Reply to sender " +msgstr "Respon al remitent" + +#: ../ui/gtk/help-overlay.ui.h:17 +msgctxt "shortcut window" +msgid "Reply to all" +msgstr "Respon a tots" + +#: ../ui/gtk/help-overlay.ui.h:18 +msgctxt "shortcut window" +msgid "Forward" +msgstr "Reenvia" + +#: ../ui/gtk/help-overlay.ui.h:19 +msgctxt "shortcut window" +msgid "Archive" +msgstr "Arxiva" + +#: ../ui/gtk/help-overlay.ui.h:20 +msgctxt "shortcut window" +msgid "Move to trash" +msgstr "Mou a la paperera" + +#: ../ui/gtk/help-overlay.ui.h:21 +msgctxt "shortcut window" +msgid "Toggle spam" +msgstr "Selecciona el correu brossa" + +#: ../ui/gtk/help-overlay.ui.h:22 +msgctxt "shortcut window" +msgid "Move the conversation" +msgstr "Mou la conversa" + +#: ../ui/gtk/help-overlay.ui.h:23 +msgctxt "shortcut window" +msgid "Label the conversation" +msgstr "Etiqueta la conversa" + +#: ../ui/gtk/help-overlay.ui.h:24 +msgctxt "shortcut window" +msgid "Mark read" +msgstr "Marca com a llegit" + +#: ../ui/gtk/help-overlay.ui.h:25 +msgctxt "shortcut window" +msgid "Mark unread" +msgstr "Marca com a no llegit" + +#: ../ui/gtk/help-overlay.ui.h:26 +msgctxt "shortcut window" +msgid "View" +msgstr "Visualitza" + +#: ../ui/gtk/help-overlay.ui.h:27 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Amplia el zoom" + +#: ../ui/gtk/help-overlay.ui.h:28 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Disminueix el zoom" + +#: ../ui/gtk/help-overlay.ui.h:29 +msgctxt "shortcut window" +msgid "Reset zoom" +msgstr "Restableix el zoom" + +#: ../ui/gtk/help-overlay.ui.h:30 +msgctxt "shortcut window" +msgid "Additional Shortcuts" +msgstr "Dreceres addicionals" + +#: ../ui/gtk/help-overlay.ui.h:31 +msgctxt "shortcut window" +msgid "Star" +msgstr "Destaca" + +#: ../ui/gtk/help-overlay.ui.h:32 +msgctxt "shortcut window" +msgid "Unstar" +msgstr "No destaquis" + +#: ../ui/gtk/help-overlay.ui.h:33 +msgctxt "shortcut window" +msgid "Delete" +msgstr "Suprimeix" + +#: ../ui/gtk/help-overlay.ui.h:34 +msgctxt "shortcut window" +msgid "Jump to next (older) conversation" +msgstr "Salta a la següent conversa (més antiga)" + +#: ../ui/gtk/help-overlay.ui.h:35 +msgctxt "shortcut window" +msgid "Jump to previous (newer) conversation" +msgstr "Salta a la conversa anterior (més recent)" + +#: ../ui/gtk/help-overlay.ui.h:36 +msgid "Composer Shortcuts" +msgstr "Dreceres d'editor" + +#: ../ui/gtk/help-overlay.ui.h:37 +msgctxt "shortcut window" +msgid "Quote text" +msgstr "Cita text" + +#: ../ui/gtk/help-overlay.ui.h:38 +msgctxt "shortcut window" +msgid "Unquote text" +msgstr "No citis text" -#: ../ui/login.glade.h:1 ../ui/password-dialog.glade.h:3 +#: ../ui/gtk/help-overlay.ui.h:39 +msgctxt "shortcut window" +msgid "Send" +msgstr "Envia" + +#: ../ui/gtk/help-overlay.ui.h:40 +msgctxt "shortcut window" +msgid "Add attachment" +msgstr "Afegeix el fitxer adjunt" + +#: ../ui/gtk/help-overlay.ui.h:41 +msgctxt "shortcut window" +msgid "Rich text mode" +msgstr "Mode de text enriquit" + +#: ../ui/gtk/help-overlay.ui.h:42 +msgctxt "shortcut window" +msgid "Bold text" +msgstr "Text en negreta" + +#: ../ui/gtk/help-overlay.ui.h:43 +msgctxt "shortcut window" +msgid "Italicize text" +msgstr "Text en cursiva" + +#: ../ui/gtk/help-overlay.ui.h:44 +msgctxt "shortcut window" +msgid "Underline text" +msgstr "Text subratllat" + +#: ../ui/gtk/help-overlay.ui.h:45 +msgctxt "shortcut window" +msgid "Strike text" +msgstr "Text ratllat" + +#: ../ui/gtk/help-overlay.ui.h:46 +msgctxt "shortcut window" +msgid "Insert a link" +msgstr "Insereix un enllaç" + +#: ../ui/gtk/help-overlay.ui.h:47 +msgctxt "shortcut window" +msgid "Remove formatting" +msgstr "Suprimeix la formatació" + +#: ../ui/gtk/menus.ui.h:2 +msgid "A_ccounts" +msgstr "_Comptes" + +#: ../ui/gtk/menus.ui.h:4 +msgid "_Keyboard Shortcuts" +msgstr "Dreceres de _teclat" + +#: ../ui/login.glade.h:1 +msgid "email@example.com" +msgstr "correu@exemple.com" + +#: ../ui/login.glade.h:2 ../ui/password-dialog.glade.h:3 msgid "Password" -msgstr "" +msgstr "Contrasenya" -#: ../ui/login.glade.h:2 -#, fuzzy +#: ../ui/login.glade.h:3 msgid "E_mail address" -msgstr "Adreça de correu electrònic" +msgstr "_Adreça de correu electrònic" -#: ../ui/login.glade.h:3 -#, fuzzy +#: ../ui/login.glade.h:4 msgid "_Password" -msgstr "_Contrasenya:" +msgstr "_Contrasenya" -#: ../ui/login.glade.h:4 -#, fuzzy +#: ../ui/login.glade.h:5 msgid "S_ervice" -msgstr "Servei:" +msgstr "S_ervei" -#: ../ui/login.glade.h:5 -#, fuzzy +#: ../ui/login.glade.h:6 msgid "N_ame" -msgstr "N_om:" +msgstr "N_om" -#: ../ui/login.glade.h:7 -#, fuzzy +#: ../ui/login.glade.h:8 msgid "N_ickname" -msgstr "Sobrenom:" +msgstr "_Sobrenom" -#: ../ui/login.glade.h:8 +#: ../ui/login.glade.h:9 msgid "Work, Home, etc." -msgstr "" +msgstr "Treball, Casa, etc." -#: ../ui/login.glade.h:9 -#, fuzzy +#: ../ui/login.glade.h:10 msgid "_Save sent mail" -msgstr "Enviats" +msgstr "Desa els mi_ssatges enviats" -#: ../ui/login.glade.h:10 +#: ../ui/login.glade.h:11 msgid "Addi_tional email addresses…" -msgstr "" +msgstr "_Adreces de correu electrònic addicionals..." -#: ../ui/login.glade.h:11 +#: ../ui/login.glade.h:12 msgid "IMAP settings" msgstr "Configuració de l'IMAP" -#: ../ui/login.glade.h:12 -#, fuzzy +#: ../ui/login.glade.h:13 msgid "Se_rver" -msgstr "Se_rvidor:" +msgstr "Se_rvidor" -#: ../ui/login.glade.h:13 -#, fuzzy +#: ../ui/login.glade.h:14 +msgid "imap.example.com" +msgstr "imap.exemple.com" + +#: ../ui/login.glade.h:15 msgid "P_ort" -msgstr "P_ort:" +msgstr "P_ort" -#: ../ui/login.glade.h:14 -#, fuzzy +#: ../ui/login.glade.h:16 +msgid "smtp.example.com" +msgstr "smtp.exemple.com" + +#: ../ui/login.glade.h:17 msgid "Ser_ver" -msgstr "Ser_vidor:" +msgstr "Ser_vidor" -#: ../ui/login.glade.h:15 -#, fuzzy +#: ../ui/login.glade.h:18 msgid "Por_t" -msgstr "Por_t:" +msgstr "Por_t" -#: ../ui/login.glade.h:16 +#: ../ui/login.glade.h:19 msgid "SMTP settings" -msgstr "Configuració del SMTP" +msgstr "Configuració de l'SMTP" -#: ../ui/login.glade.h:17 -#, fuzzy +#: ../ui/login.glade.h:20 msgid "User_name" -msgstr "_Nom d'usuari:" +msgstr "_Nom d'usuari" -#: ../ui/login.glade.h:18 -#, fuzzy +#: ../ui/login.glade.h:21 msgid "Pass_word" msgstr "Contrasen_ya" -#: ../ui/login.glade.h:19 +#: ../ui/login.glade.h:22 msgid "SMTP username" -msgstr "" +msgstr "Nom d'usuari SMTP" -#: ../ui/login.glade.h:20 +#: ../ui/login.glade.h:23 msgid "SMTP password" -msgstr "" +msgstr "Contrasenya SMTP" -#: ../ui/login.glade.h:21 -#, fuzzy +#: ../ui/login.glade.h:24 msgid "_Username" -msgstr "Nom d'_usuari:" +msgstr "Nom d'_usuari" -#: ../ui/login.glade.h:22 +#: ../ui/login.glade.h:25 msgid "IMAP username" -msgstr "" +msgstr "Nom d'usuari IMAP" -#: ../ui/login.glade.h:23 +#: ../ui/login.glade.h:26 msgid "IMAP password" -msgstr "" +msgstr "Contrasenya IMAP" -#: ../ui/login.glade.h:24 -#, fuzzy +#: ../ui/login.glade.h:27 msgid "Encr_yption" -msgstr "Encr_iptació:" +msgstr "Encr_iptació" -#: ../ui/login.glade.h:25 -#, fuzzy +#: ../ui/login.glade.h:28 msgid "Encrypt_ion" -msgstr "Encri_ptació:" +msgstr "Encriptac_ió" -#: ../ui/login.glade.h:27 +#: ../ui/login.glade.h:30 msgid "SSL/TLS" -msgstr "" +msgstr "SSL/TLS" -#: ../ui/login.glade.h:28 +#: ../ui/login.glade.h:31 msgid "STARTTLS" msgstr "STARTTLS" -#: ../ui/login.glade.h:29 +#: ../ui/login.glade.h:32 msgid "No authentication re_quired" -msgstr "_No es requereix autenticació" +msgstr "No es re_quereix autenticació" -#: ../ui/login.glade.h:30 -#, fuzzy +#: ../ui/login.glade.h:33 msgid "Use IMAP cre_dentials" -msgstr "Credencials IMAP" +msgstr "_Utilitza credencials IMAP" -#: ../ui/login.glade.h:31 ../ui/preferences.glade.h:5 +#: ../ui/login.glade.h:34 msgid "Composer" -msgstr "Autor" +msgstr "Editor" -#: ../ui/login.glade.h:32 +#: ../ui/login.glade.h:35 msgid "Save dra_fts on server" -msgstr "" +msgstr "Desa es_borranys al servidor" -#: ../ui/login.glade.h:33 +#: ../ui/login.glade.h:36 msgid "Si_gn emails (HTML allowed):" -msgstr "" +msgstr "_Signa missatges de correu electrònic (HTML permès):" -#: ../ui/login.glade.h:34 +#: ../ui/login.glade.h:37 msgid "Storage" msgstr "Emmagatzematge" -#: ../ui/login.glade.h:35 -#, fuzzy +#: ../ui/login.glade.h:38 msgid "_Download mail" -msgstr "_Baixa el missatge:" +msgstr "_Baixa els missatges" + +#: ../ui/main-toolbar.ui.h:1 +msgid "Empty Spam or Trash folders" +msgstr "Buida les carpetes de Correu brossa i la Paperera" #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" msgstr "Credencials SMTP" #: ../ui/password-dialog.glade.h:2 -#, fuzzy msgid "Username" -msgstr "Nom d'usuari:" +msgstr "Nom d'usuari" #: ../ui/password-dialog.glade.h:4 -#, fuzzy msgid "_Remember password" -msgstr "_Recorda les contrasenyes" +msgstr "_Recorda la contrasenya" #: ../ui/password-dialog.glade.h:6 msgid "_Authenticate" -msgstr "" +msgstr "_Autenticació" -#: ../ui/preferences.glade.h:1 +# N.T.: Títol de secció a les preferències +#: ../ui/preferences-dialog.ui.h:1 msgid "Reading" msgstr "Lectura" -#: ../ui/preferences.glade.h:2 +#: ../ui/preferences-dialog.ui.h:2 msgid "_Automatically select next message" msgstr "Selecciona el missatge següent _automàticament" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences-dialog.ui.h:3 msgid "_Display conversation preview" -msgstr "" +msgstr "_Mostra la vista prèvia de la conversació" -#: ../ui/preferences.glade.h:4 +#: ../ui/preferences-dialog.ui.h:4 msgid "Use _three pane view" -msgstr "" - -#: ../ui/preferences.glade.h:6 -msgid "Enable _spell checking" -msgstr "Activa la verificació de l'_ortografia" +msgstr "Utilitza vista de _tres panells" -#: ../ui/preferences.glade.h:7 +#: ../ui/preferences-dialog.ui.h:5 msgid "Notifications" msgstr "Notificacions" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences-dialog.ui.h:6 msgid "_Play notification sounds" msgstr "_Reprodueix un so per a les notificacions" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences-dialog.ui.h:7 msgid "Show _notifications for new mail" -msgstr "Mostra _notificacions quan arribi correu nou" +msgstr "Mostra les _notificacions quan arribi correu nou" -#: ../ui/preferences.glade.h:10 -#, fuzzy +#: ../ui/preferences-dialog.ui.h:8 msgid "Always _watch for new mail" -msgstr "Mostra _notificacions quan arribi correu nou" +msgstr "Sempre _vigila si arriba correu nou" -#: ../ui/preferences.glade.h:11 +#: ../ui/preferences-dialog.ui.h:9 msgid "Geary will run in the background and notify of new mail" msgstr "" +"El Geary s'executarà en segon pla i notifica els nous missatges de correu" -#: ../ui/preferences.glade.h:12 -#, fuzzy +#: ../ui/preferences-dialog.ui.h:10 msgid "Preferences" -msgstr "_Preferències" +msgstr "Preferències" #: ../ui/remove_confirm.glade.h:1 msgid "" @@ -2136,7 +2660,65 @@ #: ../ui/upgrade_dialog.glade.h:1 msgid "Geary update in progress…" -msgstr "" +msgstr "Actualització del Geary en curs ..." + +#, fuzzy +#~ msgid "Copyright 2011-2015 Yorba Foundation" +#~ msgstr "Copyright 2011-2013 Yorba Foundation" + +#~ msgid "From:" +#~ msgstr "De:" + +#~ msgid "Date:" +#~ msgstr "Data:" + +#~ msgid "_Save As..." +#~ msgstr "_Desa i anomena..." + +#~ msgid "Save A_ttachment..." +#~ msgid_plural "Save All A_ttachments..." +#~ msgstr[0] "Desa el fitxer ad_junt..." +#~ msgstr[1] "Desa tots els fitxers ad_junts..." + +#~ msgid "none" +#~ msgstr "cap" + +#~ msgid "_Left" +#~ msgstr "_Esquerra" + +#~ msgid "_Right" +#~ msgstr "_Dreta" + +#~ msgid "_Center" +#~ msgstr "_Centrat" + +#~ msgid "_Justify" +#~ msgstr "_Justificat" + +#~ msgid "Link (Ctrl+L)" +#~ msgstr "Enllaç (Ctrl+L)" + +#~ msgid "Large" +#~ msgstr "Gran" + +#~ msgid "Medium" +#~ msgstr "Mitjà" + +#~ msgid "Small" +#~ msgstr "Petit" + +#~ msgid "Sans Serif" +#~ msgstr "Sans Serif" + +#~ msgid "Serif" +#~ msgstr "Serif" + +#, fuzzy +#~ msgid "Detach" +#~ msgstr "_Adjunta" + +#~ msgid "_Attach File" +#~ msgstr "_Adjunta fitxer" #~ msgid "Archive conversation (Delete, Backspace, A)" #~ msgstr "Arxiva la conversa (Suprimir, Retrocés, A)" diff -Nru geary-0.11.4/po/cs.po geary-0.12.0/po/cs.po --- geary-0.11.4/po/cs.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/cs.po 2017-10-02 11:25:21.000000000 +0000 @@ -5,15 +5,15 @@ # # Translators: # petr.simacek , 2012, 2013. -# Marek Černocký , 2014, 2015, 2016. +# Marek Černocký , 2014, 2015, 2016, 2017. # msgid "" msgstr "" -"Project-Id-Version: geary geary-0.11\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" +"Project-Id-Version: geary\n" +"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "product=geary&keywords=I18N+L10N&component=internationalization\n" -"POT-Creation-Date: 2016-12-20 13:47+0000\n" -"PO-Revision-Date: 2016-12-24 14:42+0100\n" +"POT-Creation-Date: 2017-09-26 12:56+0000\n" +"PO-Revision-Date: 2017-09-26 20:05+0200\n" "Last-Translator: Marek Černocký \n" "Language-Team: čeština \n" "Language: cs\n" @@ -23,31 +23,111 @@ "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: Gtranslator 2.91.7\n" -#: ../desktop/geary.desktop.in.h:1 ../desktop/geary-autostart.desktop.in.h:1 +#. Translators: The application name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:2 +#: ../desktop/org.gnome.Geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" msgstr "Geary" -#: ../desktop/geary.desktop.in.h:2 ../desktop/geary-autostart.desktop.in.h:2 -#: ../src/client/application/geary-application.vala:18 +#. Translators: The development team's name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:4 +msgid "Geary Development Team" +msgstr "Vývojářský tým aplikace Geary" + +#. Translators: The application's summary / tagline +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:6 +#: ../desktop/org.gnome.Geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 +msgid "Send and receive email" +msgstr "Odesílejte a přijímejte e-maily" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:7 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"Geary je poštovní aplikace pro uživatelské prostředí GNOME 3, která se " +"soustředí na konverzace jako celek. Umožňuje číst, vyhledávat a odesílat e-" +"maily v přímočarém a moderním prostředí." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:8 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"Díky zaměření na konverzace můžete číst ucelené diskuze bez nutnosti " +"vyhledávat jednotlivé navazující zprávy a klikat na ně." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:9 +msgid "Geary’s features include:" +msgstr "Mezi funkcemi aplikace Geary najdete:" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:10 +msgid "Quick email account setup" +msgstr "Rychlé nastavení poštovního účtu" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:11 +msgid "Shows related messages together in conversations" +msgstr "Zobrazení souvisejících zprávy dohromady v podobě konverzace" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:12 +msgid "Fast, full text and keyword search" +msgstr "Rychlé vyhledávání v celém textu a na základě klíčových slov" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:13 +msgid "Full-featured HTML and plain text message composer" +msgstr "Plnohodnotný editor zpráv v HTML i prostém textu" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:14 +msgid "Desktop notification of new mail" +msgstr "Upozornění na nové zprávy přímo v uživatelském prostředí" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:15 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" +msgstr "Kompatibilitu s GMail, Yahoo! Mail, Outlook.com a dalšími servery IMAP" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:17 +msgid "Geary displaying a conversation" +msgstr "Geary zobrazující konverzaci" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:19 +msgid "Geary showing the rich text composer" +msgstr "Geary se zobrazeným editorem formátovaného textu" + +#: ../desktop/org.gnome.Geary.desktop.in.h:2 +msgid "Email" +msgstr "E-mail" + +#: ../desktop/org.gnome.Geary.desktop.in.h:3 +msgid "Geary Email" +msgstr "Pošta Geary" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/org.gnome.Geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "pošta;mail;e-mail;elektronická pošta;imap;gmail;yahoo;hotmail;outlook;" + +#: ../desktop/org.gnome.Geary.desktop.in.h:7 ../ui/gtk/menus.ui.h:1 +msgid "Compose Message" +msgstr "Napsat zprávu" + +#: ../desktop/geary-autostart.desktop.in.h:2 +#: ../src/client/application/geary-application.vala:21 msgid "Mail Client" msgstr "Poštovní klient" -#: ../desktop/geary.desktop.in.h:3 ../desktop/geary-autostart.desktop.in.h:3 +#: ../desktop/geary-autostart.desktop.in.h:3 msgid "Geary Mail" msgstr "Pošta Geary" -#: ../desktop/geary.desktop.in.h:4 ../desktop/geary-autostart.desktop.in.h:4 -msgid "Send and receive email" -msgstr "Odesílejte a přijímejte e-maily" - -#: ../desktop/geary.desktop.in.h:5 ../desktop/geary-autostart.desktop.in.h:5 +#: ../desktop/geary-autostart.desktop.in.h:5 msgid "Email;E-mail;Mail;" msgstr "email;e-mail;mail;pošta;e-pošta;zpráva;zprávy;" -#: ../desktop/geary.desktop.in.h:6 -msgid "Compose Message" -msgstr "Napsat zprávu" - #: ../desktop/geary-attach.contract.in.h:1 msgid "Send by email" msgstr "Odeslat e-mailem" @@ -58,6 +138,7 @@ #: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:31 +#: ../ui/conversation-email-menus.ui.h:10 msgid "_Save" msgstr "_Uložit" @@ -67,7 +148,7 @@ msgstr "_Přidat" #. reset/clear widgets -#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 #, c-format msgid "Additional addresses for %s" msgstr "Dodatečné adresy pro %s" @@ -88,108 +169,122 @@ msgid "First Last" msgstr "První poslední" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." msgstr "Vítejte v Geary." -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." msgstr "Nejprve vyplňte informace o svém účtu." -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "2 týdny nazpět" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:254 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "1 měsíc nazpět" -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "3 měsíce nazpět" -#: ../src/client/accounts/add-edit-page.vala:256 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "6 měsíců nazpět" -#: ../src/client/accounts/add-edit-page.vala:257 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "1 rok nazpět" -#: ../src/client/accounts/add-edit-page.vala:258 +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" msgstr "2 roky nazpět" -#: ../src/client/accounts/add-edit-page.vala:259 +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" msgstr "4 roky nazpět" #. Separator -#: ../src/client/accounts/add-edit-page.vala:261 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "Vše" -#: ../src/client/accounts/add-edit-page.vala:280 +#: ../src/client/accounts/add-edit-page.vala:283 msgid "Edit" msgstr "Úprava" -#: ../src/client/accounts/add-edit-page.vala:282 +#: ../src/client/accounts/add-edit-page.vala:285 msgid "Preview" msgstr "Náhled" -#: ../src/client/accounts/add-edit-page.vala:723 +#: ../src/client/accounts/add-edit-page.vala:751 msgid "Remem_ber passwords" msgstr "Pama_tovat si hesla" -#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:7 +#: ../src/client/accounts/add-edit-page.vala:758 ../ui/login.glade.h:7 msgid "Remem_ber password" msgstr "Pama_tovat si heslo" -#: ../src/client/accounts/add-edit-page.vala:764 +#: ../src/client/accounts/add-edit-page.vala:792 msgid "Unable to validate:\n" msgstr "Nelze ověřit:\n" -#: ../src/client/accounts/add-edit-page.vala:766 -msgid " • Invalid account nickname.\n" -msgstr " • Neplatná přezdívka účtu.\n" - -#: ../src/client/accounts/add-edit-page.vala:769 -msgid " • Email address already added to Geary.\n" -msgstr " • E-mailová adresa už byla do Geary přidána.\n" - -#: ../src/client/accounts/add-edit-page.vala:773 -msgid " • IMAP connection error.\n" -msgstr " • Chyba připojení IMAP.\n" - -#: ../src/client/accounts/add-edit-page.vala:776 -msgid " • IMAP username or password incorrect.\n" -msgstr " • Nesprávné uživatelské jméno nebo heslo pro IMAP.\n" - -#: ../src/client/accounts/add-edit-page.vala:779 -msgid " • SMTP connection error.\n" -msgstr " • Chyba připojení SMTP.\n" - -#: ../src/client/accounts/add-edit-page.vala:782 -msgid " • SMTP username or password incorrect.\n" -msgstr " • Nesprávné uživatelské jméno nebo heslo pro SMTP.\n" - -#: ../src/client/accounts/add-edit-page.vala:786 -msgid " • Connection error.\n" -msgstr " • Chyba připojení.\n" - -#: ../src/client/accounts/add-edit-page.vala:790 -msgid " • Username or password incorrect.\n" -msgstr " • Nesprávné uživatelské jméno nebo heslo.\n" +#: ../src/client/accounts/add-edit-page.vala:794 +msgid " • Invalid account nickname.\n" +msgstr " • Neplatná přezdívka účtu.\n" + +#: ../src/client/accounts/add-edit-page.vala:797 +msgid " • Email address already added to Geary.\n" +msgstr " • E-mailová adresa už byla do Geary přidána.\n" + +#: ../src/client/accounts/add-edit-page.vala:801 +msgid " • IMAP connection error.\n" +msgstr " • Chyba připojení IMAP.\n" + +#: ../src/client/accounts/add-edit-page.vala:804 +msgid " • IMAP username or password incorrect.\n" +msgstr " • Nesprávné uživatelské jméno nebo heslo pro IMAP.\n" + +#: ../src/client/accounts/add-edit-page.vala:807 +msgid " • SMTP connection error.\n" +msgstr " • Chyba připojení SMTP.\n" + +#: ../src/client/accounts/add-edit-page.vala:810 +msgid " • SMTP username or password incorrect.\n" +msgstr " • Nesprávné uživatelské jméno nebo heslo pro SMTP.\n" + +#: ../src/client/accounts/add-edit-page.vala:814 +msgid " • Connection error.\n" +msgstr " • Chyba připojení.\n" + +#: ../src/client/accounts/add-edit-page.vala:818 +msgid " • Username or password incorrect.\n" +msgstr " • Nesprávné uživatelské jméno nebo heslo.\n" -#: ../src/client/application/geary-application.vala:19 +#: ../src/client/application/geary-application.vala:22 msgid "Copyright 2016 Software Freedom Conservancy Inc." msgstr "Copyright 2016 Software Freedom Conservancy Inc." -#: ../src/client/application/geary-application.vala:21 +#: ../src/client/application/geary-application.vala:24 msgid "Visit the Geary web site" msgstr "Navštívit webové stránky Geary" +#: ../src/client/application/geary-application.vala:464 +#, c-format +msgid "About %s" +msgstr "O aplikaci %s" + +#. Translators: add your name and email address to receive +#. credit in the About dialog For example: Yamada Taro +#. +#: ../src/client/application/geary-application.vala:468 +msgid "translator-credits" +msgstr "" +"Petr Šimáček \n" +"Marek Černocký " + #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" msgstr "Spustit Geary se skrytým hlavním oknem" @@ -244,217 +339,191 @@ msgstr "Odvolat všechny serverové certifikáty s varováními TLS" #: ../src/client/application/geary-args.vala:27 +msgid "Perform a graceful quit" +msgstr "Korektně ukončit" + +#: ../src/client/application/geary-args.vala:28 msgid "Display program version" msgstr "Zobrazit verzi programu" #. This gives a command-line hint on how to open new composer windows with mailto: -#: ../src/client/application/geary-args.vala:51 +#: ../src/client/application/geary-args.vala:53 #, c-format msgid "Use %s to open a new composer window" msgstr "Použít %s k otevření nového okna pro psaní zprávy" -#: ../src/client/application/geary-args.vala:52 +#: ../src/client/application/geary-args.vala:54 msgid "Please report comments, suggestions and bugs to:" msgstr "Připomínky, návrhy a chyby hlaste prosím na:" #. i18n: Command line arguments are invalid -#: ../src/client/application/geary-args.vala:59 +#: ../src/client/application/geary-args.vala:61 #, c-format msgid "Failed to parse command line options: %s\n" msgstr "Nepodařilo se zpracovat přepínače příkazového řádku: %s\n" -#: ../src/client/application/geary-args.vala:70 +#: ../src/client/application/geary-args.vala:72 #, c-format -msgid "Unrecognized command line option \"%s\"\n" +msgid "Unrecognized command line option “%s”\n" msgstr "Nerozpoznaný přepínač příkazového řádku „%s“\n" -#: ../src/client/application/geary-controller.vala:61 +#: ../src/client/application/geary-controller.vala:57 msgid "Delete conversation" msgstr "Vymazat konverzaci" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:58 msgid "Delete conversation (Shift+Delete)" msgstr "Vymazat konverzaci (Shift+Delete)" -#: ../src/client/application/geary-controller.vala:63 +#: ../src/client/application/geary-controller.vala:59 msgid "Delete conversations (Shift+Delete)" msgstr "Vymazat konverzace (Shift+Delete)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:67 +#: ../src/client/application/geary-controller.vala:63 msgid "Move conversation to Trash (Delete, Backspace)" msgstr "Přesunout konverzaci do Koše (Delete, Backspace)" -#: ../src/client/application/geary-controller.vala:68 +#: ../src/client/application/geary-controller.vala:64 msgid "Move conversations to Trash (Delete, Backspace)" msgstr "Přesunout konverzace do Koše (Delete, Backspace)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:72 +#: ../src/client/application/geary-controller.vala:68 msgid "_Archive" msgstr "_Archivovat" -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:69 msgid "Archive conversation (A)" msgstr "Archivovat konverzaci (A)" -#: ../src/client/application/geary-controller.vala:74 +#: ../src/client/application/geary-controller.vala:70 msgid "Archive conversations (A)" msgstr "Archivovat konverzace (A)" -#: ../src/client/application/geary-controller.vala:77 +#: ../src/client/application/geary-controller.vala:73 msgid "Mark as S_pam" msgstr "Označit jako nevyžá_dané" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:74 msgid "Mark as not S_pam" msgstr "Označit, že není nevyžá_dané" -#: ../src/client/application/geary-controller.vala:80 -#: ../src/client/application/geary-controller.vala:396 +#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:448 msgid "Mark conversation" msgstr "Označit konverzaci" -#: ../src/client/application/geary-controller.vala:81 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark conversations" msgstr "Označit konverzace" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:78 msgid "Add label to conversation" msgstr "Přiřadit konverzaci štítek" -#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:79 msgid "Add label to conversations" msgstr "Přiřadit konverzacím štítek" -#: ../src/client/application/geary-controller.vala:84 -#: ../src/client/application/geary-controller.vala:435 +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:487 msgid "Move conversation" msgstr "Přesunout konverzaci" -#: ../src/client/application/geary-controller.vala:85 +#: ../src/client/application/geary-controller.vala:81 msgid "Move conversations" msgstr "Přesunout konverzace" -#: ../src/client/application/geary-controller.vala:376 -#: ../ui/app_menu.interface.h:1 -msgid "A_ccounts" -msgstr "Úč_ty" - -#: ../src/client/application/geary-controller.vala:381 -#: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 -msgid "_Preferences" -msgstr "_Předvolby" - -#: ../src/client/application/geary-controller.vala:385 -#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:3 -msgid "_Help" -msgstr "Nápo_věda" - -#: ../src/client/application/geary-controller.vala:389 -#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:4 -msgid "_About" -msgstr "O _aplikaci" - -#: ../src/client/application/geary-controller.vala:393 -#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:5 -msgid "_Quit" -msgstr "U_končit" - -#: ../src/client/application/geary-controller.vala:398 -msgid "_Mark as..." +#: ../src/client/application/geary-controller.vala:450 +msgid "_Mark as…" msgstr "Oz_načit jako…" -#: ../src/client/application/geary-controller.vala:404 +#: ../src/client/application/geary-controller.vala:456 msgid "Mark as _Read" msgstr "Označit jako _přečtené" -#: ../src/client/application/geary-controller.vala:410 +#: ../src/client/application/geary-controller.vala:462 msgid "Mark as _Unread" msgstr "Označit jako _nepřečtené" -#: ../src/client/application/geary-controller.vala:416 +#: ../src/client/application/geary-controller.vala:468 msgid "_Star" msgstr "_Hvězdička" -#: ../src/client/application/geary-controller.vala:421 +#: ../src/client/application/geary-controller.vala:473 msgid "U_nstar" msgstr "O_debrat hvězdičku" -#: ../src/client/application/geary-controller.vala:431 +#: ../src/client/application/geary-controller.vala:483 msgid "Add label" msgstr "Přidat štítek" -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:484 msgid "_Label" msgstr "Štít_ek" -#: ../src/client/application/geary-controller.vala:436 +#: ../src/client/application/geary-controller.vala:488 msgid "_Move" msgstr "_Přesunout" -#: ../src/client/application/geary-controller.vala:440 +#: ../src/client/application/geary-controller.vala:492 msgid "Compose new message (Ctrl+N, N)" msgstr "Napsat novou zprávu (Ctrl+N, N)" -#. Reply to a message. -#: ../src/client/application/geary-controller.vala:444 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1873 +#: ../src/client/application/geary-controller.vala:496 +#: ../ui/conversation-email-menus.ui.h:1 msgid "_Reply" msgstr "_Odpovědět" -#: ../src/client/application/geary-controller.vala:445 +#: ../src/client/application/geary-controller.vala:497 msgid "Reply (Ctrl+R, R)" msgstr "Odpovědět (Ctrl+R, R)" -#: ../src/client/application/geary-controller.vala:449 +#: ../src/client/application/geary-controller.vala:501 msgid "R_eply All" msgstr "O_dpovědět všem" -#: ../src/client/application/geary-controller.vala:450 +#: ../src/client/application/geary-controller.vala:502 msgid "Reply all (Ctrl+Shift+R, Shift+R)" msgstr "Odpovědět všem (Ctrl+Shift+R, Shift+R)" -#. Forward a message. -#: ../src/client/application/geary-controller.vala:455 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1883 +#: ../src/client/application/geary-controller.vala:507 +#: ../ui/conversation-email-menus.ui.h:3 msgid "_Forward" msgstr "_Přeposlat" -#: ../src/client/application/geary-controller.vala:456 +#: ../src/client/application/geary-controller.vala:508 msgid "Forward (Ctrl+L, F)" msgstr "Přeposlat (Ctrl+L, F)" -#: ../src/client/application/geary-controller.vala:495 -msgid "Empty" -msgstr "Vyprázdnit" - -#: ../src/client/application/geary-controller.vala:496 -msgid "Empty Spam or Trash folders" -msgstr "Vyprázdnit složku Nevyžádané nebo Koš" - -#: ../src/client/application/geary-controller.vala:500 +#: ../src/client/application/geary-controller.vala:538 msgid "Empty _Spam…" msgstr "Vyprázdnit _nevyžádanou…" -#: ../src/client/application/geary-controller.vala:504 +#: ../src/client/application/geary-controller.vala:542 msgid "Empty _Trash…" msgstr "Vyprázdnit koš…" #. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:537 +#: ../src/client/application/geary-controller.vala:574 msgid "Toggle search bar" msgstr "Přepnout vyhledávací lištu" -#: ../src/client/application/geary-controller.vala:744 +#. No callback is connected, since we bind the toggle button to the find bar visibility +#: ../src/client/application/geary-controller.vala:579 +msgid "Toggle find bar" +msgstr "Přepnout vyhledávací lištu" + +#: ../src/client/application/geary-controller.vala:757 msgid "Unable to store server trust exception" msgstr "Nelze uložit výjimku důvěry k serveru" -#: ../src/client/application/geary-controller.vala:981 +#: ../src/client/application/geary-controller.vala:992 msgid "Your settings are insecure" msgstr "Vaše nastavení není bezpečené" -#: ../src/client/application/geary-controller.vala:982 +#: ../src/client/application/geary-controller.vala:993 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -464,15 +533,15 @@ "vaše uživatelské jméno a heslo může číst jiná osoba na síti. Opravdu to tak " "chcete?" -#: ../src/client/application/geary-controller.vala:983 +#: ../src/client/application/geary-controller.vala:994 msgid "Co_ntinue" msgstr "Po_kračovat" -#: ../src/client/application/geary-controller.vala:1030 +#: ../src/client/application/geary-controller.vala:1041 msgid "Error connecting to the server" msgstr "Chyba během připojování k serveru" -#: ../src/client/application/geary-controller.vala:1031 +#: ../src/client/application/geary-controller.vala:1042 msgid "" "Geary encountered an error while connecting to the server. Please try again " "in a few moments." @@ -481,12 +550,12 @@ "chvíli znovu." #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:1068 +#: ../src/client/application/geary-controller.vala:1079 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "Chyba při odesílání e-mailu" -#: ../src/client/application/geary-controller.vala:1069 +#: ../src/client/application/geary-controller.vala:1080 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." @@ -496,12 +565,12 @@ #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1073 +#: ../src/client/application/geary-controller.vala:1084 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "Chyba při ukládání odeslané pošty" -#: ../src/client/application/geary-controller.vala:1074 +#: ../src/client/application/geary-controller.vala:1085 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." @@ -509,19 +578,19 @@ "V Geary došlo k chybě při ukládání odeslané zprávy. Zpráva zůstane ve vaší " "složce Pošta k odeslání, dokud ji nesmažete." -#: ../src/client/application/geary-controller.vala:1143 +#: ../src/client/application/geary-controller.vala:1154 msgid "Labels" msgstr "Štítky" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1155 +#: ../src/client/application/geary-controller.vala:1166 #, c-format msgid "Unable to open the database for %s" msgstr "Nelze otevřít databázi pro %s" -#: ../src/client/application/geary-controller.vala:1156 +#: ../src/client/application/geary-controller.vala:1167 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -545,20 +614,20 @@ "Opětovné sestavení databáze zničí všechny místně uložené e-maily a jejich " "přílohy Na e-maily na vašem serveru to nebude mít vliv." -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "_Rebuild" msgstr "Znovu _sestavit" -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "E_xit" msgstr "S_končit" -#: ../src/client/application/geary-controller.vala:1167 +#: ../src/client/application/geary-controller.vala:1178 #, c-format -msgid "Unable to rebuild database for \"%s\"" +msgid "Unable to rebuild database for “%s”" msgstr "Nelze znovu sestavit databázi pro „%s“" -#: ../src/client/application/geary-controller.vala:1168 +#: ../src/client/application/geary-controller.vala:1179 #, c-format msgid "" "Error during rebuild:\n" @@ -571,14 +640,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1190 -#: ../src/client/application/geary-controller.vala:1200 +#: ../src/client/application/geary-controller.vala:1201 #: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:1222 #, c-format msgid "Unable to open local mailbox for %s" msgstr "Nelze otevřít místní poštovní schránku pro %s" -#: ../src/client/application/geary-controller.vala:1191 +#: ../src/client/application/geary-controller.vala:1202 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -597,10 +666,10 @@ "\n" "%s" -#: ../src/client/application/geary-controller.vala:1201 +#: ../src/client/application/geary-controller.vala:1212 msgid "" "The version number of the local mail database is formatted for a newer " -"version of Geary. Unfortunately, the database cannot be \"rolled back\" to " +"version of Geary. Unfortunately, the database cannot be “rolled back” to " "work with this version of Geary.\n" "\n" "Please install the latest version of Geary and try again." @@ -610,7 +679,7 @@ "\n" "Nainstalujte prosím nejnovější verzi Geary a zkuste to znovu." -#: ../src/client/application/geary-controller.vala:1212 +#: ../src/client/application/geary-controller.vala:1223 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" @@ -623,29 +692,15 @@ "\n" "Zkontrolujte prosím připojení k síti a restartujte Geary." -#: ../src/client/application/geary-controller.vala:1723 -#, c-format -msgid "About %s" -msgstr "O aplikaci %s" - -#. / Translators: add your name and email address to receive credit in the About dialog -#. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1726 -msgid "translator-credits" -msgstr "" -"Petr Šimáček \n" -"Marek Černocký " - -#: ../src/client/application/geary-controller.vala:1984 +#: ../src/client/application/geary-controller.vala:1999 msgid "Undo move (Ctrl+Z)" msgstr "Zpět přesun (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:1994 -#, c-format -msgid "Are you sure you want to open \"%s\"?" -msgstr "Opravdu chcete otevřít „%s“?" +#: ../src/client/application/geary-controller.vala:2009 +msgid "Are you sure you want to open these attachments?" +msgstr "Opravdu chcete otevřít tuto přílohu?" -#: ../src/client/application/geary-controller.vala:1995 +#: ../src/client/application/geary-controller.vala:2010 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -653,119 +708,103 @@ "Příloha by po otevření mohla poškodit váš počítač. Otevírejte pouze soubory " "z důvěryhodných zdrojů. " -#: ../src/client/application/geary-controller.vala:1996 -msgid "Don't _ask me again" +#: ../src/client/application/geary-controller.vala:2011 +msgid "Don’t _ask me again" msgstr "Příště se nept_at" -#: ../src/client/application/geary-controller.vala:2014 +#: ../src/client/application/geary-controller.vala:2121 #, c-format -msgid "A file named \"%s\" already exists. Do you want to replace it?" +msgid "A file named “%s” already exists. Do you want to replace it?" msgstr "Soubor s názvem „%s“ již existuje. Chcete ho nahradit?" -#: ../src/client/application/geary-controller.vala:2016 +#: ../src/client/application/geary-controller.vala:2123 #, c-format msgid "" -"The file already exists in \"%s\". Replacing it will overwrite its contents." +"The file already exists in “%s”. Replacing it will overwrite its contents." msgstr "Soubor již existuje v „%s“. Nahrazením přepíšete jeho obsah." -#: ../src/client/application/geary-controller.vala:2019 +#: ../src/client/application/geary-controller.vala:2126 msgid "_Replace" msgstr "Nah_radit" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2324 +#: ../src/client/application/geary-controller.vala:2374 msgid "Close open draft messages?" msgstr "Zavřít otevřený koncept zprávy?" -#: ../src/client/application/geary-controller.vala:2454 +#: ../src/client/application/geary-controller.vala:2496 #, c-format msgid "Empty all email from your %s folder?" msgstr "Vyprázdnit všechny zprávy z vaší složky %s?" -#: ../src/client/application/geary-controller.vala:2455 +#: ../src/client/application/geary-controller.vala:2497 msgid "This removes the email from Geary and your email server." msgstr "Tímto se odstraní pošta z aplikace Geary i z poštovního serveru." -#: ../src/client/application/geary-controller.vala:2456 +#: ../src/client/application/geary-controller.vala:2498 msgid "This cannot be undone." msgstr "Nebude možné to vrátit zpět." -#: ../src/client/application/geary-controller.vala:2457 +#: ../src/client/application/geary-controller.vala:2499 #, c-format msgid "Empty %s" msgstr "Vyprázdnit %s" -#: ../src/client/application/geary-controller.vala:2474 +#: ../src/client/application/geary-controller.vala:2516 #, c-format msgid "Error emptying %s" msgstr "Chyba při vyprazďňování složky %s" -#: ../src/client/application/geary-controller.vala:2504 +#: ../src/client/application/geary-controller.vala:2546 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "Chcete trvale smazat tuto zprávu?" msgstr[1] "Chcete trvale smazat tyto zprávy?" msgstr[2] "Chcete trvale smazat tyto zprávy?" -#: ../src/client/application/geary-controller.vala:2506 +#: ../src/client/application/geary-controller.vala:2548 msgid "Delete" msgstr "Smazat" -#: ../src/client/application/geary-controller.vala:2537 +#: ../src/client/application/geary-controller.vala:2580 msgid "Undo archive (Ctrl+Z)" msgstr "Zpět archivace (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2552 +#: ../src/client/application/geary-controller.vala:2595 msgid "Undo trash (Ctrl+Z)" msgstr "Zpět přesunutí do koše (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2605 +#: ../src/client/application/geary-controller.vala:2649 msgid "Undo (Ctrl+Z)" msgstr "Zpět (Ctrl+Z)" -#: ../src/client/components/conversation-find-bar.vala:214 -#, c-format -msgid "%i match" -msgid_plural "%i matches" -msgstr[0] "%i shoda" -msgstr[1] "%i shody" -msgstr[2] "%i shod" - -#: ../src/client/components/conversation-find-bar.vala:216 -#, c-format -msgid "%i match (wrapped)" -msgid_plural "%i matches (wrapped)" -msgstr[0] "%i shoda (s přechodem přes okraj)" -msgstr[1] "%i shody (s přechodem přes okraj)" -msgstr[2] "%i shod (s přechodem přes okraj)" - -#: ../src/client/components/conversation-find-bar.vala:218 -msgid "not found" -msgstr "nenalezeno" +#: ../src/client/application/geary-controller.vala:2780 +msgid "Failed to open default text editor." +msgstr "Nepodařilo se otevřít výchozí textový editor." -#: ../src/client/components/main-window.vala:438 +#: ../src/client/components/main-window.vala:389 #, c-format msgid "%s (%d)" msgstr "%s (%d)" -#: ../src/client/components/search-bar.vala:10 +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "Hledat" #. Search entry. -#: ../src/client/components/search-bar.vala:25 +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" msgstr "Prohledat všechny e-maily v účtu podle klíčového slova (Ctrl+S)" -#: ../src/client/components/search-bar.vala:118 +#: ../src/client/components/search-bar.vala:100 #, c-format msgid "Indexing %s account" msgstr "Indexuje se účet %s" -#: ../src/client/components/search-bar.vala:129 +#: ../src/client/components/search-bar.vala:111 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" @@ -773,7 +812,7 @@ #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 -msgid "Sending..." +msgid "Sending…" msgstr "Odesílá se…" #: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 @@ -785,6 +824,10 @@ msgid "_Cancel" msgstr "_Zrušit" +#: ../src/client/components/stock.vala:21 ../ui/gtk/menus.ui.h:6 +msgid "_About" +msgstr "O _aplikaci" + #: ../src/client/components/stock.vala:23 msgid "_Close" msgstr "_Zavřít" @@ -793,51 +836,71 @@ msgid "_Discard" msgstr "_Vyřadit" -#: ../src/client/components/stock.vala:26 +#: ../src/client/components/stock.vala:25 ../ui/gtk/menus.ui.h:5 +msgid "_Help" +msgstr "Nápo_věda" + +#: ../src/client/components/stock.vala:26 ../ui/conversation-email-menus.ui.h:9 msgid "_Open" msgstr "_Otevřít" -#: ../src/client/components/stock.vala:28 -msgid "_Print..." +#: ../src/client/components/stock.vala:27 ../ui/gtk/menus.ui.h:3 +msgid "_Preferences" +msgstr "_Předvolby" + +#: ../src/client/components/stock.vala:28 ../ui/conversation-email-menus.ui.h:7 +msgid "_Print…" msgstr "_Tisk…" +#: ../src/client/components/stock.vala:29 ../ui/gtk/menus.ui.h:7 +msgid "_Quit" +msgstr "U_končit" + #: ../src/client/components/stock.vala:30 ../ui/remove_confirm.glade.h:6 msgid "_Remove" msgstr "_Odstranit" -#. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1335 -msgid "Select _All" -msgstr "Vybrat _vše" - -#: ../src/client/components/stock.vala:33 msgid "_Keep" msgstr "_Zachovat" -#: ../src/client/composer/composer-widget.vala:73 +#: ../src/client/composer/composer-link-popover.vala:150 +msgid "Link URL is not correctly formatted, e.g. http://example.com" +msgstr "Adresa URL odkazu není ve správném formátu, např. http://example.com" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid link URL" +msgstr "Neplatná adresa URL odkazu" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid email address" +msgstr "Neplatná e-mailová adresa" + +#: ../src/client/composer/composer-widget.vala:154 msgid "Saved" msgstr "Uloženo" -#: ../src/client/composer/composer-widget.vala:74 +#: ../src/client/composer/composer-widget.vala:155 msgid "Saving" msgstr "Ukládá se" -#: ../src/client/composer/composer-widget.vala:75 +#: ../src/client/composer/composer-widget.vala:156 msgid "Error saving" msgstr "Chyba při ukládání" -#: ../src/client/composer/composer-widget.vala:76 +#: ../src/client/composer/composer-widget.vala:157 msgid "Press Backspace to delete quote" msgstr "Citaci smažete zmáčknutím Backspace" -#: ../src/client/composer/composer-widget.vala:77 +#: ../src/client/composer/composer-widget.vala:158 msgid "New Message" msgstr "Nová zpráva" -#. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since -#. this is full-word checking, include all variants of each word. No spaces are allowed. -#: ../src/client/composer/composer-widget.vala:138 +#. Translators: This is list of keywords, separated by pipe ("|") +#. characters, that suggest an attachment; since this is full-word +#. checking, include all variants of each word. No spaces are +#. allowed. +#: ../src/client/composer/composer-widget.vala:167 msgid "" "attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" "enclosing|encloses|enclosure|enclosures" @@ -846,277 +909,185 @@ "přiloženým|přiloženou|přiložit|přikládám|přiložil|přikládá|přikládáme|" "přiložili|přiložily" -#: ../src/client/composer/composer-widget.vala:1121 -#: ../src/client/composer/composer-widget.vala:1125 +#: ../src/client/composer/composer-widget.vala:1122 +#: ../src/client/composer/composer-widget.vala:1141 msgid "Do you want to discard this message?" msgstr "Chcete zahodit tuto zprávu?" -#: ../src/client/composer/composer-widget.vala:1281 +#: ../src/client/composer/composer-widget.vala:1245 msgid "Send message with an empty subject and body?" msgstr "Poslat zprávu s prázdným předmětem a tělem?" -#: ../src/client/composer/composer-widget.vala:1283 +#: ../src/client/composer/composer-widget.vala:1247 msgid "Send message with an empty subject?" msgstr "Poslat zprávu s prázdným předmětem?" -#: ../src/client/composer/composer-widget.vala:1285 +#: ../src/client/composer/composer-widget.vala:1249 msgid "Send message with an empty body?" msgstr "Poslat zprávu s prázdným tělem?" -#: ../src/client/composer/composer-widget.vala:1287 +#: ../src/client/composer/composer-widget.vala:1253 msgid "Send message without an attachment?" msgstr "Poslat zprávu bez přílohy?" -#: ../src/client/composer/composer-widget.vala:1553 -msgid "Cannot add attachment" -msgstr "Nelze připojit přílohu" +#: ../src/client/composer/composer-widget.vala:1515 +#, c-format +msgid "“%s” already attached for delivery." +msgstr "Soubor „%s“ už byl pro doručení přiložen." + +#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" +#. Translators: The first argument will be a +#. description of the document type, the second will +#. be a human-friendly size string. For example: +#. Document (100.9MB) +#: ../src/client/composer/composer-widget.vala:1523 +#: ../src/client/conversation-viewer/conversation-email.vala:138 +#, c-format +msgid "%s (%s)" +msgstr "%s (%s)" -#: ../src/client/composer/composer-widget.vala:1564 +#: ../src/client/composer/composer-widget.vala:1560 #, c-format -msgid "\"%s\" could not be found." +msgid "“%s” could not be found." msgstr "Soubor „%s“ nebyl nalezen." -#: ../src/client/composer/composer-widget.vala:1571 +#: ../src/client/composer/composer-widget.vala:1566 #, c-format -msgid "\"%s\" is a folder." +msgid "“%s” is a folder." msgstr "„%s“ je složka." -#: ../src/client/composer/composer-widget.vala:1578 +#: ../src/client/composer/composer-widget.vala:1572 #, c-format -msgid "\"%s\" is an empty file." +msgid "“%s” is an empty file." msgstr "Soubor „%s“ je prázdný." -#: ../src/client/composer/composer-widget.vala:1592 -#, c-format -msgid "\"%s\" could not be opened for reading." -msgstr "Soubor „%s“ nemohl být otevřen pro čtení." - -#: ../src/client/composer/composer-widget.vala:1599 +#: ../src/client/composer/composer-widget.vala:1585 #, c-format -msgid "\"%s\" already attached for delivery." -msgstr "Soubor „%s“ už byl pro doručení přiložen." +msgid "“%s” could not be opened for reading." +msgstr "Soubor „%s“ se nezdařilo otevřít pro čtení." -#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-widget.vala:1608 -#, c-format -msgid "%s (%s)" -msgstr "%s (%s)" +#: ../src/client/composer/composer-widget.vala:1593 +msgid "Cannot add attachment" +msgstr "Nelze připojit přílohu" -#: ../src/client/composer/composer-widget.vala:1668 +#: ../src/client/composer/composer-widget.vala:1645 msgid "To: " msgstr "Komu: " -#: ../src/client/composer/composer-widget.vala:1671 +#: ../src/client/composer/composer-widget.vala:1648 msgid "Cc: " msgstr "Kopie: " -#: ../src/client/composer/composer-widget.vala:1674 +#: ../src/client/composer/composer-widget.vala:1651 msgid "Bcc: " msgstr "Skrytá kopie: " -#: ../src/client/composer/composer-widget.vala:1677 +#: ../src/client/composer/composer-widget.vala:1654 msgid "Reply-To: " msgstr "Odpověď:" -#: ../src/client/composer/composer-widget.vala:1910 +#: ../src/client/composer/composer-widget.vala:1786 msgid "Select Color" msgstr "Vybrat barvu" #. Displayed in the From dropdown to indicate an "alternate email address" #. for an account. The first printf argument will be the alternate email #. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2345 +#: ../src/client/composer/composer-widget.vala:1986 #, c-format msgid "%1$s via %2$s" msgstr "%1$s přes %2$s" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2389 +#: ../src/client/composer/composer-widget.vala:2028 msgid "_From:" msgstr "_Od:" +#. Translators: This is the name of the file chooser filter +#. when inserting an image in the composer. +#: ../src/client/composer/composer-widget.vala:2252 +msgid "Images" +msgstr "Obrázky" + +#: ../src/client/composer/spell-check-popover.vala:117 +msgid "Remove this language from the preferred list" +msgstr "Odebrat tento jazyk ze seznamu upřednostňovaných" + +#: ../src/client/composer/spell-check-popover.vala:121 +msgid "Add this language to the preferred list" +msgstr "Přidat tento jazyk do seznamu upřednostňovaných" + +#: ../src/client/composer/spell-check-popover.vala:217 +msgid "Search for more languages" +msgstr "Vyhledat další jazyky" + #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Já" -#: ../src/client/conversation-viewer/conversation-viewer.vala:414 -msgid "No conversations selected." -msgstr "Nebyla vybrána žádná konverzace." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:416 -#, c-format -msgid "%u conversation selected." -msgid_plural "%u conversations selected." -msgstr[0] "%u vybraná konverzace." -msgstr[1] "%u vybrané konverzace." -msgstr[2] "%u vybraných konverzací." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:446 -msgid "No search results found." -msgstr "Žádné výsledky vyhledávání." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:448 -msgid "No conversations in folder." -msgstr "Žádná konverzace ve složce." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "This message contains remote images." -msgstr "Tato zpráva obsahuje vzdálené obrázky. " - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "Show Images" -msgstr "Zobrazit obrázky" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:715 -msgid "Always Show From Sender" -msgstr "Vždy zobrazovat Od odesílatele" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:739 -msgid "Edit Draft" -msgstr "Upravit koncept" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:815 -msgid "From:" -msgstr "Od:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:818 -msgid "To:" -msgstr "Komu:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:821 -msgid "Cc:" -msgstr "Kopie:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:824 -msgid "Bcc:" -msgstr "Skrytá kopie:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:827 -msgid "Subject:" -msgstr "Předmět:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:830 -msgid "Date:" -msgstr "Datum:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1150 -#, c-format -msgid "%u read message" -msgid_plural "%u read messages" -msgstr[0] "%u přečtená zpráva" -msgstr[1] "%u přečtené zprávy" -msgstr[2] "%u přečtených zpráv" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1282 -#, c-format -msgid "This message was sent successfully, but could not be saved to %s." -msgstr "Tato zpráva byla úspěšně odeslána, ale nelze ji uložit do %s" - -#. Add a menu item for copying the current selection. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1308 -#: ../ui/composer.glade.h:4 -msgid "_Copy" -msgstr "_Kopírovat" - -#. Add a menu item for copying the address. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1316 -msgid "Copy _Email Address" -msgstr "Kopírovat _e-mailovou adresu" - -#. Add a menu item for copying the link. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1321 -#: ../ui/composer.glade.h:17 -msgid "Copy _Link" -msgstr "Kopírovat _odkaz" - -#. Select message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1329 -msgid "Select _Message" -msgstr "Vybrat _zprávu" - -#. Inspect. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1341 -msgid "_Inspect" -msgstr "_Kontrolovat" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1572 -msgid "This link appears to go to" -msgstr "Tento odkaz vypadá, že míří na" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1573 -msgid "but actually goes to" -msgstr "ale ve skutečnosti jde na" - -#. If href doesn't look like a URL, something is fishy, so warn the user -#: ../src/client/conversation-viewer/conversation-viewer.vala:1628 -msgid " (Invalid?)" -msgstr " (neplatný?)" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1734 -msgid "_Save Image As..." -msgstr "_Uložit obrázek jako…" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1838 -msgid "_Save As..." -msgstr "_Uložit jako…" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1843 -msgid "Save All A_ttachments..." -msgstr "Uložit všechny pří_lohy…" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1863 -msgid "Save A_ttachment..." -msgid_plural "Save All A_ttachments..." -msgstr[0] "Uložit pří_lohu…" -msgstr[1] "Uložit pří_lohy…" -msgstr[2] "Uložit pří_lohy…" - -#. Reply to all on a message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1878 -msgid "Reply to _All" -msgstr "Odpovědět _všem" - -#. Mark as read/unread. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1895 -msgid "_Mark as Read" -msgstr "_Označit jako přečtené" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1899 -msgid "_Mark as Unread" -msgstr "_Označit jako nepřečtené" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1905 -msgid "Mark Unread From _Here" -msgstr "Označit jako nepřečtené z_de" - -#. Separator. -#. View original message source. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1920 -msgid "_View Source" -msgstr "_Zobrazit zdroj" - -#. Generate the attachment table. -#. / Placeholder filename for attachments with no filename. -#: ../src/client/conversation-viewer/conversation-viewer.vala:2245 -#: ../src/engine/rfc822/rfc822-utils.vala:392 -msgid "none" -msgstr "žádný" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:2380 -msgid "Failed to open default text editor." -msgstr "Nepodařilo se otevřít výchozí textový editor." - -#: ../src/client/conversation-viewer/conversation-web-view.vala:319 -#, c-format -msgid "%s - Conversation Inspector" -msgstr "%s – Inspektor konverzace" +#. Translators: This is the file type displayed for +#. attachments with unknown file types. +#: ../src/client/conversation-viewer/conversation-email.vala:124 +msgid "Unknown" +msgstr "Neznámý" + +#. Preview headers +#. Translators: This is displayed in place of the from address +#. when the message has no from address. +#: ../src/client/conversation-viewer/conversation-message.vala:331 +msgid "No sender" +msgstr "Bez odesilatele" + +#. Translators: This separates multiple 'from' +#. addresses in the header preview for a message. +#: ../src/client/conversation-viewer/conversation-message.vala:586 +msgid ", " +msgstr ", " + +#. Translators: This string is used as the HTML IMG ALT +#. attribute value when displaying an inline image in an email +#. that did not specify a file name. E.g. Image" +msgstr "Od " + +#: ../ui/conversation-message.ui.h:2 +msgid "1/1/1970\t" +msgstr "1.1.1970\t" + +#: ../ui/conversation-message.ui.h:3 +msgid "Preview body text." +msgstr "Náhled textu těla zprávy." + +#: ../ui/conversation-message.ui.h:4 +msgid "Sent by:" +msgstr "Odeslat jako:" + +#: ../ui/conversation-message.ui.h:5 +msgid "Reply to:" +msgstr "Odpovědět:" + +#: ../ui/conversation-message.ui.h:6 +msgid "Subject" +msgstr "Předmět" + +#: ../ui/conversation-message.ui.h:7 +msgid "To:" +msgstr "Komu:" + +#: ../ui/conversation-message.ui.h:8 +msgid "Cc:" +msgstr "Kopie:" + +#: ../ui/conversation-message.ui.h:9 +msgid "Bcc:" +msgstr "Skrytá kopie:" + +#: ../ui/conversation-message.ui.h:10 +msgid "Show Images" +msgstr "Zobrazit obrázky" + +#: ../ui/conversation-message.ui.h:11 +msgid "Always Show From Sender" +msgstr "Vždy zobrazovat Od odesílatele" + +#: ../ui/conversation-message.ui.h:12 +msgid "Remote images not shown" +msgstr "Vzdálené obrázky nejsou zobrazené" + +#: ../ui/conversation-message.ui.h:13 +msgid "Only show remote images from senders you trust." +msgstr "Vzdálené obrázky se zobrazují jen od odesilatelů, kterým důvěřujete." + +#: ../ui/conversation-message.ui.h:14 +msgid "But actually goes to:" +msgstr "ale ve skutečnosti jde na:" + +#: ../ui/conversation-message.ui.h:15 +msgid "The link appears to go to:" +msgstr "Tento odkaz vypadá, že míří na:" + +#: ../ui/conversation-message.ui.h:16 +msgid "Deceptive link found" +msgstr "Nalezen klamný odkaz" + +#: ../ui/conversation-message.ui.h:17 +msgid "The email sender may be leading you to the wrong web site." +msgstr "Odesilatel zprávy se vás snaží navést na nesprávné webové stránky." + +#: ../ui/conversation-message.ui.h:18 +msgid "If unsure, contact the sender and ask before continuing." +msgstr "" +"Pokud máte pochybnosti, před pokračování kontaktujte odesilatele a vše si " +"ověřte." + +#: ../ui/conversation-viewer.ui.h:1 +msgid "Find in conversation" +msgstr "Najít v konverzaci" + +#: ../ui/conversation-viewer.ui.h:2 +msgid "Find the previous occurrence of the search string." +msgstr "Najít předchozí výskyt hledaného řetězce." + +#: ../ui/conversation-viewer.ui.h:3 +msgid "Find the next occurrence of the search string." +msgstr "Najít následující výskyt hledaného řetězce." + #: ../ui/edit_alternate_emails.glade.h:1 msgid "Remove email address" msgstr "Odebrat e-mailové adresy" @@ -2068,6 +2195,247 @@ msgid "label" msgstr "štítek" +#: ../ui/gtk/help-overlay.ui.h:1 +msgid "Conversation Shortcuts" +msgstr "Klávesové zkratky konverzace" + +#: ../ui/gtk/help-overlay.ui.h:2 +msgctxt "shortcut window" +msgid "General" +msgstr "Obecné" + +#: ../ui/gtk/help-overlay.ui.h:3 +msgctxt "shortcut window" +msgid "Move focus to the next/previous pane" +msgstr "Přesunout zaměření na následující/předchozí panel" + +#: ../ui/gtk/help-overlay.ui.h:4 +msgctxt "shortcut window" +msgid "Move focus to conversation list" +msgstr "Přesunout zaměření na seznam konverzací" + +#: ../ui/gtk/help-overlay.ui.h:5 +msgctxt "shortcut window" +msgid "Detach composer window" +msgstr "Odpojit okno pro psaní zprávy" + +#: ../ui/gtk/help-overlay.ui.h:6 +msgctxt "shortcut window" +msgid "Close composer window" +msgstr "Zavřít okno pro psaní zprávy" + +#: ../ui/gtk/help-overlay.ui.h:7 +msgctxt "shortcut window" +msgid "Show keyboard shortcuts" +msgstr "Zobrazit klávesové zkratky" + +#: ../ui/gtk/help-overlay.ui.h:8 +msgctxt "shortcut window" +msgid "Show help" +msgstr "Zobrazit nápovědu" + +#: ../ui/gtk/help-overlay.ui.h:9 +msgctxt "shortcut window" +msgid "Quit the application" +msgstr "Ukončit aplikaci" + +#: ../ui/gtk/help-overlay.ui.h:10 +msgctxt "shortcut window" +msgid "Search" +msgstr "Hledat" + +#: ../ui/gtk/help-overlay.ui.h:11 +msgctxt "shortcut window" +msgid "Jump to search box" +msgstr "Přejít do vyhledávacího pole" + +#: ../ui/gtk/help-overlay.ui.h:12 +msgctxt "shortcut window" +msgid "Find in current conversation" +msgstr "Najít v aktuální konverzaci" + +#: ../ui/gtk/help-overlay.ui.h:13 +msgctxt "shortcut window" +msgid "Find next/previous in current conversation" +msgstr "Najít následující/předchozí v aktuální konverzaci" + +#: ../ui/gtk/help-overlay.ui.h:14 +msgctxt "shortcut window" +msgid "Actions" +msgstr "Činnosti" + +#: ../ui/gtk/help-overlay.ui.h:15 +msgctxt "shortcut window" +msgid "Compose a new message" +msgstr "Napsat novou zprávu" + +#: ../ui/gtk/help-overlay.ui.h:16 +msgctxt "shortcut window" +msgid "Reply to sender " +msgstr "Odpovědět odesilateli" + +#: ../ui/gtk/help-overlay.ui.h:17 +msgctxt "shortcut window" +msgid "Reply to all" +msgstr "Odpovědět všem" + +#: ../ui/gtk/help-overlay.ui.h:18 +msgctxt "shortcut window" +msgid "Forward" +msgstr "Přeposlat" + +#: ../ui/gtk/help-overlay.ui.h:19 +msgctxt "shortcut window" +msgid "Archive" +msgstr "Archivovat" + +#: ../ui/gtk/help-overlay.ui.h:20 +msgctxt "shortcut window" +msgid "Move to trash" +msgstr "Přesunout do koše" + +#: ../ui/gtk/help-overlay.ui.h:21 +msgctxt "shortcut window" +msgid "Toggle spam" +msgstr "Přepnout příznak nevyžadné zprávy" + +#: ../ui/gtk/help-overlay.ui.h:22 +msgctxt "shortcut window" +msgid "Move the conversation" +msgstr "Přesunout konverzaci" + +#: ../ui/gtk/help-overlay.ui.h:23 +msgctxt "shortcut window" +msgid "Label the conversation" +msgstr "Přidat konverzaci štítek" + +#: ../ui/gtk/help-overlay.ui.h:24 +msgctxt "shortcut window" +msgid "Mark read" +msgstr "Označit jako přečtené" + +#: ../ui/gtk/help-overlay.ui.h:25 +msgctxt "shortcut window" +msgid "Mark unread" +msgstr "Označit jako nepřečtené" + +#: ../ui/gtk/help-overlay.ui.h:26 +msgctxt "shortcut window" +msgid "View" +msgstr "Zobrazení" + +#: ../ui/gtk/help-overlay.ui.h:27 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Přiblížit" + +#: ../ui/gtk/help-overlay.ui.h:28 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Oddálit" + +#: ../ui/gtk/help-overlay.ui.h:29 +msgctxt "shortcut window" +msgid "Reset zoom" +msgstr "Výchozí přiblížení" + +#: ../ui/gtk/help-overlay.ui.h:30 +msgctxt "shortcut window" +msgid "Additional Shortcuts" +msgstr "Další klávesové zkratky" + +#: ../ui/gtk/help-overlay.ui.h:31 +msgctxt "shortcut window" +msgid "Star" +msgstr "Označit hvězdičkou" + +#: ../ui/gtk/help-overlay.ui.h:32 +msgctxt "shortcut window" +msgid "Unstar" +msgstr "Odebrat hvězdičku" + +#: ../ui/gtk/help-overlay.ui.h:33 +msgctxt "shortcut window" +msgid "Delete" +msgstr "Smazat" + +#: ../ui/gtk/help-overlay.ui.h:34 +msgctxt "shortcut window" +msgid "Jump to next (older) conversation" +msgstr "Přejít na následující (starší) konverzaci" + +#: ../ui/gtk/help-overlay.ui.h:35 +msgctxt "shortcut window" +msgid "Jump to previous (newer) conversation" +msgstr "Přejít na předchozí (novější) konverzaci" + +#: ../ui/gtk/help-overlay.ui.h:36 +msgid "Composer Shortcuts" +msgstr "Klávesové zkratky editoru" + +#: ../ui/gtk/help-overlay.ui.h:37 +msgctxt "shortcut window" +msgid "Quote text" +msgstr "Citovat text" + +#: ../ui/gtk/help-overlay.ui.h:38 +msgctxt "shortcut window" +msgid "Unquote text" +msgstr "Zrušit citaci textu" + +#: ../ui/gtk/help-overlay.ui.h:39 +msgctxt "shortcut window" +msgid "Send" +msgstr "Odeslat" + +#: ../ui/gtk/help-overlay.ui.h:40 +msgctxt "shortcut window" +msgid "Add attachment" +msgstr "Přidat přílohu" + +#: ../ui/gtk/help-overlay.ui.h:41 +msgctxt "shortcut window" +msgid "Rich text mode" +msgstr "Režim formátovaného textu" + +#: ../ui/gtk/help-overlay.ui.h:42 +msgctxt "shortcut window" +msgid "Bold text" +msgstr "Tučný text" + +#: ../ui/gtk/help-overlay.ui.h:43 +msgctxt "shortcut window" +msgid "Italicize text" +msgstr "Kurzíva" + +#: ../ui/gtk/help-overlay.ui.h:44 +msgctxt "shortcut window" +msgid "Underline text" +msgstr "Podtržený text" + +#: ../ui/gtk/help-overlay.ui.h:45 +msgctxt "shortcut window" +msgid "Strike text" +msgstr "Přeškrtnutý text" + +#: ../ui/gtk/help-overlay.ui.h:46 +msgctxt "shortcut window" +msgid "Insert a link" +msgstr "Vložit odkaz" + +#: ../ui/gtk/help-overlay.ui.h:47 +msgctxt "shortcut window" +msgid "Remove formatting" +msgstr "Odstranit formátování" + +#: ../ui/gtk/menus.ui.h:2 +msgid "A_ccounts" +msgstr "Úč_ty" + +#: ../ui/gtk/menus.ui.h:4 +msgid "_Keyboard Shortcuts" +msgstr "_Klávesové zkratky" + #: ../ui/login.glade.h:1 msgid "email@example.com" msgstr "e-mail@priklad.cz" @@ -2192,7 +2560,7 @@ msgid "Use IMAP cre_dentials" msgstr "Použít přihlašovací ú_daje IMAP" -#: ../ui/login.glade.h:34 ../ui/preferences.glade.h:5 +#: ../ui/login.glade.h:34 msgid "Composer" msgstr "Editor" @@ -2212,6 +2580,10 @@ msgid "_Download mail" msgstr "Stá_hnout e-mail" +#: ../ui/main-toolbar.ui.h:1 +msgid "Empty Spam or Trash folders" +msgstr "Vyprázdnit složku Nevyžádané nebo Koš" + #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" msgstr "Přihlašovací údaje SMTP" @@ -2228,47 +2600,43 @@ msgid "_Authenticate" msgstr "_Ověřit" -#: ../ui/preferences.glade.h:1 +#: ../ui/preferences-dialog.ui.h:1 msgid "Reading" msgstr "Čtení" -#: ../ui/preferences.glade.h:2 +#: ../ui/preferences-dialog.ui.h:2 msgid "_Automatically select next message" msgstr "_Automaticky vybrat další zprávu" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences-dialog.ui.h:3 msgid "_Display conversation preview" msgstr "_Zobrazit náhled konverzace" -#: ../ui/preferences.glade.h:4 +#: ../ui/preferences-dialog.ui.h:4 msgid "Use _three pane view" msgstr "Používat _třípanelové zobrazení" -#: ../ui/preferences.glade.h:6 -msgid "Enable _spell checking" -msgstr "Zapnout _kontrolu pravopisu" - -#: ../ui/preferences.glade.h:7 +#: ../ui/preferences-dialog.ui.h:5 msgid "Notifications" msgstr "Upozornění" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences-dialog.ui.h:6 msgid "_Play notification sounds" msgstr "_Přehrávat zvuková upozornění" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences-dialog.ui.h:7 msgid "Show _notifications for new mail" msgstr "Zobrazit _upozornění na nový e-mail" -#: ../ui/preferences.glade.h:10 +#: ../ui/preferences-dialog.ui.h:8 msgid "Always _watch for new mail" msgstr "_Vždy sledovat novou poštu" -#: ../ui/preferences.glade.h:11 +#: ../ui/preferences-dialog.ui.h:9 msgid "Geary will run in the background and notify of new mail" msgstr "Geary poběží na pozadí a bude oznamovat příchod nové pošty" -#: ../ui/preferences.glade.h:12 +#: ../ui/preferences-dialog.ui.h:10 msgid "Preferences" msgstr "Předvolby" diff -Nru geary-0.11.4/po/da.po geary-0.12.0/po/da.po --- geary-0.11.4/po/da.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/da.po 2017-10-02 11:25:21.000000000 +0000 @@ -4,15 +4,18 @@ # This file is distributed under the GNU LGPL, version 2.1. # # Translators: -# Nikolaj64 , 2013 -# Nikolaj64 , 2013 +# +# Nikolaj64 , 2013, 2014. +# Ask Hjorth Larsen , 2016. +# Alan Mortensen , 2016, 2017. msgid "" msgstr "" "Project-Id-Version: geary-0.4.1\n" -"Report-Msgid-Bugs-To: http://redmine.yorba.org/projects/geary\n" -"POT-Creation-Date: 2013-09-20 12:16-0700\n" -"PO-Revision-Date: 2013-09-21 14:10+0000\n" -"Last-Translator: Nikolaj64 \n" +"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" +"product=geary&keywords=I18N+L10N&component=internationalization\n" +"POT-Creation-Date: 2017-09-26 12:56+0000\n" +"PO-Revision-Date: 2017-09-27 17:21+0200\n" +"Last-Translator: Alan Mortensen \n" "Language-Team: Danish (http://www.transifex.com/projects/p/geary/language/" "da/)\n" "Language: da\n" @@ -20,362 +23,690 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.8.7.1\n" -#: ../../src/client/accounts/add-edit-page.vala:641 -msgid " • Connection error.\n" -msgstr " • Forbindelsesfejl.\n" +#. Translators: The application name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:2 +#: ../desktop/org.gnome.Geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 +msgid "Geary" +msgstr "Geary" + +#. Translators: The development team's name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:4 +msgid "Geary Development Team" +msgstr "Gearys udviklerhold" + +#. Translators: The application's summary / tagline +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:6 +#: ../desktop/org.gnome.Geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 +msgid "Send and receive email" +msgstr "Send og modtag e-mail" -#: ../../src/client/accounts/add-edit-page.vala:624 -msgid " • Email address already added to Geary.\n" -msgstr "• Email-adressen er allerede tilføjet til Geary\n" +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:7 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"Geary er et lille e-mailprogram til GNOME 3-skrivebordet som er bygget op " +"omkring samtaler. Det lader dig læse, finde og sende e-mail via en enkel, " +"moderne brugerflade." -#: ../../src/client/accounts/add-edit-page.vala:628 -msgid " • IMAP connection error.\n" -msgstr " • IMAP-forbindelsesfejl.\n" +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:8 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"Samtaler lader dig læse en hel samtale uden at skulle finde hver enkelt " +"meddelelse frem én ad gangen." -#: ../../src/client/accounts/add-edit-page.vala:631 -msgid " • IMAP username or password incorrect.\n" -msgstr " • Forkert brugernavn eller adgangskode til IMAP.\n" +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:9 +msgid "Geary’s features include:" +msgstr "Geary tilbyder:" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:10 +msgid "Quick email account setup" +msgstr "Hurtig opsætning af e-mailkonto" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:11 +msgid "Shows related messages together in conversations" +msgstr "Viser relaterede meddelelser sammen i samtaler" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:12 +msgid "Fast, full text and keyword search" +msgstr "Hurtig fuldtekst- og nøgleordssøgning" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:13 +msgid "Full-featured HTML and plain text message composer" +msgstr "Mange funktioner til redigering af HTML-meddelelser samt ren tekst" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:14 +msgid "Desktop notification of new mail" +msgstr "Skrivebordspåmindelser om ny e-mail" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:15 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" +msgstr "Kompatibel med GMail, Yahoo! Mail, Outlook.com og andre IMAP-servere" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:17 +msgid "Geary displaying a conversation" +msgstr "Geary som en samtale ser ud" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:19 +msgid "Geary showing the rich text composer" +msgstr "Geary som redigering af formateret tekst ser ud" + +#: ../desktop/org.gnome.Geary.desktop.in.h:2 +msgid "Email" +msgstr "E-mail" + +#: ../desktop/org.gnome.Geary.desktop.in.h:3 +msgid "Geary Email" +msgstr "Geary E-mail" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/org.gnome.Geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "" +"Mail;E-mail;Email;Post;E-post;Brev;E-brev;IMAP;GMail;Yahoo;Hotmail;Outlook;" -#: ../../src/client/accounts/add-edit-page.vala:621 -msgid " • Invalid account nickname.\n" -msgstr " • Ugyldigt kaldenavn til bruger.\n" +#: ../desktop/org.gnome.Geary.desktop.in.h:7 ../ui/gtk/menus.ui.h:1 +msgid "Compose Message" +msgstr "Skriv besked" -#: ../../src/client/accounts/add-edit-page.vala:634 -msgid " • SMTP connection error.\n" -msgstr " • SMTP-forbindelsesfejl.\n" +#: ../desktop/geary-autostart.desktop.in.h:2 +#: ../src/client/application/geary-application.vala:21 +msgid "Mail Client" +msgstr "E-mailklient" -#: ../../src/client/accounts/add-edit-page.vala:637 -msgid " • SMTP username or password incorrect.\n" -msgstr " • Forkert brugernavn eller adgangskode til SMTP.\n" +#: ../desktop/geary-autostart.desktop.in.h:3 +msgid "Geary Mail" +msgstr "Geary mail" -#: ../../src/client/accounts/add-edit-page.vala:645 -msgid " • Username or password incorrect.\n" -msgstr " • Forkert brugernavn eller adgangskode.\n" +#: ../desktop/geary-autostart.desktop.in.h:5 +msgid "Email;E-mail;Mail;" +msgstr "Email;E-mail;Mail;Post;E-brev;" -#: ../../src/client/views/conversation-viewer.vala:1203 -msgid " (Invalid?)" -msgstr "(Ugyldig?)" +#: ../desktop/geary-attach.contract.in.h:1 +msgid "Send by email" +msgstr "Send via e-mail" + +#: ../desktop/geary-attach.contract.in.h:2 +msgid "Send files using Geary" +msgstr "Send filer med Geary" + +#: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 +#: ../src/client/components/stock.vala:31 +#: ../ui/conversation-email-menus.ui.h:10 +msgid "_Save" +msgstr "_Gem" -#: ../../src/client/composer/composer-window.vala:972 -#, c-format -msgid "\"%s\" already attached for delivery." -msgstr "\"%s\" er allerede vedhæftet." +#: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 +#: ../src/client/components/stock.vala:22 +msgid "_Add" +msgstr "Til_føj" -#: ../../src/client/composer/composer-window.vala:937 +#. reset/clear widgets +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 #, c-format -msgid "\"%s\" could not be found." -msgstr "\"%s\" blev ikke fundet." +msgid "Additional addresses for %s" +msgstr "Yderligere adresser for %s" -#: ../../src/client/composer/composer-window.vala:965 -#, c-format -msgid "\"%s\" could not be opened for reading." -msgstr "\"%s\" kunne ikke åbnes til læsning." +#. Sets min size. +#: ../src/client/accounts/account-dialog.vala:21 +msgid "Accounts" +msgstr "Konti" -#: ../../src/client/composer/composer-window.vala:944 -#, c-format -msgid "\"%s\" is a folder." -msgstr "\"%s\" er en mappe." +#. Copyright 2016 Software Freedom Conservancy Inc. +#. * +#. * This software is licensed under the GNU Lesser General Public License +#. * (version 2.1 or later). See the COPYING file in this distribution. +#. +#. Page for adding or editing an account. +#. / Placeholder text indicating that the user should type their first name and last name +#: ../src/client/accounts/add-edit-page.vala:10 +msgid "First Last" +msgstr "Fornavn Efternavn" -#: ../../src/client/composer/composer-window.vala:951 -#, c-format -msgid "\"%s\" is an empty file." -msgstr "\"%s\" er en tom fil." +#: ../src/client/accounts/add-edit-page.vala:235 +msgid "Welcome to Geary." +msgstr "Velkommen til Geary." -#. / Date format that shows the weekday (Monday, Tuesday, ...) -#. / See http://developer.gnome.org/glib/2.32/glib-GDateTime.html#g-date-time-format -#: ../../src/client/util/util-date.vala:182 -#, c-format -msgid "%A" -msgstr "%A" +#: ../src/client/accounts/add-edit-page.vala:235 +msgid "Enter your account information to get started." +msgstr "Indtast kontoinformation for at starte." -#. / Verbose datetime format for 24-hour time, i.e. November 8, 2010 16:35 -#. / See http://developer.gnome.org/glib/2.32/glib-GDateTime.html#g-date-time-format -#: ../../src/client/util/util-date.vala:91 -msgid "%B %-e, %Y %-H:%M" -msgstr "%-e. %B %Y %-H:%M" +#: ../src/client/accounts/add-edit-page.vala:255 +msgid "2 weeks back" +msgstr "2 uger siden" -#. / Verbose datetime format for 12-hour time, i.e. November 8, 2010 8:42 am -#. / See http://developer.gnome.org/glib/2.32/glib-GDateTime.html#g-date-time-format -#: ../../src/client/util/util-date.vala:88 -msgid "%B %-e, %Y %-l:%M %P" -msgstr "%-e. %B %Y %-l:%M %P" +#. IDs are # of days +#: ../src/client/accounts/add-edit-page.vala:256 +msgid "1 month back" +msgstr "1 måned siden" -#. / Verbose datetime format for the locale default (full month, day and time) -#. / See http://developer.gnome.org/glib/2.32/glib-GDateTime.html#g-date-time-format -#: ../../src/client/util/util-date.vala:94 -msgctxt "Default full date" -msgid "%B %-e, %Y %-l:%M %P" -msgstr "%-e. %B %Y %-l:%M %P" +#: ../src/client/accounts/add-edit-page.vala:257 +msgid "3 months back" +msgstr "3 måneder siden" -#. / Datetime format for 24-hour time, i.e. 16:35 -#. / See http://developer.gnome.org/glib/2.32/glib-GDateTime.html#g-date-time-format -#: ../../src/client/util/util-date.vala:71 -msgid "%H:%M" -msgstr "%H:%M" +#: ../src/client/accounts/add-edit-page.vala:258 +msgid "6 months back" +msgstr "6 måneder siden" -#. / Format for the datetime that a message being replied to was received -#. / See http://developer.gnome.org/glib/2.32/glib-GDateTime.html#g-date-time-format -#: ../../src/engine/rfc822/rfc822-utils.vala:165 -msgid "%a, %b %-e, %Y at %-l:%M %p" -msgstr "%a den %-e. %b %Y, klokken %H:%M %p" +#: ../src/client/accounts/add-edit-page.vala:259 +msgid "1 year back" +msgstr "1 år siden" -#. / Date format for dates within the current year, i.e. Nov 8 -#. / See http://developer.gnome.org/glib/2.32/glib-GDateTime.html#g-date-time-format -#: ../../src/client/util/util-date.vala:78 -msgid "%b %-e" -msgstr "%-e. %b" +#: ../src/client/accounts/add-edit-page.vala:260 +msgid "2 years back" +msgstr "2 år siden" + +#: ../src/client/accounts/add-edit-page.vala:261 +msgid "4 years back" +msgstr "4 år siden" -#: ../../src/client/folder-list/folder-list-folder-entry.vala:30 -#, c-format -msgid "%d message" -msgid_plural "%d messages" -msgstr[0] "%d besked" -msgstr[1] "%d beskeder" +#. Separator +#: ../src/client/accounts/add-edit-page.vala:263 +msgid "Everything" +msgstr "Alt" -#: ../../src/client/notification/libnotify.vala:72 -#, c-format -msgid "%d new message" -msgid_plural "%d new messages" -msgstr[0] "%d ny besked" -msgstr[1] "%d nye beskeder" +#: ../src/client/accounts/add-edit-page.vala:283 +msgid "Edit" +msgstr "Redigér" + +#: ../src/client/accounts/add-edit-page.vala:285 +msgid "Preview" +msgstr "Forhåndsvisning" -#: ../../src/client/folder-list/folder-list-search-branch.vala:43 -#, c-format -msgid "%d results" -msgstr "%d resultater" +#: ../src/client/accounts/add-edit-page.vala:751 +msgid "Remem_ber passwords" +msgstr "Hus_k adgangskoder" -#. / Label displaying number of unread email messages in a folder -#: ../../src/client/folder-list/folder-list-folder-entry.vala:37 -#, c-format -msgid "%d unread" -msgid_plural "%d unread" -msgstr[0] "%d ulæst" -msgstr[1] "%d ulæste" +#: ../src/client/accounts/add-edit-page.vala:758 ../ui/login.glade.h:7 +msgid "Remem_ber password" +msgstr "Hu_sk adgangskode" -#: ../../src/client/util/util-date.vala:170 -#, c-format -msgid "%dh ago" -msgstr "%dt siden" +#: ../src/client/accounts/add-edit-page.vala:792 +msgid "Unable to validate:\n" +msgstr "Kunne ikke validere:\n" -#: ../../src/client/util/util-date.vala:167 -#, c-format -msgid "%dm ago" -msgstr "%dm siden" +#: ../src/client/accounts/add-edit-page.vala:794 +msgid " • Invalid account nickname.\n" +msgstr " • Ugyldigt kaldenavn til bruger.\n" -#: ../../src/client/views/conversation-find-bar.vala:222 -#, c-format -msgid "%i matches" -msgstr "%i matchede" +#: ../src/client/accounts/add-edit-page.vala:797 +msgid " • Email address already added to Geary.\n" +msgstr " • E-mailadressen er allerede tilføjet til Geary.\n" -#: ../../src/client/views/conversation-find-bar.vala:224 -#, c-format -msgid "%i matches (wrapped)" -msgstr "%i matchede (ombrudt)" +#: ../src/client/accounts/add-edit-page.vala:801 +msgid " • IMAP connection error.\n" +msgstr " • IMAP-forbindelsesfejl.\n" -#. / Datetime format for 12-hour time, i.e. 8:31 am -#. / See http://developer.gnome.org/glib/2.32/glib-GDateTime.html#g-date-time-format -#: ../../src/client/util/util-date.vala:68 -msgid "%l:%M %P" -msgstr "%l:%M %P" +#: ../src/client/accounts/add-edit-page.vala:804 +msgid " • IMAP username or password incorrect.\n" +msgstr " • Forkert brugernavn eller adgangskode til IMAP.\n" -#. / Datetime format for the locale default, i.e. 8:31 am or 16:35, -#. / See http://developer.gnome.org/glib/2.32/glib-GDateTime.html#g-date-time-format -#: ../../src/client/util/util-date.vala:74 -msgctxt "Default clock format" -msgid "%l:%M %P" -msgstr "%H:%M" +#: ../src/client/accounts/add-edit-page.vala:807 +msgid " • SMTP connection error.\n" +msgstr " • SMTP-forbindelsesfejl.\n" -#: ../../src/client/notification/libnotify.vala:107 -#, c-format -msgid "" -"%s\n" -"(%d other new message for %s)" -msgid_plural "" -"%s\n" -"(%d other new messages for %s)" -msgstr[0] "" -"%s\n" -"(%d anen ny beksed for %s)" -msgstr[1] "" -"%s\n" -"(%d andre nye beskeder for %s)" +#: ../src/client/accounts/add-edit-page.vala:810 +msgid " • SMTP username or password incorrect.\n" +msgstr " • Forkert brugernavn eller adgangskode til SMTP.\n" -#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../../src/client/composer/composer-window.vala:981 -#, c-format -msgid "%s (%s)" -msgstr "%s (%s)" +#: ../src/client/accounts/add-edit-page.vala:814 +msgid " • Connection error.\n" +msgstr " • Forbindelsesfejl.\n" -#: ../../src/client/views/conversation-web-view.vala:289 -#, c-format -msgid "%s - Conversation Inspector" -msgstr "%s - Samtaleundersøger" +#: ../src/client/accounts/add-edit-page.vala:818 +msgid " • Username or password incorrect.\n" +msgstr " • Forkert brugernavn eller adgangskode.\n" -#: ../../src/client/notification/libmessagingmenu.vala:75 -#, c-format -msgid "%s - New Messages" -msgstr "%s - Nye beskeder" +#: ../src/client/application/geary-application.vala:22 +msgid "Copyright 2016 Software Freedom Conservancy Inc." +msgstr "Ophavsret 2016 Software Freedom Conservancy Inc." -#. / The quoted header for a message being replied to (in case the date is not known). -#. / %s will be replaced by the original sender. -#: ../../src/engine/rfc822/rfc822-utils.vala:178 -#, c-format -msgid "%s wrote:" -msgstr "%s skrev:" +#: ../src/client/application/geary-application.vala:24 +msgid "Visit the Geary web site" +msgstr "Besøg Gearys hjemmeside" -#: ../../src/client/notification/libnotify.vala:75 +#: ../src/client/application/geary-application.vala:464 #, c-format -msgid "%s, %d new message total" -msgid_plural "%s, %d new messages total" -msgstr[0] "%s, %d ny besked i alt" -msgstr[1] "%s, %d nye beskeder i alt" +msgid "About %s" +msgstr "Om %s" -#. / This string represents the divider between two messages: "n messages" and "n unread", -#. / shown in the folder list as a tooltip. Please use your languages conventions for -#. / combining the two, i.e. a comma (",") for English; "6 messages, 3 unread" -#: ../../src/client/folder-list/folder-list-folder-entry.vala:43 -#, c-format -msgid "%s, %s" -msgstr "%s, %s" +#. Translators: add your name and email address to receive +#. credit in the About dialog For example: Yamada Taro +#. +#: ../src/client/application/geary-application.vala:468 +msgid "translator-credits" +msgstr "" +"Nikolaj Holmquist Pedersen \n" +"Ask Hjorth Larsen \n" +"Alan Mortensen \n" +"\n" +"Dansk-gruppen \n" +"Mere info: http://www.dansk-gruppen.dk" -#: ../../src/client/views/conversation-viewer.vala:246 -#, c-format -msgid "%u conversations selected." -msgstr "%u samtaler valgt." +#: ../src/client/application/geary-args.vala:10 +msgid "Start Geary with hidden main window" +msgstr "Start Geary med skjult hovedvindue" -#: ../../src/client/views/conversation-viewer.vala:743 -#, c-format -msgid "%u read messages" -msgstr "%u læste beskeder" +#: ../src/client/application/geary-args.vala:11 +msgid "Output debugging information" +msgstr "Vis fejlretningsinformation" -#. / Date format for dates within a different year, i.e. 02/04/10 -#. / See http://developer.gnome.org/glib/2.32/glib-GDateTime.html#g-date-time-format -#: ../../src/client/util/util-date.vala:83 -#, no-c-format -msgid "%x" -msgstr "%x" +#: ../src/client/application/geary-args.vala:12 +msgid "Log conversation monitoring" +msgstr "Log samtaleovervågning" -#: ../../src/client/util/util-email.vala:30 -msgid "(no subject)" -msgstr "(intet emne)" +#: ../src/client/application/geary-args.vala:13 +msgid "Log network deserialization" +msgstr "Log netværksdeserialisering" -#: ../../src/engine/rfc822/rfc822-utils.vala:211 -msgid "---------- Forwarded message ----------" -msgstr "---------- Videresendt besked ----------" +#: ../src/client/application/geary-args.vala:14 +msgid "Log network activity" +msgstr "Log netværksaktivitet" -#: ../../src/client/accounts/add-edit-page.vala:211 -msgid "1 month back" -msgstr "1 måned siden" +#. / The IMAP replay queue is how changes on the server are replicated on the client. +#. / It could also be called the IMAP events queue. +#: ../src/client/application/geary-args.vala:17 +msgid "Log IMAP replay queue" +msgstr "Log køen af IMAP-hændelser" -#: ../../src/client/accounts/add-edit-page.vala:214 -msgid "1 year back" -msgstr "1 år siden" +#. / Serialization is how commands and responses are converted into a stream of bytes for +#. / network transmission +#: ../src/client/application/geary-args.vala:20 +msgid "Log network serialization" +msgstr "Log netværksserialisering" -#: ../../src/client/accounts/add-edit-page.vala:210 -msgid "2 weeks back" -msgstr "2 uger siden" +#: ../src/client/application/geary-args.vala:21 +msgid "Log periodic activity" +msgstr "Log periodisk aktivitet" -#: ../../src/client/accounts/add-edit-page.vala:212 -msgid "3 months back" -msgstr "3 måneder siden" +#: ../src/client/application/geary-args.vala:22 +msgid "Log database queries (generates lots of messages)" +msgstr "Log databaseforespørgsler (generérer mange meddelelser)" -#: ../../src/client/accounts/add-edit-page.vala:213 -msgid "6 months back" -msgstr "6 måneder siden" +#. / "Normalization" can also be called "synchronization" +#: ../src/client/application/geary-args.vala:24 +msgid "Log folder normalization" +msgstr "Log mappenormalisering" -#: ../../ui/remove_confirm.glade:43 -msgid "" -"Are you sure you want to remove this " -"account? " -msgstr "" -"Er du sikker på, at du vil fjerne " -"denne konto? " +#: ../src/client/application/geary-args.vala:25 +msgid "Allow inspection of WebView" +msgstr "Aktiver undersøgelse af web-visning" -#: ../../ui/account_cannot_remove.glade:40 -msgid "Cannot remove account " -msgstr "Kan ikke fjerne konto" +#: ../src/client/application/geary-args.vala:26 +msgid "Revoke all server certificates with TLS warnings" +msgstr "Tilbagekald alle servercertifikater med TLS-advarsler" + +#: ../src/client/application/geary-args.vala:27 +msgid "Perform a graceful quit" +msgstr "Afslut på kontrolleret vis" -#: ../../ui/account_cannot_remove.glade:56 -msgid "" -"A composer window associated with this account is currently open. Send or " -"discard the message and try again." -msgstr "" -"Et beskedskrivningsvindue associéret med denne bruger er i forvejen åbent." -"Send eller kassér beskeden og prøv igen." +#: ../src/client/application/geary-args.vala:28 +msgid "Display program version" +msgstr "Vis programversion" -#: ../../src/client/geary-controller.vala:1491 +#. This gives a command-line hint on how to open new composer windows with mailto: +#: ../src/client/application/geary-args.vala:53 #, c-format -msgid "A file named \"%s\" already exists. Do you want to replace it?" -msgstr "Filen \"%s\" findes allerede. Vil du erstatte den?" +msgid "Use %s to open a new composer window" +msgstr "Brug %s for at åbne et nyt redigeringsvindue" -#: ../../src/client/geary-controller.vala:245 -msgid "A_ccounts" -msgstr "_Konti" +#: ../src/client/application/geary-args.vala:54 +msgid "Please report comments, suggestions and bugs to:" +msgstr "Send kommentarer, idéer og fejlrapporter til:" -#: ../../src/client/geary-controller.vala:1227 +#. i18n: Command line arguments are invalid +#: ../src/client/application/geary-args.vala:61 #, c-format -msgid "About %s" -msgstr "Om %s" +msgid "Failed to parse command line options: %s\n" +msgstr "Kunne ikke genkende indstillingerne på kommandolinjen: %s\n" -#: ../../src/client/accounts/account-dialog.vala:21 -msgid "Accounts" -msgstr "Konti" +#: ../src/client/application/geary-args.vala:72 +#, c-format +msgid "Unrecognized command line option “%s”\n" +msgstr "Ukendt kommandolinje-indstilling \"%s\"\n" -#: ../../ui/account_list.glade:71 -msgid "Add account" -msgstr "Tilføj konto" +#: ../src/client/application/geary-controller.vala:57 +msgid "Delete conversation" +msgstr "Slet samtale" + +#: ../src/client/application/geary-controller.vala:58 +msgid "Delete conversation (Shift+Delete)" +msgstr "Slet samtale (skift+delete)" + +#: ../src/client/application/geary-controller.vala:59 +msgid "Delete conversations (Shift+Delete)" +msgstr "Slet samtaler (skift+delete)" + +#. This refers to the action ("move email to the trash"), not the Trash folder itself +#: ../src/client/application/geary-controller.vala:63 +msgid "Move conversation to Trash (Delete, Backspace)" +msgstr "Flyt samtalen til papirkurven (delete, tilbagetast)" + +#: ../src/client/application/geary-controller.vala:64 +msgid "Move conversations to Trash (Delete, Backspace)" +msgstr "Flyt samtalerne til papirkurven (delete, tilbagetast)" -#: ../../src/client/geary-controller.vala:304 -msgid "Add label" -msgstr "Tilføj etiket" +#. This refers to the action ("archive an email"), not the Archive folder itself +#: ../src/client/application/geary-controller.vala:68 +msgid "_Archive" +msgstr "_Arkivér" + +#: ../src/client/application/geary-controller.vala:69 +msgid "Archive conversation (A)" +msgstr "Arkivér samtale (A)" + +#: ../src/client/application/geary-controller.vala:70 +msgid "Archive conversations (A)" +msgstr "Arkivér samtaler (A)" -#: ../../src/client/geary-controller.vala:57 +#: ../src/client/application/geary-controller.vala:73 +msgid "Mark as S_pam" +msgstr "Markér som s_pam" + +#: ../src/client/application/geary-controller.vala:74 +msgid "Mark as not S_pam" +msgstr "Marker som ikke s_pam" + +#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:448 +msgid "Mark conversation" +msgstr "Markér samtale" + +#: ../src/client/application/geary-controller.vala:77 +msgid "Mark conversations" +msgstr "Markér samtaler" + +#: ../src/client/application/geary-controller.vala:78 msgid "Add label to conversation" msgstr "Tilføj label til samtale" -#: ../../src/client/geary-controller.vala:58 +#: ../src/client/application/geary-controller.vala:79 msgid "Add label to conversations" msgstr "Tilføj label til samtaler" -#: ../../src/engine/api/geary-special-folder-type.vala:39 -msgid "All Mail" -msgstr "Al mail" - -#: ../../ui/remove_confirm.glade:58 -msgid "" -"All email associated with this account will be removed from your computer. " -"This will not affect email on the server." -msgstr "" -"Al email, der tilhører denne konto vil blive fjernet fra din computer. Dette " -"vil ikke fjerne emailen på serveren." +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:487 +msgid "Move conversation" +msgstr "Flyt samtale" -#: ../../src/client/geary-args.vala:24 -msgid "Allow inspection of WebView" -msgstr "Aktiver undersøgelse af web-visning" +#: ../src/client/application/geary-controller.vala:81 +msgid "Move conversations" +msgstr "Flyt samtaler" -#: ../../src/client/views/conversation-viewer.vala:509 -msgid "Always Show From Sender" -msgstr "Vis altid fra denne afsender" +#: ../src/client/application/geary-controller.vala:450 +msgid "_Mark as…" +msgstr "_Markér som …" -#: ../../src/engine/api/geary-special-folder-type.vala:54 -msgid "Archive" -msgstr "Arkiv" +#: ../src/client/application/geary-controller.vala:456 +msgid "Mark as _Read" +msgstr "Markér som _læst" -#: ../../src/client/geary-controller.vala:48 -msgid "Archive conversation (Delete, Backspace, A)" -msgstr "Arkivér samtale (Delete, Backspace, A)" +#: ../src/client/application/geary-controller.vala:462 +msgid "Mark as _Unread" +msgstr "Markér som _ulæst" -#: ../../src/client/geary-controller.vala:49 -msgid "Archive conversations (Delete, Backspace, A)" -msgstr "Arkivér samtaler (Delete, Backspace, A)" +#: ../src/client/application/geary-controller.vala:468 +msgid "_Star" +msgstr "St_jern" + +#: ../src/client/application/geary-controller.vala:473 +msgid "U_nstar" +msgstr "Stj_ern ikke" + +#: ../src/client/application/geary-controller.vala:483 +msgid "Add label" +msgstr "Tilføj etiket" + +#: ../src/client/application/geary-controller.vala:484 +msgid "_Label" +msgstr "_Etiket" + +#: ../src/client/application/geary-controller.vala:488 +msgid "_Move" +msgstr "_Flyt" + +#: ../src/client/application/geary-controller.vala:492 +msgid "Compose new message (Ctrl+N, N)" +msgstr "Skriv ny besked (Ctrl+N, N)" + +#: ../src/client/application/geary-controller.vala:496 +#: ../ui/conversation-email-menus.ui.h:1 +msgid "_Reply" +msgstr "_Svar" + +#: ../src/client/application/geary-controller.vala:497 +msgid "Reply (Ctrl+R, R)" +msgstr "Svar (Ctrl+R, R)" + +#: ../src/client/application/geary-controller.vala:501 +msgid "R_eply All" +msgstr "S_var til alle" + +#: ../src/client/application/geary-controller.vala:502 +msgid "Reply all (Ctrl+Shift+R, Shift+R)" +msgstr "Svar til alle (Ctrl+Skift+R, Skift+R)" + +#: ../src/client/application/geary-controller.vala:507 +#: ../ui/conversation-email-menus.ui.h:3 +msgid "_Forward" +msgstr "_Videresend" + +#: ../src/client/application/geary-controller.vala:508 +msgid "Forward (Ctrl+L, F)" +msgstr "Videresend (Ctrl+L, F)" + +#: ../src/client/application/geary-controller.vala:538 +msgid "Empty _Spam…" +msgstr "Tøm _spam…" + +#: ../src/client/application/geary-controller.vala:542 +msgid "Empty _Trash…" +msgstr "Tøm _papirkurv…" + +#. No callback is connected, since we bind the toggle button to the search bar visibility +#: ../src/client/application/geary-controller.vala:574 +msgid "Toggle search bar" +msgstr "Slå søgebjælke til/fra" + +#. No callback is connected, since we bind the toggle button to the find bar visibility +#: ../src/client/application/geary-controller.vala:579 +msgid "Toggle find bar" +msgstr "Slå find-bjælke til/fra" + +#: ../src/client/application/geary-controller.vala:757 +msgid "Unable to store server trust exception" +msgstr "Kan ikke gemme undtagelse for tillid til server" + +#: ../src/client/application/geary-controller.vala:992 +msgid "Your settings are insecure" +msgstr "Dine indstillinger er usikre" + +#: ../src/client/application/geary-controller.vala:993 +msgid "" +"Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " +"username and password could be read by another person on the network. Are " +"you sure you want to do this?" +msgstr "" +"Dine IMAP- og/eller SMTP-indstillinger anvender ikke SSL eller TLS. Dette " +"betyder, at dit brugernavn og din adgangskode kan læses af andre på " +"netværket. Er du sikker på, at du vil gære dette?" + +#: ../src/client/application/geary-controller.vala:994 +msgid "Co_ntinue" +msgstr "F_ortsæt" + +#: ../src/client/application/geary-controller.vala:1041 +msgid "Error connecting to the server" +msgstr "Fejl i forsøget på at forbinde til serveren" -#: ../../src/client/geary-controller.vala:1477 +#: ../src/client/application/geary-controller.vala:1042 +msgid "" +"Geary encountered an error while connecting to the server. Please try again " +"in a few moments." +msgstr "" +"Geary stødte på en fejl i forsøget på at forbinde til serveren. Prøv igen om " +"lidt." + +#. / Displayed in the space-limited status bar when a message fails to be sent due to error. +#: ../src/client/application/geary-controller.vala:1079 +#: ../src/client/components/status-bar.vala:29 +msgid "Error sending email" +msgstr "Der opstod en fejl ved afsendelse af e-mail" + +#: ../src/client/application/geary-controller.vala:1080 +msgid "" +"Geary encountered an error sending an email. If the problem persists, " +"please manually delete the email from your Outbox folder." +msgstr "" +"Geary stødte ind i en fejl under afsendelse af en e-mail. Hvis dette problem " +"fortsætter, bør du manuelt slette beskeden fra din \"Udbakke\"-mappe." + +#. Displayed in the space-limited status bar when a message fails to be uploaded +#. to Sent Mail after being sent. +#: ../src/client/application/geary-controller.vala:1084 +#: ../src/client/components/status-bar.vala:33 +msgid "Error saving sent mail" +msgstr "Der opstod en fejl ved lagring af den afsendte e-mail" + +#: ../src/client/application/geary-controller.vala:1085 +msgid "" +"Geary encountered an error saving a sent message to Sent Mail. The message " +"will stay in your Outbox folder until you delete it." +msgstr "" +"Der opstod en fejl, da Geary forsøgte på at gemme en sendt besked til mappen " +"med afsendt e-mail. Beskeden vil blive i din Udbakke, indtil du sletter den." + +#: ../src/client/application/geary-controller.vala:1154 +msgid "Labels" +msgstr "Etiketter" + +#. give the user two options: reset the Account local store, or exit Geary. A third +#. could be done to leave the Account in an unopened state, but we don't currently +#. have provisions for that. +#: ../src/client/application/geary-controller.vala:1166 #, c-format -msgid "Are you sure you want to open \"%s\"?" -msgstr "Er du sikker på, at du vil åbne \"%s\"?" +msgid "Unable to open the database for %s" +msgstr "Kunne ikke åbne databasen for %s" -#: ../../src/client/geary-controller.vala:1478 +#: ../src/client/application/geary-controller.vala:1167 +#, c-format +msgid "" +"There was an error opening the local mail database for this account. This is " +"possibly due to corruption of the database file in this directory:\n" +"\n" +"%s\n" +"\n" +"Geary can rebuild the database and re-synchronize with the server or exit.\n" +"\n" +"Rebuilding the database will destroy all local email and its attachments. " +"The mail on the your server will not be affected." +msgstr "" +"Der opstod en felj under åbningen af den lokale e-maildatabase til denne " +"konto. Dette sker sikkert på grund af, at databasefilen er beskadiget\n" +"\n" +"%s\n" +"\n" +"Geary kan genopbygge databasefilen og synkronisére med serveren igen eller " +"afslutte.\n" +"\n" +"Genopbygning af databasen vil slette al lokal e-mail og dets vedhæftede " +"filer. Mail'en på serveren vil ikke blive rørt." + +#: ../src/client/application/geary-controller.vala:1169 +msgid "_Rebuild" +msgstr "_Genopbyg" + +#: ../src/client/application/geary-controller.vala:1169 +msgid "E_xit" +msgstr "_Afslut" + +#: ../src/client/application/geary-controller.vala:1178 +#, c-format +msgid "Unable to rebuild database for “%s”" +msgstr "Kunne ikke genopbygge databasen for \"%s\"" + +#: ../src/client/application/geary-controller.vala:1179 +#, c-format +msgid "" +"Error during rebuild:\n" +"\n" +"%s" +msgstr "" +"Der opstod en fejl under genopbygning:\n" +"\n" +"%s" + +#. some other problem opening the account ... as with other flow path, can't run +#. Geary today with an account in unopened state, so have to exit +#: ../src/client/application/geary-controller.vala:1201 +#: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:1222 +#, c-format +msgid "Unable to open local mailbox for %s" +msgstr "Kunne ikke åbne den lokale postkasse for %s" + +#: ../src/client/application/geary-controller.vala:1202 +#, c-format +msgid "" +"There was an error opening the local mail database for this account. This is " +"possibly due to a file permissions problem.\n" +"\n" +"Please check that you have read/write permissions for all files in this " +"directory:\n" +"\n" +"%s" +msgstr "" +"Der opstod en fejl under åbningen af den lokale e-maildatabase til denne " +"konto. Dette sker sikkert på grund af problemer med filrettigheder.\n" +"\n" +"Tjek at du har læse- og skriverettigheder for alle filer i denne mappe.\n" +"\n" +"%s" + +#: ../src/client/application/geary-controller.vala:1212 +msgid "" +"The version number of the local mail database is formatted for a newer " +"version of Geary. Unfortunately, the database cannot be “rolled back” to " +"work with this version of Geary.\n" +"\n" +"Please install the latest version of Geary and try again." +msgstr "" +"Den lokale e-maildatabases versionsnummer er til en nyere version af Geary. " +"Desværre kan databasen ikke blive \"rullet tilbage\", så den virker med " +"denne version of Geary.\n" +"\n" +"Installér venligst den nyeste version af Geary og prøv igen." + +#: ../src/client/application/geary-controller.vala:1223 +msgid "" +"There was an error opening the local account. This is probably due to " +"connectivity issues.\n" +"\n" +"Please check your network connection and restart Geary." +msgstr "" +"Der opstod en felj under åbning af den lokele konto. Dette sker sikkert på " +"grund af forbindelsesproblemer.\n" +"\n" +"Tjek, at din internetforbindelse virker og genstart derefter Geary." + +#: ../src/client/application/geary-controller.vala:1999 +msgid "Undo move (Ctrl+Z)" +msgstr "Fortryd flyt (Ctrl+Z)" + +#: ../src/client/application/geary-controller.vala:2009 +msgid "Are you sure you want to open these attachments?" +msgstr "Er du sikker på, at du vil åbne disse vedhæftede filer?" + +#: ../src/client/application/geary-controller.vala:2010 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -383,1170 +714,2076 @@ "Vedhæftede filer kan skade dit system, når de åbnes. Åbn kun filer fra " "folk, du stoler på." -#: ../../src/client/views/conversation-viewer.vala:614 -msgid "Bcc:" -msgstr "Bcc:" +#: ../src/client/application/geary-controller.vala:2011 +msgid "Don’t _ask me again" +msgstr "S_pørg mig ikke igen" -#: ../../ui/composer.glade:113 -msgid "Bold (Ctrl+B)" -msgstr "Fed (Ctrl+B)" +#: ../src/client/application/geary-controller.vala:2121 +#, c-format +msgid "A file named “%s” already exists. Do you want to replace it?" +msgstr "Filen \"%s\" findes allerede. Vil du erstatte den?" -#: ../../ui/composer.glade:69 -msgid "C_olor" -msgstr "F_arve" +#: ../src/client/application/geary-controller.vala:2123 +#, c-format +msgid "" +"The file already exists in “%s”. Replacing it will overwrite its contents." +msgstr "" +"Filen findes allerede i \"%s\". Hvis du erstatter den, overskrives dens " +"indhold." -#: ../../src/client/composer/composer-window.vala:926 -msgid "Cannot add attachment" -msgstr "Kan ikke tilføje filen" +#: ../src/client/application/geary-controller.vala:2126 +msgid "_Replace" +msgstr "_Erstat" -#: ../../src/client/views/conversation-viewer.vala:611 -msgid "Cc:" -msgstr "Cc:" +#. Find out what to do with the inline composers. +#. TODO: Remove this in favor of automatically saving drafts +#: ../src/client/application/geary-controller.vala:2374 +msgid "Close open draft messages?" +msgstr "Luk åbne kladder?" -#: ../../src/engine/rfc822/rfc822-utils.vala:223 +#: ../src/client/application/geary-controller.vala:2496 #, c-format -msgid "Cc: %s\n" -msgstr "CC: %s\n" +msgid "Empty all email from your %s folder?" +msgstr "Tøm al e-mail fra din %s-mappe?" -#: ../../src/client/dialogs/attachment-dialog.vala:18 -msgid "Choose a file" -msgstr "Vælg en fil" +#: ../src/client/application/geary-controller.vala:2497 +msgid "This removes the email from Geary and your email server." +msgstr "Dette fjerner e-mail fra Geary samt din e-mailserver." -#: ../../src/client/geary-controller.vala:553 -msgid "Co_ntinue" -msgstr "F_ortsæt" +#: ../src/client/application/geary-controller.vala:2498 +msgid "This cannot be undone." +msgstr "Dette kan ikke fortrydes." -#: ../../src/client/geary-application.vala:29 -msgid "Compose Message" -msgstr "Skriv besked" +#: ../src/client/application/geary-controller.vala:2499 +#, c-format +msgid "Empty %s" +msgstr "Tøm %s" -#: ../../src/client/geary-controller.vala:313 -msgid "Compose new message (Ctrl+N, N)" -msgstr "Skriv ny besked (Ctrl+N, N)" +#: ../src/client/application/geary-controller.vala:2516 +#, c-format +msgid "Error emptying %s" +msgstr "Fejl ved tømning af %s" -#: ../../ui/preferences.glade:117 -msgid "Composer" -msgstr "Beskedskriver" +#: ../src/client/application/geary-controller.vala:2546 +msgid "Do you want to permanently delete this message?" +msgid_plural "Do you want to permanently delete these messages?" +msgstr[0] "Ønsker du at slette denne besked permanent?" +msgstr[1] "Ønsker du at slette disse beskeder permanent?" -#: ../../src/client/views/conversation-viewer.vala:897 -msgid "Copy _Email Address" -msgstr "Kopiér _email-adresse" - -#: ../../src/client/views/conversation-viewer.vala:902 -msgid "Copy _Link" -msgstr "Kopiér _link" - -#: ../../src/client/geary-application.vala:17 -msgid "Copyright 2011-2013 Yorba Foundation" -msgstr "Copyright 2011-2013 Yorba Foundation" +#: ../src/client/application/geary-controller.vala:2548 +msgid "Delete" +msgstr "Slet" -#: ../../ui/composer.glade:21 -msgid "Cu_t" -msgstr "_Klip" +#: ../src/client/application/geary-controller.vala:2580 +msgid "Undo archive (Ctrl+Z)" +msgstr "Fortryd arkivér (Ctrl+Z)" + +#: ../src/client/application/geary-controller.vala:2595 +msgid "Undo trash (Ctrl+Z)" +msgstr "Fortryd smid i papirkurv (Ctrl+Z)" -#: ../../src/client/views/conversation-viewer.vala:620 -msgid "Date:" -msgstr "Dato:" +#: ../src/client/application/geary-controller.vala:2649 +msgid "Undo (Ctrl+Z)" +msgstr "Fortryd (Ctrl+Z)" + +#: ../src/client/application/geary-controller.vala:2780 +msgid "Failed to open default text editor." +msgstr "Kunne ikke åbne standardprogrammet til tekstredigéring." -#: ../../src/engine/rfc822/rfc822-utils.vala:217 +#: ../src/client/components/main-window.vala:389 #, c-format -msgid "Date: %s\n" -msgstr "Dato: %s\n" +msgid "%s (%d)" +msgstr "%s (%d)" -#: ../../src/client/geary-controller.vala:43 -msgid "Delete conversation (Delete, Backspace, A)" -msgstr "Slet samtale (Delete, Backspace, A)" - -#: ../../src/client/geary-controller.vala:44 -msgid "Delete conversations (Delete, Backspace, A)" -msgstr "Slet samtaler (Delete, Backspace, A)" +#: ../src/client/components/search-bar.vala:8 +#: ../src/client/folder-list/folder-list-search-branch.vala:38 +#: ../src/engine/api/geary-special-folder-type.vala:51 +msgid "Search" +msgstr "Søg" -#: ../../src/client/geary-args.vala:25 -msgid "Display program version" -msgstr "Vis programversion" +#. Search entry. +#: ../src/client/components/search-bar.vala:23 +msgid "Search all mail in account for keywords (Ctrl+S)" +msgstr "Søg efter ord i al e-mail tilhørende kontoen (Ctrl+S)" -#: ../../src/client/composer/composer-window.vala:663 -msgid "Do you want to discard the unsaved message?" -msgstr "Vil du kassére denne ugemte besked?" +#: ../src/client/components/search-bar.vala:100 +#, c-format +msgid "Indexing %s account" +msgstr "Indeksérer %s konto" -#: ../../src/client/composer/composer-window.vala:666 -msgid "Do you want to discard this message?" -msgstr "Ønsker du at kassére denne besked?" +#: ../src/client/components/search-bar.vala:111 +#: ../src/client/folder-list/folder-list-search-branch.vala:39 +#, c-format +msgid "Search %s account" +msgstr "Søg %s-konto" -#: ../../src/client/geary-controller.vala:1479 -msgid "Don't _ask me again" -msgstr "S_pørg mig ikke igen" +#. / Displayed in the space-limited status bar while a message is in the process of being sent. +#: ../src/client/components/status-bar.vala:26 +msgid "Sending…" +msgstr "Sender …" -#: ../../src/engine/api/geary-special-folder-type.vala:27 -msgid "Drafts" -msgstr "Kladder" +#: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 +msgid "_OK" +msgstr "_OK" -#: ../../ui/composer.glade:419 -msgid "Drop files here" -msgstr "Flyt filer hertil." +#: ../src/client/components/stock.vala:19 ../ui/edit_alternate_emails.glade.h:3 +#: ../ui/password-dialog.glade.h:5 ../ui/remove_confirm.glade.h:5 +msgid "_Cancel" +msgstr "_Annullér" -#: ../../ui/login.glade:115 -msgid "E_mail address:" -msgstr "Email-adresse:" +#: ../src/client/components/stock.vala:21 ../ui/gtk/menus.ui.h:6 +msgid "_About" +msgstr "_Om" -#: ../../src/client/geary-controller.vala:704 -msgid "E_xit" -msgstr "_Afslut" +#: ../src/client/components/stock.vala:23 +msgid "_Close" +msgstr "_Luk" -#: ../../src/client/views/conversation-viewer.vala:533 -msgid "Edit Draft" -msgstr "Redigér kladde" +#: ../src/client/components/stock.vala:24 +msgid "_Discard" +msgstr "_Kassér" -#: ../../ui/account_list.glade:84 -msgid "Edit account" -msgstr "Redigér konto" +#: ../src/client/components/stock.vala:25 ../ui/gtk/menus.ui.h:5 +msgid "_Help" +msgstr "_Hjælp" -#: ../../ui/remove_confirm.glade:94 -msgid "Email address:" -msgstr "Emailadresse:" +#: ../src/client/components/stock.vala:26 ../ui/conversation-email-menus.ui.h:9 +msgid "_Open" +msgstr "_Åbn" -#: ../../src/client/geary-application.vala:28 -msgid "Email;E-mail;Mail;" -msgstr "Email;E-mail;Mail;Post;" +#: ../src/client/components/stock.vala:27 ../ui/gtk/menus.ui.h:3 +msgid "_Preferences" +msgstr "_Indstillinger" -#: ../../ui/preferences.glade:131 -msgid "Enable _spell checking" -msgstr "Aktiver _stavekontrol" +#: ../src/client/components/stock.vala:28 ../ui/conversation-email-menus.ui.h:7 +msgid "_Print…" +msgstr "_Udskriv …" -#: ../../ui/login.glade:588 -msgid "Encr_yption:" -msgstr "Kr_yptering:" +#: ../src/client/components/stock.vala:29 ../ui/gtk/menus.ui.h:7 +msgid "_Quit" +msgstr "Af_slut" -#: ../../ui/login.glade:607 -msgid "Encrypt_ion:" -msgstr "Krypter_ing:" +#: ../src/client/components/stock.vala:30 ../ui/remove_confirm.glade.h:6 +msgid "_Remove" +msgstr "_Fjern" -#: ../../src/client/accounts/add-edit-page.vala:190 -msgid "Enter your account information to get started." -msgstr "Indtast kontoinformation for at starte." +#: ../src/client/components/stock.vala:32 +msgid "_Keep" +msgstr "_Behold" -#: ../../src/client/geary-controller.vala:714 -#, c-format -msgid "" -"Error during rebuild:\n" -"\n" -"%s" -msgstr "" -"Der opstod en fejl under genopbygning:\n" -"\n" -"%s" +#: ../src/client/composer/composer-link-popover.vala:150 +msgid "Link URL is not correctly formatted, e.g. http://example.com" +msgstr "Link-URL er ikke korrekt formateret, f.eks. http://eksempel.dk" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid link URL" +msgstr "Ugyldig link-URL" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid email address" +msgstr "Ugyldig e-mailadresse" + +#: ../src/client/composer/composer-widget.vala:154 +msgid "Saved" +msgstr "Gemt" -#: ../../src/client/composer/composer-window.vala:43 +#: ../src/client/composer/composer-widget.vala:155 +msgid "Saving" +msgstr "Gemmer" + +#: ../src/client/composer/composer-widget.vala:156 msgid "Error saving" msgstr "Der opstod en fejl under lagring" -#. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../../src/client/geary-controller.vala:625 -#: ../../src/client/ui/status-bar.vala:28 -msgid "Error sending email" -msgstr "Der opstod en fejl ved afsendelse af email" +#: ../src/client/composer/composer-widget.vala:157 +msgid "Press Backspace to delete quote" +msgstr "Tryk tilbagetast for at slette citat" -#: ../../src/client/accounts/add-edit-page.vala:216 -msgid "Everything" -msgstr "Alt" +#: ../src/client/composer/composer-widget.vala:158 +msgid "New Message" +msgstr "Ny besked" -#: ../../src/client/views/conversation-viewer.vala:1897 -msgid "Failed to open default text editor." -msgstr "Kunne ikke åbne standardprogrammet til tekstredigéring." +#. Translators: This is list of keywords, separated by pipe ("|") +#. characters, that suggest an attachment; since this is full-word +#. checking, include all variants of each word. No spaces are +#. allowed. +#: ../src/client/composer/composer-widget.vala:167 +msgid "" +"attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" +"enclosing|encloses|enclosure|enclosures" +msgstr "" +"vedhæft|vedhæfte|vedhæftet|vedhæfter|bilag|bilagene|vedlagt|vedlægger|" +"vedlægge|vedhæftede|attach|attaching|attaches|attachment|attachments|" +"attached|enclose|enclosed|enclosing|encloses|enclosure|enclosures" + +#: ../src/client/composer/composer-widget.vala:1122 +#: ../src/client/composer/composer-widget.vala:1141 +msgid "Do you want to discard this message?" +msgstr "Ønsker du at kassére denne besked?" + +#: ../src/client/composer/composer-widget.vala:1245 +msgid "Send message with an empty subject and body?" +msgstr "Send beskeden uden tekst og emne?" -#: ../../src/client/geary-args.vala:54 +#: ../src/client/composer/composer-widget.vala:1247 +msgid "Send message with an empty subject?" +msgstr "Send beskeden uden et emne?" + +#: ../src/client/composer/composer-widget.vala:1249 +msgid "Send message with an empty body?" +msgstr "Send beskeden uden nogen tekst?" + +#: ../src/client/composer/composer-widget.vala:1253 +msgid "Send message without an attachment?" +msgstr "Send beskeden uden en vedhæftet fil?" + +#: ../src/client/composer/composer-widget.vala:1515 #, c-format -msgid "Failed to parse command line options: %s\n" -msgstr "Kunne ikke genkende indstillingerne på kommandolinjen: %s\n" +msgid "“%s” already attached for delivery." +msgstr "\"%s\" er allerede vedhæftet." -#. / Placeholder text indicating that the user should type their first name and last name -#: ../../src/client/accounts/add-edit-page.vala:10 -msgid "First Last" -msgstr "Først Sidst" +#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" +#. Translators: The first argument will be a +#. description of the document type, the second will +#. be a human-friendly size string. For example: +#. Document (100.9MB) +#: ../src/client/composer/composer-widget.vala:1523 +#: ../src/client/conversation-viewer/conversation-email.vala:138 +#, c-format +msgid "%s (%s)" +msgstr "%s (%s)" -#: ../../ui/composer.glade:182 -msgid "Fixed Width" -msgstr "Fast bredde" +#: ../src/client/composer/composer-widget.vala:1560 +#, c-format +msgid "“%s” could not be found." +msgstr "\"%s\" blev ikke fundet." -#: ../../src/client/geary-controller.vala:329 -msgid "Forward (Ctrl+L, F)" -msgstr "Videresend (Ctrl+L, F)" +#: ../src/client/composer/composer-widget.vala:1566 +#, c-format +msgid "“%s” is a folder." +msgstr "\"%s\" er en mappe." -#: ../../src/client/views/conversation-viewer.vala:605 -msgid "From:" -msgstr "Fra:" +#: ../src/client/composer/composer-widget.vala:1572 +#, c-format +msgid "“%s” is an empty file." +msgstr "\"%s\" er en tom fil." -#: ../../src/engine/rfc822/rfc822-utils.vala:215 +#: ../src/client/composer/composer-widget.vala:1585 #, c-format -msgid "From: %s\n" -msgstr "Fra: %s\n" +msgid "“%s” could not be opened for reading." +msgstr "\"%s\" kunne ikke åbnes til læsning." -#: ../../src/client/util/util-files.vala:22 -msgctxt "Abbreviation for gigabyte" -msgid "GB" -msgstr "GB" +#: ../src/client/composer/composer-widget.vala:1593 +msgid "Cannot add attachment" +msgstr "Kan ikke tilføje filen" -#: ../../src/client/geary-application.vala:25 -msgid "Geary Mail" -msgstr "Geary mail" +#: ../src/client/composer/composer-widget.vala:1645 +msgid "To: " +msgstr "Til: " + +#: ../src/client/composer/composer-widget.vala:1648 +msgid "Cc: " +msgstr "Cc: " + +#: ../src/client/composer/composer-widget.vala:1651 +msgid "Bcc: " +msgstr "Bcc: " + +#: ../src/client/composer/composer-widget.vala:1654 +msgid "Reply-To: " +msgstr "Svar-Til: " -#: ../../src/client/geary-controller.vala:626 +#: ../src/client/composer/composer-widget.vala:1786 +msgid "Select Color" +msgstr "Vælg farve" + +#. Displayed in the From dropdown to indicate an "alternate email address" +#. for an account. The first printf argument will be the alternate email +#. address, and the second will be the account's primary email address. +#: ../src/client/composer/composer-widget.vala:1986 +#, c-format +msgid "%1$s via %2$s" +msgstr "%1$s via %2$s" + +#. Composer label (with mnemonic underscore) for the account selector +#. when choosing what address to send a message from. +#: ../src/client/composer/composer-widget.vala:2028 +msgid "_From:" +msgstr "_Fra:" + +#. Translators: This is the name of the file chooser filter +#. when inserting an image in the composer. +#: ../src/client/composer/composer-widget.vala:2252 +msgid "Images" +msgstr "Billeder" + +#: ../src/client/composer/spell-check-popover.vala:117 +msgid "Remove this language from the preferred list" +msgstr "Fjern dette sprog fra listen over foretrukne" + +#: ../src/client/composer/spell-check-popover.vala:121 +msgid "Add this language to the preferred list" +msgstr "Tilføj dette sprog til listen over foretrukne" + +#: ../src/client/composer/spell-check-popover.vala:217 +msgid "Search for more languages" +msgstr "Søg efter flere sprog" + +#: ../src/client/conversation-list/formatted-conversation-data.vala:11 +msgid "Me" +msgstr "Mig" + +#. Translators: This is the file type displayed for +#. attachments with unknown file types. +#: ../src/client/conversation-viewer/conversation-email.vala:124 +msgid "Unknown" +msgstr "Ukendt" + +#. Preview headers +#. Translators: This is displayed in place of the from address +#. when the message has no from address. +#: ../src/client/conversation-viewer/conversation-message.vala:331 +msgid "No sender" +msgstr "Ingen afsender" + +#. Translators: This separates multiple 'from' +#. addresses in the header preview for a message. +#: ../src/client/conversation-viewer/conversation-message.vala:586 +msgid ", " +msgstr ", " + +#. Translators: This string is used as the HTML IMG ALT +#. attribute value when displaying an inline image in an email +#. that did not specify a file name. E.g. ImageCannot remove account " +msgstr "Kan ikke fjerne konto" -#: ../../ui/password-dialog.glade:196 -msgid "Password:" -msgstr "Adgangskode:" +#: ../ui/account_cannot_remove.glade.h:2 +msgid "" +"A composer window associated with this account is currently open. Send or " +"discard the message and try again." +msgstr "" +"Et beskedskrivningsvindue associéret med denne bruger er i forvejen åbent. " +"Send eller kassér beskeden og prøv igen." -#: ../../ui/composer.glade:102 -msgid "Paste _With Formatting" -msgstr "Sæt ind _med formatéring" +#: ../ui/account_list.glade.h:1 +msgid "Add account" +msgstr "Tilføj konto" -#: ../../src/client/dialogs/password-dialog.vala:16 -msgid "Please enter your email password" -msgstr "Indtast din email-adgangskode" +#: ../ui/account_list.glade.h:2 +msgid "Edit account" +msgstr "Redigér konto" -#: ../../src/client/geary-args.vala:47 -msgid "Please report comments, suggestions and bugs to:" -msgstr "Send kommentarer, idéer og fejlrapporter til:" +#: ../ui/account_list.glade.h:3 +msgid "Remove account" +msgstr "Fjern konto" -#: ../../ui/account_spinner.glade:41 +#: ../ui/account_spinner.glade.h:1 msgid "Please wait while Geary validates your account." -msgstr "Vent venligst mens Geary validérer din konto" +msgstr "Vent venligst mens Geary validérer din konto." -#: ../../ui/login.glade:421 -msgid "Por_t:" -msgstr "Por_t:" +#: ../ui/certificate_warning_dialog.glade.h:1 +msgid "Untrusted Connection" +msgstr "Ubetroet forbindelse" -#: ../../ui/password-dialog.glade:367 ../../ui/password-dialog.glade:470 -msgid "Port:" -msgstr "Port:" +#: ../ui/certificate_warning_dialog.glade.h:2 +msgid "_Always Trust This Server" +msgstr "Stol _altid på serveren" -#: ../../ui/composer.glade:81 -msgid "Quote text (Ctrl+])" -msgstr "Citér tekst (Ctrl+])" +#: ../ui/certificate_warning_dialog.glade.h:3 +msgid "_Trust This Server" +msgstr "_Stol på serveren" -#: ../../src/client/geary-controller.vala:322 -msgid "R_eply All" -msgstr "S_var til alle" +#: ../ui/certificate_warning_dialog.glade.h:4 +msgid "_Don’t Trust This Server" +msgstr "Stol _ikke på serveren" -#: ../../ui/preferences.glade:55 -msgid "Reading" -msgstr "Læsning" +#: ../ui/composer-headerbar.ui.h:1 +msgid "Detach (Ctrl+D)" +msgstr "Fjern bilag (Ctrl+D)" -#: ../../ui/password-dialog.glade:274 -msgid "Real name:" -msgstr "Rigtigt navn:" +#: ../ui/composer-headerbar.ui.h:2 +msgid "Attach File (Ctrl+T)" +msgstr "Vedhæft fil (Ctrl+T)" -#: ../../src/client/accounts/add-edit-page.vala:590 -msgid "Remem_ber password" -msgstr "Hu_sk adgangskode" +#: ../ui/composer-headerbar.ui.h:3 +msgid "Include Original Attachments" +msgstr "Medtag oprindelige vedhæftede filer" -#: ../../src/client/accounts/add-edit-page.vala:583 -msgid "Remem_ber passwords" -msgstr "Hus_k adgangskoder" +#: ../ui/composer-headerbar.ui.h:4 +msgid "Send (Ctrl+Enter)" +msgstr "Send (Ctrl+Enter)" -#: ../../ui/account_list.glade:97 -msgid "Remove account" -msgstr "Fjern konto" +#: ../ui/composer-headerbar.ui.h:5 +msgid "_Send" +msgstr "_Send" -#: ../../ui/composer.glade:95 -msgid "Remove formatting (Ctrl+Space)" -msgstr "Fjern formatéring (Ctrl+Mellemrum)" +#: ../ui/composer-headerbar.ui.h:6 +msgid "Discard and Close" +msgstr "Forkast og luk" + +#: ../ui/composer-headerbar.ui.h:7 +msgid "Save and Close" +msgstr "Gem og luk" + +#. Note that this button and the Update button will never be shown at the same time to the user. +#: ../ui/composer-link-popover.ui.h:2 +msgid "Insert the new link with this URL" +msgstr "Indsæt det nye link med denne URL" + +#: ../ui/composer-link-popover.ui.h:3 +msgid "Link URL" +msgstr "Link-URL" + +#. Note that this button and the Insert button will never be shown at the same time to the user. +#: ../ui/composer-link-popover.ui.h:5 +msgid "Update this link’s URL" +msgstr "Opdatér dette links URL" + +#: ../ui/composer-link-popover.ui.h:6 +msgid "Delete this link" +msgstr "Slet dette link" + +#: ../ui/composer-link-popover.ui.h:7 +msgid "Open this link" +msgstr "Åbn dette link" -#: ../../src/client/geary-controller.vala:318 -msgid "Reply (Ctrl+R, R)" -msgstr "Svar (Ctrl+R, R)" +#: ../ui/composer-menus.ui.h:1 +msgid "S_ans Serif" +msgstr "S_ans serif" -#: ../../src/client/geary-controller.vala:323 -msgid "Reply all (Ctrl+Shift+R, Shift+R)" -msgstr "Svar til alle (Ctrl+Skift+R, Skift+R)" +#: ../ui/composer-menus.ui.h:2 +msgid "S_erif" +msgstr "S_erif" -#: ../../src/client/views/conversation-viewer.vala:1452 -msgid "Reply to _All" -msgstr "Svar til _alle" +#: ../ui/composer-menus.ui.h:3 +msgid "_Fixed Width" +msgstr "_Fast bredde" -#: ../../ui/password-dialog.glade:163 -msgid "SMTP Credentials" -msgstr "SMTP-legitimationsoplysninger" +#: ../ui/composer-menus.ui.h:4 +msgid "_Small" +msgstr "_Lille" -#: ../../ui/login.glade:507 -msgid "SMTP password" -msgstr "SMTP-adgangskode" +#: ../ui/composer-menus.ui.h:5 +msgid "_Medium" +msgstr "_Mellem" -#: ../../ui/login.glade:439 ../../ui/password-dialog.glade:437 -msgid "SMTP settings" -msgstr "SMTP-indstillinger" +#: ../ui/composer-menus.ui.h:6 +msgid "Lar_ge" +msgstr "_Stor" -#: ../../ui/login.glade:491 -msgid "SMTP username" -msgstr "SMTP-brugernavn" +#: ../ui/composer-menus.ui.h:7 +msgid "C_olor" +msgstr "F_arve" -#: ../../src/client/dialogs/password-dialog.vala:124 -msgid "SSL" -msgstr "SSL" - -#: ../../ui/password-dialog.glade:382 ../../ui/password-dialog.glade:485 -msgid "SSL/TLS encryption:" -msgstr "SSL/TLS-kryptering:" +#: ../ui/composer-menus.ui.h:8 +msgid "_Rich Text" +msgstr "_Formateret tekst" -#: ../../src/client/dialogs/password-dialog.vala:126 -msgid "STARTTLS" -msgstr "STARTTLS" +#: ../ui/composer-menus.ui.h:9 +msgid "Show Extended Fields" +msgstr "Vis udvidede felter" -#: ../../ui/composer.glade:169 -msgid "S_ans Serif" -msgstr "S_ans serif" +#: ../ui/composer-menus.ui.h:10 +msgid "_Undo" +msgstr "_Fortryd" -#: ../../ui/composer.glade:175 -msgid "S_erif" -msgstr "S_erif" +#: ../ui/composer-menus.ui.h:11 +msgid "_Redo" +msgstr "_Genskab" + +#: ../ui/composer-menus.ui.h:12 +msgid "Cu_t" +msgstr "_Klip" -#: ../../ui/login.glade:160 -msgid "S_ervice:" -msgstr "S_ervice:" - -#: ../../ui/composer.glade:170 -msgid "Sans Serif" -msgstr "Sans Serif" - -#: ../../src/client/views/conversation-viewer.vala:1437 -msgid "Save A_ttachment..." -msgid_plural "Save All A_ttachments..." -msgstr[0] "Gem v_edhæftet fil..." -msgstr[1] "Gem alle v_edhæftede filer..." - -#: ../../src/client/views/conversation-viewer.vala:1400 -msgid "Save All A_ttachments..." -msgstr "Gem alle v_edhæftede filer..." +#: ../ui/composer-menus.ui.h:13 ../ui/conversation-message-menus.ui.h:7 +msgid "_Copy" +msgstr "_Kopiér" -#: ../../src/client/composer/composer-window.vala:41 -msgid "Saved" -msgstr "Gemt" +#: ../ui/composer-menus.ui.h:14 +msgid "_Paste" +msgstr "Sæt _ind" -#: ../../src/client/composer/composer-window.vala:42 -msgid "Saving" -msgstr "Gemmer" +#: ../ui/composer-menus.ui.h:15 +msgctxt "Clipboard paste with rich text" +msgid "Paste _With Formatting" +msgstr "Sæt ind _med formatering" -#: ../../ui/login.glade:304 -msgid "Se_rver:" -msgstr "Se_rver" +#: ../ui/composer-menus.ui.h:16 +msgid "Select _All" +msgstr "Markér _alt" -#: ../../src/client/folder-list/folder-list-search-branch.vala:38 -#: ../../src/client/ui/main-toolbar.vala:10 -#: ../../src/engine/api/geary-special-folder-type.vala:51 -msgid "Search" -msgstr "Søg" +#: ../ui/composer-menus.ui.h:17 ../ui/conversation-message-menus.ui.h:9 +msgid "_Inspect…" +msgstr "_Undersøg …" + +#. Address(es) e-mail is to be sent to +#: ../ui/composer-widget.ui.h:2 +msgid "_To" +msgstr "_Til" + +#: ../ui/composer-widget.ui.h:3 +msgid "_Cc" +msgstr "_Cc" + +#: ../ui/composer-widget.ui.h:4 +msgid "_Subject" +msgstr "_Emne" + +#: ../ui/composer-widget.ui.h:5 +msgid "_Bcc" +msgstr "_Bcc" + +#: ../ui/composer-widget.ui.h:6 +msgid "_Reply-To" +msgstr "_Svar-Til" + +#. Geary account mail will be sent from +#: ../ui/composer-widget.ui.h:8 +msgid "From" +msgstr "Fra" -#: ../../src/client/folder-list/folder-list-search-branch.vala:39 -#: ../../src/client/ui/main-toolbar.vala:170 -#, c-format -msgid "Search %s account" -msgstr "Søg %s-konto" +#: ../ui/composer-widget.ui.h:9 +msgid "Drop files here" +msgstr "Flyt filer hertil" -#: ../../src/client/ui/main-toolbar.vala:76 -msgid "Search all mail in account for keywords (Ctrl+S)" -msgstr "Søg efter ord i al mail tilhørende kontoen %Ctrl+S)" +#: ../ui/composer-widget.ui.h:10 +msgid "To add them as attachments" +msgstr "For at vedhæfte dem" -#: ../../src/client/composer/composer-window.vala:1243 -msgid "Select Color" -msgstr "Vælg farve" +#: ../ui/composer-widget.ui.h:11 +msgid "Undo last edit (Ctrl+Z)" +msgstr "Fortryd seneste redigering (Ctrl+Z)" + +#: ../ui/composer-widget.ui.h:12 +msgid "Redo last edit (Ctrl+Shift+Z)" +msgstr "Omgør seneste redigering (Ctrl+Skift+Z)" -#: ../../src/client/ui/stock.vala:32 -#: ../../src/client/views/conversation-viewer.vala:916 -msgid "Select _All" -msgstr "Markér _alt" +#: ../ui/composer-widget.ui.h:13 +msgid "Bold (Ctrl+B)" +msgstr "Fed (Ctrl+B)" -#: ../../src/client/views/conversation-viewer.vala:910 -msgid "Select _Message" -msgstr "Vælg _besked" +#: ../ui/composer-widget.ui.h:14 +msgid "Italic (Ctrl+I)" +msgstr "Kursiv (Ctrl+I)" -#: ../../src/client/geary-application.vala:27 -msgid "Send and receive email" -msgstr "Send og modtag email" +#: ../ui/composer-widget.ui.h:15 +msgid "Underline (Ctrl+U)" +msgstr "Understreget (Ctrl+U)" -#: ../../src/client/composer/composer-window.vala:747 -msgid "Send message with an empty body?" -msgstr "Send beskeden uden nogen tekst?" +#: ../ui/composer-widget.ui.h:16 +msgid "Strikethrough (Ctrl+K)" +msgstr "Overstreget (Ctrl+K)" -#: ../../src/client/composer/composer-window.vala:743 -msgid "Send message with an empty subject and body?" -msgstr "Send beskeden uden tekst og emne?" +#: ../ui/composer-widget.ui.h:17 +msgid "Quote text (Ctrl+])" +msgstr "Citér tekst (Ctrl+])" -#: ../../src/client/composer/composer-window.vala:745 -msgid "Send message with an empty subject?" -msgstr "Send beskeden uden et emne?" +#: ../ui/composer-widget.ui.h:18 +msgid "Unquote text (Ctrl+[)" +msgstr "Fjern citat (Ctrl+[)" -#: ../../src/client/composer/composer-window.vala:749 -msgid "Send message without an attachment?" -msgstr "Send beskeden uden en vedhæftet fil?" +#: ../ui/composer-widget.ui.h:19 +msgid "Insert or update selection link (Ctrl+L)" +msgstr "Indsæt eller opdatér markeringens link (Ctrl+L)" + +#: ../ui/composer-widget.ui.h:20 +msgid "Insert an image (Ctrl+G)" +msgstr "Indsæt et billede (Ctrl+G)" + +#: ../ui/composer-widget.ui.h:21 +msgid "Remove selection formatting (Ctrl+Space)" +msgstr "Fjern markeringens formatering (Ctrl+Mellemrum)" + +#: ../ui/composer-widget.ui.h:22 +msgid "Select spell checking languages" +msgstr "Vælg sprog for stavekontrol" + +#: ../ui/conversation-email.ui.h:1 +msgid "Save all attachments" +msgstr "Gem alle vedhæftede filer" + +#. Note: The application will never show this button at the same time as unstar_button, one will always be hidden. +#: ../ui/conversation-email.ui.h:3 +msgid "Mark this message as starred" +msgstr "Markér denne meddelelse med stjerne" + +# El. blot Fjern stjerne fra denne meddelelse? +#. Note: The application will never show this button at the same time as star_button, one will always be hidden. +#: ../ui/conversation-email.ui.h:5 +msgid "Mark this message as not starred" +msgstr "Markér denne meddelelse som uden stjerne" + +#: ../ui/conversation-email.ui.h:6 +msgid "Display the message menu" +msgstr "Vis meddelelsesmenuen" + +#: ../ui/conversation-email.ui.h:7 +msgid "Open selected attachments" +msgstr "Åbn valgte bilag" + +#: ../ui/conversation-email.ui.h:8 +msgid "Save selected attachments" +msgstr "Gem valgte bilag" + +#: ../ui/conversation-email.ui.h:9 +msgid "Select all attachments" +msgstr "Vælg alle bilag" -#. / Displayed in the space-limited status bar while a message is in the process of being sent. -#: ../../src/client/ui/status-bar.vala:25 -msgid "Sending..." -msgstr "Sender..." +#: ../ui/conversation-email.ui.h:10 +msgid "Edit Draft" +msgstr "Redigér kladde" + +#: ../ui/conversation-email.ui.h:11 +msgid "Draft message" +msgstr "Kladde" + +#: ../ui/conversation-email.ui.h:12 +msgid "This message has not yet been sent." +msgstr "Denne meddelelse er endnu ikke blevet sendt." + +#: ../ui/conversation-email.ui.h:13 +msgid "Try Again" +msgstr "Prøv igen" + +#: ../ui/conversation-email.ui.h:14 +msgid "Message not saved" +msgstr "Meddelelse ikke gemt" + +#: ../ui/conversation-email.ui.h:15 +msgid "This message was sent, but has not been saved to your account." +msgstr "Denne besked blev sendt, men er ikke blevet gemt på din konto." + +#: ../ui/conversation-email-menus.ui.h:2 +msgid "Reply to _All" +msgstr "Svar til _alle" + +#: ../ui/conversation-email-menus.ui.h:4 +msgid "_Mark Read" +msgstr "_Markér som læst" + +#: ../ui/conversation-email-menus.ui.h:5 +msgid "_Mark Unread" +msgstr "_Markér som ulæst" + +#: ../ui/conversation-email-menus.ui.h:6 +msgid "Mark Unread From _Here" +msgstr "Markér som ulæst _herfra" + +#: ../ui/conversation-email-menus.ui.h:8 +msgid "_View Source" +msgstr "Vis _kilde" + +#: ../ui/conversation-email-menus.ui.h:11 +msgid "_Save All" +msgstr "_Gem alle" + +#: ../ui/conversation-message-menus.ui.h:1 +msgid "_Open Link" +msgstr "_Åbn link" + +#: ../ui/conversation-message-menus.ui.h:2 +msgid "Copy Link _Address" +msgstr "Kopiér link-_adresse" + +#: ../ui/conversation-message-menus.ui.h:3 +msgid "Send New _Message…" +msgstr "Send ny _besked …" + +#: ../ui/conversation-message-menus.ui.h:4 +msgid "Copy Email _Address" +msgstr "Kopiér e-mail_adresse" + +#: ../ui/conversation-message-menus.ui.h:5 +msgid "Save _Image As…" +msgstr "Gem _billede som …" -#: ../../src/engine/api/geary-special-folder-type.vala:30 -msgid "Sent Mail" -msgstr "Sendt mail" +#: ../ui/conversation-message-menus.ui.h:6 +msgid "_Select All" +msgstr "Markér _alt" -#: ../../ui/login.glade:404 -msgid "Ser_ver:" -msgstr "Ser_ver:" +#: ../ui/conversation-message-menus.ui.h:8 +msgid "Search for messages from" +msgstr "Søg efter meddelelser fra" + +#: ../ui/conversation-message.ui.h:1 +msgid "From " +msgstr "Fra " + +#: ../ui/conversation-message.ui.h:2 +msgid "1/1/1970\t" +msgstr "1/1/1970\t" + +#: ../ui/conversation-message.ui.h:3 +msgid "Preview body text." +msgstr "Forhåndsvisning af tekst." + +#: ../ui/conversation-message.ui.h:4 +msgid "Sent by:" +msgstr "Sendt af:" + +#: ../ui/conversation-message.ui.h:5 +msgid "Reply to:" +msgstr "Svar til:" + +#: ../ui/conversation-message.ui.h:6 +msgid "Subject" +msgstr "Emne" -#: ../../ui/composer.glade:176 -msgid "Serif" -msgstr "Serif" +#: ../ui/conversation-message.ui.h:7 +msgid "To:" +msgstr "Til:" -#: ../../ui/password-dialog.glade:352 ../../ui/password-dialog.glade:455 -msgid "Server:" -msgstr "Server:" +#: ../ui/conversation-message.ui.h:8 +msgid "Cc:" +msgstr "Cc:" -#: ../../ui/password-dialog.glade:259 -msgid "Service:" -msgstr "Service:" +#: ../ui/conversation-message.ui.h:9 +msgid "Bcc:" +msgstr "Bcc:" -#: ../../src/client/views/conversation-viewer.vala:508 +#: ../ui/conversation-message.ui.h:10 msgid "Show Images" msgstr "Vis billeder" -#: ../../ui/preferences.glade:193 -msgid "Show _notifications for new mail" -msgstr "Vis _notifikationer ved nye mails" - -#: ../../ui/composer.glade:164 -msgid "Small" -msgstr "Lille" +#: ../ui/conversation-message.ui.h:11 +msgid "Always Show From Sender" +msgstr "Vis altid fra denne afsender" -#: ../../src/engine/api/geary-special-folder-type.vala:42 -msgid "Spam" -msgstr "Spam" +#: ../ui/conversation-message.ui.h:12 +msgid "Remote images not shown" +msgstr "Fjernt lagrede billeder vises ikke" + +#: ../ui/conversation-message.ui.h:13 +msgid "Only show remote images from senders you trust." +msgstr "Vis kun fjernlagrede billeder fra afsendere, du stoler på." + +#: ../ui/conversation-message.ui.h:14 +msgid "But actually goes to:" +msgstr "men fører faktisk til:" + +#: ../ui/conversation-message.ui.h:15 +msgid "The link appears to go to:" +msgstr "Linket ser ud til at føre til:" + +#: ../ui/conversation-message.ui.h:16 +msgid "Deceptive link found" +msgstr "Bedragerisk link fundet" -#: ../../src/engine/api/geary-special-folder-type.vala:33 -msgid "Starred" -msgstr "Stjernet" +#: ../ui/conversation-message.ui.h:17 +msgid "The email sender may be leading you to the wrong web site." +msgstr "" +"Afsenderen af denne e-mail forsøger måske at lede dig til det forkerte " +"websted." -#: ../../ui/login.glade:761 -msgid "Storage" -msgstr "Lager" +#: ../ui/conversation-message.ui.h:18 +msgid "If unsure, contact the sender and ask before continuing." +msgstr "" +"Hvis du er i tvivl, så kontakt afsenderen og spørg, inden du fortsætter." -#: ../../ui/composer.glade:134 -msgid "Strikethrough (Ctrl+K)" -msgstr "Overstreget (Ctrl+K)" +#: ../ui/conversation-viewer.ui.h:1 +msgid "Find in conversation" +msgstr "Find i samtale" -#: ../../src/client/views/conversation-viewer.vala:617 -msgid "Subject:" -msgstr "Emne:" +#: ../ui/conversation-viewer.ui.h:2 +msgid "Find the previous occurrence of the search string." +msgstr "Find forrige forekomst af søgestrengen." -#: ../../src/engine/rfc822/rfc822-utils.vala:216 -#, c-format -msgid "Subject: %s\n" -msgstr "Emne: %s\n" +#: ../ui/conversation-viewer.ui.h:3 +msgid "Find the next occurrence of the search string." +msgstr "Find næste forekomst af søgestrengen." -#: ../../src/client/util/util-files.vala:19 -msgctxt "Abbreviation for terabyte" -msgid "TB" -msgstr "TB" +#: ../ui/edit_alternate_emails.glade.h:1 +msgid "Remove email address" +msgstr "Fjern e-mailadresse" -#: ../../src/client/geary-controller.vala:1493 -#, c-format +#: ../ui/edit_alternate_emails.glade.h:2 msgid "" -"The file already exists in \"%s\". Replacing it will overwrite its contents." +"Some email services require additional addresses be configured on the " +"server. Contact your email provider for more information." msgstr "" -"Filen findes allerede i \"%s\". Hvis du erstatter den, overskrives dens " -"indhold." +"Visse e-mailtjenester kræver at der konfigureres yderligere adresser på " +"serveren. Kontakt din e-mailudbyder for at få yderligere information." -#: ../../src/client/geary-controller.vala:747 -msgid "" -"The version number of the local mail database is formatted for a newer " -"version of Geary. Unfortunately, the database cannot be \"rolled back\" to " -"work with this version of Geary.\n" -"\n" -"Please install the latest version of Geary and try again." -msgstr "" -"Den lokale maildatabases versionsnummer er til en nyere version af Geary. " -"Desværre kan databasen ikke blive \"rullet tilbage\", så den virker med " -"denne version of Geary.\n" -"\n" -"Installér venligst den nyeste version af Geary og prøv igen." +#: ../ui/edit_alternate_emails.glade.h:4 +msgid "_Update" +msgstr "_Opdatér" + +#: ../ui/find_bar.glade.h:1 +msgid "Find:" +msgstr "Find:" + +#: ../ui/find_bar.glade.h:2 +msgid "_Previous" +msgstr "_Forrige" + +#: ../ui/find_bar.glade.h:3 +msgid "_Next" +msgstr "_Næste" + +#: ../ui/find_bar.glade.h:4 +msgid "_Case sensitive" +msgstr "Forskel på _store og små bogstaver" + +#: ../ui/find_bar.glade.h:5 +msgid "label" +msgstr "etiket" + +#: ../ui/gtk/help-overlay.ui.h:1 +msgid "Conversation Shortcuts" +msgstr "Samtalegenveje" -#: ../../src/client/geary-controller.vala:758 -msgid "" -"There was an error opening the local account. This is probably due to " -"connectivity issues.\n" -"\n" -"Please check your network connection and restart Geary." -msgstr "" -"Der opstod en felj under åbning af den lokele konto. Dette sker sikkert på " -"grund af forbindelsesproblemer.\n" -"\n" -"Tjek, at din internetforbindelse virker og genstart derefter Geary." +#: ../ui/gtk/help-overlay.ui.h:2 +msgctxt "shortcut window" +msgid "General" +msgstr "Generelle" -#: ../../src/client/geary-controller.vala:737 -#, c-format -msgid "" -"There was an error opening the local mail database for this account. This is " -"possibly due to a file permissions problem.\n" -"\n" -"Please check that you have read/write permissions for all files in this " -"directory:\n" -"\n" -"%s" -msgstr "" -"Der opstod en fejl under åbningen af den lokale maildatabase til denne " -"konto. Dette sker sikkert på grund af problemer med filtilladelser.\n" -"\n" -"Tjek, at di har læsnings- og skrivningstilladelser for alle filer i denne " -"mappe.\n" -"\n" -"%s" +#: ../ui/gtk/help-overlay.ui.h:3 +msgctxt "shortcut window" +msgid "Move focus to the next/previous pane" +msgstr "Flyt fokus til næste/forrige rude" + +#: ../ui/gtk/help-overlay.ui.h:4 +msgctxt "shortcut window" +msgid "Move focus to conversation list" +msgstr "Flyt fokus til samtalelisten" + +#: ../ui/gtk/help-overlay.ui.h:5 +msgctxt "shortcut window" +msgid "Detach composer window" +msgstr "Frakobl redigeringsvindue" + +#: ../ui/gtk/help-overlay.ui.h:6 +msgctxt "shortcut window" +msgid "Close composer window" +msgstr "Luk redigeringsvindue" + +#: ../ui/gtk/help-overlay.ui.h:7 +msgctxt "shortcut window" +msgid "Show keyboard shortcuts" +msgstr "Vis tastaturgenveje" + +#: ../ui/gtk/help-overlay.ui.h:8 +msgctxt "shortcut window" +msgid "Show help" +msgstr "Vis hjælp" + +#: ../ui/gtk/help-overlay.ui.h:9 +msgctxt "shortcut window" +msgid "Quit the application" +msgstr "Afslut programmet" -#: ../../src/client/geary-controller.vala:702 -#, c-format -msgid "" -"There was an error opening the local mail database for this account. This is " -"possibly due to corruption of the database file in this directory:\n" -"\n" -"%s\n" -"\n" -"Geary can rebuild the database and re-synchronize with the server or exit.\n" -"\n" -"Rebuilding the database will destroy all local email and its attachments. " -"The mail on the your server will not be affected." -msgstr "" -"Der opstod en felj under åbningen af den lokale maildatabase til denne " -"konto. Dette sker sikkert på grund af, at databasefilen er beskadiget\n" -"\n" -"%s\n" -"\n" -"Geary kan genopbygge databasefilen og synkronisére med serveren igen eller " -"afslutte.\n" -"\n" -"Genopbygning af databasen vil slette al lokal email og dets vedhæftede " -"filer. Mail'en på serveren vil ikke blive rørt." +#: ../ui/gtk/help-overlay.ui.h:10 +msgctxt "shortcut window" +msgid "Search" +msgstr "Søg" -#: ../../src/client/views/conversation-viewer.vala:1147 -msgid "This link appears to go to" -msgstr "Dette link ser ud til at føre til" - -#: ../../src/client/views/conversation-viewer.vala:508 -msgid "This message contains remote images." -msgstr "Denne besked indeholder billeder." +#: ../ui/gtk/help-overlay.ui.h:11 +msgctxt "shortcut window" +msgid "Jump to search box" +msgstr "Hop til søgeboks" + +#: ../ui/gtk/help-overlay.ui.h:12 +msgctxt "shortcut window" +msgid "Find in current conversation" +msgstr "Find i nuværende samtale" + +#: ../ui/gtk/help-overlay.ui.h:13 +msgctxt "shortcut window" +msgid "Find next/previous in current conversation" +msgstr "Find næste/forrige i nuværende samtale" + +#: ../ui/gtk/help-overlay.ui.h:14 +msgctxt "shortcut window" +msgid "Actions" +msgstr "Handlinger" + +#: ../ui/gtk/help-overlay.ui.h:15 +msgctxt "shortcut window" +msgid "Compose a new message" +msgstr "Skriv ny meddelelse" + +#: ../ui/gtk/help-overlay.ui.h:16 +msgctxt "shortcut window" +msgid "Reply to sender " +msgstr "Svar til afsender" + +#: ../ui/gtk/help-overlay.ui.h:17 +msgctxt "shortcut window" +msgid "Reply to all" +msgstr "Svar til alle" + +#: ../ui/gtk/help-overlay.ui.h:18 +msgctxt "shortcut window" +msgid "Forward" +msgstr "Videresend" -#: ../../ui/composer.glade:435 -msgid "To add them as attachments" -msgstr "For at vedhæfte dem" +#: ../ui/gtk/help-overlay.ui.h:19 +msgctxt "shortcut window" +msgid "Archive" +msgstr "Arkivér" -#: ../../src/client/views/conversation-viewer.vala:608 -msgid "To:" -msgstr "Til:" +#: ../ui/gtk/help-overlay.ui.h:20 +msgctxt "shortcut window" +msgid "Move to trash" +msgstr "Flyt til papirkurv" + +#: ../ui/gtk/help-overlay.ui.h:21 +msgctxt "shortcut window" +msgid "Toggle spam" +msgstr "Slå spam til/fra" + +#: ../ui/gtk/help-overlay.ui.h:22 +msgctxt "shortcut window" +msgid "Move the conversation" +msgstr "Flyt samtalen" + +#: ../ui/gtk/help-overlay.ui.h:23 +msgctxt "shortcut window" +msgid "Label the conversation" +msgstr "Tilføj etiket til samtalen" + +#: ../ui/gtk/help-overlay.ui.h:24 +msgctxt "shortcut window" +msgid "Mark read" +msgstr "Markér som læst" + +#: ../ui/gtk/help-overlay.ui.h:25 +msgctxt "shortcut window" +msgid "Mark unread" +msgstr "Markér som ulæst" + +#: ../ui/gtk/help-overlay.ui.h:26 +msgctxt "shortcut window" +msgid "View" +msgstr "Vis" + +#: ../ui/gtk/help-overlay.ui.h:27 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Zoom ind" + +#: ../ui/gtk/help-overlay.ui.h:28 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Zoom ud" + +#: ../ui/gtk/help-overlay.ui.h:29 +msgctxt "shortcut window" +msgid "Reset zoom" +msgstr "Gendan zoom" + +#: ../ui/gtk/help-overlay.ui.h:30 +msgctxt "shortcut window" +msgid "Additional Shortcuts" +msgstr "Yderligere genveje" + +#: ../ui/gtk/help-overlay.ui.h:31 +msgctxt "shortcut window" +msgid "Star" +msgstr "Tilføj stjerne" + +#: ../ui/gtk/help-overlay.ui.h:32 +msgctxt "shortcut window" +msgid "Unstar" +msgstr "Fjern stjerne" + +#: ../ui/gtk/help-overlay.ui.h:33 +msgctxt "shortcut window" +msgid "Delete" +msgstr "Slet" + +#: ../ui/gtk/help-overlay.ui.h:34 +msgctxt "shortcut window" +msgid "Jump to next (older) conversation" +msgstr "Hop til næste (ældre) samtale" + +#: ../ui/gtk/help-overlay.ui.h:35 +msgctxt "shortcut window" +msgid "Jump to previous (newer) conversation" +msgstr "Hop til forrige (nyere) samtale" + +#: ../ui/gtk/help-overlay.ui.h:36 +msgid "Composer Shortcuts" +msgstr "Genveje i redigering" + +#: ../ui/gtk/help-overlay.ui.h:37 +msgctxt "shortcut window" +msgid "Quote text" +msgstr "Citér tekst" + +#: ../ui/gtk/help-overlay.ui.h:38 +msgctxt "shortcut window" +msgid "Unquote text" +msgstr "Fjern citat" + +#: ../ui/gtk/help-overlay.ui.h:39 +msgctxt "shortcut window" +msgid "Send" +msgstr "Send" + +#: ../ui/gtk/help-overlay.ui.h:40 +msgctxt "shortcut window" +msgid "Add attachment" +msgstr "Vedhæft bilag" + +#: ../ui/gtk/help-overlay.ui.h:41 +msgctxt "shortcut window" +msgid "Rich text mode" +msgstr "Formateret tekst" + +#: ../ui/gtk/help-overlay.ui.h:42 +msgctxt "shortcut window" +msgid "Bold text" +msgstr "Fed tekst" + +#: ../ui/gtk/help-overlay.ui.h:43 +msgctxt "shortcut window" +msgid "Italicize text" +msgstr "Kursiv tekst" + +#: ../ui/gtk/help-overlay.ui.h:44 +msgctxt "shortcut window" +msgid "Underline text" +msgstr "Understreget tekst" + +#: ../ui/gtk/help-overlay.ui.h:45 +msgctxt "shortcut window" +msgid "Strike text" +msgstr "Gennemgstreget tekst" + +#: ../ui/gtk/help-overlay.ui.h:46 +msgctxt "shortcut window" +msgid "Insert a link" +msgstr "Indsæt link" + +#: ../ui/gtk/help-overlay.ui.h:47 +msgctxt "shortcut window" +msgid "Remove formatting" +msgstr "Fjern formatering" -#: ../../src/engine/rfc822/rfc822-utils.vala:220 -#, c-format -msgid "To: %s\n" -msgstr "Til: %s\n" +#: ../ui/gtk/menus.ui.h:2 +msgid "A_ccounts" +msgstr "_Konti" -#: ../../src/engine/api/geary-special-folder-type.vala:45 -msgid "Trash" -msgstr "Papirkurv" +#: ../ui/gtk/menus.ui.h:4 +msgid "_Keyboard Shortcuts" +msgstr "_Tastaturgenveje" + +#: ../ui/login.glade.h:1 +msgid "email@example.com" +msgstr "e-mail@eksempel.dk" -#: ../../src/client/geary-controller.vala:294 -msgid "U_nstar" -msgstr "Stjern ikke" +#: ../ui/login.glade.h:2 ../ui/password-dialog.glade.h:3 +msgid "Password" +msgstr "Adgangskode" -#: ../../src/client/dialogs/password-dialog.vala:17 -msgid "Unable to login to email server" -msgstr "Kunne ikke logge ind på email-serveren" - -#: ../../src/client/geary-controller.vala:736 -#: ../../src/client/geary-controller.vala:746 -#: ../../src/client/geary-controller.vala:757 -#, c-format -msgid "Unable to open local mailbox for %s" -msgstr "Kunne ikke åbne den lokale postkasse for %s" +#: ../ui/login.glade.h:3 +msgid "E_mail address" +msgstr "E-_mailadresse" + +#: ../ui/login.glade.h:4 +msgid "_Password" +msgstr "_Adgangskode" + +#: ../ui/login.glade.h:5 +msgid "S_ervice" +msgstr "_Tjeneste" + +#: ../ui/login.glade.h:6 +msgid "N_ame" +msgstr "Na_vn" + +#: ../ui/login.glade.h:8 +msgid "N_ickname" +msgstr "_Kaldenavn" -#: ../../src/client/geary-controller.vala:701 -#, c-format -msgid "Unable to open the database for %s" -msgstr "Kunne ikke åbne databasen for %s" +#: ../ui/login.glade.h:9 +msgid "Work, Home, etc." +msgstr "Arbejde, hjem osv." -#: ../../src/client/geary-controller.vala:713 -#, c-format -msgid "Unable to rebuild database for \"%s\"" -msgstr "Kunne ikke genopbygge databasen for \"%s\"" +#: ../ui/login.glade.h:10 +msgid "_Save sent mail" +msgstr "_Gem sendt mail" -#: ../../src/client/accounts/add-edit-page.vala:619 -msgid "Unable to validate:\n" -msgstr "Kunne ikke validére.\n" +#: ../ui/login.glade.h:11 +msgid "Addi_tional email addresses…" +msgstr "_Yderligere e-mailadresser…" -#: ../../ui/composer.glade:127 -msgid "Underline (Ctrl+U)" -msgstr "Understreget (Ctrl+U)" +#: ../ui/login.glade.h:12 +msgid "IMAP settings" +msgstr "IMAP-indstillinger" -#: ../../ui/composer.glade:88 -msgid "Unquote text (Ctrl+[)" -msgstr "Fjern citat (Ctrl+[)" +#: ../ui/login.glade.h:13 +msgid "Se_rver" +msgstr "_Server" + +#: ../ui/login.glade.h:14 +msgid "imap.example.com" +msgstr "imap.eksempel.dk" + +#: ../ui/login.glade.h:15 +msgid "P_ort" +msgstr "_Port" + +#: ../ui/login.glade.h:16 +msgid "smtp.example.com" +msgstr "smtp.eksempel.dk" -#: ../../src/client/geary-args.vala:65 -#, c-format -msgid "Unrecognized command line option \"%s\"\n" -msgstr "Ukendt kommandolinje-indstilling \"%s\"\n" +#: ../ui/login.glade.h:17 +msgid "Ser_ver" +msgstr "Se_rver" -#: ../../ui/login.glade:457 -msgid "User_name:" -msgstr "Bruger_navn:" - -#: ../../ui/password-dialog.glade:70 ../../ui/password-dialog.glade:181 -msgid "Username:" -msgstr "Brugernavn:" - -#: ../../src/client/geary-application.vala:19 -msgid "Visit the Yorba web site" -msgstr "Besøg Yorbas hjemmeside" +#: ../ui/login.glade.h:18 +msgid "Por_t" +msgstr "Por_t" -#: ../../src/client/accounts/add-edit-page.vala:190 -#, c-format -msgid "Welcome to Geary." -msgstr "Velkommen til Geary." +#: ../ui/login.glade.h:19 +msgid "SMTP settings" +msgstr "SMTP-indstillinger" -#: ../../ui/login.glade:252 -msgid "Work, Home, etc." -msgstr "Arbejde, Hjem, o.s.v." +#: ../ui/login.glade.h:20 +msgid "User_name" +msgstr "Bruger_navn" + +#: ../ui/login.glade.h:21 +msgid "Pass_word" +msgstr "A_dgangskode" -#: ../../src/engine/api/geary-service-provider.vala:55 -msgid "Yahoo! Mail" -msgstr "Yahoo! Mail" +#: ../ui/login.glade.h:22 +msgid "SMTP username" +msgstr "SMTP-brugernavn" -#: ../../src/client/util/util-date.vala:177 -msgid "Yesterday" -msgstr "I går" +#: ../ui/login.glade.h:23 +msgid "SMTP password" +msgstr "SMTP-adgangskode" -#: ../../src/client/geary-controller.vala:552 -msgid "" -"Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " -"username and password could be read by another person on the network. Are " -"you sure you want to do this?" -msgstr "" -"Dine IMAP- og/eller SMTP-indstillinger anvender ikke SSL eller TLS. Dette " -"betyder, at dit brugernavn og din adgangskode kan læses af andre på " -"netværket. Er du sikker på, at du vil gære dette?" +#: ../ui/login.glade.h:24 +msgid "_Username" +msgstr "_Brugernavn" -#: ../../src/client/geary-controller.vala:551 -msgid "Your settings are insecure" -msgstr "Dine indstillinger er usikre" +#: ../ui/login.glade.h:25 +msgid "IMAP username" +msgstr "IMAP-brugernavn" -#: ../../src/client/geary-controller.vala:258 -#: ../../src/client/ui/stock.vala:21 -msgid "_About" -msgstr "_Om" +#: ../ui/login.glade.h:26 +msgid "IMAP password" +msgstr "IMAP-adgangskode" -#: ../../src/client/accounts/account-dialog-add-edit-pane.vala:48 -#: ../../src/client/ui/stock.vala:22 -msgid "_Add" -msgstr "Tilføj" +#: ../ui/login.glade.h:27 +msgid "Encr_yption" +msgstr "Kr_yptering" + +#: ../ui/login.glade.h:28 +msgid "Encrypt_ion" +msgstr "Krypter_ing" + +#: ../ui/login.glade.h:30 +msgid "SSL/TLS" +msgstr "SSL/TLS" -#: ../../src/client/geary-controller.vala:47 -msgid "_Archive" -msgstr "_Arkivér" +#: ../ui/login.glade.h:31 +msgid "STARTTLS" +msgstr "STARTTLS" -#: ../../src/client/dialogs/attachment-dialog.vala:23 -msgid "_Attach" -msgstr "_Vedhæft" +#: ../ui/login.glade.h:32 +msgid "No authentication re_quired" +msgstr "Ingen autentifikation kr_ævet" -#: ../../ui/composer.glade:525 -msgid "_Attach File" -msgstr "_Vedhæft fil" +#: ../ui/login.glade.h:33 +msgid "Use IMAP cre_dentials" +msgstr "Br_ug IMAP-akkreditiver" -#: ../../ui/preferences.glade:69 -msgid "_Automatically select next message" -msgstr "_Vælg automatisk næste besked" +#: ../ui/login.glade.h:34 +msgid "Composer" +msgstr "Beskedskriver" -#: ../../src/client/ui/stock.vala:19 -msgid "_Cancel" -msgstr "Annullér" +#: ../ui/login.glade.h:35 +msgid "Save dra_fts on server" +msgstr "Gem kla_dder på serveren" + +#: ../ui/login.glade.h:36 +msgid "Si_gn emails (HTML allowed):" +msgstr "Si_gnér e-mail (HTML er tilladt):" -#: ../../ui/composer.glade:52 -msgid "_Center" -msgstr "_Centrér" +#: ../ui/login.glade.h:37 +msgid "Storage" +msgstr "Lager" -#: ../../src/client/ui/stock.vala:23 -msgid "_Close" -msgstr "_Luk" +#: ../ui/login.glade.h:38 +msgid "_Download mail" +msgstr "_Download mail" + +#: ../ui/main-toolbar.ui.h:1 +msgid "Empty Spam or Trash folders" +msgstr "Tøm spam- eller papirkurvsmapper" -#: ../../src/client/views/conversation-viewer.vala:889 -msgid "_Copy" -msgstr "_Kopiér" +#: ../ui/password-dialog.glade.h:1 +msgid "SMTP Credentials" +msgstr "SMTP-legitimationsoplysninger" -#: ../../src/client/geary-controller.vala:42 -msgid "_Delete" -msgstr "_Slet" - -#: ../../ui/password-dialog.glade:548 -msgid "_Details" -msgstr "_Detaljer" +#: ../ui/password-dialog.glade.h:2 +msgid "Username" +msgstr "Brugernavn" + +#: ../ui/password-dialog.glade.h:4 +msgid "_Remember password" +msgstr "_Husk adgangskode" + +#: ../ui/password-dialog.glade.h:6 +msgid "_Authenticate" +msgstr "_Godkend" -#: ../../src/client/ui/stock.vala:24 -msgid "_Discard" -msgstr "_Kassér" +#: ../ui/preferences-dialog.ui.h:1 +msgid "Reading" +msgstr "Læsning" -#: ../../ui/preferences.glade:90 +#: ../ui/preferences-dialog.ui.h:2 +msgid "_Automatically select next message" +msgstr "_Vælg automatisk næste besked" + +#: ../ui/preferences-dialog.ui.h:3 msgid "_Display conversation preview" msgstr "_Vis samtaleforudvisning" -#: ../../src/client/geary-controller.vala:262 -msgid "_Donate" -msgstr "_Donér" - -#: ../../ui/login.glade:782 -msgid "_Download mail:" -msgstr "_Download mail:" +#: ../ui/preferences-dialog.ui.h:4 +msgid "Use _three pane view" +msgstr "Vis _tre ruder" -#: ../../ui/composer.glade:181 -msgid "_Fixed Width" -msgstr "_Fast bredde" +#: ../ui/preferences-dialog.ui.h:5 +msgid "Notifications" +msgstr "Påmindelser" -#: ../../src/client/geary-controller.vala:328 -#: ../../src/client/views/conversation-viewer.vala:1457 -msgid "_Forward" -msgstr "_Videresend" +#: ../ui/preferences-dialog.ui.h:6 +msgid "_Play notification sounds" +msgstr "_Afspil påmindelseslyde" -#: ../../src/client/geary-controller.vala:254 -#: ../../src/client/ui/stock.vala:25 -msgid "_Help" -msgstr "_Hjælp" +#: ../ui/preferences-dialog.ui.h:7 +msgid "Show _notifications for new mail" +msgstr "Vis _påmindelse om ny e-mail" -#: ../../ui/composer.glade:542 -msgid "_Include Original Attachments" -msgstr "_Inkludér original vedhæftning" - -#: ../../src/client/views/conversation-viewer.vala:922 -msgid "_Inspect" -msgstr "_Undersøg" - -#: ../../ui/composer.glade:57 -msgid "_Justify" -msgstr "_Juster" +# oversættelse med vilje indirekte (se forklaring nedenfor) +#: ../ui/preferences-dialog.ui.h:8 +msgid "Always _watch for new mail" +msgstr "_Tjek efter ny post i baggrunden" + +#: ../ui/preferences-dialog.ui.h:9 +msgid "Geary will run in the background and notify of new mail" +msgstr "Geary vil køre i baggrunden og vise, når der kommer ny post" + +#: ../ui/preferences-dialog.ui.h:10 +msgid "Preferences" +msgstr "Indstillinger" -#: ../../src/client/ui/stock.vala:33 -msgid "_Keep" -msgstr "_Behold" +#: ../ui/remove_confirm.glade.h:1 +msgid "" +"Are you sure you want to remove this " +"account? " +msgstr "" +"Er du sikker på, at du vil fjerne " +"denne konto? " -#: ../../src/client/geary-controller.vala:305 -msgid "_Label" -msgstr "_Etiket" +#: ../ui/remove_confirm.glade.h:2 +msgid "" +"All email associated with this account will be removed from your computer. " +"This will not affect email on the server." +msgstr "" +"Al e-mail, der tilhører denne konto vil blive fjernet fra din computer. " +"Dette vil ikke fjerne e-mailen på serveren." -#: ../../ui/composer.glade:42 -msgid "_Left" -msgstr "_Venstre" +#: ../ui/remove_confirm.glade.h:3 +msgid "Nickname:" +msgstr "Kaldenavn:" -#: ../../src/client/views/conversation-viewer.vala:1469 -msgid "_Mark as Read" -msgstr "_Markér som læst" +#: ../ui/remove_confirm.glade.h:4 +msgid "Email address:" +msgstr "E-mailadresse:" -#: ../../src/client/views/conversation-viewer.vala:1473 -msgid "_Mark as Unread" -msgstr "_Markér som ulæst" +#: ../ui/upgrade_dialog.glade.h:1 +msgid "Geary update in progress…" +msgstr "Geary er ved at blive opgraderet…" -#: ../../src/client/geary-controller.vala:271 -msgid "_Mark as..." -msgstr "_Markér som..." +#~ msgid "_Inspect" +#~ msgstr "_Undersøg" -#: ../../ui/composer.glade:157 -msgid "_Medium" -msgstr "_Mellem" +#~ msgid "%s — Composer Inspector" +#~ msgstr "%s — Redigeringsundersøger" -#: ../../src/client/geary-controller.vala:309 -msgid "_Move" -msgstr "_Flyt" +#~ msgid " (Invalid?)" +#~ msgstr "(Ugyldig?)" -#: ../../src/client/ui/stock.vala:18 -msgid "_OK" -msgstr "_OK" +#~ msgid "%s — Conversation Inspector" +#~ msgstr "%s — Samtaleundersøger" -#: ../../src/client/ui/stock.vala:26 -msgid "_Open" -msgstr "_Åbn" +#~ msgid "none" +#~ msgstr "intet" -#: ../../ui/login.glade:131 ../../ui/login.glade:539 -#: ../../ui/password-dialog.glade:85 -msgid "_Password:" -msgstr "_Adgangskode:" +#~ msgid "Copy _Link" +#~ msgstr "Kopiér _link" -#: ../../ui/composer.glade:35 -msgid "_Paste" -msgstr "Sæt _ind" +#~ msgid "Link (Ctrl+L)" +#~ msgstr "Link (Ctrl+L)" -#: ../../ui/preferences.glade:172 -msgid "_Play notification sounds" -msgstr "_Afspil notifikationslyde" +#~ msgid "Enable _spell checking" +#~ msgstr "Aktiver _stavekontrol" -#: ../../src/client/geary-controller.vala:250 -#: ../../src/client/ui/stock.vala:27 -msgid "_Preferences" -msgstr "_Indstillinger" +# Ifl. kildekoden er dette navn på en menu og ikke f.eks. en tilstand +#~ msgid "Empty" +#~ msgstr "Tøm" -#: ../../src/client/ui/stock.vala:28 -msgid "_Print..." -msgstr "_Udskriv" +#~ msgid "_Inspect..." +#~ msgstr "_Undersøg..." -#: ../../src/client/geary-controller.vala:266 -#: ../../src/client/ui/stock.vala:29 -msgid "_Quit" -msgstr "Af_slut" +#~ msgid "Copyright 2011-2014 Yorba Foundation" +#~ msgstr "Copyright 2011-2014 Yorba Foundation" -#: ../../src/client/geary-controller.vala:704 -msgid "_Rebuild" -msgstr "_Genopbyg" +#~ msgid "_Delete" +#~ msgstr "_Slet" -#: ../../ui/composer.glade:14 -msgid "_Redo" -msgstr "_Genskab" +#~ msgid "_Trash" +#~ msgstr "Flyt til _Papirkurven" -#: ../../ui/password-dialog.glade:561 -msgid "_Remember passwords" -msgstr "_Husk adgangskoder" +#~ msgid "_Donate" +#~ msgstr "_Donér" -#: ../../src/client/ui/stock.vala:30 -msgid "_Remove" -msgstr "_Fjern" +#~ msgid "%i match" +#~ msgid_plural "%i matches" +#~ msgstr[0] "%i match" +#~ msgstr[1] "%i matchende" -#: ../../src/client/geary-controller.vala:1496 -msgid "_Replace" -msgstr "_Erstat" +#~ msgid "%i match (wrapped)" +#~ msgid_plural "%i matches (wrapped)" +#~ msgstr[0] "%i match (ombrudt)" +#~ msgstr[1] "%i matchende (ombrudt)" -#: ../../src/client/geary-controller.vala:317 -#: ../../src/client/views/conversation-viewer.vala:1447 -msgid "_Reply" -msgstr "_Svar" +#~ msgid "not found" +#~ msgstr "ikke fundet" -#: ../../ui/composer.glade:141 -msgid "_Rich Text" -msgstr "_Formateret tekst" +#~ msgid "Do you want to discard the unsaved message?" +#~ msgstr "Vil du kassére denne ugemte besked?" -#: ../../ui/composer.glade:47 -msgid "_Right" -msgstr "_Højre" +#~ msgid "From:" +#~ msgstr "Fra:" -#: ../../src/client/accounts/account-dialog-add-edit-pane.vala:48 -#: ../../src/client/ui/stock.vala:31 -msgid "_Save" -msgstr "_Gem" +#~ msgid "No search results found." +#~ msgstr "Ingen søgeresultater blev fundet." -#: ../../src/client/views/conversation-viewer.vala:1395 -msgid "_Save As..." -msgstr "Gem _som..." - -#: ../../src/client/views/conversation-viewer.vala:1414 -msgid "_Save Image As..." -msgstr "_Gem billede som..." +#~ msgid "Date:" +#~ msgstr "Dato:" -#: ../../ui/composer.glade:594 -msgid "_Send" -msgstr "_Send" +#~ msgid "Select _Message" +#~ msgstr "Vælg _besked" -#: ../../ui/composer.glade:163 -msgid "_Small" -msgstr "_Lille" +#~ msgid "_Save As..." +#~ msgstr "Gem _som..." -#: ../../src/client/geary-controller.vala:289 -msgid "_Star" -msgstr "St_jern" +#~ msgid "Save A_ttachment..." +#~ msgid_plural "Save All A_ttachments..." +#~ msgstr[0] "Gem v_edhæftet fil..." +#~ msgstr[1] "Gem alle v_edhæftede filer..." -#: ../../ui/composer.glade:7 -msgid "_Undo" -msgstr "_Fortryd" +#~ msgid "_Left" +#~ msgstr "_Venstre" -#: ../../ui/login.glade:522 -msgid "_Username:" -msgstr "_Brugernavn:" +#~ msgid "_Right" +#~ msgstr "_Højre" -#: ../../src/client/views/conversation-viewer.vala:1494 -msgid "_View Source" -msgstr "Vis _kilde" +#~ msgid "_Center" +#~ msgstr "_Centrér" -#. / A list of keywords, separated by pipe ("|") characters, that suggest an attachment -#: ../../src/client/composer/composer-window.vala:90 -msgid "attach|enclosed|enclosing|cover letter" -msgstr "vedhæft | indeholder" - -#: ../../src/client/views/conversation-viewer.vala:1148 -msgid "but actually goes to" -msgstr "men går faktisk til" +#~ msgid "_Justify" +#~ msgstr "_Juster" -#: ../../src/client/util/util-files.vala:16 -msgid "bytes" -msgstr "bytes" +#~ msgid "More options" +#~ msgstr "Flere valgmuligheder" -#. / Placeholder filename for attachments with no filename. -#: ../../src/client/views/conversation-viewer.vala:1799 -#: ../../src/engine/rfc822/rfc822-utils.vala:327 -msgid "none" -msgstr "intet" - -#: ../../src/client/views/conversation-find-bar.vala:226 -msgid "not found" -msgstr "ikke fundet" - -#. / Translators: add your name and email address to receive credit in the About dialog -#. / For example: Yamada Taro -#: ../../src/client/geary-controller.vala:1230 -msgid "translator-credits" -msgstr "Nikolaj Holmquist Pedersen " +#~ msgid "Large" +#~ msgstr "Stor" + +#~ msgid "Medium" +#~ msgstr "Mellem" + +#~ msgid "Small" +#~ msgstr "Lille" + +#~ msgid "Sans Serif" +#~ msgstr "Sans Serif" + +#~ msgid "Serif" +#~ msgstr "Serif" + +#~ msgid "Fixed Width" +#~ msgstr "Fast bredde" + +#~ msgid "Detach" +#~ msgstr "Fjern" + +#~ msgid "_Attach File" +#~ msgstr "_Vedhæft fil" diff -Nru geary-0.11.4/po/de.po geary-0.12.0/po/de.po --- geary-0.11.4/po/de.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/de.po 2017-10-02 11:25:21.000000000 +0000 @@ -12,50 +12,129 @@ # noxan , 2013 # rageltus , 2012 # Benjamin Steinwender , 2014. -# Mario Blättermann , 2016. +# Mario Blättermann , 2016-2017. # Wolfgang Stöggl , 2016. # msgid "" msgstr "" "Project-Id-Version: geary-0.4.1\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" +"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "product=geary&keywords=I18N+L10N&component=internationalization\n" -"POT-Creation-Date: 2017-01-11 14:26+0000\n" -"PO-Revision-Date: 2017-01-13 12:35+0100\n" -"Last-Translator: Christian Kirbach \n" +"POT-Creation-Date: 2017-09-29 08:56+0000\n" +"PO-Revision-Date: 2017-10-02 10:35+0200\n" +"Last-Translator: Mario Blättermann \n" "Language-Team: Deutsch \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.8.11\n" +"X-Generator: Poedit 2.0.3\n" -#: ../desktop/geary.desktop.in.h:1 ../desktop/geary-autostart.desktop.in.h:1 +#. Translators: The application name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:2 +#: ../desktop/org.gnome.Geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" msgstr "Geary" -#: ../desktop/geary.desktop.in.h:2 ../desktop/geary-autostart.desktop.in.h:2 -#: ../src/client/application/geary-application.vala:18 -msgid "Mail Client" -msgstr "Mail-Client" - -#: ../desktop/geary.desktop.in.h:3 ../desktop/geary-autostart.desktop.in.h:3 -msgid "Geary Mail" -msgstr "Geary Mail" - -#: ../desktop/geary.desktop.in.h:4 ../desktop/geary-autostart.desktop.in.h:4 +#. Translators: The development team's name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:4 +msgid "Geary Development Team" +msgstr "Geary-Entwicklerteam" + +#. Translators: The application's summary / tagline +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:6 +#: ../desktop/org.gnome.Geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 +#: ../src/client/application/geary-application.vala:22 msgid "Send and receive email" msgstr "Senden und empfangen" -#: ../desktop/geary.desktop.in.h:5 ../desktop/geary-autostart.desktop.in.h:5 -msgid "Email;E-mail;Mail;" -msgstr "Email;E-Mail;Mail;" +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:7 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"Geary ist ein E-Mail-Programm für GNOME 3 mit Fokus auf Konversationen. Es " +"ermöglicht das einfache Lesen, Finden und Schreiben von E-Mails in einer " +"übersichtlichen und modernen Benutzeroberfläche." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:8 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"Konversationen ermöglichen das Lesen eines gesamten Diskussionsstrangs, ohne " +"Nachrichten einzeln suchen zu müssen." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:9 +msgid "Geary’s features include:" +msgstr "Funktionen von Geary umfassen:" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:10 +msgid "Quick email account setup" +msgstr "Schnelle Konto-Einrichtung" -#: ../desktop/geary.desktop.in.h:6 +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:11 +msgid "Shows related messages together in conversations" +msgstr "Verwandte Nachrichten gebündelt in Konversationen anzeigen" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:12 +msgid "Fast, full text and keyword search" +msgstr "Schnelle Volltext- und Schlüsselwortsuche" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:13 +msgid "Full-featured HTML and plain text message composer" +msgstr "Voll ausgestatteter HTML- und Klartext-Nachrichteneditor" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:14 +msgid "Desktop notification of new mail" +msgstr "Benachrichtigung bei neuer E-Mail" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:15 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" +msgstr "" +"Kompatibel mit GMail, Yahoo! Mail, Outlook.com und weiteren IMAP-Servern" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:17 +msgid "Geary displaying a conversation" +msgstr "Geary zeigt eine Konversationsvorschau an" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:19 +msgid "Geary showing the rich text composer" +msgstr "Geary zeigt den Editor für formatierten Text" + +#: ../desktop/org.gnome.Geary.desktop.in.h:2 +#: ../desktop/geary-autostart.desktop.in.h:2 +msgid "Email" +msgstr "E-Mail" + +# Oder Geary E-Mail +#: ../desktop/org.gnome.Geary.desktop.in.h:3 +msgid "Geary Email" +msgstr "Geary E-Mail" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/org.gnome.Geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "Mail;E-Mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" + +#: ../desktop/org.gnome.Geary.desktop.in.h:7 ../ui/gtk/menus.ui.h:1 msgid "Compose Message" msgstr "Nachricht verfassen" +#: ../desktop/geary-autostart.desktop.in.h:3 +msgid "Geary Mail" +msgstr "Geary Mail" + +#: ../desktop/geary-autostart.desktop.in.h:5 +msgid "Email;E-mail;Mail;" +msgstr "Email;E-Mail;Mail;" + #: ../desktop/geary-attach.contract.in.h:1 msgid "Send by email" msgstr "Als E-Mail versenden" @@ -66,6 +145,7 @@ #: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:31 +#: ../ui/conversation-email-menus.ui.h:10 msgid "_Save" msgstr "_Speichern" @@ -75,7 +155,7 @@ msgstr "_Hinzufügen" #. reset/clear widgets -#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 #, c-format msgid "Additional addresses for %s" msgstr "Zusätzliche Adressen für %s" @@ -96,108 +176,123 @@ msgid "First Last" msgstr "Vorname Nachname" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." msgstr "Willkommen bei Geary." -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." msgstr "Tragen Sie zu Beginn bitte Ihre Kontodaten ein." -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "2 Wochen zurück" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:254 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "1 Monat zurück" -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "3 Monate zurück" -#: ../src/client/accounts/add-edit-page.vala:256 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "6 Monate zurück" -#: ../src/client/accounts/add-edit-page.vala:257 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "1 Jahr zurück" -#: ../src/client/accounts/add-edit-page.vala:258 +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" msgstr "2 Jahre zurück" -#: ../src/client/accounts/add-edit-page.vala:259 +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" msgstr "4 Jahre zurück" #. Separator -#: ../src/client/accounts/add-edit-page.vala:261 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "Alles" -#: ../src/client/accounts/add-edit-page.vala:280 +#: ../src/client/accounts/add-edit-page.vala:283 msgid "Edit" msgstr "Bearbeiten" -#: ../src/client/accounts/add-edit-page.vala:282 +#: ../src/client/accounts/add-edit-page.vala:285 msgid "Preview" msgstr "Vorschau" -#: ../src/client/accounts/add-edit-page.vala:723 +#: ../src/client/accounts/add-edit-page.vala:751 msgid "Remem_ber passwords" msgstr "Passwörter _merken" -#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:7 +#: ../src/client/accounts/add-edit-page.vala:758 ../ui/login.glade.h:7 msgid "Remem_ber password" msgstr "Passwort _merken" -#: ../src/client/accounts/add-edit-page.vala:764 +#: ../src/client/accounts/add-edit-page.vala:792 msgid "Unable to validate:\n" msgstr "Bestätigung nicht möglich:\n" -#: ../src/client/accounts/add-edit-page.vala:766 -msgid " • Invalid account nickname.\n" -msgstr " • Ungültiger Konto-Nickname.\n" - -#: ../src/client/accounts/add-edit-page.vala:769 -msgid " • Email address already added to Geary.\n" -msgstr " • E-Mail-Adresse wurde bereits zu Geary hinzugefügt.\n" - -#: ../src/client/accounts/add-edit-page.vala:773 -msgid " • IMAP connection error.\n" -msgstr " • IMAP-Verbindungsfehler.\n" - -#: ../src/client/accounts/add-edit-page.vala:776 -msgid " • IMAP username or password incorrect.\n" -msgstr " • IMAP-Benutzername oder Passwort ungültig.\n" - -#: ../src/client/accounts/add-edit-page.vala:779 -msgid " • SMTP connection error.\n" -msgstr " • SMTP-Verbindungsfehler.\n" - -#: ../src/client/accounts/add-edit-page.vala:782 -msgid " • SMTP username or password incorrect.\n" -msgstr " • SMTP-Benutzername oder Passwort ungültig.\n" - -#: ../src/client/accounts/add-edit-page.vala:786 -msgid " • Connection error.\n" -msgstr " • Verbindungsfehler.\n" - -#: ../src/client/accounts/add-edit-page.vala:790 -msgid " • Username or password incorrect.\n" -msgstr " • IMAP-Benutzername oder Passwort ungültig.\n" +#: ../src/client/accounts/add-edit-page.vala:794 +msgid " • Invalid account nickname.\n" +msgstr " • Ungültiger Konto-Nickname.\n" + +#: ../src/client/accounts/add-edit-page.vala:797 +msgid " • Email address already added to Geary.\n" +msgstr " • E-Mail-Adresse wurde bereits zu Geary hinzugefügt.\n" + +#: ../src/client/accounts/add-edit-page.vala:801 +msgid " • IMAP connection error.\n" +msgstr " • IMAP-Verbindungsfehler.\n" + +#: ../src/client/accounts/add-edit-page.vala:804 +msgid " • IMAP username or password incorrect.\n" +msgstr " • IMAP-Benutzername oder Passwort ungültig.\n" + +#: ../src/client/accounts/add-edit-page.vala:807 +msgid " • SMTP connection error.\n" +msgstr " • SMTP-Verbindungsfehler.\n" + +#: ../src/client/accounts/add-edit-page.vala:810 +msgid " • SMTP username or password incorrect.\n" +msgstr " • SMTP-Benutzername oder Passwort ungültig.\n" + +#: ../src/client/accounts/add-edit-page.vala:814 +msgid " • Connection error.\n" +msgstr " • Verbindungsfehler.\n" + +#: ../src/client/accounts/add-edit-page.vala:818 +msgid " • Username or password incorrect.\n" +msgstr " • IMAP-Benutzername oder Passwort ungültig.\n" -#: ../src/client/application/geary-application.vala:19 +#: ../src/client/application/geary-application.vala:21 msgid "Copyright 2016 Software Freedom Conservancy Inc." msgstr "Copyright 2016 Software Freedom Conservancy Inc." -#: ../src/client/application/geary-application.vala:21 +#: ../src/client/application/geary-application.vala:24 msgid "Visit the Geary web site" msgstr "Geary-Webseite besuchen" +#: ../src/client/application/geary-application.vala:464 +#, c-format +msgid "About %s" +msgstr "Info zu %s" + +#. Translators: add your name and email address to receive +#. credit in the About dialog For example: Yamada Taro +#. +#: ../src/client/application/geary-application.vala:468 +msgid "translator-credits" +msgstr "" +"Benjamin Steinwender \n" +"Wolfgang Stöggl \n" +"Mario Blättermann " + #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" msgstr "Geary mit verborgenem Hauptfenster starten" @@ -253,217 +348,191 @@ msgstr "Alle Server-Zertifikate mit TLS-Warnungen widerrufen" #: ../src/client/application/geary-args.vala:27 +msgid "Perform a graceful quit" +msgstr "Ordnungsgemäß beenden" + +#: ../src/client/application/geary-args.vala:28 msgid "Display program version" msgstr "Programmversion anzeigen" #. This gives a command-line hint on how to open new composer windows with mailto: -#: ../src/client/application/geary-args.vala:51 +#: ../src/client/application/geary-args.vala:53 #, c-format msgid "Use %s to open a new composer window" msgstr "Benutzen Sie %s, um ein neues »Verfassen«-Fenster zu öffnen" -#: ../src/client/application/geary-args.vala:52 +#: ../src/client/application/geary-args.vala:54 msgid "Please report comments, suggestions and bugs to:" msgstr "Bitte melden Sie Kommentare, Vorschläge und Fehler an:" #. i18n: Command line arguments are invalid -#: ../src/client/application/geary-args.vala:59 +#: ../src/client/application/geary-args.vala:61 #, c-format msgid "Failed to parse command line options: %s\n" msgstr "Die Befehlszeilenargumente konnten nicht interpretiert werden: %s\n" -#: ../src/client/application/geary-args.vala:70 +#: ../src/client/application/geary-args.vala:72 #, c-format -msgid "Unrecognized command line option \"%s\"\n" +msgid "Unrecognized command line option “%s”\n" msgstr "Unbekanntes Befehlszeilenargument »%s«\n" -#: ../src/client/application/geary-controller.vala:61 +#: ../src/client/application/geary-controller.vala:57 msgid "Delete conversation" msgstr "Konversation löschen" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:58 msgid "Delete conversation (Shift+Delete)" msgstr "Konversation löschen (Umschalt+Entf)" -#: ../src/client/application/geary-controller.vala:63 +#: ../src/client/application/geary-controller.vala:59 msgid "Delete conversations (Shift+Delete)" msgstr "Konversationen löschen (Umschalt+Entf)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:67 +#: ../src/client/application/geary-controller.vala:63 msgid "Move conversation to Trash (Delete, Backspace)" msgstr "Konversation in den Papierkorb verschieben (Entf, Rücktaste)" -#: ../src/client/application/geary-controller.vala:68 +#: ../src/client/application/geary-controller.vala:64 msgid "Move conversations to Trash (Delete, Backspace)" msgstr "Konversationen in den Papierkorb verschieben (Entf, Rücktaste)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:72 +#: ../src/client/application/geary-controller.vala:68 msgid "_Archive" msgstr "_Archivieren" -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:69 msgid "Archive conversation (A)" msgstr "Konversation archivieren (A)" -#: ../src/client/application/geary-controller.vala:74 +#: ../src/client/application/geary-controller.vala:70 msgid "Archive conversations (A)" msgstr "Konversationen archivieren (A)" -#: ../src/client/application/geary-controller.vala:77 +#: ../src/client/application/geary-controller.vala:73 msgid "Mark as S_pam" msgstr "Als S_pam markieren" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:74 msgid "Mark as not S_pam" msgstr "S_pam-Markierung entfernen" -#: ../src/client/application/geary-controller.vala:80 -#: ../src/client/application/geary-controller.vala:396 +#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:448 msgid "Mark conversation" msgstr "Konversation markieren" -#: ../src/client/application/geary-controller.vala:81 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark conversations" msgstr "Konversationen markieren" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:78 msgid "Add label to conversation" msgstr "Konversation eine Beschriftung zuweisen" -#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:79 msgid "Add label to conversations" msgstr "Konversationen eine Beschriftung zuweisen" -#: ../src/client/application/geary-controller.vala:84 -#: ../src/client/application/geary-controller.vala:435 +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:487 msgid "Move conversation" msgstr "Konversation verschieben" -#: ../src/client/application/geary-controller.vala:85 +#: ../src/client/application/geary-controller.vala:81 msgid "Move conversations" msgstr "Konversationen verschieben" -#: ../src/client/application/geary-controller.vala:376 -#: ../ui/app_menu.interface.h:1 -msgid "A_ccounts" -msgstr "Konten" - -#: ../src/client/application/geary-controller.vala:381 -#: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 -msgid "_Preferences" -msgstr "_Einstellungen" - -#: ../src/client/application/geary-controller.vala:385 -#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:3 -msgid "_Help" -msgstr "_Hilfe" - -#: ../src/client/application/geary-controller.vala:389 -#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:4 -msgid "_About" -msgstr "_Info" - -#: ../src/client/application/geary-controller.vala:393 -#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:5 -msgid "_Quit" -msgstr "_Beenden" - -#: ../src/client/application/geary-controller.vala:398 -msgid "_Mark as..." +#: ../src/client/application/geary-controller.vala:450 +msgid "_Mark as…" msgstr "_Markieren als …" -#: ../src/client/application/geary-controller.vala:404 +#: ../src/client/application/geary-controller.vala:456 msgid "Mark as _Read" msgstr "Als _gelesen markieren" -#: ../src/client/application/geary-controller.vala:410 +#: ../src/client/application/geary-controller.vala:462 msgid "Mark as _Unread" msgstr "Als _ungelesen markieren" -#: ../src/client/application/geary-controller.vala:416 +#: ../src/client/application/geary-controller.vala:468 msgid "_Star" msgstr "_Stern" -#: ../src/client/application/geary-controller.vala:421 +#: ../src/client/application/geary-controller.vala:473 msgid "U_nstar" msgstr "_Stern entfernen" -#: ../src/client/application/geary-controller.vala:431 +#: ../src/client/application/geary-controller.vala:483 msgid "Add label" msgstr "Beschriftung zuweisen" -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:484 msgid "_Label" msgstr "_Beschriftung" -#: ../src/client/application/geary-controller.vala:436 +#: ../src/client/application/geary-controller.vala:488 msgid "_Move" msgstr "_Verschieben" -#: ../src/client/application/geary-controller.vala:440 +#: ../src/client/application/geary-controller.vala:492 msgid "Compose new message (Ctrl+N, N)" msgstr "Neue Nachricht verfassen (Strg+N, N)" -#. Reply to a message. -#: ../src/client/application/geary-controller.vala:444 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1873 +#: ../src/client/application/geary-controller.vala:496 +#: ../ui/conversation-email-menus.ui.h:1 msgid "_Reply" msgstr "_Antworten" -#: ../src/client/application/geary-controller.vala:445 +#: ../src/client/application/geary-controller.vala:497 msgid "Reply (Ctrl+R, R)" msgstr "Antworten (Strg+R, R)" -#: ../src/client/application/geary-controller.vala:449 +#: ../src/client/application/geary-controller.vala:501 msgid "R_eply All" msgstr "Allen _antworten" -#: ../src/client/application/geary-controller.vala:450 +#: ../src/client/application/geary-controller.vala:502 msgid "Reply all (Ctrl+Shift+R, Shift+R)" msgstr "Allen antworten (Strg+Umschalt+R, Umschalt+R)" -#. Forward a message. -#: ../src/client/application/geary-controller.vala:455 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1883 +#: ../src/client/application/geary-controller.vala:507 +#: ../ui/conversation-email-menus.ui.h:3 msgid "_Forward" msgstr "_Weiterleiten" -#: ../src/client/application/geary-controller.vala:456 +#: ../src/client/application/geary-controller.vala:508 msgid "Forward (Ctrl+L, F)" msgstr "Weiterleiten (Strg+L, F)" -#: ../src/client/application/geary-controller.vala:495 -msgid "Empty" -msgstr "Leeren" - -#: ../src/client/application/geary-controller.vala:496 -msgid "Empty Spam or Trash folders" -msgstr "Spam oder Papierkorb leeren" - -#: ../src/client/application/geary-controller.vala:500 +#: ../src/client/application/geary-controller.vala:538 msgid "Empty _Spam…" msgstr "_Spam leeren …" -#: ../src/client/application/geary-controller.vala:504 +#: ../src/client/application/geary-controller.vala:542 msgid "Empty _Trash…" msgstr "_Papierkorb leeren …" #. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:537 +#: ../src/client/application/geary-controller.vala:574 msgid "Toggle search bar" msgstr "Suchleiste anzeigen/verbergen" -#: ../src/client/application/geary-controller.vala:744 +#. No callback is connected, since we bind the toggle button to the find bar visibility +#: ../src/client/application/geary-controller.vala:579 +msgid "Toggle find bar" +msgstr "Suchleiste anzeigen/verbergen" + +#: ../src/client/application/geary-controller.vala:757 msgid "Unable to store server trust exception" msgstr "Ausnahme für Serververtrauen konnte nicht gespeichert werden" -#: ../src/client/application/geary-controller.vala:981 +#: ../src/client/application/geary-controller.vala:992 msgid "Your settings are insecure" msgstr "Ihre Einstellungen sind unsicher" -#: ../src/client/application/geary-controller.vala:982 +#: ../src/client/application/geary-controller.vala:993 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -474,29 +543,29 @@ "anderen Personen im selben Netzwerk gelesen werden können. Sind Sie sicher, " "dass Sie dies tun möchten?" -#: ../src/client/application/geary-controller.vala:983 +#: ../src/client/application/geary-controller.vala:994 msgid "Co_ntinue" msgstr "_Weiter" -#: ../src/client/application/geary-controller.vala:1030 +#: ../src/client/application/geary-controller.vala:1041 msgid "Error connecting to the server" -msgstr "Fehler beim Verbinden mit dem Server" +msgstr "Fehler bei der Verbindung mit dem Server" -#: ../src/client/application/geary-controller.vala:1031 +#: ../src/client/application/geary-controller.vala:1042 msgid "" "Geary encountered an error while connecting to the server. Please try again " "in a few moments." msgstr "" -"Geary stellte einen Fehler beim Verbinden mit dem Server fest. Bitte " -"versuchen Sie es in Kürze erneut." +"Während des Verbindungsaufbaus zum Server ist ein Fehler aufgetreten. Bitte " +"versuchen Sie es in einigen Momenten erneut." #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:1068 +#: ../src/client/application/geary-controller.vala:1079 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "Fehler beim Senden der E-Mail" -#: ../src/client/application/geary-controller.vala:1069 +#: ../src/client/application/geary-controller.vala:1080 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." @@ -506,12 +575,12 @@ #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1073 +#: ../src/client/application/geary-controller.vala:1084 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "Fehler beim Speichern der gesendeten E-Mail" -#: ../src/client/application/geary-controller.vala:1074 +#: ../src/client/application/geary-controller.vala:1085 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." @@ -519,19 +588,19 @@ "Beim Speichern einer gesendeten E-Mail trat ein Fehler auf. Die Nachricht " "bleibt im Postausgang, bis Sie sie löschen." -#: ../src/client/application/geary-controller.vala:1143 +#: ../src/client/application/geary-controller.vala:1154 msgid "Labels" msgstr "Beschriftungen" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1155 +#: ../src/client/application/geary-controller.vala:1166 #, c-format msgid "Unable to open the database for %s" msgstr "Die Datenbank für %s konnte nicht geöffnet werden" -#: ../src/client/application/geary-controller.vala:1156 +#: ../src/client/application/geary-controller.vala:1167 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -556,20 +625,20 @@ "dazugehörigen Anhänge verloren. E-Mails auf Ihrem Server werden nicht " "betroffen sein." -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "_Rebuild" msgstr "_Wiederherstellen" -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "E_xit" msgstr "B_eenden" -#: ../src/client/application/geary-controller.vala:1167 +#: ../src/client/application/geary-controller.vala:1178 #, c-format -msgid "Unable to rebuild database for \"%s\"" +msgid "Unable to rebuild database for “%s”" msgstr "Die Datenbank für »%s« konnte nicht wiederhergestellt werden" -#: ../src/client/application/geary-controller.vala:1168 +#: ../src/client/application/geary-controller.vala:1179 #, c-format msgid "" "Error during rebuild:\n" @@ -582,14 +651,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1190 -#: ../src/client/application/geary-controller.vala:1200 +#: ../src/client/application/geary-controller.vala:1201 #: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:1222 #, c-format msgid "Unable to open local mailbox for %s" msgstr "Das lokale Postfach für %s konnte nicht geöffnet werden" -#: ../src/client/application/geary-controller.vala:1191 +#: ../src/client/application/geary-controller.vala:1202 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -608,10 +677,10 @@ "\n" "%s" -#: ../src/client/application/geary-controller.vala:1201 +#: ../src/client/application/geary-controller.vala:1212 msgid "" "The version number of the local mail database is formatted for a newer " -"version of Geary. Unfortunately, the database cannot be \"rolled back\" to " +"version of Geary. Unfortunately, the database cannot be “rolled back” to " "work with this version of Geary.\n" "\n" "Please install the latest version of Geary and try again." @@ -621,9 +690,9 @@ "werden, damit sie mit dieser Version von Geary funktioniert.\n" "\n" "Bitte installieren Sie die neueste Version von Geary und versuchen Sie es " -"erneut. " +"erneut." -#: ../src/client/application/geary-controller.vala:1212 +#: ../src/client/application/geary-controller.vala:1223 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" @@ -635,30 +704,15 @@ "\n" "Bitte überprüfen Sie Ihre Verbindung und starten Sie Geary neu." -#: ../src/client/application/geary-controller.vala:1723 -#, c-format -msgid "About %s" -msgstr "Info zu %s" - -#. / Translators: add your name and email address to receive credit in the About dialog -#. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1726 -msgid "translator-credits" -msgstr "" -"Benjamin Steinwender \n" -"Wolfgang Stöggl \n" -"Mario Blättermann " - -#: ../src/client/application/geary-controller.vala:1984 +#: ../src/client/application/geary-controller.vala:1999 msgid "Undo move (Ctrl+Z)" msgstr "Verschieben rückgängig machen (Strg+Z)" -#: ../src/client/application/geary-controller.vala:1994 -#, c-format -msgid "Are you sure you want to open \"%s\"?" -msgstr "Möchten Sie »%s« wirklich öffnen?" +#: ../src/client/application/geary-controller.vala:2009 +msgid "Are you sure you want to open these attachments?" +msgstr "Möchten Sie wirklich diese Anhänge öffnen?" -#: ../src/client/application/geary-controller.vala:1995 +#: ../src/client/application/geary-controller.vala:2010 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -666,119 +720,104 @@ "Anhänge können Ihr System beschädigen, wenn diese geöffnet werden. Öffnen " "Sie nur Dateien aus vertrauenswürdigen Quellen." -#: ../src/client/application/geary-controller.vala:1996 -msgid "Don't _ask me again" +#: ../src/client/application/geary-controller.vala:2011 +msgid "Don’t _ask me again" msgstr "Nicht _noch einmal fragen" -#: ../src/client/application/geary-controller.vala:2014 +#: ../src/client/application/geary-controller.vala:2121 #, c-format -msgid "A file named \"%s\" already exists. Do you want to replace it?" +msgid "A file named “%s” already exists. Do you want to replace it?" msgstr "Die Datei »%s« existiert schon. Möchten Sie diese ersetzen?" -#: ../src/client/application/geary-controller.vala:2016 +#: ../src/client/application/geary-controller.vala:2123 #, c-format msgid "" -"The file already exists in \"%s\". Replacing it will overwrite its contents." +"The file already exists in “%s”. Replacing it will overwrite its contents." msgstr "" "Die Datei existiert bereits in »%s«. Beim Ersetzen wird die Datei " "überschrieben." -#: ../src/client/application/geary-controller.vala:2019 +#: ../src/client/application/geary-controller.vala:2126 msgid "_Replace" msgstr "_Ersetzen" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2324 +#: ../src/client/application/geary-controller.vala:2374 msgid "Close open draft messages?" msgstr "Offene Nachrichtenentwürfe schließen?" -#: ../src/client/application/geary-controller.vala:2454 +#: ../src/client/application/geary-controller.vala:2496 #, c-format msgid "Empty all email from your %s folder?" msgstr "Alle E-Mails aus dem Ordner %s löschen?" -#: ../src/client/application/geary-controller.vala:2455 +#: ../src/client/application/geary-controller.vala:2497 msgid "This removes the email from Geary and your email server." msgstr "Dies wird die E-Mail aus Geary und von Ihrem E-Mail-Server löschen." -#: ../src/client/application/geary-controller.vala:2456 +#: ../src/client/application/geary-controller.vala:2498 msgid "This cannot be undone." msgstr "Dies kann nicht rückgängig gemacht werden." -#: ../src/client/application/geary-controller.vala:2457 +#: ../src/client/application/geary-controller.vala:2499 #, c-format msgid "Empty %s" msgstr "%s leeren" -#: ../src/client/application/geary-controller.vala:2474 +#: ../src/client/application/geary-controller.vala:2516 #, c-format msgid "Error emptying %s" msgstr "Fehler beim Leeren von %s" -#: ../src/client/application/geary-controller.vala:2504 +#: ../src/client/application/geary-controller.vala:2546 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "Möchten Sie diese Nachricht dauerhaft löschen?" msgstr[1] "Möchten Sie diese Nachrichten dauerhaft löschen?" -#: ../src/client/application/geary-controller.vala:2506 +#: ../src/client/application/geary-controller.vala:2548 msgid "Delete" msgstr "Löschen" -#: ../src/client/application/geary-controller.vala:2537 +#: ../src/client/application/geary-controller.vala:2580 msgid "Undo archive (Ctrl+Z)" msgstr "Archivieren rückgängig (Strg+Z)" -#: ../src/client/application/geary-controller.vala:2552 +#: ../src/client/application/geary-controller.vala:2595 msgid "Undo trash (Ctrl+Z)" msgstr "Papierkorb rückgängig (Strg+Z)" -#: ../src/client/application/geary-controller.vala:2605 +#: ../src/client/application/geary-controller.vala:2649 msgid "Undo (Ctrl+Z)" msgstr "Rückgängig (Strg+Z)" -#: ../src/client/components/conversation-find-bar.vala:214 -#, c-format -msgid "%i match" -msgid_plural "%i matches" -msgstr[0] "%i Treffer" -msgstr[1] "%i Treffer" - -# Hm, was soll das denn sein? Müsste wohl eher so etwas wie »umgebrochen« oder »gekürzt« heißen. -#: ../src/client/components/conversation-find-bar.vala:216 -#, c-format -msgid "%i match (wrapped)" -msgid_plural "%i matches (wrapped)" -msgstr[0] "%i Treffer (gefaltet)" -msgstr[1] "%i Treffer (gefaltet)" - -#: ../src/client/components/conversation-find-bar.vala:218 -msgid "not found" -msgstr "nicht gefunden" +#: ../src/client/application/geary-controller.vala:2780 +msgid "Failed to open default text editor." +msgstr "Der Standard-Texteditor konnte nicht geöffnet werden." -#: ../src/client/components/main-window.vala:438 +#: ../src/client/components/main-window.vala:389 #, c-format msgid "%s (%d)" msgstr "%s (%d)" -#: ../src/client/components/search-bar.vala:10 +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "Suchen" #. Search entry. -#: ../src/client/components/search-bar.vala:25 +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" msgstr "Alle E-Mails dieses Kontos nach Stichworten durchsuchen (Strg+S)" -#: ../src/client/components/search-bar.vala:118 +#: ../src/client/components/search-bar.vala:100 #, c-format msgid "Indexing %s account" msgstr "%s-Konto wird indiziert" -#: ../src/client/components/search-bar.vala:129 +#: ../src/client/components/search-bar.vala:111 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" @@ -786,7 +825,7 @@ #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 -msgid "Sending..." +msgid "Sending…" msgstr "Wird gesendet …" #: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 @@ -798,6 +837,10 @@ msgid "_Cancel" msgstr "_Abbrechen" +#: ../src/client/components/stock.vala:21 ../ui/gtk/menus.ui.h:6 +msgid "_About" +msgstr "_Info" + #: ../src/client/components/stock.vala:23 msgid "_Close" msgstr "_Schließen" @@ -806,51 +849,73 @@ msgid "_Discard" msgstr "_Verwerfen" -#: ../src/client/components/stock.vala:26 +#: ../src/client/components/stock.vala:25 ../ui/gtk/menus.ui.h:5 +msgid "_Help" +msgstr "_Hilfe" + +#: ../src/client/components/stock.vala:26 ../ui/conversation-email-menus.ui.h:9 msgid "_Open" msgstr "_Öffnen" -#: ../src/client/components/stock.vala:28 -msgid "_Print..." +#: ../src/client/components/stock.vala:27 ../ui/gtk/menus.ui.h:3 +msgid "_Preferences" +msgstr "_Einstellungen" + +#: ../src/client/components/stock.vala:28 ../ui/conversation-email-menus.ui.h:7 +msgid "_Print…" msgstr "_Drucken …" +#: ../src/client/components/stock.vala:29 ../ui/gtk/menus.ui.h:7 +msgid "_Quit" +msgstr "_Beenden" + #: ../src/client/components/stock.vala:30 ../ui/remove_confirm.glade.h:6 msgid "_Remove" msgstr "_Entfernen" -#. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1335 -msgid "Select _All" -msgstr "Alles _auswählen" - -#: ../src/client/components/stock.vala:33 msgid "_Keep" msgstr "_Behalten" -#: ../src/client/composer/composer-widget.vala:73 +#: ../src/client/composer/composer-link-popover.vala:150 +msgid "Link URL is not correctly formatted, e.g. http://example.com" +msgstr "" +"Die Adresse des Verweises ist nicht korrekt formatiert, z.B. http://example." +"com" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid link URL" +msgstr "Ungültige Verweisadresse" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid email address" +msgstr "Ungültige E-Mail-Adresse" + +#: ../src/client/composer/composer-widget.vala:154 msgid "Saved" msgstr "Gespeichert" -#: ../src/client/composer/composer-widget.vala:74 +#: ../src/client/composer/composer-widget.vala:155 msgid "Saving" msgstr "Wird gespeichert" -#: ../src/client/composer/composer-widget.vala:75 +#: ../src/client/composer/composer-widget.vala:156 msgid "Error saving" msgstr "Fehler beim Speichern" -#: ../src/client/composer/composer-widget.vala:76 +#: ../src/client/composer/composer-widget.vala:157 msgid "Press Backspace to delete quote" msgstr "Rücktaste drücken, um die Einrückung zu entfernen" -#: ../src/client/composer/composer-widget.vala:77 +#: ../src/client/composer/composer-widget.vala:158 msgid "New Message" msgstr "Neue Nachricht" -#. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since -#. this is full-word checking, include all variants of each word. No spaces are allowed. -#: ../src/client/composer/composer-widget.vala:138 +#. Translators: This is list of keywords, separated by pipe ("|") +#. characters, that suggest an attachment; since this is full-word +#. checking, include all variants of each word. No spaces are +#. allowed. +#: ../src/client/composer/composer-widget.vala:167 msgid "" "attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" "enclosing|encloses|enclosure|enclosures" @@ -858,276 +923,188 @@ "Anhang|Anhänge|angehängt|anhängen|Wiedervorlage|Beilage|beilegen|Anlage|" "anbei|beigefügt|anhängend" -#: ../src/client/composer/composer-widget.vala:1121 -#: ../src/client/composer/composer-widget.vala:1125 +#: ../src/client/composer/composer-widget.vala:1122 +#: ../src/client/composer/composer-widget.vala:1141 msgid "Do you want to discard this message?" msgstr "Möchten Sie diese Nachricht verwerfen?" -#: ../src/client/composer/composer-widget.vala:1281 +#: ../src/client/composer/composer-widget.vala:1245 msgid "Send message with an empty subject and body?" msgstr "Nachricht ohne Betreff und Inhalt senden?" -#: ../src/client/composer/composer-widget.vala:1283 +#: ../src/client/composer/composer-widget.vala:1247 msgid "Send message with an empty subject?" msgstr "Nachricht ohne Betreff senden?" -#: ../src/client/composer/composer-widget.vala:1285 +#: ../src/client/composer/composer-widget.vala:1249 msgid "Send message with an empty body?" msgstr "Nachricht ohne Inhalt senden?" -#: ../src/client/composer/composer-widget.vala:1287 +#: ../src/client/composer/composer-widget.vala:1253 msgid "Send message without an attachment?" msgstr "Nachricht ohne Anhang senden?" -#: ../src/client/composer/composer-widget.vala:1553 -msgid "Cannot add attachment" -msgstr "Anhang kann nicht hinzugefügt werden" +#: ../src/client/composer/composer-widget.vala:1515 +#, c-format +msgid "“%s” already attached for delivery." +msgstr "»%s« ist bereits als Anhang ausgewählt worden." + +#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" +#. Translators: The first argument will be a +#. description of the document type, the second will +#. be a human-friendly size string. For example: +#. Document (100.9MB) +#: ../src/client/composer/composer-widget.vala:1523 +#: ../src/client/conversation-viewer/conversation-email.vala:138 +#, c-format +msgid "%s (%s)" +msgstr "%s (%s)" -#: ../src/client/composer/composer-widget.vala:1564 +#: ../src/client/composer/composer-widget.vala:1560 #, c-format -msgid "\"%s\" could not be found." +msgid "“%s” could not be found." msgstr "»%s« konnte nicht gefunden werden." -#: ../src/client/composer/composer-widget.vala:1571 +#: ../src/client/composer/composer-widget.vala:1566 #, c-format -msgid "\"%s\" is a folder." +msgid "“%s” is a folder." msgstr "»%s« ist ein Ordner." -#: ../src/client/composer/composer-widget.vala:1578 +#: ../src/client/composer/composer-widget.vala:1572 #, c-format -msgid "\"%s\" is an empty file." +msgid "“%s” is an empty file." msgstr "»%s« ist eine leere Datei." -#: ../src/client/composer/composer-widget.vala:1592 +#: ../src/client/composer/composer-widget.vala:1585 #, c-format -msgid "\"%s\" could not be opened for reading." +msgid "“%s” could not be opened for reading." msgstr "»%s« konnte nicht zum Lesen geöffnet werden." -#: ../src/client/composer/composer-widget.vala:1599 -#, c-format -msgid "\"%s\" already attached for delivery." -msgstr "»%s« ist bereits als Anhang ausgewählt worden." - -#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-widget.vala:1608 -#, c-format -msgid "%s (%s)" -msgstr "%s (%s)" +#: ../src/client/composer/composer-widget.vala:1593 +msgid "Cannot add attachment" +msgstr "Anhang kann nicht hinzugefügt werden" -#: ../src/client/composer/composer-widget.vala:1668 +#: ../src/client/composer/composer-widget.vala:1645 msgid "To: " msgstr "An: " -#: ../src/client/composer/composer-widget.vala:1671 +#: ../src/client/composer/composer-widget.vala:1648 msgid "Cc: " msgstr "Cc: " -#: ../src/client/composer/composer-widget.vala:1674 +#: ../src/client/composer/composer-widget.vala:1651 msgid "Bcc: " msgstr "Bcc:" -#: ../src/client/composer/composer-widget.vala:1677 +#: ../src/client/composer/composer-widget.vala:1654 msgid "Reply-To: " msgstr "Antwort an: " -#: ../src/client/composer/composer-widget.vala:1910 +#: ../src/client/composer/composer-widget.vala:1786 msgid "Select Color" msgstr "Farbe auswählen" #. Displayed in the From dropdown to indicate an "alternate email address" #. for an account. The first printf argument will be the alternate email #. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2345 +#: ../src/client/composer/composer-widget.vala:1986 #, c-format msgid "%1$s via %2$s" msgstr "%1$s über %2$s" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2389 +#: ../src/client/composer/composer-widget.vala:2028 msgid "_From:" msgstr "_Von:" +#. Translators: This is the name of the file chooser filter +#. when inserting an image in the composer. +#: ../src/client/composer/composer-widget.vala:2252 +msgid "Images" +msgstr "Bilder" + +#: ../src/client/composer/spell-check-popover.vala:117 +msgid "Remove this language from the preferred list" +msgstr "Diese Sprache aus der Liste der bevorzugten Sprachen entfernen" + +#: ../src/client/composer/spell-check-popover.vala:121 +msgid "Add this language to the preferred list" +msgstr "Diese Sprache zur Liste der bevorzugten Sprachen hinzufügen" + +#: ../src/client/composer/spell-check-popover.vala:217 +msgid "Search for more languages" +msgstr "Nach weiteren Sprachen suchen" + #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Mir" -#: ../src/client/conversation-viewer/conversation-viewer.vala:414 -msgid "No conversations selected." -msgstr "Keine Konversation ausgewählt" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:416 -#, c-format -msgid "%u conversation selected." -msgid_plural "%u conversations selected." -msgstr[0] "%u Konversation ausgewählt." -msgstr[1] "%u Konversationen ausgewählt." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:446 -msgid "No search results found." -msgstr "Suche war erfolglos." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:448 -msgid "No conversations in folder." -msgstr "Keine Konversation in diesem Ordner." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "This message contains remote images." -msgstr "Diese Nachricht enthält Bilder aus entfernten Quellen." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "Show Images" -msgstr "Bilder anzeigen" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:715 -msgid "Always Show From Sender" -msgstr "Von diesem Absender immer anzeigen" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:739 -msgid "Edit Draft" -msgstr "Entwurf bearbeiten" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:815 -msgid "From:" -msgstr "Von:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:818 -msgid "To:" -msgstr "An:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:821 -msgid "Cc:" -msgstr "Cc:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:824 -msgid "Bcc:" -msgstr "Bcc:" +#. Translators: This is the file type displayed for +#. attachments with unknown file types. +#: ../src/client/conversation-viewer/conversation-email.vala:124 +msgid "Unknown" +msgstr "Unbekannt" + +#. Preview headers +#. Translators: This is displayed in place of the from address +#. when the message has no from address. +#: ../src/client/conversation-viewer/conversation-message.vala:331 +msgid "No sender" +msgstr "Kein Absender" + +#. Translators: This separates multiple 'from' +#. addresses in the header preview for a message. +#: ../src/client/conversation-viewer/conversation-message.vala:586 +msgid ", " +msgstr ", " + +#. Translators: This string is used as the HTML IMG ALT +#. attribute value when displaying an inline image in an email +#. that did not specify a file name. E.g. Image" +msgstr "Von " + +#: ../ui/conversation-message.ui.h:2 +msgid "1/1/1970\t" +msgstr "1.1.1970\t" + +#: ../ui/conversation-message.ui.h:3 +msgid "Preview body text." +msgstr "Nachrichtenvorschau anzeigen." + +#: ../ui/conversation-message.ui.h:4 +msgid "Sent by:" +msgstr "Gesendet von:" + +#: ../ui/conversation-message.ui.h:5 +msgid "Reply to:" +msgstr "Antwort an" -#: ../ui/composer.glade.h:51 -msgid "Application Menu" -msgstr "Anwendungsmenü" +#: ../ui/conversation-message.ui.h:6 +msgid "Subject" +msgstr "Betreff" -#. Address(es) e-mail is to be sent to -#: ../ui/composer.glade.h:53 -msgid "_To" -msgstr "_An" +#: ../ui/conversation-message.ui.h:7 +msgid "To:" +msgstr "An:" -#: ../ui/composer.glade.h:54 -msgid "_Cc" -msgstr "_CC" +#: ../ui/conversation-message.ui.h:8 +msgid "Cc:" +msgstr "Cc:" -#: ../ui/composer.glade.h:55 -msgid "_Subject" -msgstr "_Betreff" +#: ../ui/conversation-message.ui.h:9 +msgid "Bcc:" +msgstr "Bcc:" -#: ../ui/composer.glade.h:56 -msgid "_Bcc" -msgstr "_Bcc" +#: ../ui/conversation-message.ui.h:10 +msgid "Show Images" +msgstr "Bilder anzeigen" -#: ../ui/composer.glade.h:57 -msgid "_Reply-To" -msgstr "_Antworten" +#: ../ui/conversation-message.ui.h:11 +msgid "Always Show From Sender" +msgstr "Von diesem Absender immer anzeigen" -#. Geary account mail will be sent from -#: ../ui/composer.glade.h:59 -msgid "From" -msgstr "Von" +# habe aus fuer remote aus "entfernt" "extern gemacht, da entfernt auch ein Synonym fuer geloescht, also von der Nachricht entfernte Bilder sein kann. +#: ../ui/conversation-message.ui.h:12 +msgid "Remote images not shown" +msgstr "Externe Bilder werden nicht angezeigt" + +#: ../ui/conversation-message.ui.h:13 +msgid "Only show remote images from senders you trust." +msgstr "Externe Bilder nur von Absendern anzeigen, denen Sie vertrauen." + +#: ../ui/conversation-message.ui.h:14 +msgid "But actually goes to:" +msgstr "aber führt tatsächlich zu:" -#: ../ui/composer.glade.h:60 -msgid "Drop files here" -msgstr "Dateien hier ablegen" +#: ../ui/conversation-message.ui.h:15 +msgid "The link appears to go to:" +msgstr "Dieser Verweis scheint zu folgender Seite zu führen:" -#: ../ui/composer.glade.h:61 -msgid "To add them as attachments" -msgstr "Als Anhang einfügen" +#: ../ui/conversation-message.ui.h:16 +msgid "Deceptive link found" +msgstr "Trügerischer Verweis gefunden" + +#: ../ui/conversation-message.ui.h:17 +msgid "The email sender may be leading you to the wrong web site." +msgstr "Der Absender der E-Mail könnte Sie zur falschen Webseite leiten." + +#: ../ui/conversation-message.ui.h:18 +msgid "If unsure, contact the sender and ask before continuing." +msgstr "" +"Falls Sie unsicher sind, kontaktieren Sie den Absender und fragen Sie, bevor " +"Sie fortfahren." + +#: ../ui/conversation-viewer.ui.h:1 +msgid "Find in conversation" +msgstr "In Konversation suchen" + +#: ../ui/conversation-viewer.ui.h:2 +msgid "Find the previous occurrence of the search string." +msgstr "Vorhergehende Übereinstimmungen mit dem Suchtext finden" + +#: ../ui/conversation-viewer.ui.h:3 +msgid "Find the next occurrence of the search string." +msgstr "Nächste Übereinstimmung mit dem Suchtext finden" #: ../ui/edit_alternate_emails.glade.h:1 msgid "Remove email address" @@ -2083,6 +2218,247 @@ msgid "label" msgstr "Beschriftung" +#: ../ui/gtk/help-overlay.ui.h:1 +msgid "Conversation Shortcuts" +msgstr "Tastenkombinationen für Konversationen" + +#: ../ui/gtk/help-overlay.ui.h:2 +msgctxt "shortcut window" +msgid "General" +msgstr "Allgemein" + +#: ../ui/gtk/help-overlay.ui.h:3 +msgctxt "shortcut window" +msgid "Move focus to the next/previous pane" +msgstr "Fokus auf die nächste/vorherige Leiste verlegen" + +#: ../ui/gtk/help-overlay.ui.h:4 +msgctxt "shortcut window" +msgid "Move focus to conversation list" +msgstr "Fokus auf die Konversationsliste verschieben" + +#: ../ui/gtk/help-overlay.ui.h:5 +msgctxt "shortcut window" +msgid "Detach composer window" +msgstr "»Verfassen«-Fenster abkoppeln" + +#: ../ui/gtk/help-overlay.ui.h:6 +msgctxt "shortcut window" +msgid "Close composer window" +msgstr "»Verfassen«-Fenster schließen" + +#: ../ui/gtk/help-overlay.ui.h:7 +msgctxt "shortcut window" +msgid "Show keyboard shortcuts" +msgstr "Tastenkombinationen anzeigen" + +#: ../ui/gtk/help-overlay.ui.h:8 +msgctxt "shortcut window" +msgid "Show help" +msgstr "Hilfe anzeigen" + +#: ../ui/gtk/help-overlay.ui.h:9 +msgctxt "shortcut window" +msgid "Quit the application" +msgstr "Die Anwendung beenden" + +#: ../ui/gtk/help-overlay.ui.h:10 +msgctxt "shortcut window" +msgid "Search" +msgstr "Suchen" + +#: ../ui/gtk/help-overlay.ui.h:11 +msgctxt "shortcut window" +msgid "Jump to search box" +msgstr "Zum Suchfeld springen" + +#: ../ui/gtk/help-overlay.ui.h:12 +msgctxt "shortcut window" +msgid "Find in current conversation" +msgstr "In aktueller Konversation suchen" + +#: ../ui/gtk/help-overlay.ui.h:13 +msgctxt "shortcut window" +msgid "Find next/previous in current conversation" +msgstr "Das nächste/vorherige Vorkommen in dieser Konversation finden" + +#: ../ui/gtk/help-overlay.ui.h:14 +msgctxt "shortcut window" +msgid "Actions" +msgstr "Aktionen" + +#: ../ui/gtk/help-overlay.ui.h:15 +msgctxt "shortcut window" +msgid "Compose a new message" +msgstr "Eine neue Nachricht verfassen" + +#: ../ui/gtk/help-overlay.ui.h:16 +msgctxt "shortcut window" +msgid "Reply to sender " +msgstr "Absender antworten " + +#: ../ui/gtk/help-overlay.ui.h:17 +msgctxt "shortcut window" +msgid "Reply to all" +msgstr "Allen antworten" + +#: ../ui/gtk/help-overlay.ui.h:18 +msgctxt "shortcut window" +msgid "Forward" +msgstr "Weiterleiten" + +#: ../ui/gtk/help-overlay.ui.h:19 +msgctxt "shortcut window" +msgid "Archive" +msgstr "Archivieren" + +#: ../ui/gtk/help-overlay.ui.h:20 +msgctxt "shortcut window" +msgid "Move to trash" +msgstr "In den Papierkorb verschieben" + +#: ../ui/gtk/help-overlay.ui.h:21 +msgctxt "shortcut window" +msgid "Toggle spam" +msgstr "Unerwünscht-Markierung umschalten" + +#: ../ui/gtk/help-overlay.ui.h:22 +msgctxt "shortcut window" +msgid "Move the conversation" +msgstr "Konversation verschieben" + +#: ../ui/gtk/help-overlay.ui.h:23 +msgctxt "shortcut window" +msgid "Label the conversation" +msgstr "Konversation eine Beschriftung zuweisen" + +#: ../ui/gtk/help-overlay.ui.h:24 +msgctxt "shortcut window" +msgid "Mark read" +msgstr "Als gelesen markieren" + +#: ../ui/gtk/help-overlay.ui.h:25 +msgctxt "shortcut window" +msgid "Mark unread" +msgstr "Als ungelesen markieren" + +#: ../ui/gtk/help-overlay.ui.h:26 +msgctxt "shortcut window" +msgid "View" +msgstr "Betrachten" + +#: ../ui/gtk/help-overlay.ui.h:27 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Ansicht vergrößern" + +#: ../ui/gtk/help-overlay.ui.h:28 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Ansicht verkleinern" + +#: ../ui/gtk/help-overlay.ui.h:29 +msgctxt "shortcut window" +msgid "Reset zoom" +msgstr "Vergrößerung zurücksetzen" + +#: ../ui/gtk/help-overlay.ui.h:30 +msgctxt "shortcut window" +msgid "Additional Shortcuts" +msgstr "Weitere Tastenkombinationen" + +#: ../ui/gtk/help-overlay.ui.h:31 +msgctxt "shortcut window" +msgid "Star" +msgstr "Stern" + +#: ../ui/gtk/help-overlay.ui.h:32 +msgctxt "shortcut window" +msgid "Unstar" +msgstr "Stern entfernen" + +#: ../ui/gtk/help-overlay.ui.h:33 +msgctxt "shortcut window" +msgid "Delete" +msgstr "Löschen" + +#: ../ui/gtk/help-overlay.ui.h:34 +msgctxt "shortcut window" +msgid "Jump to next (older) conversation" +msgstr "Zur nächsten (älteren) Konversation springen" + +#: ../ui/gtk/help-overlay.ui.h:35 +msgctxt "shortcut window" +msgid "Jump to previous (newer) conversation" +msgstr "Zur letzten (neueren) Konversation springen" + +#: ../ui/gtk/help-overlay.ui.h:36 +msgid "Composer Shortcuts" +msgstr "Tastenkombinationen beim Verfassen" + +#: ../ui/gtk/help-overlay.ui.h:37 +msgctxt "shortcut window" +msgid "Quote text" +msgstr "Text einrücken" + +#: ../ui/gtk/help-overlay.ui.h:38 +msgctxt "shortcut window" +msgid "Unquote text" +msgstr "Einrückung aufheben" + +#: ../ui/gtk/help-overlay.ui.h:39 +msgctxt "shortcut window" +msgid "Send" +msgstr "Senden" + +#: ../ui/gtk/help-overlay.ui.h:40 +msgctxt "shortcut window" +msgid "Add attachment" +msgstr "Anhang hinzufügen" + +#: ../ui/gtk/help-overlay.ui.h:41 +msgctxt "shortcut window" +msgid "Rich text mode" +msgstr "Formatierter Text" + +#: ../ui/gtk/help-overlay.ui.h:42 +msgctxt "shortcut window" +msgid "Bold text" +msgstr "Fetter Text" + +#: ../ui/gtk/help-overlay.ui.h:43 +msgctxt "shortcut window" +msgid "Italicize text" +msgstr "Kursiver Text" + +#: ../ui/gtk/help-overlay.ui.h:44 +msgctxt "shortcut window" +msgid "Underline text" +msgstr "Unterstrichener Text" + +#: ../ui/gtk/help-overlay.ui.h:45 +msgctxt "shortcut window" +msgid "Strike text" +msgstr "Durchgestrichener Text" + +#: ../ui/gtk/help-overlay.ui.h:46 +msgctxt "shortcut window" +msgid "Insert a link" +msgstr "Einen Verweis einfügen" + +#: ../ui/gtk/help-overlay.ui.h:47 +msgctxt "shortcut window" +msgid "Remove formatting" +msgstr "Formatierung löschen" + +#: ../ui/gtk/menus.ui.h:2 +msgid "A_ccounts" +msgstr "_Konten" + +#: ../ui/gtk/menus.ui.h:4 +msgid "_Keyboard Shortcuts" +msgstr "_Tastenkombinationen" + #: ../ui/login.glade.h:1 msgid "email@example.com" msgstr "email@example.com" @@ -2207,7 +2583,7 @@ msgid "Use IMAP cre_dentials" msgstr "_IMAP-Zugangsinformationen verwenden" -#: ../ui/login.glade.h:34 ../ui/preferences.glade.h:5 +#: ../ui/login.glade.h:34 msgid "Composer" msgstr "Verfassen" @@ -2227,6 +2603,10 @@ msgid "_Download mail" msgstr "_Mail herunterladen" +#: ../ui/main-toolbar.ui.h:1 +msgid "Empty Spam or Trash folders" +msgstr "Spam oder Papierkorb leeren" + #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" msgstr "SMTP-Einstellungen" @@ -2243,47 +2623,43 @@ msgid "_Authenticate" msgstr "_Legitimieren" -#: ../ui/preferences.glade.h:1 +#: ../ui/preferences-dialog.ui.h:1 msgid "Reading" msgstr "Lesen" -#: ../ui/preferences.glade.h:2 +#: ../ui/preferences-dialog.ui.h:2 msgid "_Automatically select next message" msgstr "Automatisch die nächste Nachricht _wählen" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences-dialog.ui.h:3 msgid "_Display conversation preview" msgstr "Konversations_vorschau anzeigen" -#: ../ui/preferences.glade.h:4 +#: ../ui/preferences-dialog.ui.h:4 msgid "Use _three pane view" msgstr "_Dreispaltige Ansicht verwenden" -#: ../ui/preferences.glade.h:6 -msgid "Enable _spell checking" -msgstr "_Rechtschreibprüfung aktivieren" - -#: ../ui/preferences.glade.h:7 +#: ../ui/preferences-dialog.ui.h:5 msgid "Notifications" msgstr "Benachrichtigungen" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences-dialog.ui.h:6 msgid "_Play notification sounds" msgstr "_Benachrichtigungstöne abspielen" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences-dialog.ui.h:7 msgid "Show _notifications for new mail" msgstr "Benachrichtigung bei _neuen E-Mails anzeigen" -#: ../ui/preferences.glade.h:10 +#: ../ui/preferences-dialog.ui.h:8 msgid "Always _watch for new mail" msgstr "_Ständig nach neuen E-Mails prüfen" -#: ../ui/preferences.glade.h:11 +#: ../ui/preferences-dialog.ui.h:9 msgid "Geary will run in the background and notify of new mail" msgstr "Geary im Hintergrund ausführen und bei neuen E-Mails benachrichtigen" -#: ../ui/preferences.glade.h:12 +#: ../ui/preferences-dialog.ui.h:10 msgid "Preferences" msgstr "Einstellungen" @@ -2315,66 +2691,3 @@ #: ../ui/upgrade_dialog.glade.h:1 msgid "Geary update in progress…" msgstr "Aktualisierung von Geary wird durchgeführt …" - -#~ msgid "Copyright 2011-2015 Yorba Foundation" -#~ msgstr "Copyright 2011-2015 Yorba Foundation" - -#~ msgid "_Donate" -#~ msgstr "_Spenden" - -#~ msgid "_Delete" -#~ msgstr "_Löschen" - -#~ msgid "_Trash" -#~ msgstr "_Papierkorb" - -#~ msgid "Do you want to discard the unsaved message?" -#~ msgstr "Möchten Sie die nicht gespeicherte Nachricht verwerfen?" - -#~ msgid "Notify of new mail at start_up" -#~ msgstr "Beim _Start über neue E-Mails benachrichtigen" - -#~ msgid "attach|enclosed|enclosing|cover letter" -#~ msgstr "anhängen | angehängt | anhängend | Deckblatt" - -#~ msgid "Please enter your password" -#~ msgstr "Bitte geben Sie Ihr Passwort ein" - -#~ msgid "Username:" -#~ msgstr "Benutzername:" - -#~ msgid "Password:" -#~ msgstr "Passwort:" - -#~ msgid "C_lose" -#~ msgstr "S_chließen" - -#~ msgid "Archive conversation (Delete, Backspace, A)" -#~ msgstr "Konversation archivieren (Entf, Backspace, A)" - -#~ msgid "General" -#~ msgstr "Allgemein" - -#~ msgid "Port:" -#~ msgstr "Port:" - -#~ msgid "Real name:" -#~ msgstr "Richtiger Name:" - -#~ msgid "SSL" -#~ msgstr "SSL" - -#~ msgid "SSL/TLS encryption:" -#~ msgstr "SSL/TLS-Verschlüsselung:" - -#~ msgid "Server:" -#~ msgstr "Server:" - -#~ msgid "Service:" -#~ msgstr "Dienst:" - -#~ msgid "Unable to login to email server" -#~ msgstr "Anmeldung am E-Mail-Server fehlgeschlagen" - -#~ msgid "_Details" -#~ msgstr "_Details" diff -Nru geary-0.11.4/po/es.po geary-0.12.0/po/es.po --- geary-0.11.4/po/es.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/es.po 2017-10-02 11:25:21.000000000 +0000 @@ -15,10 +15,10 @@ msgid "" msgstr "" "Project-Id-Version: geary-0.4.1\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" +"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "product=geary&keywords=I18N+L10N&component=internationalization\n" -"POT-Creation-Date: 2017-02-13 10:59+0000\n" -"PO-Revision-Date: 2017-02-15 10:27+0100\n" +"POT-Creation-Date: 2017-09-26 12:56+0000\n" +"PO-Revision-Date: 2017-09-26 16:49+0200\n" "Last-Translator: Daniel Mustieles \n" "Language-Team: es \n" "Language: es\n" @@ -28,31 +28,112 @@ "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Gtranslator 2.91.6\n" -#: ../desktop/geary.desktop.in.h:1 ../desktop/geary-autostart.desktop.in.h:1 +#. Translators: The application name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:2 +#: ../desktop/org.gnome.Geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" msgstr "Geary" -#: ../desktop/geary.desktop.in.h:2 ../desktop/geary-autostart.desktop.in.h:2 -#: ../src/client/application/geary-application.vala:18 +#. Translators: The development team's name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:4 +msgid "Geary Development Team" +msgstr "Equipo de desarrollo de Geary" + +#. Translators: The application's summary / tagline +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:6 +#: ../desktop/org.gnome.Geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 +msgid "Send and receive email" +msgstr "Envíe y reciba mensajes de correo electrónico" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:7 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"Geary es una aplicación de correo-e pensada para las conversaciones, para el " +"escritorio GNOME 3. Le permite leer, buscar y enviar correos con una " +"interfaz sencilla y moderna." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:8 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"Las conversaciones le permiten leer un hilo completo si tener que buscar y " +"pulsa cada mensaje individual." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:9 +msgid "Geary’s features include:" +msgstr "Entre las características de Geary se incluyen:" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:10 +msgid "Quick email account setup" +msgstr "Configuración rápida de la cuenta de correo" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:11 +msgid "Shows related messages together in conversations" +msgstr "Mostrar mensajes relacionados entre ellos en las conversaciones" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:12 +msgid "Fast, full text and keyword search" +msgstr "Búsqueda de palabras clave rápida y por texto completo" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:13 +msgid "Full-featured HTML and plain text message composer" +msgstr "Editor completo de HYML y texto plano" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:14 +msgid "Desktop notification of new mail" +msgstr "Notificaciones de escritorio cuando llegue correo nuevo" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:15 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" +msgstr "Compatible con GMail, Yahoo! Mail, Outlook.com y otros servidores IMAP" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:17 +#| msgid "_Display conversation preview" +msgid "Geary displaying a conversation" +msgstr "Geary mostrando una conversación" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:19 +msgid "Geary showing the rich text composer" +msgstr "Geary mostrando el editor de texto enriquecido" + +#: ../desktop/org.gnome.Geary.desktop.in.h:2 +msgid "Email" +msgstr "Correo-e" + +#: ../desktop/org.gnome.Geary.desktop.in.h:3 +msgid "Geary Email" +msgstr "Correo Geary" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/org.gnome.Geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "correo;correo-e;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" + +#: ../desktop/org.gnome.Geary.desktop.in.h:7 ../ui/gtk/menus.ui.h:1 +msgid "Compose Message" +msgstr "Redactar mensaje" + +#: ../desktop/geary-autostart.desktop.in.h:2 +#: ../src/client/application/geary-application.vala:21 msgid "Mail Client" msgstr "Cliente de correo" -#: ../desktop/geary.desktop.in.h:3 ../desktop/geary-autostart.desktop.in.h:3 +#: ../desktop/geary-autostart.desktop.in.h:3 msgid "Geary Mail" msgstr "Correo Geary" -#: ../desktop/geary.desktop.in.h:4 ../desktop/geary-autostart.desktop.in.h:4 -msgid "Send and receive email" -msgstr "Envíe y reciba mensajes de correo electrónico" - -#: ../desktop/geary.desktop.in.h:5 ../desktop/geary-autostart.desktop.in.h:5 +#: ../desktop/geary-autostart.desktop.in.h:5 msgid "Email;E-mail;Mail;" msgstr "email;e-mail;correo electrónico;correo-e;" -#: ../desktop/geary.desktop.in.h:6 -msgid "Compose Message" -msgstr "Redactar mensaje" - #: ../desktop/geary-attach.contract.in.h:1 msgid "Send by email" msgstr "Enviar por correo electrónico" @@ -63,6 +144,7 @@ #: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:31 +#: ../ui/conversation-email-menus.ui.h:10 msgid "_Save" msgstr "_Guardar" @@ -72,7 +154,7 @@ msgstr "_Añadir" #. reset/clear widgets -#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 #, c-format msgid "Additional addresses for %s" msgstr "Direcciones adicionales para %s" @@ -93,108 +175,122 @@ msgid "First Last" msgstr "Nombre Apellido" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." msgstr "Bienvenido a Geary." -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." msgstr "Proporcione la información de su cuenta para empezar." -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "hace 2 semanas" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:254 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "hace 1 mes" -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "hace 3 meses" -#: ../src/client/accounts/add-edit-page.vala:256 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "hace 6 meses" -#: ../src/client/accounts/add-edit-page.vala:257 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "hace 1 año" -#: ../src/client/accounts/add-edit-page.vala:258 +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" msgstr "hace 2 años" -#: ../src/client/accounts/add-edit-page.vala:259 +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" msgstr "hace 4 años" #. Separator -#: ../src/client/accounts/add-edit-page.vala:261 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "Todo" -#: ../src/client/accounts/add-edit-page.vala:280 +#: ../src/client/accounts/add-edit-page.vala:283 msgid "Edit" msgstr "Editar" -#: ../src/client/accounts/add-edit-page.vala:282 +#: ../src/client/accounts/add-edit-page.vala:285 msgid "Preview" msgstr "Previsualizar" -#: ../src/client/accounts/add-edit-page.vala:723 +#: ../src/client/accounts/add-edit-page.vala:751 msgid "Remem_ber passwords" msgstr "Recor_dar las contraseñas" -#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:7 +#: ../src/client/accounts/add-edit-page.vala:758 ../ui/login.glade.h:7 msgid "Remem_ber password" msgstr "Recor_dar la contraseña" -#: ../src/client/accounts/add-edit-page.vala:764 +#: ../src/client/accounts/add-edit-page.vala:792 msgid "Unable to validate:\n" msgstr "No se puede validar:\n" -#: ../src/client/accounts/add-edit-page.vala:766 -msgid " • Invalid account nickname.\n" -msgstr " • Alias de cuenta no válido.\n" - -#: ../src/client/accounts/add-edit-page.vala:769 -msgid " • Email address already added to Geary.\n" -msgstr " • Ya se había añadido la dirección de correo a Geary.\n" - -#: ../src/client/accounts/add-edit-page.vala:773 -msgid " • IMAP connection error.\n" -msgstr " • Error de conexión IMAP.\n" - -#: ../src/client/accounts/add-edit-page.vala:776 -msgid " • IMAP username or password incorrect.\n" -msgstr " • Nombre de usuario o contraseña IMAP incorrectos.\n" - -#: ../src/client/accounts/add-edit-page.vala:779 -msgid " • SMTP connection error.\n" -msgstr " • Error de conexión SMTP.\n" - -#: ../src/client/accounts/add-edit-page.vala:782 -msgid " • SMTP username or password incorrect.\n" -msgstr " • El nombre de usuario o contraseña SMTP incorrectos.\n" - -#: ../src/client/accounts/add-edit-page.vala:786 -msgid " • Connection error.\n" -msgstr " • Error de conexión.\n" - -#: ../src/client/accounts/add-edit-page.vala:790 -msgid " • Username or password incorrect.\n" -msgstr " • Nombre de usuario o contraseña incorrectos.\n" +#: ../src/client/accounts/add-edit-page.vala:794 +msgid " • Invalid account nickname.\n" +msgstr " • Alias de cuenta no válido.\n" + +#: ../src/client/accounts/add-edit-page.vala:797 +msgid " • Email address already added to Geary.\n" +msgstr " • Ya se había añadido la dirección de correo a Geary.\n" + +#: ../src/client/accounts/add-edit-page.vala:801 +msgid " • IMAP connection error.\n" +msgstr " • Error de conexión IMAP.\n" + +#: ../src/client/accounts/add-edit-page.vala:804 +msgid " • IMAP username or password incorrect.\n" +msgstr " • Nombre de usuario o contraseña IMAP incorrectos.\n" + +#: ../src/client/accounts/add-edit-page.vala:807 +msgid " • SMTP connection error.\n" +msgstr " • Error de conexión SMTP.\n" + +#: ../src/client/accounts/add-edit-page.vala:810 +msgid " • SMTP username or password incorrect.\n" +msgstr " • El nombre de usuario o contraseña SMTP incorrectos.\n" + +#: ../src/client/accounts/add-edit-page.vala:814 +msgid " • Connection error.\n" +msgstr " • Error de conexión.\n" + +#: ../src/client/accounts/add-edit-page.vala:818 +msgid " • Username or password incorrect.\n" +msgstr " • Nombre de usuario o contraseña incorrectos.\n" -#: ../src/client/application/geary-application.vala:19 +#: ../src/client/application/geary-application.vala:22 msgid "Copyright 2016 Software Freedom Conservancy Inc." msgstr "Copyright 2016 Software Freedom Conservancy Inc." -#: ../src/client/application/geary-application.vala:21 +#: ../src/client/application/geary-application.vala:24 msgid "Visit the Geary web site" msgstr "Visite el sitio web de Geary" +#: ../src/client/application/geary-application.vala:464 +#, c-format +msgid "About %s" +msgstr "Acerca de %s" + +#. Translators: add your name and email address to receive +#. credit in the About dialog For example: Yamada Taro +#. +#: ../src/client/application/geary-application.vala:468 +msgid "translator-credits" +msgstr "" +"Daniel Mustieles , 2015 - 2017\n" +"Adolfo Jayme Barrientos , 2012–2015" + #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" msgstr "Iniciar Geary con la ventana principal oculta" @@ -249,217 +345,191 @@ msgstr "Revocar todos los certificados de servidores con advertencias de TLS" #: ../src/client/application/geary-args.vala:27 +msgid "Perform a graceful quit" +msgstr "Salir elegantemente" + +#: ../src/client/application/geary-args.vala:28 msgid "Display program version" msgstr "Mostrar la versión del programa" #. This gives a command-line hint on how to open new composer windows with mailto: -#: ../src/client/application/geary-args.vala:51 +#: ../src/client/application/geary-args.vala:53 #, c-format msgid "Use %s to open a new composer window" msgstr "Usar %s para abrir una ventana nueva del editor" -#: ../src/client/application/geary-args.vala:52 +#: ../src/client/application/geary-args.vala:54 msgid "Please report comments, suggestions and bugs to:" msgstr "Envíe comentarios, sugerencias y errores a:" #. i18n: Command line arguments are invalid -#: ../src/client/application/geary-args.vala:59 +#: ../src/client/application/geary-args.vala:61 #, c-format msgid "Failed to parse command line options: %s\n" msgstr "Falló al analizar las opciones de la línea de comandos: %s\n" -#: ../src/client/application/geary-args.vala:70 +#: ../src/client/application/geary-args.vala:72 #, c-format -msgid "Unrecognized command line option \"%s\"\n" +msgid "Unrecognized command line option “%s”\n" msgstr "Opción de la línea de comandos «%s» no reconocida\n" -#: ../src/client/application/geary-controller.vala:61 +#: ../src/client/application/geary-controller.vala:57 msgid "Delete conversation" msgstr "Eliminar conversación" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:58 msgid "Delete conversation (Shift+Delete)" msgstr "Eliminar conversación (Mayús+Supr)" -#: ../src/client/application/geary-controller.vala:63 +#: ../src/client/application/geary-controller.vala:59 msgid "Delete conversations (Shift+Delete)" msgstr "Eliminar conversaciones (Mayús+Supr)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:67 +#: ../src/client/application/geary-controller.vala:63 msgid "Move conversation to Trash (Delete, Backspace)" msgstr "Mover conversación a la papelera (Supr, Retroceso)" -#: ../src/client/application/geary-controller.vala:68 +#: ../src/client/application/geary-controller.vala:64 msgid "Move conversations to Trash (Delete, Backspace)" msgstr "Mover conversaciones a la papelera (Supr, Retroceso)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:72 +#: ../src/client/application/geary-controller.vala:68 msgid "_Archive" msgstr "_Archivar" -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:69 msgid "Archive conversation (A)" msgstr "Archivar conversación (A)" -#: ../src/client/application/geary-controller.vala:74 +#: ../src/client/application/geary-controller.vala:70 msgid "Archive conversations (A)" msgstr "Archivar conversaciones (A)" -#: ../src/client/application/geary-controller.vala:77 +#: ../src/client/application/geary-controller.vala:73 msgid "Mark as S_pam" msgstr "Marcar como _spam" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:74 msgid "Mark as not S_pam" msgstr "Marcar como no _spam" -#: ../src/client/application/geary-controller.vala:80 -#: ../src/client/application/geary-controller.vala:396 +#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:448 msgid "Mark conversation" msgstr "Marcar conversación" -#: ../src/client/application/geary-controller.vala:81 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark conversations" msgstr "Marcar conversaciones" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:78 msgid "Add label to conversation" msgstr "Añadir etiqueta a la conversación" -#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:79 msgid "Add label to conversations" msgstr "Añadir etiqueta a las conversaciones" -#: ../src/client/application/geary-controller.vala:84 -#: ../src/client/application/geary-controller.vala:435 +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:487 msgid "Move conversation" msgstr "Mover conversación" -#: ../src/client/application/geary-controller.vala:85 +#: ../src/client/application/geary-controller.vala:81 msgid "Move conversations" msgstr "Mover conversaciones" -#: ../src/client/application/geary-controller.vala:376 -#: ../ui/app_menu.interface.h:1 -msgid "A_ccounts" -msgstr "_Cuentas" - -#: ../src/client/application/geary-controller.vala:381 -#: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 -msgid "_Preferences" -msgstr "_Preferencias" - -#: ../src/client/application/geary-controller.vala:385 -#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:3 -msgid "_Help" -msgstr "Ay_uda" - -#: ../src/client/application/geary-controller.vala:389 -#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:4 -msgid "_About" -msgstr "_Acerca de" - -#: ../src/client/application/geary-controller.vala:393 -#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:5 -msgid "_Quit" -msgstr "_Salir" - -#: ../src/client/application/geary-controller.vala:398 -msgid "_Mark as..." +#: ../src/client/application/geary-controller.vala:450 +msgid "_Mark as…" msgstr "_Marcar como…" -#: ../src/client/application/geary-controller.vala:404 +#: ../src/client/application/geary-controller.vala:456 msgid "Mark as _Read" msgstr "Marcar como _leído" -#: ../src/client/application/geary-controller.vala:410 +#: ../src/client/application/geary-controller.vala:462 msgid "Mark as _Unread" msgstr "Marcar como _no leído" -#: ../src/client/application/geary-controller.vala:416 +#: ../src/client/application/geary-controller.vala:468 msgid "_Star" msgstr "_Destacar" -#: ../src/client/application/geary-controller.vala:421 +#: ../src/client/application/geary-controller.vala:473 msgid "U_nstar" msgstr "_No destacar" -#: ../src/client/application/geary-controller.vala:431 +#: ../src/client/application/geary-controller.vala:483 msgid "Add label" msgstr "Añadir etiqueta" -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:484 msgid "_Label" msgstr "_Etiquetar" -#: ../src/client/application/geary-controller.vala:436 +#: ../src/client/application/geary-controller.vala:488 msgid "_Move" msgstr "_Mover" -#: ../src/client/application/geary-controller.vala:440 +#: ../src/client/application/geary-controller.vala:492 msgid "Compose new message (Ctrl+N, N)" msgstr "Redactar un mensaje nuevo (Ctrl+N, N)" -#. Reply to a message. -#: ../src/client/application/geary-controller.vala:444 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1873 +#: ../src/client/application/geary-controller.vala:496 +#: ../ui/conversation-email-menus.ui.h:1 msgid "_Reply" msgstr "_Responder" -#: ../src/client/application/geary-controller.vala:445 +#: ../src/client/application/geary-controller.vala:497 msgid "Reply (Ctrl+R, R)" msgstr "Responder (Ctrl+R, R)" -#: ../src/client/application/geary-controller.vala:449 +#: ../src/client/application/geary-controller.vala:501 msgid "R_eply All" msgstr "R_esponder a todos" -#: ../src/client/application/geary-controller.vala:450 +#: ../src/client/application/geary-controller.vala:502 msgid "Reply all (Ctrl+Shift+R, Shift+R)" msgstr "Responder a todos (Ctrl+Mayús+R, Mayús+R)" -#. Forward a message. -#: ../src/client/application/geary-controller.vala:455 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1883 +#: ../src/client/application/geary-controller.vala:507 +#: ../ui/conversation-email-menus.ui.h:3 msgid "_Forward" msgstr "_Reenviar" -#: ../src/client/application/geary-controller.vala:456 +#: ../src/client/application/geary-controller.vala:508 msgid "Forward (Ctrl+L, F)" msgstr "Reenviar (Ctrl+L, F)" -#: ../src/client/application/geary-controller.vala:495 -msgid "Empty" -msgstr "Vaciar" - -#: ../src/client/application/geary-controller.vala:496 -msgid "Empty Spam or Trash folders" -msgstr "Vaciar las carpetas Spam o Papelera" - -#: ../src/client/application/geary-controller.vala:500 +#: ../src/client/application/geary-controller.vala:538 msgid "Empty _Spam…" msgstr "Vaciar _Spam…" -#: ../src/client/application/geary-controller.vala:504 +#: ../src/client/application/geary-controller.vala:542 msgid "Empty _Trash…" msgstr "Vaciar la _papelera…" #. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:537 +#: ../src/client/application/geary-controller.vala:574 msgid "Toggle search bar" msgstr "Conmutar la barra de búsqueda" -#: ../src/client/application/geary-controller.vala:744 +#. No callback is connected, since we bind the toggle button to the find bar visibility +#: ../src/client/application/geary-controller.vala:579 +msgid "Toggle find bar" +msgstr "Conmutar la barra de búsqueda" + +#: ../src/client/application/geary-controller.vala:757 msgid "Unable to store server trust exception" msgstr "No se pudo almacenar la excepción de seguridad para el servidor" -#: ../src/client/application/geary-controller.vala:981 +#: ../src/client/application/geary-controller.vala:992 msgid "Your settings are insecure" msgstr "Su configuración no es segura" -#: ../src/client/application/geary-controller.vala:982 +#: ../src/client/application/geary-controller.vala:993 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -469,29 +539,29 @@ "otra persona podría leer su nombre de usuario y contraseña en la misma red. " "¿Está seguro de que quiere hacer esto?" -#: ../src/client/application/geary-controller.vala:983 +#: ../src/client/application/geary-controller.vala:994 msgid "Co_ntinue" msgstr "Co_ntinuar" -#: ../src/client/application/geary-controller.vala:1030 +#: ../src/client/application/geary-controller.vala:1041 msgid "Error connecting to the server" -msgstr "Error al conectar al servidor." +msgstr "Error al conectar al servidor" -#: ../src/client/application/geary-controller.vala:1031 +#: ../src/client/application/geary-controller.vala:1042 msgid "" "Geary encountered an error while connecting to the server. Please try again " "in a few moments." msgstr "" -"Geary ha encontrado un error al conectarse al servidor. Inténtelo de nuevo " +"Geary ha encontrado un error al conectar al servidor. Inténtelo de nuevo " "pasados unos momentos." #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:1068 +#: ../src/client/application/geary-controller.vala:1079 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "Error al enviar el mensaje" -#: ../src/client/application/geary-controller.vala:1069 +#: ../src/client/application/geary-controller.vala:1080 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." @@ -501,12 +571,12 @@ #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1073 +#: ../src/client/application/geary-controller.vala:1084 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "Error al guardar los mensajes enviados" -#: ../src/client/application/geary-controller.vala:1074 +#: ../src/client/application/geary-controller.vala:1085 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." @@ -514,19 +584,19 @@ "Geary encontró un error al guardar un mensaje enviado en Enviados. El " "mensaje permanecerá en la Bandeja de salida hasta que lo elimine." -#: ../src/client/application/geary-controller.vala:1143 +#: ../src/client/application/geary-controller.vala:1154 msgid "Labels" msgstr "Etiquetas" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1155 +#: ../src/client/application/geary-controller.vala:1166 #, c-format msgid "Unable to open the database for %s" msgstr "No se pudo abrir la base de datos local para %s" -#: ../src/client/application/geary-controller.vala:1156 +#: ../src/client/application/geary-controller.vala:1167 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -551,20 +621,20 @@ "Reconstruir la base de datos destruirá todo el correo guardado de forma " "local y sus adjuntos. El correo del servidor permanecerá intacto." -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "_Rebuild" msgstr "_Reconstruir" -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "E_xit" msgstr "_Salir" -#: ../src/client/application/geary-controller.vala:1167 +#: ../src/client/application/geary-controller.vala:1178 #, c-format -msgid "Unable to rebuild database for \"%s\"" +msgid "Unable to rebuild database for “%s”" msgstr "No se puede reconstruir la base de datos para «%s»" -#: ../src/client/application/geary-controller.vala:1168 +#: ../src/client/application/geary-controller.vala:1179 #, c-format msgid "" "Error during rebuild:\n" @@ -577,14 +647,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1190 -#: ../src/client/application/geary-controller.vala:1200 +#: ../src/client/application/geary-controller.vala:1201 #: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:1222 #, c-format msgid "Unable to open local mailbox for %s" msgstr "No se puede abrir el buzón local para %s" -#: ../src/client/application/geary-controller.vala:1191 +#: ../src/client/application/geary-controller.vala:1202 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -603,10 +673,10 @@ "\n" "%s" -#: ../src/client/application/geary-controller.vala:1201 +#: ../src/client/application/geary-controller.vala:1212 msgid "" "The version number of the local mail database is formatted for a newer " -"version of Geary. Unfortunately, the database cannot be \"rolled back\" to " +"version of Geary. Unfortunately, the database cannot be “rolled back” to " "work with this version of Geary.\n" "\n" "Please install the latest version of Geary and try again." @@ -617,7 +687,7 @@ "\n" "Instale la última versión de Geary e inténtelo de nuevo." -#: ../src/client/application/geary-controller.vala:1212 +#: ../src/client/application/geary-controller.vala:1223 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" @@ -629,29 +699,15 @@ "\n" "Revise su conexión de red y reinicie Geary." -#: ../src/client/application/geary-controller.vala:1723 -#, c-format -msgid "About %s" -msgstr "Acerca de %s" - -#. / Translators: add your name and email address to receive credit in the About dialog -#. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1726 -msgid "translator-credits" -msgstr "" -"Adolfo Jayme Barrientos , 2012–2015\n" -"Daniel Mustieles , 2015" - -#: ../src/client/application/geary-controller.vala:1984 +#: ../src/client/application/geary-controller.vala:1999 msgid "Undo move (Ctrl+Z)" msgstr "Deshacer mover (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:1994 -#, c-format -msgid "Are you sure you want to open \"%s\"?" -msgstr "¿Está seguro de que quiere abrir «%s»?" +#: ../src/client/application/geary-controller.vala:2009 +msgid "Are you sure you want to open these attachments?" +msgstr "¿Está seguro de que quiere abrir estos adjuntos?" -#: ../src/client/application/geary-controller.vala:1995 +#: ../src/client/application/geary-controller.vala:2010 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -659,117 +715,104 @@ "Los archivos adjuntos podrían causar daños a su sistema. Abra solo los " "archivos que provengan de fuentes fiables." -#: ../src/client/application/geary-controller.vala:1996 -msgid "Don't _ask me again" +#: ../src/client/application/geary-controller.vala:2011 +msgid "Don’t _ask me again" msgstr "No volver a _preguntarme" -#: ../src/client/application/geary-controller.vala:2014 +#: ../src/client/application/geary-controller.vala:2121 #, c-format -msgid "A file named \"%s\" already exists. Do you want to replace it?" +msgid "A file named “%s” already exists. Do you want to replace it?" msgstr "Ya existe un archivo llamado «%s». ¿Quiere reemplazarlo?" -#: ../src/client/application/geary-controller.vala:2016 +#: ../src/client/application/geary-controller.vala:2123 #, c-format msgid "" -"The file already exists in \"%s\". Replacing it will overwrite its contents." -msgstr "El archivo ya existe en «%s». Reemplazarlo sobrescribirá su contenido." +"The file already exists in “%s”. Replacing it will overwrite its contents." +msgstr "" +"El archivo ya existe en «%s». Si lo reemplaza sobrescribirá su contenido." -#: ../src/client/application/geary-controller.vala:2019 +#: ../src/client/application/geary-controller.vala:2126 msgid "_Replace" msgstr "_Reemplazar" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2324 +#: ../src/client/application/geary-controller.vala:2374 msgid "Close open draft messages?" msgstr "¿Quiere cerrar los mensajes en borrador abiertos?" -#: ../src/client/application/geary-controller.vala:2454 +#: ../src/client/application/geary-controller.vala:2496 #, c-format msgid "Empty all email from your %s folder?" msgstr "¿Quiere eliminar todos los mensajes de la carpeta «%s»?" -#: ../src/client/application/geary-controller.vala:2455 +#: ../src/client/application/geary-controller.vala:2497 msgid "This removes the email from Geary and your email server." msgstr "" "Esto eliminará el mensaje de Geary y del servidor de correo electrónico." -#: ../src/client/application/geary-controller.vala:2456 +#: ../src/client/application/geary-controller.vala:2498 msgid "This cannot be undone." msgstr "Esto no se puede deshacer." -#: ../src/client/application/geary-controller.vala:2457 +#: ../src/client/application/geary-controller.vala:2499 #, c-format msgid "Empty %s" msgstr "Vaciar %s" -#: ../src/client/application/geary-controller.vala:2474 +#: ../src/client/application/geary-controller.vala:2516 #, c-format msgid "Error emptying %s" msgstr "Error al vaciar «%s»" -#: ../src/client/application/geary-controller.vala:2504 +#: ../src/client/application/geary-controller.vala:2546 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "¿Quiere eliminar permanentemente este mensaje?" msgstr[1] "¿Quiere eliminar permanentemente estos mensajes?" -#: ../src/client/application/geary-controller.vala:2506 +#: ../src/client/application/geary-controller.vala:2548 msgid "Delete" msgstr "Eliminar" -#: ../src/client/application/geary-controller.vala:2537 +#: ../src/client/application/geary-controller.vala:2580 msgid "Undo archive (Ctrl+Z)" msgstr "Deshacer archivado (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2552 +#: ../src/client/application/geary-controller.vala:2595 msgid "Undo trash (Ctrl+Z)" msgstr "Deshacer envío a la papelera (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2605 +#: ../src/client/application/geary-controller.vala:2649 msgid "Undo (Ctrl+Z)" msgstr "Deshacer (Ctrl+Z)" -#: ../src/client/components/conversation-find-bar.vala:214 -#, c-format -msgid "%i match" -msgid_plural "%i matches" -msgstr[0] "%i coincidencia" -msgstr[1] "%i coincidencias" - -#: ../src/client/components/conversation-find-bar.vala:216 -#, c-format -msgid "%i match (wrapped)" -msgid_plural "%i matches (wrapped)" -msgstr[0] "%i coincidencia (compactada)" -msgstr[1] "%i coincidencias (compactadas)" - -#: ../src/client/components/conversation-find-bar.vala:218 -msgid "not found" -msgstr "no encontrado" +#: ../src/client/application/geary-controller.vala:2780 +msgid "Failed to open default text editor." +msgstr "Falló al abrir el editor de textos predeterminado." -#: ../src/client/components/main-window.vala:438 +#: ../src/client/components/main-window.vala:389 #, c-format msgid "%s (%d)" msgstr "%s (%d)" -#: ../src/client/components/search-bar.vala:10 +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "Buscar" #. Search entry. -#: ../src/client/components/search-bar.vala:25 +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" msgstr "Buscar palabras en todo el correo de la cuenta (Ctrl+S)" -#: ../src/client/components/search-bar.vala:118 +#: ../src/client/components/search-bar.vala:100 #, c-format msgid "Indexing %s account" msgstr "Indexando la cuenta %s" -#: ../src/client/components/search-bar.vala:129 +#: ../src/client/components/search-bar.vala:111 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" @@ -777,7 +820,7 @@ #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 -msgid "Sending..." +msgid "Sending…" msgstr "Enviando…" #: ../src/client/components/stock.vala:18 @@ -791,6 +834,10 @@ msgid "_Cancel" msgstr "_Cancelar" +#: ../src/client/components/stock.vala:21 ../ui/gtk/menus.ui.h:6 +msgid "_About" +msgstr "_Acerca de" + #: ../src/client/components/stock.vala:23 msgid "_Close" msgstr "_Cerrar" @@ -799,51 +846,73 @@ msgid "_Discard" msgstr "_Descartar" +#: ../src/client/components/stock.vala:25 ../ui/gtk/menus.ui.h:5 +msgid "_Help" +msgstr "Ay_uda" + #: ../src/client/components/stock.vala:26 +#: ../ui/conversation-email-menus.ui.h:9 msgid "_Open" msgstr "_Abrir" +#: ../src/client/components/stock.vala:27 ../ui/gtk/menus.ui.h:3 +msgid "_Preferences" +msgstr "_Preferencias" + #: ../src/client/components/stock.vala:28 -msgid "_Print..." +#: ../ui/conversation-email-menus.ui.h:7 +msgid "_Print…" msgstr "_Imprimir…" +#: ../src/client/components/stock.vala:29 ../ui/gtk/menus.ui.h:7 +msgid "_Quit" +msgstr "_Salir" + #: ../src/client/components/stock.vala:30 ../ui/remove_confirm.glade.h:6 msgid "_Remove" msgstr "_Eliminar" -#. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1335 -msgid "Select _All" -msgstr "Seleccionar _todo" - -#: ../src/client/components/stock.vala:33 msgid "_Keep" msgstr "_Mantener" -#: ../src/client/composer/composer-widget.vala:73 +#: ../src/client/composer/composer-link-popover.vala:150 +msgid "Link URL is not correctly formatted, e.g. http://example.com" +msgstr "El URL del enlace no tiene el formato correcto, ej. http://ejemplo.com" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid link URL" +msgstr "Enlace a URL no válido" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid email address" +msgstr "Dirección correo-e no válida" + +#: ../src/client/composer/composer-widget.vala:154 msgid "Saved" msgstr "Guardado" -#: ../src/client/composer/composer-widget.vala:74 +#: ../src/client/composer/composer-widget.vala:155 msgid "Saving" msgstr "Guardando" -#: ../src/client/composer/composer-widget.vala:75 +#: ../src/client/composer/composer-widget.vala:156 msgid "Error saving" msgstr "Error al guardar" -#: ../src/client/composer/composer-widget.vala:76 +#: ../src/client/composer/composer-widget.vala:157 msgid "Press Backspace to delete quote" msgstr "Pulse Retroceso para eliminar la cita" -#: ../src/client/composer/composer-widget.vala:77 +#: ../src/client/composer/composer-widget.vala:158 msgid "New Message" msgstr "Mensaje nuevo" -#. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since -#. this is full-word checking, include all variants of each word. No spaces are allowed. -#: ../src/client/composer/composer-widget.vala:138 +#. Translators: This is list of keywords, separated by pipe ("|") +#. characters, that suggest an attachment; since this is full-word +#. checking, include all variants of each word. No spaces are +#. allowed. +#: ../src/client/composer/composer-widget.vala:167 msgid "" "attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" "enclosing|encloses|enclosure|enclosures" @@ -851,274 +920,189 @@ "adjuntar|adjuntando|adjunta|anexo|anexar|archivo|archivos|fichero|ficheros|" "adjunto|adjuntos|" -#: ../src/client/composer/composer-widget.vala:1121 -#: ../src/client/composer/composer-widget.vala:1125 +#: ../src/client/composer/composer-widget.vala:1122 +#: ../src/client/composer/composer-widget.vala:1141 msgid "Do you want to discard this message?" msgstr "¿Quiere descartar este mensaje?" -#: ../src/client/composer/composer-widget.vala:1281 +#: ../src/client/composer/composer-widget.vala:1245 msgid "Send message with an empty subject and body?" msgstr "¿Quiere enviar el mensaje sin asunto ni cuerpo?" -#: ../src/client/composer/composer-widget.vala:1283 +#: ../src/client/composer/composer-widget.vala:1247 msgid "Send message with an empty subject?" msgstr "¿Quiere enviar el mensaje sin asunto?" -#: ../src/client/composer/composer-widget.vala:1285 +#: ../src/client/composer/composer-widget.vala:1249 msgid "Send message with an empty body?" msgstr "¿Quiere enviar el mensaje sin cuerpo?" -#: ../src/client/composer/composer-widget.vala:1287 +#: ../src/client/composer/composer-widget.vala:1253 msgid "Send message without an attachment?" msgstr "¿Quiere enviar el mensaje sin el archivo adjunto?" -#: ../src/client/composer/composer-widget.vala:1553 -msgid "Cannot add attachment" -msgstr "No se puede adjuntar el archivo" +#: ../src/client/composer/composer-widget.vala:1515 +#, c-format +msgid "“%s” already attached for delivery." +msgstr "Ya se ha adjuntado «%s» para enviarlo." -#: ../src/client/composer/composer-widget.vala:1564 +#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" +#. Translators: The first argument will be a +#. description of the document type, the second will +#. be a human-friendly size string. For example: +#. Document (100.9MB) +#: ../src/client/composer/composer-widget.vala:1523 +#: ../src/client/conversation-viewer/conversation-email.vala:138 #, c-format -msgid "\"%s\" could not be found." +msgid "%s (%s)" +msgstr "%s (%s)" + +#: ../src/client/composer/composer-widget.vala:1560 +#, c-format +msgid "“%s” could not be found." msgstr "No se pudo encontrar «%s»." -#: ../src/client/composer/composer-widget.vala:1571 +#: ../src/client/composer/composer-widget.vala:1566 #, c-format -msgid "\"%s\" is a folder." +msgid "“%s” is a folder." msgstr "«%s» es una carpeta." -#: ../src/client/composer/composer-widget.vala:1578 +#: ../src/client/composer/composer-widget.vala:1572 #, c-format -msgid "\"%s\" is an empty file." +msgid "“%s” is an empty file." msgstr "«%s» es un archivo vacío." -#: ../src/client/composer/composer-widget.vala:1592 +#: ../src/client/composer/composer-widget.vala:1585 #, c-format -msgid "\"%s\" could not be opened for reading." +msgid "“%s” could not be opened for reading." msgstr "No se pudo abrir «%s» para lectura." -#: ../src/client/composer/composer-widget.vala:1599 -#, c-format -msgid "\"%s\" already attached for delivery." -msgstr "Ya se ha adjuntado «%s» para enviarlo." - -#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-widget.vala:1608 -#, c-format -msgid "%s (%s)" -msgstr "%s (%s)" +#: ../src/client/composer/composer-widget.vala:1593 +msgid "Cannot add attachment" +msgstr "No se puede adjuntar el archivo" -#: ../src/client/composer/composer-widget.vala:1668 +#: ../src/client/composer/composer-widget.vala:1645 msgid "To: " msgstr "Para: " -#: ../src/client/composer/composer-widget.vala:1671 +#: ../src/client/composer/composer-widget.vala:1648 msgid "Cc: " msgstr "Cc: " -#: ../src/client/composer/composer-widget.vala:1674 +#: ../src/client/composer/composer-widget.vala:1651 msgid "Bcc: " msgstr "Cco: " -#: ../src/client/composer/composer-widget.vala:1677 +#: ../src/client/composer/composer-widget.vala:1654 msgid "Reply-To: " msgstr "Responder a:" -#: ../src/client/composer/composer-widget.vala:1910 +#: ../src/client/composer/composer-widget.vala:1786 msgid "Select Color" msgstr "Seleccionar color" #. Displayed in the From dropdown to indicate an "alternate email address" #. for an account. The first printf argument will be the alternate email #. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2345 +#: ../src/client/composer/composer-widget.vala:1986 #, c-format msgid "%1$s via %2$s" msgstr "%1$s mediante %2$s" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2389 +#: ../src/client/composer/composer-widget.vala:2028 msgid "_From:" msgstr "_De:" +#. Translators: This is the name of the file chooser filter +#. when inserting an image in the composer. +#: ../src/client/composer/composer-widget.vala:2252 +msgid "Images" +msgstr "Imágenes" + +#: ../src/client/composer/spell-check-popover.vala:117 +msgid "Remove this language from the preferred list" +msgstr "Quitar este idioma de la lista de favoritos" + +#: ../src/client/composer/spell-check-popover.vala:121 +msgid "Add this language to the preferred list" +msgstr "Añadir este idioma de la lista de favoritos" + +#: ../src/client/composer/spell-check-popover.vala:217 +msgid "Search for more languages" +msgstr "Buscar más idiomas" + #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Yo" -#: ../src/client/conversation-viewer/conversation-viewer.vala:414 -msgid "No conversations selected." -msgstr "No hay ninguna conversación seleccionada." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:416 -#, c-format -msgid "%u conversation selected." -msgid_plural "%u conversations selected." -msgstr[0] "%u conversación seleccionada." -msgstr[1] "%u conversaciones seleccionadas." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:446 -msgid "No search results found." -msgstr "La búsqueda no devolvió ningún resultado." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:448 -msgid "No conversations in folder." -msgstr "No hay conversaciones en la carpeta." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "This message contains remote images." -msgstr "Este mensaje contiene imágenes remotas." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "Show Images" -msgstr "Mostrar imágenes" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:715 -msgid "Always Show From Sender" -msgstr "Mostrar siempre el remitente" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:739 -msgid "Edit Draft" -msgstr "Editar borrador" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:815 -msgid "From:" -msgstr "De:" +#. Translators: This is the file type displayed for +#. attachments with unknown file types. +#: ../src/client/conversation-viewer/conversation-email.vala:124 +msgid "Unknown" +msgstr "Desconocido" + +#. Preview headers +#. Translators: This is displayed in place of the from address +#. when the message has no from address. +#: ../src/client/conversation-viewer/conversation-message.vala:331 +msgid "No sender" +msgstr "Sin remitente" + +#. Translators: This separates multiple 'from' +#. addresses in the header preview for a message. +#: ../src/client/conversation-viewer/conversation-message.vala:586 +msgid ", " +msgstr ", " + +#. Translators: This string is used as the HTML IMG ALT +#. attribute value when displaying an inline image in an email +#. that did not specify a file name. E.g. Image" +msgstr "De " + +#: ../ui/conversation-message.ui.h:2 +msgid "1/1/1970\t" +msgstr "1/1/1970\t" + +#: ../ui/conversation-message.ui.h:3 +msgid "Preview body text." +msgstr "Vista previa del texto del cuerpo" + +#: ../ui/conversation-message.ui.h:4 +msgid "Sent by:" +msgstr "Enviado por:" -#. Address(es) e-mail is to be sent to -#: ../ui/composer.glade.h:53 -msgid "_To" -msgstr "_Para" +#: ../ui/conversation-message.ui.h:5 +msgid "Reply to:" +msgstr "Responder a:" -#: ../ui/composer.glade.h:54 -msgid "_Cc" -msgstr "_Cc" +#: ../ui/conversation-message.ui.h:6 +msgid "Subject" +msgstr "Asunto" -#: ../ui/composer.glade.h:55 -msgid "_Subject" -msgstr "A_sunto" +#: ../ui/conversation-message.ui.h:7 +msgid "To:" +msgstr "Para:" -#: ../ui/composer.glade.h:56 -msgid "_Bcc" -msgstr "Cc_o" +#: ../ui/conversation-message.ui.h:8 +msgid "Cc:" +msgstr "Cc:" -#: ../ui/composer.glade.h:57 -msgid "_Reply-To" -msgstr "_Responder a:" +#: ../ui/conversation-message.ui.h:9 +msgid "Bcc:" +msgstr "Cco:" -#. Geary account mail will be sent from -#: ../ui/composer.glade.h:59 -msgid "From" -msgstr "De" +#: ../ui/conversation-message.ui.h:10 +msgid "Show Images" +msgstr "Mostrar imágenes" -#: ../ui/composer.glade.h:60 -msgid "Drop files here" -msgstr "Suelte los archivos aquí" +#: ../ui/conversation-message.ui.h:11 +msgid "Always Show From Sender" +msgstr "Mostrar siempre el remitente" -#: ../ui/composer.glade.h:61 -msgid "To add them as attachments" -msgstr "Para añadirlos como adjuntos" +#: ../ui/conversation-message.ui.h:12 +msgid "Remote images not shown" +msgstr "Imágenes remotas no mostradas" + +#: ../ui/conversation-message.ui.h:13 +msgid "Only show remote images from senders you trust." +msgstr "Mostrar sólo las imágenes remotas de los remitentes en los que confíe" + +#: ../ui/conversation-message.ui.h:14 +msgid "But actually goes to:" +msgstr "Pero en realidad apunta a:" + +#: ../ui/conversation-message.ui.h:15 +msgid "The link appears to go to:" +msgstr "Parece que este enlace apunta a:" + +#: ../ui/conversation-message.ui.h:16 +msgid "Deceptive link found" +msgstr "Enlace engañoso encontrado" + +#: ../ui/conversation-message.ui.h:17 +msgid "The email sender may be leading you to the wrong web site." +msgstr "" +"El remitente del correo puede estar llevándole a un sitio web incorrecto." + +#: ../ui/conversation-message.ui.h:18 +msgid "If unsure, contact the sender and ask before continuing." +msgstr "Si no está seguro, pregunte con el remitente antes de continuar." + +#: ../ui/conversation-viewer.ui.h:1 +msgid "Find in conversation" +msgstr "Buscar en la conversación" + +#: ../ui/conversation-viewer.ui.h:2 +msgid "Find the previous occurrence of the search string." +msgstr "Busca la aparición anterior de la cadena de búsqueda." + +#: ../ui/conversation-viewer.ui.h:3 +msgid "Find the next occurrence of the search string." +msgstr "Busca la siguiente aparición de la cadena de búsqueda." #: ../ui/edit_alternate_emails.glade.h:1 msgid "Remove email address" @@ -2063,6 +2203,247 @@ msgid "label" msgstr "etiqueta" +#: ../ui/gtk/help-overlay.ui.h:1 +msgid "Conversation Shortcuts" +msgstr "Atajos de conversaciones" + +#: ../ui/gtk/help-overlay.ui.h:2 +msgctxt "shortcut window" +msgid "General" +msgstr "General" + +#: ../ui/gtk/help-overlay.ui.h:3 +msgctxt "shortcut window" +msgid "Move focus to the next/previous pane" +msgstr "Mover el foco al panel siguiente/anterior" + +#: ../ui/gtk/help-overlay.ui.h:4 +msgctxt "shortcut window" +msgid "Move focus to conversation list" +msgstr "Mover el foco a lista de conversaciones" + +#: ../ui/gtk/help-overlay.ui.h:5 +msgctxt "shortcut window" +msgid "Detach composer window" +msgstr "Desacoplar la ventana del editor" + +#: ../ui/gtk/help-overlay.ui.h:6 +msgctxt "shortcut window" +msgid "Close composer window" +msgstr "Cerrar la ventana del editor" + +#: ../ui/gtk/help-overlay.ui.h:7 +msgctxt "shortcut window" +msgid "Show keyboard shortcuts" +msgstr "Mostrar los atajos de teclado" + +#: ../ui/gtk/help-overlay.ui.h:8 +msgctxt "shortcut window" +msgid "Show help" +msgstr "Mostrar la ayuda" + +#: ../ui/gtk/help-overlay.ui.h:9 +msgctxt "shortcut window" +msgid "Quit the application" +msgstr "Salir de la aplicación" + +#: ../ui/gtk/help-overlay.ui.h:10 +msgctxt "shortcut window" +msgid "Search" +msgstr "Buscar" + +#: ../ui/gtk/help-overlay.ui.h:11 +msgctxt "shortcut window" +msgid "Jump to search box" +msgstr "Enfocar el cuadro de búsqueda" + +#: ../ui/gtk/help-overlay.ui.h:12 +msgctxt "shortcut window" +msgid "Find in current conversation" +msgstr "Buscar en la conversación actual" + +#: ../ui/gtk/help-overlay.ui.h:13 +msgctxt "shortcut window" +msgid "Find next/previous in current conversation" +msgstr "Buscar siguiente/anterior en la conversación actual" + +#: ../ui/gtk/help-overlay.ui.h:14 +msgctxt "shortcut window" +msgid "Actions" +msgstr "Acciones" + +#: ../ui/gtk/help-overlay.ui.h:15 +msgctxt "shortcut window" +msgid "Compose a new message" +msgstr "Redactar un mensaje nuevo" + +#: ../ui/gtk/help-overlay.ui.h:16 +msgctxt "shortcut window" +msgid "Reply to sender " +msgstr "Responder al remitente " + +#: ../ui/gtk/help-overlay.ui.h:17 +msgctxt "shortcut window" +msgid "Reply to all" +msgstr "Responder a todos" + +#: ../ui/gtk/help-overlay.ui.h:18 +msgctxt "shortcut window" +msgid "Forward" +msgstr "Reenviar" + +#: ../ui/gtk/help-overlay.ui.h:19 +msgctxt "shortcut window" +msgid "Archive" +msgstr "Archivar" + +#: ../ui/gtk/help-overlay.ui.h:20 +msgctxt "shortcut window" +msgid "Move to trash" +msgstr "Mover a la papelera" + +#: ../ui/gtk/help-overlay.ui.h:21 +msgctxt "shortcut window" +msgid "Toggle spam" +msgstr "Marcar o desmarcar como «spam»" + +#: ../ui/gtk/help-overlay.ui.h:22 +msgctxt "shortcut window" +msgid "Move the conversation" +msgstr "Mover la conversación" + +#: ../ui/gtk/help-overlay.ui.h:23 +msgctxt "shortcut window" +msgid "Label the conversation" +msgstr "Etiquetar la conversación" + +#: ../ui/gtk/help-overlay.ui.h:24 +msgctxt "shortcut window" +msgid "Mark read" +msgstr "Marcar como leído" + +#: ../ui/gtk/help-overlay.ui.h:25 +msgctxt "shortcut window" +msgid "Mark unread" +msgstr "Marcar como no leído" + +#: ../ui/gtk/help-overlay.ui.h:26 +msgctxt "shortcut window" +msgid "View" +msgstr "Ver" + +#: ../ui/gtk/help-overlay.ui.h:27 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Acercar" + +#: ../ui/gtk/help-overlay.ui.h:28 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Alejar" + +#: ../ui/gtk/help-overlay.ui.h:29 +msgctxt "shortcut window" +msgid "Reset zoom" +msgstr "Restablecer ampliación" + +#: ../ui/gtk/help-overlay.ui.h:30 +msgctxt "shortcut window" +msgid "Additional Shortcuts" +msgstr "Atajos adicionales" + +#: ../ui/gtk/help-overlay.ui.h:31 +msgctxt "shortcut window" +msgid "Star" +msgstr "Destacar" + +#: ../ui/gtk/help-overlay.ui.h:32 +msgctxt "shortcut window" +msgid "Unstar" +msgstr "Quitar el destaque" + +#: ../ui/gtk/help-overlay.ui.h:33 +msgctxt "shortcut window" +msgid "Delete" +msgstr "Eliminar" + +#: ../ui/gtk/help-overlay.ui.h:34 +msgctxt "shortcut window" +msgid "Jump to next (older) conversation" +msgstr "Ir a la siguiente conversación (más antigua)" + +#: ../ui/gtk/help-overlay.ui.h:35 +msgctxt "shortcut window" +msgid "Jump to previous (newer) conversation" +msgstr "Ir a la conversación anterior (más reciente)" + +#: ../ui/gtk/help-overlay.ui.h:36 +msgid "Composer Shortcuts" +msgstr "Atajos del editor" + +#: ../ui/gtk/help-overlay.ui.h:37 +msgctxt "shortcut window" +msgid "Quote text" +msgstr "Citar el texto" + +#: ../ui/gtk/help-overlay.ui.h:38 +msgctxt "shortcut window" +msgid "Unquote text" +msgstr "Eliminar cita del texto" + +#: ../ui/gtk/help-overlay.ui.h:39 +msgctxt "shortcut window" +msgid "Send" +msgstr "Enviar" + +#: ../ui/gtk/help-overlay.ui.h:40 +msgctxt "shortcut window" +msgid "Add attachment" +msgstr "Añadir un adjunto" + +#: ../ui/gtk/help-overlay.ui.h:41 +msgctxt "shortcut window" +msgid "Rich text mode" +msgstr "Texto enriquecido" + +#: ../ui/gtk/help-overlay.ui.h:42 +msgctxt "shortcut window" +msgid "Bold text" +msgstr "Texto en negrita" + +#: ../ui/gtk/help-overlay.ui.h:43 +msgctxt "shortcut window" +msgid "Italicize text" +msgstr "Texto en cursiva" + +#: ../ui/gtk/help-overlay.ui.h:44 +msgctxt "shortcut window" +msgid "Underline text" +msgstr "Subrayar el texto" + +#: ../ui/gtk/help-overlay.ui.h:45 +msgctxt "shortcut window" +msgid "Strike text" +msgstr "Tachar el texto" + +#: ../ui/gtk/help-overlay.ui.h:46 +msgctxt "shortcut window" +msgid "Insert a link" +msgstr "Insertar un enlace" + +#: ../ui/gtk/help-overlay.ui.h:47 +msgctxt "shortcut window" +msgid "Remove formatting" +msgstr "Eliminar el formato" + +#: ../ui/gtk/menus.ui.h:2 +msgid "A_ccounts" +msgstr "_Cuentas" + +#: ../ui/gtk/menus.ui.h:4 +msgid "_Keyboard Shortcuts" +msgstr "Atajos del _teclado" + #: ../ui/login.glade.h:1 msgid "email@example.com" msgstr "correo@ejemplo.com" @@ -2187,7 +2568,7 @@ msgid "Use IMAP cre_dentials" msgstr "Utilizar cre_denciales IMAP" -#: ../ui/login.glade.h:34 ../ui/preferences.glade.h:5 +#: ../ui/login.glade.h:34 msgid "Composer" msgstr "Redactor" @@ -2207,6 +2588,10 @@ msgid "_Download mail" msgstr "_Descargar correo" +#: ../ui/main-toolbar.ui.h:1 +msgid "Empty Spam or Trash folders" +msgstr "Vaciar las carpetas Spam o Papelera" + #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" msgstr "Credenciales SMTP" @@ -2223,47 +2608,43 @@ msgid "_Authenticate" msgstr "_Autenticar" -#: ../ui/preferences.glade.h:1 +#: ../ui/preferences-dialog.ui.h:1 msgid "Reading" msgstr "Lectura" -#: ../ui/preferences.glade.h:2 +#: ../ui/preferences-dialog.ui.h:2 msgid "_Automatically select next message" msgstr "Seleccionar el siguiente mensaje _automáticamente" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences-dialog.ui.h:3 msgid "_Display conversation preview" msgstr "_Mostrar la vista previa de la conversación" -#: ../ui/preferences.glade.h:4 +#: ../ui/preferences-dialog.ui.h:4 msgid "Use _three pane view" msgstr "Usar vista de _tres paneles" -#: ../ui/preferences.glade.h:6 -msgid "Enable _spell checking" -msgstr "Activar corrección _ortográfica" - -#: ../ui/preferences.glade.h:7 +#: ../ui/preferences-dialog.ui.h:5 msgid "Notifications" msgstr "Notificaciones" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences-dialog.ui.h:6 msgid "_Play notification sounds" msgstr "_Reproducir un sonido para las notificaciones" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences-dialog.ui.h:7 msgid "Show _notifications for new mail" msgstr "Mostrar _notificaciones cuando llegue correo nuevo" -#: ../ui/preferences.glade.h:10 +#: ../ui/preferences-dialog.ui.h:8 msgid "Always _watch for new mail" msgstr "_Revisar siempre si hay mensajes nuevos" -#: ../ui/preferences.glade.h:11 +#: ../ui/preferences-dialog.ui.h:9 msgid "Geary will run in the background and notify of new mail" msgstr "Geary se ejecutará en segundo plano y le notificará de mensajes nuevos" -#: ../ui/preferences.glade.h:12 +#: ../ui/preferences-dialog.ui.h:10 msgid "Preferences" msgstr "Preferencias" @@ -2295,6 +2676,143 @@ msgid "Geary update in progress…" msgstr "Actualización de Geary en proceso…" +#~ msgid "_Inspect" +#~ msgstr "_Inspeccionar" + +#~| msgid "%s - Conversation Inspector" +#~ msgid "%s — Composer Inspector" +#~ msgstr "%s: inspector de conversaciones" + +#~ msgid " (Invalid?)" +#~ msgstr " (¿No válido?)" + +#~| msgid "%s - Conversation Inspector" +#~ msgid "%s — Conversation Inspector" +#~ msgstr "%s: inspector de conversaciones" + +#~ msgid "none" +#~ msgstr "sin nombre" + +#~ msgid "Copy _Link" +#~ msgstr "Copiar en_lace" + +#~ msgid "Link (Ctrl+L)" +#~ msgstr "Enlace (Ctr+L)" + +#~ msgid "Enable _spell checking" +#~ msgstr "Activar corrección _ortográfica" + +#~ msgid "Empty" +#~ msgstr "Vaciar" + +#~ msgid "%i match" +#~ msgid_plural "%i matches" +#~ msgstr[0] "%i coincidencia" +#~ msgstr[1] "%i coincidencias" + +#~ msgid "%i match (wrapped)" +#~ msgid_plural "%i matches (wrapped)" +#~ msgstr[0] "%i coincidencia (compactada)" +#~ msgstr[1] "%i coincidencias (compactadas)" + +#~ msgid "not found" +#~ msgstr "no encontrado" + +#~ msgid "No search results found." +#~ msgstr "La búsqueda no devolvió ningún resultado." + +#~ msgid "From:" +#~ msgstr "De:" + +#~ msgid "Date:" +#~ msgstr "Fecha:" + +#~ msgid "Select _Message" +#~ msgstr "Seleccionar _mensaje" + +#~ msgid "_Save As..." +#~ msgstr "_Guardar como…" + +#~ msgid "Save A_ttachment..." +#~ msgid_plural "Save All A_ttachments..." +#~ msgstr[0] "Guardar ad_junto…" +#~ msgstr[1] "Guardar todos los ad_juntos…" + +#~ msgid "_Left" +#~ msgstr "_Izquierda" + +#~ msgid "_Right" +#~ msgstr "_Derecha" + +#~ msgid "_Center" +#~ msgstr "_Centrado" + +#~ msgid "_Justify" +#~ msgstr "_Justificado" + +#~ msgid "More options" +#~ msgstr "Más opciones" + +#~ msgctxt "Label" +#~ msgid "Close and Save" +#~ msgstr "Guardar y cerrar" + +#~ msgctxt "Short Label" +#~ msgid "Close and Save" +#~ msgstr "Guardar y cerrar" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Save" +#~ msgstr "Guardar y cerrar" + +#~ msgctxt "Label" +#~ msgid "Close and Discard" +#~ msgstr "Descartar y cerrar" + +#~ msgctxt "Short Label" +#~ msgid "Close and Discard" +#~ msgstr "Descartar y cerrar" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Discard" +#~ msgstr "Descartar y cerrar" + +#~ msgid "Large" +#~ msgstr "Grande" + +#~ msgid "Medium" +#~ msgstr "Mediano" + +#~ msgid "Small" +#~ msgstr "Pequeño" + +#~ msgid "Sans Serif" +#~ msgstr "Sans serif" + +#~ msgid "Serif" +#~ msgstr "Serif" + +#~ msgid "Fixed Width" +#~ msgstr "Anchura fija" + +#~ msgid "Detach" +#~ msgstr "Desacoplar" + +#~ msgid "_Attach File" +#~ msgstr "_Adjuntar archivo" + +#~ msgid "Attach File" +#~ msgstr "Adjuntar archivo" + +#~ msgid "_Include Original Attachments" +#~ msgstr "_Incluir adjuntos originales" + +#~ msgid "Spelling language" +#~ msgstr "Idioma de la revisión ortográfica" + +#~ msgid "Application Menu" +#~ msgstr "Menú de aplicación" + #~ msgid "Copyright 2011-2015 Yorba Foundation" #~ msgstr "Copyright 2011–2015 Fundación Yorba" diff -Nru geary-0.11.4/po/eu.po geary-0.12.0/po/eu.po --- geary-0.11.4/po/eu.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/eu.po 2017-10-02 11:25:21.000000000 +0000 @@ -1,26 +1,25 @@ -# Basque translation for Geary +# po/geary.pot # PO message string template file for Geary email client # Copyright 2016 Software Freedom Conservancy Inc. # This file is distributed under the GNU LGPL, version 2.1. # # Translators: -# Iñaki Larrañaga Murgoitio , 2014, 2017. +# Iñaki Larrañaga Murgoitio , 2014. msgid "" msgstr "" -"Project-Id-Version: geary geary-0.11\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" -"product=geary&keywords=I18N+L10N&component=internationalization\n" -"POT-Creation-Date: 2016-12-15 00:05+0000\n" -"PO-Revision-Date: 2017-03-05 00:20+0100\n" +"Project-Id-Version: geary-0.4.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-07-21 11:07+0200\n" +"PO-Revision-Date: 2014-07-21 11:13+0200\n" "Last-Translator: Iñaki Larrañaga Murgoitio \n" -"Language-Team: Basque \n" +"Language-Team: Basque \n" "Language: eu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "eu/)\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Lokalize 1.5\n" +"X-Generator: Lokalize 1.4\n" #: ../desktop/geary.desktop.in.h:1 ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" @@ -47,150 +46,120 @@ msgid "Compose Message" msgstr "Prestatu mezua" -#: ../desktop/geary-attach.contract.in.h:1 -#| msgid "Send and receive email" -msgid "Send by email" -msgstr "Bidali posta elektronikoz" - -#: ../desktop/geary-attach.contract.in.h:2 -msgid "Send files using Geary" -msgstr "Bidali fitxategiak Geary erabiliz" - -#: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 +#: ../src/client/accounts/account-dialog-add-edit-pane.vala:48 #: ../src/client/components/stock.vala:31 msgid "_Save" msgstr "_Gorde" -#: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 +#: ../src/client/accounts/account-dialog-add-edit-pane.vala:48 #: ../src/client/components/stock.vala:22 msgid "_Add" msgstr "_Gehitu" -#. reset/clear widgets -#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 -#, c-format -msgid "Additional addresses for %s" -msgstr "'%s'(r)en helbide gehigarriak" - #. Sets min size. -#: ../src/client/accounts/account-dialog.vala:21 +#: ../src/client/accounts/account-dialog.vala:19 msgid "Accounts" msgstr "Kontuak" -#. Copyright 2016 Software Freedom Conservancy Inc. -#. * -#. * This software is licensed under the GNU Lesser General Public License -#. * (version 2.1 or later). See the COPYING file in this distribution. -#. -#. Page for adding or editing an account. #. / Placeholder text indicating that the user should type their first name and last name #: ../src/client/accounts/add-edit-page.vala:10 msgid "First Last" msgstr "First Last" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:228 +#, c-format msgid "Welcome to Geary." msgstr "Ongi etorri Geary-ra." -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:228 msgid "Enter your account information to get started." msgstr "Sartu zure kontuaren informazioa hasteko." -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:247 msgid "2 weeks back" msgstr "2 aste atzera" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:254 +#: ../src/client/accounts/add-edit-page.vala:248 msgid "1 month back" msgstr "Hilabete 1 atzera" -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:249 msgid "3 months back" msgstr "3 hilabete atzera" -#: ../src/client/accounts/add-edit-page.vala:256 +#: ../src/client/accounts/add-edit-page.vala:250 msgid "6 months back" msgstr "6 hilabete atzera" -#: ../src/client/accounts/add-edit-page.vala:257 +#: ../src/client/accounts/add-edit-page.vala:251 msgid "1 year back" msgstr "Urte 1 atzera" -#: ../src/client/accounts/add-edit-page.vala:258 +#: ../src/client/accounts/add-edit-page.vala:252 msgid "2 years back" msgstr "2 urte atzera" -#: ../src/client/accounts/add-edit-page.vala:259 +#: ../src/client/accounts/add-edit-page.vala:253 msgid "4 years back" msgstr "4 urte atzera" #. Separator -#: ../src/client/accounts/add-edit-page.vala:261 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "Everything" msgstr "Dena" -#: ../src/client/accounts/add-edit-page.vala:280 -msgid "Edit" -msgstr "Editatu" - -#: ../src/client/accounts/add-edit-page.vala:282 -#| msgid "_Previous" -msgid "Preview" -msgstr "Aurrebista" - -#: ../src/client/accounts/add-edit-page.vala:723 +#: ../src/client/accounts/add-edit-page.vala:686 msgid "Remem_ber passwords" msgstr "_Gogoratu pasahitzak" -#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:7 +#: ../src/client/accounts/add-edit-page.vala:693 ../ui/login.glade.h:6 msgid "Remem_ber password" msgstr "_Gogoratu pasahitza" -#: ../src/client/accounts/add-edit-page.vala:764 +#: ../src/client/accounts/add-edit-page.vala:727 msgid "Unable to validate:\n" msgstr "Ezin da balidatu:\n" -#: ../src/client/accounts/add-edit-page.vala:766 +#: ../src/client/accounts/add-edit-page.vala:729 msgid " • Invalid account nickname.\n" msgstr " • Kontuaren goitizena baliogabea.\n" -#: ../src/client/accounts/add-edit-page.vala:769 +#: ../src/client/accounts/add-edit-page.vala:732 msgid " • Email address already added to Geary.\n" msgstr " • Helbide elektronikoa jadanik Geary-ri gehituta.\n" -#: ../src/client/accounts/add-edit-page.vala:773 +#: ../src/client/accounts/add-edit-page.vala:736 msgid " • IMAP connection error.\n" msgstr " • IMAP konexioaren errorea.\n" -#: ../src/client/accounts/add-edit-page.vala:776 +#: ../src/client/accounts/add-edit-page.vala:739 msgid " • IMAP username or password incorrect.\n" msgstr " • Okerreko IMAP erabiltzaile-izena edo pasahitza.\n" -#: ../src/client/accounts/add-edit-page.vala:779 +#: ../src/client/accounts/add-edit-page.vala:742 msgid " • SMTP connection error.\n" msgstr " • SMTP konexioaren errorea.\n" -#: ../src/client/accounts/add-edit-page.vala:782 +#: ../src/client/accounts/add-edit-page.vala:745 msgid " • SMTP username or password incorrect.\n" msgstr " • Okerreko SMTP erabiltzaile-izena edo pasahitza.\n" -#: ../src/client/accounts/add-edit-page.vala:786 +#: ../src/client/accounts/add-edit-page.vala:749 msgid " • Connection error.\n" msgstr " • Konexioaren errorea.\n" -#: ../src/client/accounts/add-edit-page.vala:790 +#: ../src/client/accounts/add-edit-page.vala:753 msgid " • Username or password incorrect.\n" msgstr " • Okerreko erabiltzaile-izena edo pasahitza.\n" #: ../src/client/application/geary-application.vala:19 -msgid "Copyright 2016 Software Freedom Conservancy Inc." -msgstr "Copyright-a 2016 Software Freedom Conservancy Inc." +msgid "Copyright 2011-2014 Yorba Foundation" +msgstr "Copyright-a 2011-2014 Yorba Fundazioa" #: ../src/client/application/geary-application.vala:21 -#| msgid "Visit the Yorba web site" -msgid "Visit the Geary web site" -msgstr "Bisitatu Geary-ren webgunea" +msgid "Visit the Yorba web site" +msgstr "Bisitatu Yorba-ren webgunea" #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" @@ -242,224 +211,199 @@ msgstr "Baimendu WebView aztertzea" #: ../src/client/application/geary-args.vala:26 -msgid "Revoke all server certificates with TLS warnings" -msgstr "Zerbitzariaren TLS abisuak dituzten ziurtagiri guztiak errebokatu" - -#: ../src/client/application/geary-args.vala:27 msgid "Display program version" msgstr "Bistaratu programaren bertsioa" #. This gives a command-line hint on how to open new composer windows with mailto: -#: ../src/client/application/geary-args.vala:51 +#: ../src/client/application/geary-args.vala:49 #, c-format msgid "Use %s to open a new composer window" msgstr "Erabili '%s' prestatzeko leiho berria irekitzeko" -#: ../src/client/application/geary-args.vala:52 +#: ../src/client/application/geary-args.vala:50 msgid "Please report comments, suggestions and bugs to:" msgstr "Bidali iruzkinak, iradokizunak eta eman akatsen berri hemen:" #. i18n: Command line arguments are invalid -#: ../src/client/application/geary-args.vala:59 +#: ../src/client/application/geary-args.vala:57 #, c-format msgid "Failed to parse command line options: %s\n" msgstr "Huts egin du komando-lerroaren aukerak aztertzean: %s\n" -#: ../src/client/application/geary-args.vala:70 +#: ../src/client/application/geary-args.vala:68 #, c-format msgid "Unrecognized command line option \"%s\"\n" msgstr "Komando-lerroaren '%s' aukera ezezaguna\n" -#: ../src/client/application/geary-controller.vala:61 -#| msgid "Move conversation" -msgid "Delete conversation" -msgstr "Ezabatu berriketa" +#: ../src/client/application/geary-controller.vala:46 +msgid "_Delete" +msgstr "E_zabatu" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:47 msgid "Delete conversation (Shift+Delete)" msgstr "Ezabatu berriketa (Maius+Ezabatu)" -#: ../src/client/application/geary-controller.vala:63 +#: ../src/client/application/geary-controller.vala:48 msgid "Delete conversations (Shift+Delete)" msgstr "Ezabatu berriketa (Maius+Ezabatu)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:67 -#| msgid "Move conversation to trash (Delete, Backspace)" -msgid "Move conversation to Trash (Delete, Backspace)" +#: ../src/client/application/geary-controller.vala:52 +msgid "_Trash" +msgstr "_Zakarrontzia" + +#: ../src/client/application/geary-controller.vala:53 +msgid "Move conversation to trash (Delete, Backspace)" msgstr "Bota berriketa zakarrontzira (Ezabatu, Atzera tekla)" -#: ../src/client/application/geary-controller.vala:68 -#| msgid "Move conversations to trash (Delete, Backspace)" -msgid "Move conversations to Trash (Delete, Backspace)" +#: ../src/client/application/geary-controller.vala:54 +msgid "Move conversations to trash (Delete, Backspace)" msgstr "Bota berriketak zakarrontzira (Ezabatu, Atzera tekla)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:72 +#: ../src/client/application/geary-controller.vala:58 msgid "_Archive" msgstr "_Artxiboa" -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:59 msgid "Archive conversation (A)" msgstr "Artxibatu berriketa (A)" -#: ../src/client/application/geary-controller.vala:74 +#: ../src/client/application/geary-controller.vala:60 msgid "Archive conversations (A)" msgstr "Artxibatu berriketak (A)" -#: ../src/client/application/geary-controller.vala:77 +#: ../src/client/application/geary-controller.vala:63 msgid "Mark as S_pam" msgstr "Markatu _baztergarri gisa" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:64 msgid "Mark as not S_pam" msgstr "Markatu e_z-baztergarri gisa" -#: ../src/client/application/geary-controller.vala:80 -#: ../src/client/application/geary-controller.vala:396 +#: ../src/client/application/geary-controller.vala:66 +#: ../src/client/application/geary-controller.vala:282 msgid "Mark conversation" msgstr "Markatu berriketa" -#: ../src/client/application/geary-controller.vala:81 +#: ../src/client/application/geary-controller.vala:67 msgid "Mark conversations" msgstr "Markatu berriketak" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:68 msgid "Add label to conversation" msgstr "Gehitu etiketa berriketari" -#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:69 msgid "Add label to conversations" msgstr "Gehitu etiketa berriketei" -#: ../src/client/application/geary-controller.vala:84 -#: ../src/client/application/geary-controller.vala:435 +#: ../src/client/application/geary-controller.vala:70 +#: ../src/client/application/geary-controller.vala:321 msgid "Move conversation" msgstr "Aldatu berriketa lekuz" -#: ../src/client/application/geary-controller.vala:85 +#: ../src/client/application/geary-controller.vala:71 msgid "Move conversations" msgstr "Aldatu berriketak lekuz" -#: ../src/client/application/geary-controller.vala:376 -#: ../ui/app_menu.interface.h:1 +#: ../src/client/application/geary-controller.vala:258 msgid "A_ccounts" msgstr "K_ontuak" -#: ../src/client/application/geary-controller.vala:381 -#: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 +#: ../src/client/application/geary-controller.vala:263 +#: ../src/client/components/stock.vala:27 msgid "_Preferences" msgstr "_Hobespenak" -#: ../src/client/application/geary-controller.vala:385 -#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:3 +#: ../src/client/application/geary-controller.vala:267 +#: ../src/client/components/stock.vala:25 msgid "_Help" msgstr "_Laguntza" -#: ../src/client/application/geary-controller.vala:389 -#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:4 +#: ../src/client/application/geary-controller.vala:271 +#: ../src/client/components/stock.vala:21 msgid "_About" msgstr "Honi _buruz" -#: ../src/client/application/geary-controller.vala:393 -#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:5 +#: ../src/client/application/geary-controller.vala:275 +msgid "_Donate" +msgstr "_Eman dirua" + +#: ../src/client/application/geary-controller.vala:279 +#: ../src/client/components/stock.vala:29 msgid "_Quit" msgstr "I_rten" -#: ../src/client/application/geary-controller.vala:398 +#: ../src/client/application/geary-controller.vala:284 msgid "_Mark as..." msgstr "_Markatu honela..." -#: ../src/client/application/geary-controller.vala:404 +#: ../src/client/application/geary-controller.vala:290 msgid "Mark as _Read" msgstr "Markatu '_Irakurrita' gisa" -#: ../src/client/application/geary-controller.vala:410 +#: ../src/client/application/geary-controller.vala:296 msgid "Mark as _Unread" msgstr "Markatu i_rakurri gabeko gisa" -#: ../src/client/application/geary-controller.vala:416 +#: ../src/client/application/geary-controller.vala:302 msgid "_Star" msgstr "_Izarra" -#: ../src/client/application/geary-controller.vala:421 +#: ../src/client/application/geary-controller.vala:307 msgid "U_nstar" msgstr "Ke_ndu izarra" -#: ../src/client/application/geary-controller.vala:431 +#: ../src/client/application/geary-controller.vala:317 msgid "Add label" msgstr "Gehitu etiketa" -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:318 msgid "_Label" msgstr "_Etiketa" -#: ../src/client/application/geary-controller.vala:436 +#: ../src/client/application/geary-controller.vala:322 msgid "_Move" msgstr "Aldatu _lekuz" -#: ../src/client/application/geary-controller.vala:440 +#: ../src/client/application/geary-controller.vala:326 msgid "Compose new message (Ctrl+N, N)" msgstr "Prestatu mezu berria (Ktrl+N, N)" #. Reply to a message. -#: ../src/client/application/geary-controller.vala:444 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1873 +#: ../src/client/application/geary-controller.vala:330 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1574 msgid "_Reply" msgstr "_Erantzun" -#: ../src/client/application/geary-controller.vala:445 +#: ../src/client/application/geary-controller.vala:331 msgid "Reply (Ctrl+R, R)" msgstr "Erantzun (Ktrl+R, R)" -#: ../src/client/application/geary-controller.vala:449 +#: ../src/client/application/geary-controller.vala:335 msgid "R_eply All" msgstr "Erantzun _denei" -#: ../src/client/application/geary-controller.vala:450 +#: ../src/client/application/geary-controller.vala:336 msgid "Reply all (Ctrl+Shift+R, Shift+R)" msgstr "Erantzun _denei (Ktrl+Maius+R, Maius+R)" #. Forward a message. -#: ../src/client/application/geary-controller.vala:455 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1883 +#: ../src/client/application/geary-controller.vala:341 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1584 msgid "_Forward" msgstr "A_urrera" -#: ../src/client/application/geary-controller.vala:456 +#: ../src/client/application/geary-controller.vala:342 msgid "Forward (Ctrl+L, F)" msgstr "Aurrera (Ktrl+L, F)" -#: ../src/client/application/geary-controller.vala:495 -msgid "Empty" -msgstr "Hustu" - -#: ../src/client/application/geary-controller.vala:496 -msgid "Empty Spam or Trash folders" -msgstr "Hustu Baztergarriak edo Zakarrontzia karpetak" - -#: ../src/client/application/geary-controller.vala:500 -msgid "Empty _Spam…" -msgstr "Hustu _Baztergarriak…" - -#: ../src/client/application/geary-controller.vala:504 -msgid "Empty _Trash…" -msgstr "Hustu _Zakarrontzia…" - -#. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:537 -msgid "Toggle search bar" -msgstr "Txandakatu bilaketa-barra" - -#: ../src/client/application/geary-controller.vala:744 -msgid "Unable to store server trust exception" -msgstr "Ezin da zerbitzariaren salbuespena gorde" - -#: ../src/client/application/geary-controller.vala:981 +#: ../src/client/application/geary-controller.vala:625 msgid "Your settings are insecure" msgstr "Zure ezarpenak ez dira seguruak" -#: ../src/client/application/geary-controller.vala:982 +#: ../src/client/application/geary-controller.vala:626 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -469,29 +413,17 @@ "izena eta pasahitza sareko beste pertsona batek irakur ditzakeela adierazten " "du honek. Ziur zaude hau nahi duzula?" -#: ../src/client/application/geary-controller.vala:983 +#: ../src/client/application/geary-controller.vala:627 msgid "Co_ntinue" msgstr "_Jarraitu" -#: ../src/client/application/geary-controller.vala:1030 -msgid "Error connecting to the server" -msgstr "Errorea zerbitzariarekin konektatzean" - -#: ../src/client/application/geary-controller.vala:1031 -msgid "" -"Geary encountered an error while connecting to the server. Please try again " -"in a few moments." -msgstr "" -"Geary-k errore bat aurkitu du zerbitzariarekin konektatzean. Saia " -"zaitez berriro geroago." - #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:1068 +#: ../src/client/application/geary-controller.vala:705 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "Errorea mezua bidaltzean" -#: ../src/client/application/geary-controller.vala:1069 +#: ../src/client/application/geary-controller.vala:706 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." @@ -501,12 +433,12 @@ #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1073 +#: ../src/client/application/geary-controller.vala:710 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "Errorea bidalitako mezua gordetzean" -#: ../src/client/application/geary-controller.vala:1074 +#: ../src/client/application/geary-controller.vala:711 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." @@ -514,19 +446,16 @@ "Errorea gertatu da bidalitako mezua Bidalita karpetan gordetzean. Arazoak " "jarraitzen badu, ezabatu eskuz mezua zure Irteera karpetatik." -#: ../src/client/application/geary-controller.vala:1143 +#: ../src/client/application/geary-controller.vala:780 msgid "Labels" msgstr "Etiketak" -#. give the user two options: reset the Account local store, or exit Geary. A third -#. could be done to leave the Account in an unopened state, but we don't currently -#. have provisions for that. -#: ../src/client/application/geary-controller.vala:1155 +#: ../src/client/application/geary-controller.vala:792 #, c-format msgid "Unable to open the database for %s" msgstr "Ezin da '%s'(r)en datu-basea ireki" -#: ../src/client/application/geary-controller.vala:1156 +#: ../src/client/application/geary-controller.vala:793 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -550,20 +479,20 @@ "Datu-basea berreraikitzean lokaleko mezu guztiak (beraien eranskinekin) " "ezabatzea dakar. Zerbitzariko zure mezuak ez dute eraginik jasoko." -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:795 msgid "_Rebuild" msgstr "_Berreraiki" -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:795 msgid "E_xit" msgstr "I_rten" -#: ../src/client/application/geary-controller.vala:1167 +#: ../src/client/application/geary-controller.vala:804 #, c-format msgid "Unable to rebuild database for \"%s\"" msgstr "Ezin da '%s'(r)en datu-basea berreraiki" -#: ../src/client/application/geary-controller.vala:1168 +#: ../src/client/application/geary-controller.vala:805 #, c-format msgid "" "Error during rebuild:\n" @@ -574,16 +503,14 @@ "\n" "%s" -#. some other problem opening the account ... as with other flow path, can't run -#. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1190 -#: ../src/client/application/geary-controller.vala:1200 -#: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:827 +#: ../src/client/application/geary-controller.vala:837 +#: ../src/client/application/geary-controller.vala:848 #, c-format msgid "Unable to open local mailbox for %s" msgstr "Ezin da '%s'(r)en lokaleko postontzia ireki" -#: ../src/client/application/geary-controller.vala:1191 +#: ../src/client/application/geary-controller.vala:828 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -602,7 +529,7 @@ "\n" "%s" -#: ../src/client/application/geary-controller.vala:1201 +#: ../src/client/application/geary-controller.vala:838 msgid "" "The version number of the local mail database is formatted for a newer " "version of Geary. Unfortunately, the database cannot be \"rolled back\" to " @@ -616,7 +543,7 @@ "\n" "Instalatu Geary-ren azken bertsioa eta saiatu berriro." -#: ../src/client/application/geary-controller.vala:1212 +#: ../src/client/application/geary-controller.vala:849 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" @@ -628,28 +555,23 @@ "\n" "Egiaztatu sareko konexioa eta berrabiarazi Geary." -#: ../src/client/application/geary-controller.vala:1723 +#: ../src/client/application/geary-controller.vala:1356 #, c-format msgid "About %s" msgstr "%s(r)i buruz" #. / Translators: add your name and email address to receive credit in the About dialog #. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1726 +#: ../src/client/application/geary-controller.vala:1359 msgid "translator-credits" msgstr "Iñaki Larrañaga Murgoitio " -#: ../src/client/application/geary-controller.vala:1984 -#| msgid "Underline (Ctrl+U)" -msgid "Undo move (Ctrl+Z)" -msgstr "Desegin lekuz aldatzea (Ktrl+U)" - -#: ../src/client/application/geary-controller.vala:1994 +#: ../src/client/application/geary-controller.vala:1623 #, c-format msgid "Are you sure you want to open \"%s\"?" msgstr "Ziur zaude '%s' ireki nahi duzula?" -#: ../src/client/application/geary-controller.vala:1995 +#: ../src/client/application/geary-controller.vala:1624 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -657,16 +579,16 @@ "Eranskinek kalteak sor ditzakete sisteman irekitzen badira. Iturburu " "fidagarrietako fitxategiak bakarrik ireki." -#: ../src/client/application/geary-controller.vala:1996 +#: ../src/client/application/geary-controller.vala:1625 msgid "Don't _ask me again" msgstr "_Ez galdetu berriro" -#: ../src/client/application/geary-controller.vala:2014 +#: ../src/client/application/geary-controller.vala:1643 #, c-format msgid "A file named \"%s\" already exists. Do you want to replace it?" msgstr "'%s' izeneko fitxategia badago lehendik. Ordeztea nahi duzu?" -#: ../src/client/application/geary-controller.vala:2016 +#: ../src/client/application/geary-controller.vala:1645 #, c-format msgid "" "The file already exists in \"%s\". Replacing it will overwrite its contents." @@ -674,66 +596,24 @@ "'%s'(e)n badago fitxategia lehendik. Hau ordeztean bere eduki guztia " "gainidatziko da." -#: ../src/client/application/geary-controller.vala:2019 +#: ../src/client/application/geary-controller.vala:1648 msgid "_Replace" msgstr "_Ordeztu" -#. Find out what to do with the inline composers. -#. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2317 +#: ../src/client/application/geary-controller.vala:1915 msgid "Close open draft messages?" msgstr "Itxi irekitako mezu zirriborroak?" -#: ../src/client/application/geary-controller.vala:2447 -#, c-format -msgid "Empty all email from your %s folder?" -msgstr "Hustu '%s' karpetako mezu guztiak?" - -#: ../src/client/application/geary-controller.vala:2448 -msgid "This removes the email from Geary and your email server." -msgstr "Honek mezuak Geary-tik eta zure posta-zerbitzaritik ezabatzen ditu." - -#: ../src/client/application/geary-controller.vala:2449 -#| msgid "\"%s\" could not be found." -msgid "This cannot be undone." -msgstr "Hau ezin da desegin." - -#: ../src/client/application/geary-controller.vala:2450 -#, c-format -msgid "Empty %s" -msgstr "Hustu '%s'" - -#: ../src/client/application/geary-controller.vala:2467 -#, c-format -#| msgid "Error saving" -msgid "Error emptying %s" -msgstr "Errorea '%s' hustean" - -#: ../src/client/application/geary-controller.vala:2497 +#: ../src/client/application/geary-controller.vala:2024 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "Mezu hau betirako ezabatzea nahi duzu?" msgstr[1] "Mezu hauek betirako ezabatzea nahi dituzu?" -#: ../src/client/application/geary-controller.vala:2499 +#: ../src/client/application/geary-controller.vala:2026 msgid "Delete" msgstr "Ezabatu" -#: ../src/client/application/geary-controller.vala:2530 -#| msgid "Underline (Ctrl+U)" -msgid "Undo archive (Ctrl+Z)" -msgstr "Desegin artxibatzea (Ktrl+Z)" - -#: ../src/client/application/geary-controller.vala:2545 -#| msgid "Unquote text (Ctrl+[)" -msgid "Undo trash (Ctrl+Z)" -msgstr "Desegin zakarrontzira botatzea (Ktrl+Z)" - -#: ../src/client/application/geary-controller.vala:2598 -#| msgid "Underline (Ctrl+U)" -msgid "Undo (Ctrl+Z)" -msgstr "Desegin (Ktrl+Z)" - #: ../src/client/components/conversation-find-bar.vala:214 #, c-format msgid "%i match" @@ -752,48 +632,48 @@ msgid "not found" msgstr "ez da aurkitu" -#: ../src/client/components/main-window.vala:436 -#, c-format -msgid "%s (%d)" -msgstr "%s (%d)" - -#: ../src/client/components/search-bar.vala:10 +#: ../src/client/components/main-toolbar.vala:11 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "Bilatu" -#. Search entry. -#: ../src/client/components/search-bar.vala:25 +#: ../src/client/components/main-toolbar.vala:78 msgid "Search all mail in account for keywords (Ctrl+S)" msgstr "Bilatu kontuaren mezu guztietan gako-hitzak (Ktrl+S)" -#: ../src/client/components/search-bar.vala:118 +#: ../src/client/components/main-toolbar.vala:212 #, c-format msgid "Indexing %s account" msgstr "'%s' kontua indexatzen" -#: ../src/client/components/search-bar.vala:129 +#: ../src/client/components/main-toolbar.vala:223 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" msgstr "Bilatu '%s' kontua" +#: ../src/client/components/main-window.vala:305 +#, c-format +msgid "%s (%d)" +msgstr "%s (%d)" + #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 msgid "Sending..." msgstr "Bidaltzen..." -#: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 +#: ../src/client/components/stock.vala:18 +#: ../ui/account_cannot_remove.glade.h:3 msgid "_OK" msgstr "_Ados" -#: ../src/client/components/stock.vala:19 ../ui/edit_alternate_emails.glade.h:3 -#: ../ui/password-dialog.glade.h:5 ../ui/remove_confirm.glade.h:5 +#: ../src/client/components/stock.vala:19 ../ui/remove_confirm.glade.h:5 msgid "_Cancel" msgstr "_Utzi" -#: ../src/client/components/stock.vala:23 +#: ../src/client/components/stock.vala:23 ../ui/account_list.glade.h:4 +#: ../ui/preferences.glade.h:2 msgid "_Close" msgstr "It_xi" @@ -815,7 +695,7 @@ #. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1335 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1042 msgid "Select _All" msgstr "Hautatu _dena" @@ -823,294 +703,278 @@ msgid "_Keep" msgstr "_Mantendu" -#: ../src/client/composer/composer-widget.vala:73 +#: ../src/client/composer/composer-widget.vala:57 msgid "Saved" msgstr "Gordeta" -#: ../src/client/composer/composer-widget.vala:74 +#: ../src/client/composer/composer-widget.vala:58 msgid "Saving" msgstr "Gordetzen" -#: ../src/client/composer/composer-widget.vala:75 +#: ../src/client/composer/composer-widget.vala:59 msgid "Error saving" msgstr "Errorea gordetzean" -#: ../src/client/composer/composer-widget.vala:76 -msgid "Press Backspace to delete quote" -msgstr "Sakatu 'Atzera tekla' aipua ezabatzeko" +#. / A list of keywords, separated by pipe ("|") characters, that suggest an attachment +#: ../src/client/composer/composer-widget.vala:106 +msgid "attach|enclosed|enclosing|cover letter" +msgstr "eranskina|inguratua|inguratzea|gutun-azala" + +#: ../src/client/composer/composer-widget.vala:823 +msgid "Do you want to discard the unsaved message?" +msgstr "Gorde gabeko mezua baztertzea nahi duzu?" -#: ../src/client/composer/composer-widget.vala:77 -msgid "New Message" -msgstr "Mezu berria" - -#. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since -#. this is full-word checking, include all variants of each word. No spaces are allowed. -#: ../src/client/composer/composer-widget.vala:138 -msgid "" -"attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" -"enclosing|encloses|enclosure|enclosures" -msgstr "eranskina|eransketa|eranskinak|eransketak" - -#: ../src/client/composer/composer-widget.vala:1114 -#: ../src/client/composer/composer-widget.vala:1118 +#: ../src/client/composer/composer-widget.vala:826 +#: ../src/client/composer/composer-widget.vala:830 msgid "Do you want to discard this message?" msgstr "Mezu hau baztertzea nahi duzu?" -#: ../src/client/composer/composer-widget.vala:1274 +#: ../src/client/composer/composer-widget.vala:911 msgid "Send message with an empty subject and body?" msgstr "Bidali gairik eta gorputzik gabeko mezua?" -#: ../src/client/composer/composer-widget.vala:1276 +#: ../src/client/composer/composer-widget.vala:913 msgid "Send message with an empty subject?" msgstr "Bidali gairik gabeko mezua?" -#: ../src/client/composer/composer-widget.vala:1278 +#: ../src/client/composer/composer-widget.vala:915 msgid "Send message with an empty body?" msgstr "Bidali gorputzik gabeko mezua?" -#: ../src/client/composer/composer-widget.vala:1280 +#: ../src/client/composer/composer-widget.vala:917 msgid "Send message without an attachment?" msgstr "Bidali eranskinik gabeko mezua?" -#: ../src/client/composer/composer-widget.vala:1542 +#: ../src/client/composer/composer-widget.vala:1100 msgid "Cannot add attachment" msgstr "Ezin da eranskina gehitu" -#: ../src/client/composer/composer-widget.vala:1553 +#: ../src/client/composer/composer-widget.vala:1111 #, c-format msgid "\"%s\" could not be found." msgstr "Ezin izan da '%s' aurkitu." -#: ../src/client/composer/composer-widget.vala:1560 +#: ../src/client/composer/composer-widget.vala:1118 #, c-format msgid "\"%s\" is a folder." msgstr "'%s' karpeta da." -#: ../src/client/composer/composer-widget.vala:1567 +#: ../src/client/composer/composer-widget.vala:1125 #, c-format msgid "\"%s\" is an empty file." msgstr "'%s' fitxategi hutsa da." -#: ../src/client/composer/composer-widget.vala:1581 +#: ../src/client/composer/composer-widget.vala:1139 #, c-format msgid "\"%s\" could not be opened for reading." msgstr "Ezin izan da '%s' irakurtzeko ireki." -#: ../src/client/composer/composer-widget.vala:1588 +#: ../src/client/composer/composer-widget.vala:1146 #, c-format msgid "\"%s\" already attached for delivery." msgstr "'%s' jadanik bidaltzeko erantsita dago." #. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-widget.vala:1597 +#: ../src/client/composer/composer-widget.vala:1155 #, c-format msgid "%s (%s)" msgstr "%s (%s)" -#: ../src/client/composer/composer-widget.vala:1657 +#: ../src/client/composer/composer-widget.vala:1215 msgid "To: " msgstr "Nori: " -#: ../src/client/composer/composer-widget.vala:1660 +#: ../src/client/composer/composer-widget.vala:1218 msgid "Cc: " msgstr "Cc: " -#: ../src/client/composer/composer-widget.vala:1663 +#: ../src/client/composer/composer-widget.vala:1221 msgid "Bcc: " msgstr "Bcc: " -#: ../src/client/composer/composer-widget.vala:1666 -#| msgid "_Reply" -msgid "Reply-To: " -msgstr "Erantzun honi: " - -#: ../src/client/composer/composer-widget.vala:1899 +#: ../src/client/composer/composer-widget.vala:1438 msgid "Select Color" msgstr "Hautatu kolorea" -#. Displayed in the From dropdown to indicate an "alternate email address" -#. for an account. The first printf argument will be the alternate email -#. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2334 -#, c-format -msgid "%1$s via %2$s" -msgstr "%1$s (%2$s bidez)" - #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2376 +#: ../src/client/composer/composer-widget.vala:1884 msgid "_From:" msgstr "_Nork:" +#. Composer label (without mnemonic underscore) for the account selector +#. when choosing what address to send a message from. +#. Geary account mail will be sent from +#: ../src/client/composer/composer-widget.vala:1900 +#: ../src/client/conversation-viewer/conversation-viewer.vala:635 +#: ../ui/composer.glade.h:48 +msgid "From:" +msgstr "Nork:" + +#: ../src/client/composer/composer-window.vala:10 +msgid "New Message" +msgstr "Mezu berria" + #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Ni" -#: ../src/client/conversation-viewer/conversation-viewer.vala:414 +#: ../src/client/conversation-viewer/conversation-viewer.vala:260 msgid "No conversations selected." msgstr "Ez da berriketarik hautatu." -#: ../src/client/conversation-viewer/conversation-viewer.vala:416 +#: ../src/client/conversation-viewer/conversation-viewer.vala:262 #, c-format msgid "%u conversation selected." msgid_plural "%u conversations selected." msgstr[0] "Berriketa %u hautatuta." msgstr[1] "%u berriketa hautatuta." -#: ../src/client/conversation-viewer/conversation-viewer.vala:446 +#: ../src/client/conversation-viewer/conversation-viewer.vala:291 msgid "No search results found." msgstr "Ez da bilaketaren emaitzarik aurkitu." -#: ../src/client/conversation-viewer/conversation-viewer.vala:448 +#: ../src/client/conversation-viewer/conversation-viewer.vala:293 msgid "No conversations in folder." msgstr "Ez dago berriketarik karpetan." -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 +#: ../src/client/conversation-viewer/conversation-viewer.vala:534 msgid "This message contains remote images." msgstr "Mezu honek urruneko irudiak ditu." -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 +#: ../src/client/conversation-viewer/conversation-viewer.vala:534 msgid "Show Images" msgstr "Erakutsi irudiak" -#: ../src/client/conversation-viewer/conversation-viewer.vala:715 +#: ../src/client/conversation-viewer/conversation-viewer.vala:535 msgid "Always Show From Sender" msgstr "Erakutsi beti bidaltzailetik" -#: ../src/client/conversation-viewer/conversation-viewer.vala:739 +#: ../src/client/conversation-viewer/conversation-viewer.vala:559 msgid "Edit Draft" msgstr "Editatu zirriborroa" -#: ../src/client/conversation-viewer/conversation-viewer.vala:815 -msgid "From:" -msgstr "Nork:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:818 +#: ../src/client/conversation-viewer/conversation-viewer.vala:638 msgid "To:" msgstr "Nori:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:821 +#: ../src/client/conversation-viewer/conversation-viewer.vala:641 msgid "Cc:" msgstr "Cc:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:824 +#: ../src/client/conversation-viewer/conversation-viewer.vala:644 msgid "Bcc:" msgstr "Bcc:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:827 +#: ../src/client/conversation-viewer/conversation-viewer.vala:647 msgid "Subject:" msgstr "Gaia:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:830 +#: ../src/client/conversation-viewer/conversation-viewer.vala:650 msgid "Date:" msgstr "Data:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1150 +#: ../src/client/conversation-viewer/conversation-viewer.vala:857 #, c-format msgid "%u read message" msgid_plural "%u read messages" msgstr[0] "Mezu %u irakurrita" msgstr[1] "%u mezu irakurrita" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1282 +#: ../src/client/conversation-viewer/conversation-viewer.vala:989 #, c-format msgid "This message was sent successfully, but could not be saved to %s." msgstr "Mezu hori ongi bidali da, baina ez da '%s'(e)n gorde." #. Add a menu item for copying the current selection. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1308 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1015 #: ../ui/composer.glade.h:4 msgid "_Copy" msgstr "_Kopiatu" #. Add a menu item for copying the address. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1316 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1023 msgid "Copy _Email Address" msgstr "Kopiatu _helbide elektronikoa" #. Add a menu item for copying the link. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1321 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1028 #: ../ui/composer.glade.h:17 msgid "Copy _Link" msgstr "Kopiatu _esteka" -#. Select message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1329 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1036 msgid "Select _Message" msgstr "Hautatu _mezua" -#. Inspect. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1341 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1048 msgid "_Inspect" msgstr "_Aztertu" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1572 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1274 msgid "This link appears to go to" msgstr "Esteka hori hona bideratzen duela dirudi:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1573 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1275 msgid "but actually goes to" msgstr "baina benetan hona zuzentzen du:" #. If href doesn't look like a URL, something is fishy, so warn the user -#: ../src/client/conversation-viewer/conversation-viewer.vala:1628 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1330 msgid " (Invalid?)" msgstr " (baliogabea?)" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1734 -msgid "_Save Image As..." -msgstr "Gorde irudia _honela..." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1838 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1522 msgid "_Save As..." msgstr "Gorde _honela..." -#: ../src/client/conversation-viewer/conversation-viewer.vala:1843 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1527 msgid "Save All A_ttachments..." msgstr "Gorde eranskin _guztiak..." -#: ../src/client/conversation-viewer/conversation-viewer.vala:1863 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1541 +msgid "_Save Image As..." +msgstr "Gorde irudia _honela..." + +#: ../src/client/conversation-viewer/conversation-viewer.vala:1564 msgid "Save A_ttachment..." msgid_plural "Save All A_ttachments..." msgstr[0] "Gorde _eranskina..." msgstr[1] "Gorde _eranskin guztiak..." #. Reply to all on a message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1878 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1579 msgid "Reply to _All" msgstr "Erantzun g_uztiei" -#. Mark as read/unread. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1895 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1596 msgid "_Mark as Read" msgstr "_Markatu irakurritako gisa" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1899 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1600 msgid "_Mark as Unread" msgstr "_Markatu 'Irakurri gabea'" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1905 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1606 msgid "Mark Unread From _Here" msgstr "Markatu irakurri gabe _hemendik" -#. Separator. #. View original message source. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1920 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1621 msgid "_View Source" msgstr "Ikusi i_turburua" -#. Generate the attachment table. #. / Placeholder filename for attachments with no filename. -#: ../src/client/conversation-viewer/conversation-viewer.vala:2245 -#: ../src/engine/rfc822/rfc822-utils.vala:392 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1915 +#: ../src/engine/rfc822/rfc822-utils.vala:327 msgid "none" msgstr "bat ere ez" -#: ../src/client/conversation-viewer/conversation-viewer.vala:2380 +#: ../src/client/conversation-viewer/conversation-viewer.vala:2045 msgid "Failed to open default text editor." msgstr "Huts egin du testuaren editore lehenetsia irekitzean." -#: ../src/client/conversation-viewer/conversation-web-view.vala:319 +#: ../src/client/conversation-viewer/conversation-web-view.vala:321 #, c-format msgid "%s - Conversation Inspector" msgstr "%s - bihurketaren ikustatzailea" @@ -1123,95 +987,9 @@ msgid "_Attach" msgstr "_Erantsi" -#: ../src/client/dialogs/certificate-warning-dialog.vala:33 -#, c-format -msgid "Untrusted Connection: %s" -msgstr "Konexio ez-fidagarria: %s" - -#: ../src/client/dialogs/certificate-warning-dialog.vala:36 -#, c-format -msgid "The identity of the %s mail server at %s:%u could not be verified." -msgstr "Ezin izan da '%2$s:%3$u'(e)ko '%1$s' posta-zerbitzariaren identitatea" - -#: ../src/client/dialogs/certificate-warning-dialog.vala:44 -msgid "" -"Selecting \"Trust This Server\" or \"Always Trust This Server\" may cause " -"your username and password to be transmitted insecurely." -msgstr "" -"\"Fidatu zerbitzari honetaz\" edo \"Fidatu zerbitzari honetaz beti\" " -"hautatzek " -"zure erabiltzaile-izena eta pasahitza modu ez-seguru batean igortzea " -"eragingo lezake." - -#: ../src/client/dialogs/certificate-warning-dialog.vala:52 -msgid "" -"Selecting \"Don't Trust This Server\" will cause Geary not to access this " -"server." -msgstr "" -"\"Ez fidatu zerbitzari honetaz\" hautatzeak Geary-k zerbitzari hau " -"ez atzitzea eragingo du" - -#: ../src/client/dialogs/certificate-warning-dialog.vala:54 -msgid "Geary will not add or update this email account." -msgstr "Geary-k ez du posta-kontu hau gehitu edo eguneratu." - -#: ../src/client/dialogs/certificate-warning-dialog.vala:59 -msgid "" -"Selecting \"Don't Trust This Server\" will cause Geary to stop accessing " -"this account." -msgstr "" -"\"Ez fidatu zerbitzari honetaz\" hautatzeak Geary-k kontu hau " -"atzitzea geldituko da" - -#: ../src/client/dialogs/certificate-warning-dialog.vala:61 -msgid "Geary will exit if you have no other open email accounts." -msgstr "Geary irten egingo da ez badaukazu beste posta-konturik irekita." - -#: ../src/client/dialogs/certificate-warning-dialog.vala:66 -msgid "" -"Contact your system administrator or email service provider if you have any " -"question about these issues." -msgstr "" -"Jar zaitez sistemaren administratzailearekin edo posta-zerbitzuaren " -"hornitzailearekin harremanetan arazo hauei buruz inolako galderarik " -"baduzu." - -#: ../src/client/dialogs/certificate-warning-dialog.vala:73 -msgid "The server's certificate is not signed by a known authority" -msgstr "" -"Zerbitzariaren ziurtagiria ez dago sinatuta autoritate ezagun bategatik" - -#: ../src/client/dialogs/certificate-warning-dialog.vala:76 -msgid "The server's identity does not match the identity in the certificate" -msgstr "" -"Zerbitzariaren identitatea ez dator bat ziurtagiriaren identitatearekin" - -#: ../src/client/dialogs/certificate-warning-dialog.vala:79 -msgid "The server's certificate has expired" -msgstr "Zerbitzariaren ziurtagiria iraungi da" - -#: ../src/client/dialogs/certificate-warning-dialog.vala:82 -msgid "The server's certificate has not been activated" -msgstr "Zerbitzariaren ziurtagiria ez da aktibatu" - -#: ../src/client/dialogs/certificate-warning-dialog.vala:85 -msgid "The server's certificate has been revoked and is now invalid" -msgstr "Zerbitzariaren ziurtagiria errebokatua izan da eta orain baliogabea da" - -#: ../src/client/dialogs/certificate-warning-dialog.vala:88 -msgid "The server's certificate is considered insecure" -msgstr "Zerbitzariaren ziurtagiria ez-segurua dela jo daiteke" - -#: ../src/client/dialogs/certificate-warning-dialog.vala:91 -msgid "An error has occurred processing the server's certificate" -msgstr "Errorea gertatu da zerbitzariaren ziurtagiria prozesatzean" - -#. We can't keep these in the glade file, because Gnome doesn't want markup in translatable -#. strings, and Glade doesn't support the "larger" size attribute. See this bug report for -#. details: https://bugzilla.gnome.org/show_bug.cgi?id=679006 #: ../src/client/dialogs/password-dialog.vala:16 -msgid "Geary requires your email password to continue" -msgstr "Geary-k zure helb. elektronikoaren pasahitza behar du jarraitzeko" +msgid "Please enter your password" +msgstr "Sartu zure pasahitza" #. Label displaying total number of email messages in a folder #: ../src/client/folder-list/folder-list-folder-entry.vala:32 @@ -1253,21 +1031,21 @@ msgid "%s - New Messages" msgstr "%s - Mezu berriak" -#: ../src/client/notification/libnotify.vala:74 +#: ../src/client/notification/libnotify.vala:72 #, c-format msgid "%d new message" msgid_plural "%d new messages" msgstr[0] "Mezu berri %d" msgstr[1] "%d mezu berri" -#: ../src/client/notification/libnotify.vala:77 +#: ../src/client/notification/libnotify.vala:75 #, c-format msgid "%s, %d new message total" msgid_plural "%s, %d new messages total" msgstr[0] "%s, mezu berri %d guztira" msgstr[1] "%s, %d mezu berri guztira" -#: ../src/client/notification/libnotify.vala:109 +#: ../src/client/notification/libnotify.vala:107 #, c-format msgid "" "%s\n" @@ -1282,7 +1060,7 @@ "%1$s\n" "%3$s(r)en beste %2$d mezu berri" -#: ../src/client/notification/libnotify.vala:165 +#: ../src/client/notification/libnotify.vala:160 msgid "Open" msgstr "Ireki" @@ -1316,7 +1094,7 @@ #: ../src/client/util/util-date.vala:83 #, no-c-format msgid "%x" -msgstr "%x" +msgstr "" #. / Verbose datetime format for 12-hour time, i.e. November 8, 2010 8:42 am #. / See http://developer.gnome.org/glib/2.32/glib-GDateTime.html#g-date-time-format @@ -1367,7 +1145,7 @@ msgstr "%A" #: ../src/client/util/util-email.vala:30 -#: ../src/engine/rfc822/rfc822-message.vala:816 +#: ../src/engine/rfc822/rfc822-message.vala:741 msgid "(no subject)" msgstr "(gairik ez)" @@ -1411,14 +1189,6 @@ msgid "Other" msgstr "Bestelakoa" -#: ../src/engine/api/geary-service.vala:20 -msgid "IMAP" -msgstr "IMAP" - -#: ../src/engine/api/geary-service.vala:23 -msgid "SMTP" -msgstr "SMTP" - #: ../src/engine/api/geary-special-folder-type.vala:24 msgid "Inbox" msgstr "Sarrera" @@ -1459,222 +1229,82 @@ msgid "Archive" msgstr "Artxiboa" -#: ../src/engine/api/geary-special-folder-type.vala:58 ../ui/login.glade.h:29 +#: ../src/engine/api/geary-special-folder-type.vala:58 ../ui/login.glade.h:25 msgid "None" msgstr "Bat ere ez" -#. Map of possibly translated search operator names and values -#. to English/internal names and values. We include the -#. English version anyway so that when translations provide a -#. localised version of the operator names but have not also -#. translated the user manual, the English version in the -#. manual still works. -#. Can be typed in the search box like "attachment:file.txt" -#. to find messages with attachments with a particular name. -#. -#. The translated string must be a single word (use '-', '_' -#. or similar to combine words into one), should be short, and -#. also match the translation in "search.page" of the Geary User -#. Guide. -#: ../src/engine/imap-db/imap-db-account.vala:99 -#| msgid "attachment" -msgctxt "Search operator" +#. / Can be typed in the search box like attachment:file.txt to find +#. / messages with attachments with a particular name. +#: ../src/engine/imap-db/imap-db-account.vala:662 msgid "attachment" msgstr "eranskina" -#. Can be typed in the search box like -#. "bcc:johndoe@example.com" to find messages bcc'd to a -#. particular person. -#. -#. The translated string must be a single word (use '-', '_' -#. or similar to combine words into one), should be short, and -#. also match the translation in "search.page" of the Geary User -#. Guide. -#: ../src/engine/imap-db/imap-db-account.vala:108 -#| msgid "bcc" -msgctxt "Search operator" +#. / Can be typed in the search box like bcc:johndoe@example.com to find +#. / messages bcc'd to a particular person. +#: ../src/engine/imap-db/imap-db-account.vala:665 +#: ../src/engine/imap-db/imap-db-account.vala:684 msgid "bcc" msgstr "bcc" -#. Can be typed in the search box like "body:word" to find -#. "word" only if it occurs in the body of a message. -#. -#. The translated string must be a single word (use '-', '_' -#. or similar to combine words into one), should be short, and -#. also match the translation in "search.page" of the Geary User -#. Guide. -#: ../src/engine/imap-db/imap-db-account.vala:116 -#| msgid "body" -msgctxt "Search operator" +#. / Can be typed in the search box like body:word to find the word only +#. / if it occurs in the body of a message. +#: ../src/engine/imap-db/imap-db-account.vala:668 msgid "body" -msgstr "testua" +msgstr "gorputza" -#. Can be typed in the search box like -#. "cc:johndoe@example.com" to find messages cc'd to a -#. particular person. -#. -#. The translated string must be a single word (use '-', '_' -#. or similar to combine words into one), should be short, and -#. also match the translation in "search.page" of the Geary User -#. Guide. -#: ../src/engine/imap-db/imap-db-account.vala:125 -#| msgid "cc" -msgctxt "Search operator" +#. / Can be typed in the search box like cc:johndoe@example.com to find +#. / messages cc'd to a particular person. +#: ../src/engine/imap-db/imap-db-account.vala:671 +#: ../src/engine/imap-db/imap-db-account.vala:684 msgid "cc" msgstr "cc" -#. Can be typed in the search box like -#. "from:johndoe@example.com" to find messages from a -#. particular sender. -#. -#. The translated string must be a single word (use '-', '_' -#. or similar to combine words into one), should be short, and -#. also match the translation in "search.page" of the Geary User -#. Guide. -#: ../src/engine/imap-db/imap-db-account.vala:134 -#| msgid "from" -msgctxt "Search operator" +#. / Can be typed in the search box like from:johndoe@example.com to +#. / find messages from a particular sender. +#: ../src/engine/imap-db/imap-db-account.vala:674 +#: ../src/engine/imap-db/imap-db-account.vala:684 msgid "from" msgstr "nork" -#. Can be typed in the search box like "is:unread" to find -#. messages that are read, unread, or starred. -#. -#. The translated string must be a single word (use '-', '_' -#. or similar to combine words into one), should be short, and -#. also match the translation in "search.page" of the Geary User -#. Guide. -#: ../src/engine/imap-db/imap-db-account.vala:142 -msgctxt "Search operator" -msgid "is" -msgstr "dago" - -#. Can be typed in the search box like "subject:word" to find -#. "word" only if it occurs in the subject of a message. -#. -#. The translated string must be a single word (use '-', '_' -#. or similar to combine words into one), should be short, and -#. also match the translation in "search.page" of the Geary -#. User Guide. -#: ../src/engine/imap-db/imap-db-account.vala:150 -#| msgid "subject" -msgctxt "Search operator" +#. / Can be typed in the search box like subject:word to find the word +#. / only if it occurs in the subject of a message. +#: ../src/engine/imap-db/imap-db-account.vala:677 msgid "subject" msgstr "gaia" -#. Can be typed in the search box like -#. "to:johndoe@example.com" to find messages received by a -#. particular person. -#. -#. The translated string must be a single word (use '-', '_' -#. or similar to combine words into one), should be short, and -#. also match the translation in "search.page" of the Geary User -#. Guide. -#: ../src/engine/imap-db/imap-db-account.vala:159 -#| msgid "to" -msgctxt "Search operator" +#. / Can be typed in the search box like to:johndoe@example.com to find +#. / messages received by a particular person. +#: ../src/engine/imap-db/imap-db-account.vala:680 +#: ../src/engine/imap-db/imap-db-account.vala:684 msgid "to" msgstr "nori" -#. Can be typed in the search box after "to:", "cc:" and -#. "bcc:" e.g.: "to:me". Matches conversations that are -#. addressed to the user. -#. -#. The translated string must be a single word (use '-', '_' -#. or similar to combine words into one), should be short, and -#. also match the translation in "search.page" of the Geary User -#. Guide. -#: ../src/engine/imap-db/imap-db-account.vala:180 -#| msgid "me" -msgctxt "Search operator value - mail addressed to the user" +#. "me" can be typed like from:me or cc:me, etc. as a shorthand +#. to find mail to or from yourself in search. +#: ../src/engine/imap-db/imap-db-account.vala:699 msgid "me" msgstr "ni" -#. Can be typed in the search box after "from:" i.e.: -#. "from:me". Matches conversations were sent by the user. -#. -#. The translated string must be a single word (use '-', '_' -#. or similar to combine words into one), should be short, and -#. also match the translation in "search.page" of the Geary User -#. Guide. -#: ../src/engine/imap-db/imap-db-account.vala:192 -#| msgid "me" -msgctxt "Search operator value - mail sent by the user" -msgid "me" -msgstr "ni" - -#. Can be typed in the search box after "is:" i.e.: -#. "is:read". Matches conversations that are flagged as read. -#. -#. The translated string must be a single word (use '-', '_' -#. or similar to combine words into one), should be short, and -#. also match the translation in "search.page" of the Geary User -#. Guide. -#: ../src/engine/imap-db/imap-db-account.vala:204 -#| msgid "%d unread" -#| msgid_plural "%d unread" -msgctxt "'is:' search operator value" -msgid "read" -msgstr "irakurrita" - -#. Can be typed in the search box after "is:" i.e.: -#. "is:starred". Matches conversations that are flagged as -#. starred. -#. -#. The translated string must be a single word (use '-', '_' -#. or similar to combine words into one), should be short, and -#. also match the translation in "search.page" of the Geary User -#. Guide. -#: ../src/engine/imap-db/imap-db-account.vala:215 -#| msgid "Starred" -msgctxt "'is:' search operator value" -msgid "starred" -msgstr "puntuatuta" - -#. Can be typed in the search box after "is:" i.e.: -#. "is:unread". Matches conversations that are flagged unread. -#. -#. The translated string must be a single word (use '-', '_' -#. or similar to combine words into one), should be short, and -#. also match the translation in "search.page" of the Geary User -#. Guide. -#: ../src/engine/imap-db/imap-db-account.vala:225 -#| msgid "%d unread" -#| msgid_plural "%d unread" -msgctxt "'is:' search operator value" -msgid "unread" -msgstr "irakurri gabea" - -#. List of general possible folder names to match for the -#. Draft mailbox. Separate names using a vertical bar and -#. put the most common localized name to the front for the -#. default. English names do not need to be included. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:625 +#. List of folder names to match for Drafts, separated by |. Please add localized common +#. names for the Drafts folder, leaving in the English names as well. The first in the list +#. will be the default, so please add the most common localized name to the front. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:535 msgid "Drafts | Draft" msgstr "Zirriborroak | Zirriborroa | Drafts | Draft" -#. List of general possible folder names to match for the -#. Sent mailbox. Separate names using a vertical bar and -#. put the most common localized name to the front for the -#. default. English names do not need to be included. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:634 +#. List of folder names to match for Sent Mail, separated by |. Please add localized common +#. names for the Sent Mail folder, leaving in the English names as well. The first in the list +#. will be the default, so please add the most common localized name to the front. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:540 msgid "Sent | Sent Mail | Sent Email | Sent E-Mail" msgstr "" "Bidalita | Posta bidalita | Mezua bidalita | Sent | Sent Mail | Sent Email | " "Sent E-Mail" -#. The localised name(s) of the Sent folder name as used -#. by MS Outlook/Exchange. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:639 -msgctxt "Outlook localised name" -msgid "Sent Items" -msgstr "Bidalitako elementuak" - -#. List of general possible folder names to match for the -#. Spam mailbox. Separate names using a vertical bar and -#. put the most common localized name to the front for the -#. default. English names do not need to be included. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:649 +#. List of folder names to match for Spam, separated by |. Please add localized common +#. names for the Spam folder, leaving in the English names as well. The first in the list +#. will be the default, so please add the most common localized name to the front. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:545 msgid "" "Junk | Spam | Junk Mail | Junk Email | Junk E-Mail | Bulk Mail | Bulk Email " "| Bulk E-Mail" @@ -1683,83 +1313,66 @@ "| Spam | Junk Mail | Junk Email | Junk E-Mail | Bulk Mail | Bulk Email | " "Bulk E-Mail" -#. List of general possible folder names to match for the -#. Trash mailbox. Separate names using a vertical bar and -#. put the most common localized name to the front for the -#. default. English names do not need to be included. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:659 +#. List of folder names to match for Trash, separated by |. Please add localized common +#. names for the Trash folder, leaving in the English names as well. The first in the list +#. will be the default, so please add the most common localized name to the front. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:550 msgid "Trash | Rubbish | Rubbish Bin" msgstr "Zakarrontzia | Trash | Rubbish | Rubbish Bin" -#. The localised name(s) of the Trash folder name as used -#. by MS Outlook/Exchange. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:664 -#| msgid "Delete" -msgctxt "Outlook localised name" -msgid "Deleted Items" -msgstr "Ezabatutako elementuak" - -#. List of general possible folder names to match for the -#. Archive mailbox. Separate names using a vertical bar -#. and put the most common localized name to the front for -#. the default. English names do not need to be included. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:674 -msgid "Archive | Archives" -msgstr "Artxiboa | Artxiboak" - #. / Format for the datetime that a message being replied to was received #. / See http://developer.gnome.org/glib/2.32/glib-GDateTime.html#g-date-time-format -#: ../src/engine/rfc822/rfc822-utils.vala:215 +#: ../src/engine/rfc822/rfc822-utils.vala:165 msgid "%a, %b %-e, %Y at %-l:%M %p" msgstr "%a, %Y %b %e, %l:%M %p" #. / The quoted header for a message being replied to. #. / %1$s will be substituted for the date, and %2$s will be substituted for #. / the original sender. -#: ../src/engine/rfc822/rfc822-utils.vala:221 +#: ../src/engine/rfc822/rfc822-utils.vala:171 #, c-format msgid "On %1$s, %2$s wrote:" msgstr "%2$s(e)k %1$s(e)an idatzita:" #. / The quoted header for a message being replied to (in case the date is not known). #. / %s will be replaced by the original sender. -#: ../src/engine/rfc822/rfc822-utils.vala:228 +#: ../src/engine/rfc822/rfc822-utils.vala:178 #, c-format msgid "%s wrote:" msgstr "'%s'(e)k idatzita:" #. / The quoted header for a message being replied to (in case the sender is not known). #. / %s will be replaced by the original date -#: ../src/engine/rfc822/rfc822-utils.vala:234 +#: ../src/engine/rfc822/rfc822-utils.vala:184 #, c-format msgid "On %s:" msgstr "%s(e)an:" -#: ../src/engine/rfc822/rfc822-utils.vala:263 +#: ../src/engine/rfc822/rfc822-utils.vala:211 msgid "---------- Forwarded message ----------" msgstr "---------- Birbidalitako mezua ----------" -#: ../src/engine/rfc822/rfc822-utils.vala:267 +#: ../src/engine/rfc822/rfc822-utils.vala:215 #, c-format msgid "From: %s\n" msgstr "Nork: %s\n" -#: ../src/engine/rfc822/rfc822-utils.vala:268 +#: ../src/engine/rfc822/rfc822-utils.vala:216 #, c-format msgid "Subject: %s\n" msgstr "Gaia: %s\n" -#: ../src/engine/rfc822/rfc822-utils.vala:269 +#: ../src/engine/rfc822/rfc822-utils.vala:217 #, c-format msgid "Date: %s\n" msgstr "Data: %s\n" -#: ../src/engine/rfc822/rfc822-utils.vala:272 +#: ../src/engine/rfc822/rfc822-utils.vala:220 #, c-format msgid "To: %s\n" msgstr "Nori: %s\n" -#: ../src/engine/rfc822/rfc822-utils.vala:275 +#: ../src/engine/rfc822/rfc822-utils.vala:223 #, c-format msgid "Cc: %s\n" msgstr "Cc: %s\n" @@ -1792,22 +1405,6 @@ msgid "Please wait while Geary validates your account." msgstr "Itxaron Geary-k zure kontua balidatu arte." -#: ../ui/certificate_warning_dialog.glade.h:1 -msgid "Untrusted Connection" -msgstr "Konexio ez-fidagarria" - -#: ../ui/certificate_warning_dialog.glade.h:2 -msgid "_Always Trust This Server" -msgstr "Fidatu zerbitzari honetaz _beti" - -#: ../ui/certificate_warning_dialog.glade.h:3 -msgid "_Trust This Server" -msgstr "_Fidatu zerbitzari honetaz" - -#: ../ui/certificate_warning_dialog.glade.h:4 -msgid "_Don't Trust This Server" -msgstr "_Ez fidatu zerbitzari honetaz" - #: ../ui/composer.glade.h:1 msgid "_Undo" msgstr "_Desegin" @@ -1890,186 +1487,106 @@ msgstr "Testu a_beratsa" #: ../ui/composer.glade.h:23 -msgid "Show Extended Fields" -msgstr "Erakutsi hedatutako eremuak" - -#: ../ui/composer.glade.h:24 -msgctxt "Label" -msgid "Close and Save" -msgstr "Gorde eta itxi" - -#: ../ui/composer.glade.h:25 -msgctxt "Short Label" -msgid "Close and Save" -msgstr "Gorde eta itxi" - -#: ../ui/composer.glade.h:26 -msgctxt "Tooltip" -msgid "Close and Save" -msgstr "Gorde eta itxi" - -#: ../ui/composer.glade.h:27 -msgctxt "Label" -msgid "Close and Discard" -msgstr "Baztertu eta itxi" - -#: ../ui/composer.glade.h:28 -msgctxt "Short Label" -msgid "Close and Discard" -msgstr "Baztertu eta itxi" - -#: ../ui/composer.glade.h:29 -msgctxt "Tooltip" -msgid "Close and Discard" -msgstr "Baztertu eta itxi" - -#: ../ui/composer.glade.h:30 msgid "Lar_ge" msgstr "_Handia" -#: ../ui/composer.glade.h:31 +#: ../ui/composer.glade.h:24 msgid "Large" msgstr "Handia" -#: ../ui/composer.glade.h:32 +#: ../ui/composer.glade.h:25 msgid "_Medium" msgstr "_Ertaina" -#: ../ui/composer.glade.h:33 +#: ../ui/composer.glade.h:26 msgid "Medium" msgstr "Ertaina" -#: ../ui/composer.glade.h:34 +#: ../ui/composer.glade.h:27 msgid "_Small" msgstr "T_xikia" -#: ../ui/composer.glade.h:35 +#: ../ui/composer.glade.h:28 msgid "Small" msgstr "Txikia" -#: ../ui/composer.glade.h:36 +#: ../ui/composer.glade.h:29 msgid "S_ans Serif" msgstr "S_ans serif" -#: ../ui/composer.glade.h:37 +#: ../ui/composer.glade.h:30 msgid "Sans Serif" msgstr "Sans Serif" -#: ../ui/composer.glade.h:38 +#: ../ui/composer.glade.h:31 msgid "S_erif" msgstr "S_erif" -#: ../ui/composer.glade.h:39 +#: ../ui/composer.glade.h:32 msgid "Serif" msgstr "Serif" -#: ../ui/composer.glade.h:40 +#: ../ui/composer.glade.h:33 msgid "_Fixed Width" msgstr "_Zabalera finkoa" -#: ../ui/composer.glade.h:41 +#: ../ui/composer.glade.h:34 msgid "Fixed Width" msgstr "Zabalera finkoa" -#: ../ui/composer.glade.h:42 +#: ../ui/composer.glade.h:35 msgid "Detach" msgstr "Desuztartu" -#: ../ui/composer.glade.h:43 -#| msgid "Italic (Ctrl+I)" -msgid "Detach (Ctrl+D)" -msgstr "Askatu (Ktrl+D)" - -#: ../ui/composer.glade.h:44 +#: ../ui/composer.glade.h:36 msgid "_Send" msgstr "_Bidali" -#: ../ui/composer.glade.h:45 +#: ../ui/composer.glade.h:37 msgid "Send" msgstr "Bidali" -#: ../ui/composer.glade.h:46 -#| msgid "Bold (Ctrl+B)" -msgid "Send (Ctrl+Enter)" -msgstr "Bidali (Ktrl+Sartu)" - -#: ../ui/composer.glade.h:47 +#: ../ui/composer.glade.h:38 msgid "_Attach File" msgstr "_Erantsi fitxategia" -#: ../ui/composer.glade.h:48 +#: ../ui/composer.glade.h:39 msgid "Attach File" msgstr "Erantsi fitxategia" -#: ../ui/composer.glade.h:49 +#: ../ui/composer.glade.h:40 msgid "_Include Original Attachments" msgstr "_Barneratu jatorrizko eranskinak" -#: ../ui/composer.glade.h:50 +#: ../ui/composer.glade.h:41 msgid "Include Original Attachments" msgstr "Barneratu jatorrizko eranskinak" -#: ../ui/composer.glade.h:51 -msgid "Application Menu" -msgstr "Aplikazioaren menua" - #. Address(es) e-mail is to be sent to -#: ../ui/composer.glade.h:53 -#| msgid "_To:" -msgid "_To" -msgstr "Nor_i" - -#: ../ui/composer.glade.h:54 -#| msgid "_Cc:" -msgid "_Cc" -msgstr "_Cc" - -#: ../ui/composer.glade.h:55 -#| msgid "_Subject:" -msgid "_Subject" -msgstr "_Gaia" - -#: ../ui/composer.glade.h:56 -#| msgid "_Bcc:" -msgid "_Bcc" -msgstr "_Bcc" - -#: ../ui/composer.glade.h:57 -#| msgid "_Reply" -msgid "_Reply-To" -msgstr "_Erantzun honi" +#: ../ui/composer.glade.h:43 +msgid "_To:" +msgstr "Nor_i:" -#. Geary account mail will be sent from -#: ../ui/composer.glade.h:59 -#| msgid "From:" -msgid "From" -msgstr "Nork" +#: ../ui/composer.glade.h:44 +msgid "_Cc:" +msgstr "_Cc:" + +#: ../ui/composer.glade.h:45 +msgid "_Subject:" +msgstr "_Gaia:" + +#: ../ui/composer.glade.h:46 +msgid "_Bcc:" +msgstr "_Bcc:" -#: ../ui/composer.glade.h:60 +#: ../ui/composer.glade.h:49 msgid "Drop files here" msgstr "Jaregin fitxategiak hemen" -#: ../ui/composer.glade.h:61 +#: ../ui/composer.glade.h:50 msgid "To add them as attachments" msgstr "Eranskin gisa gehitzeko" -#: ../ui/edit_alternate_emails.glade.h:1 -#| msgid "E_mail address" -msgid "Remove email address" -msgstr "Kendu helb. elektronikoa" - -#: ../ui/edit_alternate_emails.glade.h:2 -msgid "" -"Some email services require additional addresses be configured on the " -"server. Contact your email provider for more information." -msgstr "" -"Posta-zerbitzu batzuk zerbitzarian helbide gehigarriak konfiguratzea " -"behar dute. Jar zaitez posta-hornitzailearekin informazio gehiagorako." - -#: ../ui/edit_alternate_emails.glade.h:4 -msgid "_Update" -msgstr "_Eguneratu" - #: ../ui/find_bar.glade.h:1 msgid "Find:" msgstr "Bilatu:" @@ -2091,211 +1608,184 @@ msgstr "etiketa" #: ../ui/login.glade.h:1 -msgid "email@example.com" -msgstr "posta@example.com" - -#: ../ui/login.glade.h:2 ../ui/password-dialog.glade.h:3 msgid "Password" msgstr "Pasahitza" -#: ../ui/login.glade.h:3 +#: ../ui/login.glade.h:2 msgid "E_mail address" msgstr "_Helb. elektronikoa" -#: ../ui/login.glade.h:4 +#: ../ui/login.glade.h:3 msgid "_Password" msgstr "_Pasahitza" -#: ../ui/login.glade.h:5 +#: ../ui/login.glade.h:4 msgid "S_ervice" msgstr "_Zerbitzua" -#: ../ui/login.glade.h:6 +#: ../ui/login.glade.h:5 msgid "N_ame" msgstr "_Izena" -#: ../ui/login.glade.h:8 +#: ../ui/login.glade.h:7 msgid "N_ickname" msgstr "_Goitizena" -#: ../ui/login.glade.h:9 +#: ../ui/login.glade.h:8 msgid "Work, Home, etc." msgstr "Lana, etxea, e.a." -#: ../ui/login.glade.h:10 +#: ../ui/login.glade.h:9 msgid "_Save sent mail" msgstr "_Gorde bidalitako mezua" -#: ../ui/login.glade.h:11 -msgid "Addi_tional email addresses…" -msgstr "Helb.elektroniko _gehigarriak…" - -#: ../ui/login.glade.h:12 +#: ../ui/login.glade.h:10 msgid "IMAP settings" msgstr "IMAP ezarpenak" -#: ../ui/login.glade.h:13 +#: ../ui/login.glade.h:11 msgid "Se_rver" msgstr "_Zerbitzaria" -#: ../ui/login.glade.h:14 -msgid "imap.example.com" -msgstr "imap.example.com" - -#: ../ui/login.glade.h:15 +#: ../ui/login.glade.h:12 msgid "P_ort" msgstr "A_taka" -#: ../ui/login.glade.h:16 -msgid "smtp.example.com" -msgstr "smtp.example.com" - -#: ../ui/login.glade.h:17 +#: ../ui/login.glade.h:13 msgid "Ser_ver" msgstr "_Zerbitzaria" -#: ../ui/login.glade.h:18 +#: ../ui/login.glade.h:14 msgid "Por_t" msgstr "_Ataka" -#: ../ui/login.glade.h:19 +#: ../ui/login.glade.h:15 msgid "SMTP settings" msgstr "SMTP ezarpenak" -#: ../ui/login.glade.h:20 +#: ../ui/login.glade.h:16 msgid "User_name" msgstr "_Erabiltzaile-izena" -#: ../ui/login.glade.h:21 +#: ../ui/login.glade.h:17 msgid "Pass_word" msgstr "_Pasahitza" -#: ../ui/login.glade.h:22 +#: ../ui/login.glade.h:18 msgid "SMTP username" msgstr "SMTP erabiltzaile-izena" -#: ../ui/login.glade.h:23 +#: ../ui/login.glade.h:19 msgid "SMTP password" msgstr "SMTP pasahitza" -#: ../ui/login.glade.h:24 +#: ../ui/login.glade.h:20 msgid "_Username" msgstr "_Erabiltzaile-izena" -#: ../ui/login.glade.h:25 +#: ../ui/login.glade.h:21 msgid "IMAP username" msgstr "IMAP erabiltzaile-izena" -#: ../ui/login.glade.h:26 +#: ../ui/login.glade.h:22 msgid "IMAP password" msgstr "IMAP pasahitza" -#: ../ui/login.glade.h:27 +#: ../ui/login.glade.h:23 msgid "Encr_yption" msgstr "_Enkriptazioa" -#: ../ui/login.glade.h:28 +#: ../ui/login.glade.h:24 msgid "Encrypt_ion" msgstr "Enk_riptazioa" -#: ../ui/login.glade.h:30 +#: ../ui/login.glade.h:26 msgid "SSL/TLS" msgstr "SSL/TLS" -#: ../ui/login.glade.h:31 +#: ../ui/login.glade.h:27 msgid "STARTTLS" msgstr "STARTTLS" -#: ../ui/login.glade.h:32 +#: ../ui/login.glade.h:28 msgid "No authentication re_quired" msgstr "Ez da autentifikaziorik behar" -#: ../ui/login.glade.h:33 +#: ../ui/login.glade.h:29 msgid "Use IMAP cre_dentials" msgstr "Erabili IMAP _kredentzialak" -#: ../ui/login.glade.h:34 ../ui/preferences.glade.h:5 +#: ../ui/login.glade.h:30 +msgid "Storage" +msgstr "Biltegia" + +#: ../ui/login.glade.h:31 +msgid "_Download mail" +msgstr "_Deskargatu posta" + +#: ../ui/login.glade.h:32 ../ui/preferences.glade.h:6 msgid "Composer" msgstr "Konposatzailea" -#: ../ui/login.glade.h:35 +#: ../ui/login.glade.h:33 msgid "Save dra_fts on server" msgstr "Gorde _zirriborroak zerbitzarian" -#: ../ui/login.glade.h:36 -#| msgid "Si_gn emails:" -msgid "Si_gn emails (HTML allowed):" -msgstr "_Sinatu mezuak (HTML baimenduta):" - -#: ../ui/login.glade.h:37 -msgid "Storage" -msgstr "Biltegia" - -#: ../ui/login.glade.h:38 -msgid "_Download mail" -msgstr "_Deskargatu posta" +#: ../ui/login.glade.h:34 +msgid "Si_gn emails:" +msgstr "_Sinatu mezuak:" #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" msgstr "SMTP kredentzialak" #: ../ui/password-dialog.glade.h:2 -#| msgid "_Username" -msgid "Username" -msgstr "Erabiltzaile-izena" +msgid "Username:" +msgstr "Erabiltzaile-izena:" + +#: ../ui/password-dialog.glade.h:3 +msgid "Password:" +msgstr "Pasahitza:" #: ../ui/password-dialog.glade.h:4 msgid "_Remember password" msgstr "_Gogoratu pasahitza" -#: ../ui/password-dialog.glade.h:6 -msgid "_Authenticate" -msgstr "_Autentifikatu" - #: ../ui/preferences.glade.h:1 +msgid "Preferences" +msgstr "Hobespenak" + +#: ../ui/preferences.glade.h:3 msgid "Reading" msgstr "Irakurketa" -#: ../ui/preferences.glade.h:2 +#: ../ui/preferences.glade.h:4 msgid "_Automatically select next message" msgstr "Hautatu _automatikoki hurrengo mezua" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences.glade.h:5 msgid "_Display conversation preview" msgstr "_Bistaratu berriketaren aurrebista" -#: ../ui/preferences.glade.h:4 -msgid "Use _three pane view" -msgstr "Erabili _zuhaitz-panelaren ikuspegia" - -#: ../ui/preferences.glade.h:6 +#: ../ui/preferences.glade.h:7 msgid "Enable _spell checking" msgstr "Gaitu _ortografia-egiaztapena" -#: ../ui/preferences.glade.h:7 +#: ../ui/preferences.glade.h:8 msgid "Notifications" msgstr "Jakinarazpenak" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences.glade.h:9 msgid "_Play notification sounds" msgstr "_Erreproduzitu jakinarazpenaren soinuak" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences.glade.h:10 msgid "Show _notifications for new mail" msgstr "Erakutsi mezu berrien _jakinarazpenak" -#: ../ui/preferences.glade.h:10 -#| msgid "Show _notifications for new mail" -msgid "Always _watch for new mail" -msgstr "Begiratu _beti mezu berriak dauden" - #: ../ui/preferences.glade.h:11 -msgid "Geary will run in the background and notify of new mail" -msgstr "Geary atzeko planoan exekutatuko da eta mezu berriak jakinaraziko ditu" - -#: ../ui/preferences.glade.h:12 -msgid "Preferences" -msgstr "Hobespenak" +msgid "Notify of new mail at start_up" +msgstr "Jakinarazi mezu berriak _abioan" #: ../ui/remove_confirm.glade.h:1 msgid "" @@ -2322,39 +1812,8 @@ msgstr "Helb. elektronikoa:" #: ../ui/upgrade_dialog.glade.h:1 -#| msgid "Geary upgrade in progress." -msgid "Geary update in progress…" -msgstr "Geary-ren eguneraketa lantzen…" - -#~ msgid "Copyright 2011-2014 Yorba Foundation" -#~ msgstr "Copyright-a 2011-2014 Yorba Fundazioa" - -#~ msgid "_Delete" -#~ msgstr "E_zabatu" - -#~ msgid "_Trash" -#~ msgstr "_Zakarrontzia" - -#~ msgid "_Donate" -#~ msgstr "_Eman dirua" - -#~ msgid "attach|enclosed|enclosing|cover letter" -#~ msgstr "eranskina|inguratua|inguratzea|gutun-azala" - -#~ msgid "Do you want to discard the unsaved message?" -#~ msgstr "Gorde gabeko mezua baztertzea nahi duzu?" - -#~ msgid "Please enter your password" -#~ msgstr "Sartu zure pasahitza" - -#~ msgid "Username:" -#~ msgstr "Erabiltzaile-izena:" - -#~ msgid "Password:" -#~ msgstr "Pasahitza:" - -#~ msgid "Notify of new mail at start_up" -#~ msgstr "Jakinarazi mezu berriak _abioan" +msgid "Geary upgrade in progress." +msgstr "Geary-ren eguneraketa lantzen." #~ msgid "C_lose" #~ msgstr "It_xi" diff -Nru geary-0.11.4/po/fi.po geary-0.12.0/po/fi.po --- geary-0.11.4/po/fi.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/fi.po 2017-10-02 11:25:21.000000000 +0000 @@ -4,15 +4,15 @@ # This file is distributed under the GNU LGPL, version 2.1. # # Translators: -# Jiri Grönroos , 2012-2014, 2014, 2015, 2016. +# Jiri Grönroos , 2012-2014, 2014, 2015, 2016, 2017. # msgid "" msgstr "" "Project-Id-Version: geary-0.4.1\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" -"product=geary&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2016-06-19 12:32+0000\n" -"PO-Revision-Date: 2016-08-20 20:28+0300\n" +"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" +"product=geary&keywords=I18N+L10N&component=internationalization\n" +"POT-Creation-Date: 2017-09-26 12:56+0000\n" +"PO-Revision-Date: 2017-09-27 17:40+0300\n" "Last-Translator: Jiri Grönroos \n" "Language-Team: suomi \n" "Language: fi\n" @@ -20,33 +20,115 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Gtranslator 2.91.7\n" +"X-Generator: Poedit 1.8.7.1\n" -#: ../desktop/geary.desktop.in.h:1 ../desktop/geary-autostart.desktop.in.h:1 +#. Translators: The application name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:2 +#: ../desktop/org.gnome.Geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" msgstr "Geary" -#: ../desktop/geary.desktop.in.h:2 ../desktop/geary-autostart.desktop.in.h:2 -#: ../src/client/application/geary-application.vala:18 +#. Translators: The development team's name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:4 +msgid "Geary Development Team" +msgstr "Geary-kehitystiimi" + +#. Translators: The application's summary / tagline +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:6 +#: ../desktop/org.gnome.Geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 +msgid "Send and receive email" +msgstr "Lähetä ja vastaanota sähköpostia" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:7 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"Geary on sähköpostisovellus Gnome-työpöydälle, joka keskittyy " +"keskusteluihin. Sen avulla voit lukea, etsiä ja lähettää sähköpostia " +"modernin käyttöliittymän kautta." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:8 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"Keskusteluiden avulla voit lukea koko viestiketjun ilman, että joudut " +"napsauttamaan viestistä toiseen itse." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:9 +msgid "Geary’s features include:" +msgstr "Gearyn ominaisuuksiin kuuluu muun muassa:" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:10 +msgid "Quick email account setup" +msgstr "Nopea sähköpostitilin asetusten teko" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:11 +msgid "Shows related messages together in conversations" +msgstr "Näyttää toisiinsa liittyvät viestit yhdessä keskustelumuodossa" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:12 +msgid "Fast, full text and keyword search" +msgstr "Nopea haku koko tekstin ja avainsanojen tuella" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:13 +msgid "Full-featured HTML and plain text message composer" +msgstr "Monipuolinen HTML- ja raakatekstilähetys" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:14 +msgid "Desktop notification of new mail" +msgstr "Työpöytäilmoitukset uusista viesteistä" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:15 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" +msgstr "" +"Yhteensopiva GMailin, Yahoo! Mailin, Outlook.comin ja muiden IMAP-" +"palvelinten kanssa" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:17 +msgid "Geary displaying a conversation" +msgstr "Geary ja viestiketju" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:19 +msgid "Geary showing the rich text composer" +msgstr "Geary ja viestin kirjoitusikkuna" + +#: ../desktop/org.gnome.Geary.desktop.in.h:2 +msgid "Email" +msgstr "Sähköposti" + +#: ../desktop/org.gnome.Geary.desktop.in.h:3 +msgid "Geary Email" +msgstr "Geary-sähköposti" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/org.gnome.Geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;sähköposti;" + +#: ../desktop/org.gnome.Geary.desktop.in.h:7 ../ui/gtk/menus.ui.h:1 +msgid "Compose Message" +msgstr "Lähetä viesti" + +#: ../desktop/geary-autostart.desktop.in.h:2 +#: ../src/client/application/geary-application.vala:21 msgid "Mail Client" msgstr "Sähköpostisovellus" -#: ../desktop/geary.desktop.in.h:3 ../desktop/geary-autostart.desktop.in.h:3 +#: ../desktop/geary-autostart.desktop.in.h:3 msgid "Geary Mail" msgstr "Geary-sähköposti" -#: ../desktop/geary.desktop.in.h:4 ../desktop/geary-autostart.desktop.in.h:4 -msgid "Send and receive email" -msgstr "Lähetä ja vastaanota sähköpostia" - -#: ../desktop/geary.desktop.in.h:5 ../desktop/geary-autostart.desktop.in.h:5 +#: ../desktop/geary-autostart.desktop.in.h:5 msgid "Email;E-mail;Mail;" msgstr "Email;E-mail;Mail;Sähköposti;Maili;posti;" -#: ../desktop/geary.desktop.in.h:6 -msgid "Compose Message" -msgstr "Lähetä viesti" - #: ../desktop/geary-attach.contract.in.h:1 msgid "Send by email" msgstr "Lähetä sähköpostitse" @@ -57,6 +139,7 @@ #: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:31 +#: ../ui/conversation-email-menus.ui.h:10 msgid "_Save" msgstr "_Tallenna" @@ -66,7 +149,7 @@ msgstr "_Lisää" #. reset/clear widgets -#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 #, c-format msgid "Additional addresses for %s" msgstr "Lisäosoitteet tilille %s" @@ -87,108 +170,120 @@ msgid "First Last" msgstr "Etunimi Sukunimi" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." msgstr "Tervetuloa, käytössäsi on Geary." -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." msgstr "Anna tilisi tiedot, jotta voit aloittaa käytön." -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "2 viikkoa sitten" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:254 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "1 kuukausi sitten" -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "3 kuukautta sitten" -#: ../src/client/accounts/add-edit-page.vala:256 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "6 kuukautta sitten" -#: ../src/client/accounts/add-edit-page.vala:257 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "1 vuosi sitten" -#: ../src/client/accounts/add-edit-page.vala:258 +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" msgstr "2 vuotta sitten" -#: ../src/client/accounts/add-edit-page.vala:259 +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" msgstr "4 vuotta sitten" #. Separator -#: ../src/client/accounts/add-edit-page.vala:261 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "Kaikki" -#: ../src/client/accounts/add-edit-page.vala:280 +#: ../src/client/accounts/add-edit-page.vala:283 msgid "Edit" msgstr "Muokkaa" -#: ../src/client/accounts/add-edit-page.vala:282 +#: ../src/client/accounts/add-edit-page.vala:285 msgid "Preview" msgstr "Esikatsele" -#: ../src/client/accounts/add-edit-page.vala:723 +#: ../src/client/accounts/add-edit-page.vala:751 msgid "Remem_ber passwords" msgstr "M_uista salasanat" -#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:6 +#: ../src/client/accounts/add-edit-page.vala:758 ../ui/login.glade.h:7 msgid "Remem_ber password" msgstr "_Muista salasana" -#: ../src/client/accounts/add-edit-page.vala:764 +#: ../src/client/accounts/add-edit-page.vala:792 msgid "Unable to validate:\n" msgstr "Tarkistaminen epäonnistui:\n" -#: ../src/client/accounts/add-edit-page.vala:766 -msgid " • Invalid account nickname.\n" -msgstr " • Virheellinen tilin nimi.\n" - -#: ../src/client/accounts/add-edit-page.vala:769 -msgid " • Email address already added to Geary.\n" -msgstr " • Sähköpostiosoite on jo lisätty Gearyyn.\n" - -#: ../src/client/accounts/add-edit-page.vala:773 -msgid " • IMAP connection error.\n" -msgstr " • IMAP-yhteysvirhe.\n" - -#: ../src/client/accounts/add-edit-page.vala:776 -msgid " • IMAP username or password incorrect.\n" -msgstr " • IMAP-käyttäjätunnus tai -salasana on väärin.\n" - -#: ../src/client/accounts/add-edit-page.vala:779 -msgid " • SMTP connection error.\n" -msgstr " • SMTP-yhteysvirhe.\n" - -#: ../src/client/accounts/add-edit-page.vala:782 -msgid " • SMTP username or password incorrect.\n" -msgstr " • SMTP-käyttäjätunnus tai -salasana on väärin.\n" - -#: ../src/client/accounts/add-edit-page.vala:786 -msgid " • Connection error.\n" -msgstr " • Yhteysvirhe.\n" - -#: ../src/client/accounts/add-edit-page.vala:790 -msgid " • Username or password incorrect.\n" -msgstr " • Käyttäjätunnus tai salasana on väärin.\n" +#: ../src/client/accounts/add-edit-page.vala:794 +msgid " • Invalid account nickname.\n" +msgstr " • Virheellinen tilin nimi.\n" + +#: ../src/client/accounts/add-edit-page.vala:797 +msgid " • Email address already added to Geary.\n" +msgstr " • Sähköpostiosoite on jo lisätty Gearyyn.\n" + +#: ../src/client/accounts/add-edit-page.vala:801 +msgid " • IMAP connection error.\n" +msgstr " • IMAP-yhteysvirhe.\n" + +#: ../src/client/accounts/add-edit-page.vala:804 +msgid " • IMAP username or password incorrect.\n" +msgstr " • IMAP-käyttäjätunnus tai -salasana on väärin.\n" + +#: ../src/client/accounts/add-edit-page.vala:807 +msgid " • SMTP connection error.\n" +msgstr " • SMTP-yhteysvirhe.\n" + +#: ../src/client/accounts/add-edit-page.vala:810 +msgid " • SMTP username or password incorrect.\n" +msgstr " • SMTP-käyttäjätunnus tai -salasana on väärin.\n" + +#: ../src/client/accounts/add-edit-page.vala:814 +msgid " • Connection error.\n" +msgstr " • Yhteysvirhe.\n" + +#: ../src/client/accounts/add-edit-page.vala:818 +msgid " • Username or password incorrect.\n" +msgstr " • Käyttäjätunnus tai salasana on väärin.\n" -#: ../src/client/application/geary-application.vala:19 +#: ../src/client/application/geary-application.vala:22 msgid "Copyright 2016 Software Freedom Conservancy Inc." msgstr "Tekijänoikeus 2016 Software Freedom Conservancy Inc." -#: ../src/client/application/geary-application.vala:21 +#: ../src/client/application/geary-application.vala:24 msgid "Visit the Geary web site" msgstr "Vieraile Gearyn verkkosivustolla" +#: ../src/client/application/geary-application.vala:464 +#, c-format +msgid "About %s" +msgstr "Tietoja %ssta" + +#. Translators: add your name and email address to receive +#. credit in the About dialog For example: Yamada Taro +#. +#: ../src/client/application/geary-application.vala:468 +msgid "translator-credits" +msgstr "Jiri Grönroos" + #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" msgstr "Käynnistä Geary pääikkuna piilotettuna" @@ -243,217 +338,193 @@ msgstr "Kumoa kaikki palvelinvarmenteet, joissa on TLS-varoituksia" #: ../src/client/application/geary-args.vala:27 +msgid "Perform a graceful quit" +msgstr "Suorita siisti lopetus" + +#: ../src/client/application/geary-args.vala:28 msgid "Display program version" msgstr "Näytä sovelluksen versio" #. This gives a command-line hint on how to open new composer windows with mailto: -#: ../src/client/application/geary-args.vala:51 +#: ../src/client/application/geary-args.vala:53 #, c-format msgid "Use %s to open a new composer window" msgstr "Käytä %s uuden lähetysikkunan avaamista varten" -#: ../src/client/application/geary-args.vala:52 +#: ../src/client/application/geary-args.vala:54 msgid "Please report comments, suggestions and bugs to:" msgstr "Kommentoi, ehdota uusia ideoita ja ilmoita vioista:" #. i18n: Command line arguments are invalid -#: ../src/client/application/geary-args.vala:59 +#: ../src/client/application/geary-args.vala:61 #, c-format msgid "Failed to parse command line options: %s\n" msgstr "Komentorivivalintojen jäsennys epäonnistui: %s\n" -#: ../src/client/application/geary-args.vala:70 +#: ../src/client/application/geary-args.vala:72 #, c-format -msgid "Unrecognized command line option \"%s\"\n" -msgstr "Tunnistamaton komentorivivalinta \"%s\"\n" +msgid "Unrecognized command line option “%s”\n" +msgstr "" +"Tunnistamaton komentorivivalinta “%s”\n" +"\n" -#: ../src/client/application/geary-controller.vala:61 +#: ../src/client/application/geary-controller.vala:57 msgid "Delete conversation" msgstr "Poista keskustelu" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:58 msgid "Delete conversation (Shift+Delete)" msgstr "Poista keskustelu (Shift+Delete)" -#: ../src/client/application/geary-controller.vala:63 +#: ../src/client/application/geary-controller.vala:59 msgid "Delete conversations (Shift+Delete)" msgstr "Poista keskustelut (Shift+Delete)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:67 +#: ../src/client/application/geary-controller.vala:63 msgid "Move conversation to Trash (Delete, Backspace)" msgstr "Siirrä keskustelu roskakoriin (Delete, Backspace)" -#: ../src/client/application/geary-controller.vala:68 +#: ../src/client/application/geary-controller.vala:64 msgid "Move conversations to Trash (Delete, Backspace)" msgstr "Siirrä keskustelut roskakoriin (Delete, Backspace)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:72 +#: ../src/client/application/geary-controller.vala:68 msgid "_Archive" msgstr "_Arkistoi" -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:69 msgid "Archive conversation (A)" msgstr "Arkistoi keskustelu (A)" -#: ../src/client/application/geary-controller.vala:74 +#: ../src/client/application/geary-controller.vala:70 msgid "Archive conversations (A)" msgstr "Arkistoi keskustelut (A)" -#: ../src/client/application/geary-controller.vala:77 +#: ../src/client/application/geary-controller.vala:73 msgid "Mark as S_pam" msgstr "Me_rkitse roskapostiksi" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:74 msgid "Mark as not S_pam" msgstr "Poista _roskapostimerkintä" -#: ../src/client/application/geary-controller.vala:80 -#: ../src/client/application/geary-controller.vala:396 +#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:448 msgid "Mark conversation" msgstr "Merkitse keskustelu" -#: ../src/client/application/geary-controller.vala:81 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark conversations" msgstr "Merkitse keskustelut" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:78 msgid "Add label to conversation" msgstr "Lisää tunniste keskusteluun" -#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:79 msgid "Add label to conversations" msgstr "Lisää tunniste keskusteluihin" -#: ../src/client/application/geary-controller.vala:84 -#: ../src/client/application/geary-controller.vala:435 +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:487 msgid "Move conversation" msgstr "Siirrä keskustelu" -#: ../src/client/application/geary-controller.vala:85 +#: ../src/client/application/geary-controller.vala:81 msgid "Move conversations" msgstr "Siirrä keskustelut" -#: ../src/client/application/geary-controller.vala:376 -#: ../ui/app_menu.interface.h:1 -msgid "A_ccounts" -msgstr "_Tilit" - -#: ../src/client/application/geary-controller.vala:381 -#: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 -msgid "_Preferences" -msgstr "_Asetukset" - -#: ../src/client/application/geary-controller.vala:385 -#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:3 -msgid "_Help" -msgstr "_Ohje" - -#: ../src/client/application/geary-controller.vala:389 -#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:4 -msgid "_About" -msgstr "_Tietoja" - -#: ../src/client/application/geary-controller.vala:393 -#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:5 -msgid "_Quit" -msgstr "_Lopeta" - -#: ../src/client/application/geary-controller.vala:398 -msgid "_Mark as..." -msgstr "_Merkitse..." +#: ../src/client/application/geary-controller.vala:450 +msgid "_Mark as…" +msgstr "_Merkitse…" -#: ../src/client/application/geary-controller.vala:404 +#: ../src/client/application/geary-controller.vala:456 msgid "Mark as _Read" msgstr "Merkitse _luetuksi" -#: ../src/client/application/geary-controller.vala:410 +#: ../src/client/application/geary-controller.vala:462 msgid "Mark as _Unread" msgstr "Merkitse l_ukemattomaksi" -#: ../src/client/application/geary-controller.vala:416 +#: ../src/client/application/geary-controller.vala:468 msgid "_Star" msgstr "_Merkitse tähdellä" -#: ../src/client/application/geary-controller.vala:421 +#: ../src/client/application/geary-controller.vala:473 msgid "U_nstar" msgstr "_Poista tähti" -#: ../src/client/application/geary-controller.vala:431 +#: ../src/client/application/geary-controller.vala:483 msgid "Add label" msgstr "Lisää tunniste" -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:484 msgid "_Label" msgstr "_Tunniste" -#: ../src/client/application/geary-controller.vala:436 +#: ../src/client/application/geary-controller.vala:488 msgid "_Move" msgstr "_Siirrä" -#: ../src/client/application/geary-controller.vala:440 +#: ../src/client/application/geary-controller.vala:492 msgid "Compose new message (Ctrl+N, N)" msgstr "Kirjoita uusi viesti (Ctrl+N, N)" -#. Reply to a message. -#: ../src/client/application/geary-controller.vala:444 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1858 +#: ../src/client/application/geary-controller.vala:496 +#: ../ui/conversation-email-menus.ui.h:1 msgid "_Reply" msgstr "_Vastaa" -#: ../src/client/application/geary-controller.vala:445 +#: ../src/client/application/geary-controller.vala:497 msgid "Reply (Ctrl+R, R)" msgstr "Vastaa (Ctrl+R, R)" -#: ../src/client/application/geary-controller.vala:449 +#: ../src/client/application/geary-controller.vala:501 msgid "R_eply All" msgstr "_Vastaa kaikille" -#: ../src/client/application/geary-controller.vala:450 +#: ../src/client/application/geary-controller.vala:502 msgid "Reply all (Ctrl+Shift+R, Shift+R)" msgstr "Vastaa kaikille (Ctrl+Shift+R, Shift+R)" -#. Forward a message. -#: ../src/client/application/geary-controller.vala:455 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1868 +#: ../src/client/application/geary-controller.vala:507 +#: ../ui/conversation-email-menus.ui.h:3 msgid "_Forward" msgstr "_Lähetä edelleen" -#: ../src/client/application/geary-controller.vala:456 +#: ../src/client/application/geary-controller.vala:508 msgid "Forward (Ctrl+L, F)" msgstr "Lähetä edelleen (Ctrl+L, F)" -#: ../src/client/application/geary-controller.vala:495 -msgid "Empty" -msgstr "Tyhjennä" - -#: ../src/client/application/geary-controller.vala:496 -msgid "Empty Spam or Trash folders" -msgstr "Tyhjennä roskaposti- tai roskakorikansiot" - -#: ../src/client/application/geary-controller.vala:500 +#: ../src/client/application/geary-controller.vala:538 msgid "Empty _Spam…" msgstr "Tyhjennä ro_skapostikansio…" -#: ../src/client/application/geary-controller.vala:504 +#: ../src/client/application/geary-controller.vala:542 msgid "Empty _Trash…" msgstr "Tyhjennä _roskakorikansio…" #. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:537 +#: ../src/client/application/geary-controller.vala:574 msgid "Toggle search bar" msgstr "Hakupalkki päälle/pois" -#: ../src/client/application/geary-controller.vala:744 +#. No callback is connected, since we bind the toggle button to the find bar visibility +#: ../src/client/application/geary-controller.vala:579 +msgid "Toggle find bar" +msgstr "Hakupalkki päälle/pois" + +#: ../src/client/application/geary-controller.vala:757 msgid "Unable to store server trust exception" msgstr "Palvelimen luottamuspoikkeuksen varastointi epäonnistui" -#: ../src/client/application/geary-controller.vala:981 +#: ../src/client/application/geary-controller.vala:992 msgid "Your settings are insecure" msgstr "Asetuksesi eivät ole turvalliset" -#: ../src/client/application/geary-controller.vala:982 +#: ../src/client/application/geary-controller.vala:993 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -463,17 +534,29 @@ "SSL:ää tai TLS:ää. Tämä tarkoittaa, että käyttäjätunnuksesi ja salasanasi on " "mahdollista lukea verkkoliikenteestä. Haluatko varmasti sallia tämän?" -#: ../src/client/application/geary-controller.vala:983 +#: ../src/client/application/geary-controller.vala:994 msgid "Co_ntinue" msgstr "_Jatka" +#: ../src/client/application/geary-controller.vala:1041 +msgid "Error connecting to the server" +msgstr "Virhe yhdistäessä palvelimeen" + +#: ../src/client/application/geary-controller.vala:1042 +msgid "" +"Geary encountered an error while connecting to the server. Please try again " +"in a few moments." +msgstr "" +"Geary kohtasi virheen palvelimeen yhdistäessä. Yritä uudelleen hetken " +"kuluttua." + #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:1061 +#: ../src/client/application/geary-controller.vala:1079 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "Virhe sähköpostia lähettäessä" -#: ../src/client/application/geary-controller.vala:1062 +#: ../src/client/application/geary-controller.vala:1080 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." @@ -483,12 +566,12 @@ #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1066 +#: ../src/client/application/geary-controller.vala:1084 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "Virhe lähetettyä postia tallennettaessa" -#: ../src/client/application/geary-controller.vala:1067 +#: ../src/client/application/geary-controller.vala:1085 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." @@ -497,19 +580,19 @@ "kansioon. Tämä viesti säilyy Lähtevät-kansiossa niin kauan, kunnes poistat " "sen." -#: ../src/client/application/geary-controller.vala:1136 +#: ../src/client/application/geary-controller.vala:1154 msgid "Labels" msgstr "Tunnisteet" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1148 +#: ../src/client/application/geary-controller.vala:1166 #, c-format msgid "Unable to open the database for %s" msgstr "Kohteen %s tietokannan avaaminen epäonnistui" -#: ../src/client/application/geary-controller.vala:1149 +#: ../src/client/application/geary-controller.vala:1167 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -535,20 +618,20 @@ "niiden liitteet. Toimenpiteellä ei ole vaikutusta palvelimella oleviin " "viesteihin ja liitteisiin." -#: ../src/client/application/geary-controller.vala:1151 +#: ../src/client/application/geary-controller.vala:1169 msgid "_Rebuild" msgstr "Ra_kenna uudelleen" -#: ../src/client/application/geary-controller.vala:1151 +#: ../src/client/application/geary-controller.vala:1169 msgid "E_xit" msgstr "_Poistu" -#: ../src/client/application/geary-controller.vala:1160 +#: ../src/client/application/geary-controller.vala:1178 #, c-format -msgid "Unable to rebuild database for \"%s\"" -msgstr "Tietokannan jälleenrakennus tilille \"%s\" epäonnistui" +msgid "Unable to rebuild database for “%s”" +msgstr "Tietokannan jälleenrakennus tilille “%s” epäonnistui" -#: ../src/client/application/geary-controller.vala:1161 +#: ../src/client/application/geary-controller.vala:1179 #, c-format msgid "" "Error during rebuild:\n" @@ -561,14 +644,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1183 -#: ../src/client/application/geary-controller.vala:1193 -#: ../src/client/application/geary-controller.vala:1204 +#: ../src/client/application/geary-controller.vala:1201 +#: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:1222 #, c-format msgid "Unable to open local mailbox for %s" msgstr "Paikallisen postilaatikon avaaminen tilillä %s epäonnistui" -#: ../src/client/application/geary-controller.vala:1184 +#: ../src/client/application/geary-controller.vala:1202 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -587,21 +670,21 @@ "\n" "%s" -#: ../src/client/application/geary-controller.vala:1194 +#: ../src/client/application/geary-controller.vala:1212 msgid "" "The version number of the local mail database is formatted for a newer " -"version of Geary. Unfortunately, the database cannot be \"rolled back\" to " +"version of Geary. Unfortunately, the database cannot be “rolled back” to " "work with this version of Geary.\n" "\n" "Please install the latest version of Geary and try again." msgstr "" -"Paikallinen viestitietokanta on muotoiltu uudemmalle Geary-versiolle.\n" -"Valitettavasti tietokantaa ei voi \"palauttaa menneisyyteen\", jotta se " +"Paikallinen viestitietokanta on muotoiltu uudemmalle Geary-versiolle. " +"Valitettavasti tietokantaa ei voi “palauttaa menneisyyteen”, jotta se " "toimisi tämän Geary-version kanssa.\n" "\n" "Asenna uusin version Gearysta ja yritä uudelleen." -#: ../src/client/application/geary-controller.vala:1205 +#: ../src/client/application/geary-controller.vala:1223 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" @@ -613,27 +696,15 @@ "\n" "Tarkista yhteyden tila ja käynnistä Geary uudelleen." -#: ../src/client/application/geary-controller.vala:1716 -#, c-format -msgid "About %s" -msgstr "Tietoja %ssta" - -#. / Translators: add your name and email address to receive credit in the About dialog -#. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1719 -msgid "translator-credits" -msgstr "Jiri Grönroos" - -#: ../src/client/application/geary-controller.vala:1977 +#: ../src/client/application/geary-controller.vala:1999 msgid "Undo move (Ctrl+Z)" msgstr "Kumoa siirtäminen (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:1987 -#, c-format -msgid "Are you sure you want to open \"%s\"?" -msgstr "Haluatko varmasti avata kohteen \"%s\"?" +#: ../src/client/application/geary-controller.vala:2009 +msgid "Are you sure you want to open these attachments?" +msgstr "Haluatko varmasti avata nämä liitteet?" -#: ../src/client/application/geary-controller.vala:1988 +#: ../src/client/application/geary-controller.vala:2010 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -641,118 +712,104 @@ "Liitetiedostot saattavat sisältää haitallista sisältöä. Avaa liitteet " "ainoastaan, jos luotat niiden lähettäjään." -#: ../src/client/application/geary-controller.vala:1989 -msgid "Don't _ask me again" +#: ../src/client/application/geary-controller.vala:2011 +msgid "Don’t _ask me again" msgstr "_Älä kysy uudelleen" -#: ../src/client/application/geary-controller.vala:2007 +#: ../src/client/application/geary-controller.vala:2121 #, c-format -msgid "A file named \"%s\" already exists. Do you want to replace it?" -msgstr "Tiedosto nimellä \"%s\" on jo olemassa. Haluatko korvata sen?" +msgid "A file named “%s” already exists. Do you want to replace it?" +msgstr "Tiedosto nimellä “%s” on jo olemassa. Haluatko korvata sen?" -#: ../src/client/application/geary-controller.vala:2009 +#: ../src/client/application/geary-controller.vala:2123 #, c-format msgid "" -"The file already exists in \"%s\". Replacing it will overwrite its contents." +"The file already exists in “%s”. Replacing it will overwrite its contents." msgstr "" -"Tiedosto on jo olemassa kohteessa \"%s\". Tiedoston korvaaminen korvaa " +"Tiedosto on jo olemassa kohteessa “%s”. Tiedoston korvaaminen korvaa " "nykyisen tiedoston sisällön." -#: ../src/client/application/geary-controller.vala:2012 +#: ../src/client/application/geary-controller.vala:2126 msgid "_Replace" msgstr "_Korvaa" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2310 +#: ../src/client/application/geary-controller.vala:2374 msgid "Close open draft messages?" msgstr "Suljetaanko luonnosviesti?" -#: ../src/client/application/geary-controller.vala:2440 +#: ../src/client/application/geary-controller.vala:2496 #, c-format msgid "Empty all email from your %s folder?" msgstr "Poistetaanko kaikki viesit \"%s\"-kansiosta?" -#: ../src/client/application/geary-controller.vala:2441 +#: ../src/client/application/geary-controller.vala:2497 msgid "This removes the email from Geary and your email server." msgstr "Tämä poistaa viestit Gearysta ja sähköpostipalvelimelta." -#: ../src/client/application/geary-controller.vala:2442 +#: ../src/client/application/geary-controller.vala:2498 msgid "This cannot be undone." msgstr "Toimintoa ei voi perua." -#: ../src/client/application/geary-controller.vala:2443 +#: ../src/client/application/geary-controller.vala:2499 #, c-format msgid "Empty %s" msgstr "Tyhjennä %s" -#: ../src/client/application/geary-controller.vala:2460 +#: ../src/client/application/geary-controller.vala:2516 #, c-format msgid "Error emptying %s" msgstr "Virhe tyhjennettäessä kohdetta %s" -#: ../src/client/application/geary-controller.vala:2490 +#: ../src/client/application/geary-controller.vala:2546 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "Haluatko poistaa tämän viestin pysyvästi?" msgstr[1] "Haluatko poistaa nämä viestit pysyvästi?" -#: ../src/client/application/geary-controller.vala:2492 +#: ../src/client/application/geary-controller.vala:2548 msgid "Delete" msgstr "Poista" -#: ../src/client/application/geary-controller.vala:2523 +#: ../src/client/application/geary-controller.vala:2580 msgid "Undo archive (Ctrl+Z)" msgstr "Kumoa arkistointi (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2538 +#: ../src/client/application/geary-controller.vala:2595 msgid "Undo trash (Ctrl+Z)" msgstr "Kumoa roskakoriin siirto (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2591 +#: ../src/client/application/geary-controller.vala:2649 msgid "Undo (Ctrl+Z)" msgstr "Kumoa (Ctrl+Z)" -#: ../src/client/components/conversation-find-bar.vala:214 -#, c-format -msgid "%i match" -msgid_plural "%i matches" -msgstr[0] "%i tulos" -msgstr[1] "%i tulosta" - -#: ../src/client/components/conversation-find-bar.vala:216 -#, c-format -msgid "%i match (wrapped)" -msgid_plural "%i matches (wrapped)" -msgstr[0] "%i tulos (yhteensä)" -msgstr[1] "%i tulosta (yhteensä)" - -#: ../src/client/components/conversation-find-bar.vala:218 -msgid "not found" -msgstr "ei löytynyt" +#: ../src/client/application/geary-controller.vala:2780 +msgid "Failed to open default text editor." +msgstr "Oletustekstimuokkaimen avaus epäonnistui." -#: ../src/client/components/main-window.vala:423 +#: ../src/client/components/main-window.vala:389 #, c-format msgid "%s (%d)" msgstr "%s (%d)" -#: ../src/client/components/search-bar.vala:10 +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "Etsi" #. Search entry. -#: ../src/client/components/search-bar.vala:25 +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" msgstr "Etsi hakusanoilla kaikista tilin sähköpostiviesteistä (Ctrl+S)" -#: ../src/client/components/search-bar.vala:118 +#: ../src/client/components/search-bar.vala:100 #, c-format msgid "Indexing %s account" msgstr "Indeksoidaan tiliä %s" -#: ../src/client/components/search-bar.vala:129 +#: ../src/client/components/search-bar.vala:111 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" @@ -760,8 +817,8 @@ #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 -msgid "Sending..." -msgstr "Lähetetään..." +msgid "Sending…" +msgstr "Lähetetään…" #: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 msgid "_OK" @@ -772,6 +829,10 @@ msgid "_Cancel" msgstr "_Peru" +#: ../src/client/components/stock.vala:21 ../ui/gtk/menus.ui.h:6 +msgid "_About" +msgstr "_Tietoja" + #: ../src/client/components/stock.vala:23 msgid "_Close" msgstr "_Sulje" @@ -780,51 +841,71 @@ msgid "_Discard" msgstr "_Hylkää" -#: ../src/client/components/stock.vala:26 +#: ../src/client/components/stock.vala:25 ../ui/gtk/menus.ui.h:5 +msgid "_Help" +msgstr "_Ohje" + +#: ../src/client/components/stock.vala:26 ../ui/conversation-email-menus.ui.h:9 msgid "_Open" msgstr "_Avaa" -#: ../src/client/components/stock.vala:28 -msgid "_Print..." -msgstr "_Tulosta..." +#: ../src/client/components/stock.vala:27 ../ui/gtk/menus.ui.h:3 +msgid "_Preferences" +msgstr "_Asetukset" + +#: ../src/client/components/stock.vala:28 ../ui/conversation-email-menus.ui.h:7 +msgid "_Print…" +msgstr "_Tulosta…" + +#: ../src/client/components/stock.vala:29 ../ui/gtk/menus.ui.h:7 +msgid "_Quit" +msgstr "_Lopeta" #: ../src/client/components/stock.vala:30 ../ui/remove_confirm.glade.h:6 msgid "_Remove" msgstr "_Poista" -#. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1324 -msgid "Select _All" -msgstr "Valitse _kaikki" - -#: ../src/client/components/stock.vala:33 msgid "_Keep" msgstr "Säil_ytä" -#: ../src/client/composer/composer-widget.vala:73 +#: ../src/client/composer/composer-link-popover.vala:150 +msgid "Link URL is not correctly formatted, e.g. http://example.com" +msgstr "Linkin osoite ei ole muotoiltu kelvollisesti, esim. http://example.com" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid link URL" +msgstr "Virheellinen linkin osoite" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid email address" +msgstr "Virheellinen sähköpostiosoite" + +#: ../src/client/composer/composer-widget.vala:154 msgid "Saved" msgstr "Tallennettu" -#: ../src/client/composer/composer-widget.vala:74 +#: ../src/client/composer/composer-widget.vala:155 msgid "Saving" msgstr "Tallennetaan" -#: ../src/client/composer/composer-widget.vala:75 +#: ../src/client/composer/composer-widget.vala:156 msgid "Error saving" msgstr "Virhe tallentaessa" -#: ../src/client/composer/composer-widget.vala:76 +#: ../src/client/composer/composer-widget.vala:157 msgid "Press Backspace to delete quote" msgstr "Paina askelpalautinta poistaaksesi lainauksen" -#: ../src/client/composer/composer-widget.vala:77 +#: ../src/client/composer/composer-widget.vala:158 msgid "New Message" msgstr "Uusi viesti" -#. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since -#. this is full-word checking, include all variants of each word. No spaces are allowed. -#: ../src/client/composer/composer-widget.vala:138 +#. Translators: This is list of keywords, separated by pipe ("|") +#. characters, that suggest an attachment; since this is full-word +#. checking, include all variants of each word. No spaces are +#. allowed. +#: ../src/client/composer/composer-widget.vala:167 msgid "" "attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" "enclosing|encloses|enclosure|enclosures" @@ -833,61 +914,66 @@ "enclosing|encloses|enclosure|enclosures|liite|liitetiedosto|liitteen|" "liitetiedostot|liitän" -#: ../src/client/composer/composer-widget.vala:1102 -#: ../src/client/composer/composer-widget.vala:1106 +#: ../src/client/composer/composer-widget.vala:1122 +#: ../src/client/composer/composer-widget.vala:1141 msgid "Do you want to discard this message?" msgstr "Haluatko hylätä tämän viestin?" -#: ../src/client/composer/composer-widget.vala:1262 +#: ../src/client/composer/composer-widget.vala:1245 msgid "Send message with an empty subject and body?" msgstr "Lähetetäänkö viesti ilman aihetta ja sisältöä?" -#: ../src/client/composer/composer-widget.vala:1264 +#: ../src/client/composer/composer-widget.vala:1247 msgid "Send message with an empty subject?" msgstr "Lähetetäänkö viesti ilman aihetta?" -#: ../src/client/composer/composer-widget.vala:1266 +#: ../src/client/composer/composer-widget.vala:1249 msgid "Send message with an empty body?" msgstr "Lähetetäänkö viesti ilman sisältöä?" -#: ../src/client/composer/composer-widget.vala:1268 +#: ../src/client/composer/composer-widget.vala:1253 msgid "Send message without an attachment?" msgstr "Lähetetäänkö viesti ilman liitettä?" -#: ../src/client/composer/composer-widget.vala:1530 -msgid "Cannot add attachment" -msgstr "Liitteen lisäys epäonnistui" - -#: ../src/client/composer/composer-widget.vala:1541 +#: ../src/client/composer/composer-widget.vala:1515 #, c-format -msgid "\"%s\" could not be found." -msgstr "Kohdetta \"%s\" ei löytynyt." +msgid "“%s” already attached for delivery." +msgstr "“%s” on jo liitetty lähetystä varten." -#: ../src/client/composer/composer-widget.vala:1548 +#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" +#. Translators: The first argument will be a +#. description of the document type, the second will +#. be a human-friendly size string. For example: +#. Document (100.9MB) +#: ../src/client/composer/composer-widget.vala:1523 +#: ../src/client/conversation-viewer/conversation-email.vala:138 #, c-format -msgid "\"%s\" is a folder." -msgstr "\"%s\" on kansio." +msgid "%s (%s)" +msgstr "%s (%s)" -#: ../src/client/composer/composer-widget.vala:1555 +#: ../src/client/composer/composer-widget.vala:1560 #, c-format -msgid "\"%s\" is an empty file." -msgstr "\"%s\" on tyhjä tiedosto." +msgid "“%s” could not be found." +msgstr "Kohdetta “%s” ei löytynyt." -#: ../src/client/composer/composer-widget.vala:1569 +#: ../src/client/composer/composer-widget.vala:1566 #, c-format -msgid "\"%s\" could not be opened for reading." -msgstr "Kohteen \"%s\" avaus lukua varten epäonnistui." +msgid "“%s” is a folder." +msgstr "“%s” on kansio." -#: ../src/client/composer/composer-widget.vala:1576 +#: ../src/client/composer/composer-widget.vala:1572 #, c-format -msgid "\"%s\" already attached for delivery." -msgstr "\"%s\" on jo liitetty lähetystä varten." +msgid "“%s” is an empty file." +msgstr "“%s” on tyhjä tiedosto." -#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" #: ../src/client/composer/composer-widget.vala:1585 #, c-format -msgid "%s (%s)" -msgstr "%s (%s)" +msgid "“%s” could not be opened for reading." +msgstr "Kohteen “%s” avaus lukua varten epäonnistui." + +#: ../src/client/composer/composer-widget.vala:1593 +msgid "Cannot add attachment" +msgstr "Liitteen lisäys epäonnistui" #: ../src/client/composer/composer-widget.vala:1645 msgid "To: " @@ -905,204 +991,109 @@ msgid "Reply-To: " msgstr "Vastausosoite:" -#: ../src/client/composer/composer-widget.vala:1887 +#: ../src/client/composer/composer-widget.vala:1786 msgid "Select Color" msgstr "Valitse väri" #. Displayed in the From dropdown to indicate an "alternate email address" #. for an account. The first printf argument will be the alternate email #. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2322 +#: ../src/client/composer/composer-widget.vala:1986 #, c-format msgid "%1$s via %2$s" msgstr "%1$s välityksellä %2$s" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2364 +#: ../src/client/composer/composer-widget.vala:2028 msgid "_From:" msgstr "_Lähettäjä:" +#. Translators: This is the name of the file chooser filter +#. when inserting an image in the composer. +#: ../src/client/composer/composer-widget.vala:2252 +msgid "Images" +msgstr "Kuvat" + +#: ../src/client/composer/spell-check-popover.vala:117 +msgid "Remove this language from the preferred list" +msgstr "Poista tämä kieli suositeltujen listalta" + +#: ../src/client/composer/spell-check-popover.vala:121 +msgid "Add this language to the preferred list" +msgstr "Lisää tämä kieli suositeltujen listalle" + +#: ../src/client/composer/spell-check-popover.vala:217 +msgid "Search for more languages" +msgstr "Etsi lisää kieliä" + #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Minä" -#: ../src/client/conversation-viewer/conversation-viewer.vala:413 -msgid "No conversations selected." -msgstr "Keskusteluja ei ole valittu." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:415 -#, c-format -msgid "%u conversation selected." -msgid_plural "%u conversations selected." -msgstr[0] "%u keskustelu valittu." -msgstr[1] "%u keskustelua valittu." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:444 -msgid "No search results found." -msgstr "Hakutuloksia ei löytynyt." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:446 -msgid "No conversations in folder." -msgstr "Kansio ei sisällä keskusteluja." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:708 -msgid "This message contains remote images." -msgstr "Tämä viesti sisältää etäkuvia." +#. Translators: This is the file type displayed for +#. attachments with unknown file types. +#: ../src/client/conversation-viewer/conversation-email.vala:124 +msgid "Unknown" +msgstr "Tuntematon" + +#. Preview headers +#. Translators: This is displayed in place of the from address +#. when the message has no from address. +#: ../src/client/conversation-viewer/conversation-message.vala:331 +msgid "No sender" +msgstr "Ei lähettäjää" + +#. Translators: This separates multiple 'from' +#. addresses in the header preview for a message. +#: ../src/client/conversation-viewer/conversation-message.vala:586 +msgid ", " +msgstr ", " + +#. Translators: This string is used as the HTML IMG ALT +#. attribute value when displaying an inline image in an email +#. that did not specify a file name. E.g. Image" +msgstr "" -#: ../ui/composer.glade.h:45 -msgid "Send" -msgstr "Lähetä" +#: ../ui/conversation-message.ui.h:2 +msgid "1/1/1970\t" +msgstr "" -#: ../ui/composer.glade.h:46 -msgid "Send (Ctrl+Enter)" -msgstr "Lähetä (Ctrl+Enter)" +#: ../ui/conversation-message.ui.h:3 +msgid "Preview body text." +msgstr "" -#: ../ui/composer.glade.h:47 -msgid "_Attach File" -msgstr "Liit_ä tiedosto" - -#: ../ui/composer.glade.h:48 -msgid "Attach File" -msgstr "Liitä tiedosto" - -#: ../ui/composer.glade.h:49 -msgid "_Include Original Attachments" -msgstr "_Sisällytä alkuperäiset liitteet" +#: ../ui/conversation-message.ui.h:4 +msgid "Sent by:" +msgstr "Lähettänyt:" -#: ../ui/composer.glade.h:50 -msgid "Include Original Attachments" -msgstr "Sisällytä alkuperäiset liitteet" +#: ../ui/conversation-message.ui.h:5 +msgid "Reply to:" +msgstr "Vastausosoite:" -#: ../ui/composer.glade.h:51 -msgid "Application Menu" -msgstr "Sovellusvalikko" +#: ../ui/conversation-message.ui.h:6 +msgid "Subject" +msgstr "Aihe" -#. Address(es) e-mail is to be sent to -#: ../ui/composer.glade.h:53 -msgid "_To" -msgstr "_Vastaanottaja" +#: ../ui/conversation-message.ui.h:7 +msgid "To:" +msgstr "Vastaanottaja:" -#: ../ui/composer.glade.h:54 -msgid "_Cc" -msgstr "_Kopio" +#: ../ui/conversation-message.ui.h:8 +msgid "Cc:" +msgstr "Kopio:" -#: ../ui/composer.glade.h:55 -msgid "_Subject" -msgstr "_Aihe" +#: ../ui/conversation-message.ui.h:9 +msgid "Bcc:" +msgstr "Piilokopio:" -#: ../ui/composer.glade.h:56 -msgid "_Bcc" -msgstr "_Piilokopio" +#: ../ui/conversation-message.ui.h:10 +msgid "Show Images" +msgstr "Näytä kuvat" -#: ../ui/composer.glade.h:57 -msgid "_Reply-To" -msgstr "Vasta_usosoite" +#: ../ui/conversation-message.ui.h:11 +msgid "Always Show From Sender" +msgstr "Näytä aina lähettäjältä" -#. Geary account mail will be sent from -#: ../ui/composer.glade.h:59 -msgid "From" -msgstr "Lähettäjä" +#: ../ui/conversation-message.ui.h:12 +msgid "Remote images not shown" +msgstr "Etäkuvia ei näytetä" -#: ../ui/composer.glade.h:60 -msgid "Drop files here" -msgstr "Pudota tiedostot tähän" +#: ../ui/conversation-message.ui.h:13 +msgid "Only show remote images from senders you trust." +msgstr "Näytä etäkuvat vain lähettäjiltä, joihin luotat" -#: ../ui/composer.glade.h:61 -msgid "To add them as attachments" -msgstr "lisätäksesi ne liitteiksi" +#: ../ui/conversation-message.ui.h:14 +msgid "But actually goes to:" +msgstr "Mutta viekin kohteeseen:" + +#: ../ui/conversation-message.ui.h:15 +msgid "The link appears to go to:" +msgstr "Tämä linkki vaikuttaa johtavan kohteeseen:" + +#: ../ui/conversation-message.ui.h:16 +msgid "Deceptive link found" +msgstr "Harhaanjohtava linkki löydetty" + +#: ../ui/conversation-message.ui.h:17 +msgid "The email sender may be leading you to the wrong web site." +msgstr "" +"Sähköpostin lähettäjä saattaa yrittää johdattaa sinut väärälle sivulle." + +#: ../ui/conversation-message.ui.h:18 +msgid "If unsure, contact the sender and ask before continuing." +msgstr "" +"Jos olet epävarma, ole yhteydessä viestin lähettäjään ennen kuin jatkat." + +#: ../ui/conversation-viewer.ui.h:1 +msgid "Find in conversation" +msgstr "Etsi keskustelusta" + +#: ../ui/conversation-viewer.ui.h:2 +msgid "Find the previous occurrence of the search string." +msgstr "Etsi hakuehdon edellinen ilmentymä." + +#: ../ui/conversation-viewer.ui.h:3 +msgid "Find the next occurrence of the search string." +msgstr "Etsi hakuehdon seuraava ilmentymä." #: ../ui/edit_alternate_emails.glade.h:1 msgid "Remove email address" @@ -2071,138 +2218,395 @@ msgid "label" msgstr "nimike" -#: ../ui/login.glade.h:1 ../ui/password-dialog.glade.h:3 +#: ../ui/gtk/help-overlay.ui.h:1 +msgid "Conversation Shortcuts" +msgstr "Keskustelun pikanäppäimet" + +#: ../ui/gtk/help-overlay.ui.h:2 +msgctxt "shortcut window" +msgid "General" +msgstr "Yleiset" + +#: ../ui/gtk/help-overlay.ui.h:3 +msgctxt "shortcut window" +msgid "Move focus to the next/previous pane" +msgstr "Siirrä kohdistus seuraavaan/edelliseen osioon" + +#: ../ui/gtk/help-overlay.ui.h:4 +msgctxt "shortcut window" +msgid "Move focus to conversation list" +msgstr "Siirrä kohdistus keskusteluluetteloon" + +#: ../ui/gtk/help-overlay.ui.h:5 +msgctxt "shortcut window" +msgid "Detach composer window" +msgstr "Irrota lähetysikkuna" + +#: ../ui/gtk/help-overlay.ui.h:6 +msgctxt "shortcut window" +msgid "Close composer window" +msgstr "Sulje lähetysikkuna" + +#: ../ui/gtk/help-overlay.ui.h:7 +msgctxt "shortcut window" +msgid "Show keyboard shortcuts" +msgstr "Näytä pikanäppäimet" + +#: ../ui/gtk/help-overlay.ui.h:8 +msgctxt "shortcut window" +msgid "Show help" +msgstr "Näytä ohje" + +#: ../ui/gtk/help-overlay.ui.h:9 +msgctxt "shortcut window" +msgid "Quit the application" +msgstr "Lopeta sovellus" + +#: ../ui/gtk/help-overlay.ui.h:10 +msgctxt "shortcut window" +msgid "Search" +msgstr "Haku" + +#: ../ui/gtk/help-overlay.ui.h:11 +msgctxt "shortcut window" +msgid "Jump to search box" +msgstr "Siirry hakukenttään" + +#: ../ui/gtk/help-overlay.ui.h:12 +msgctxt "shortcut window" +msgid "Find in current conversation" +msgstr "Etsi nykyisestä keskustelusta" + +#: ../ui/gtk/help-overlay.ui.h:13 +msgctxt "shortcut window" +msgid "Find next/previous in current conversation" +msgstr "Etsi seuraava/edellinen nykyisestä keskustelusta" + +#: ../ui/gtk/help-overlay.ui.h:14 +msgctxt "shortcut window" +msgid "Actions" +msgstr "Toiminnot" + +#: ../ui/gtk/help-overlay.ui.h:15 +msgctxt "shortcut window" +msgid "Compose a new message" +msgstr "Luo uusi viesti" + +#: ../ui/gtk/help-overlay.ui.h:16 +msgctxt "shortcut window" +msgid "Reply to sender " +msgstr "Vastaa lähettäjälle" + +#: ../ui/gtk/help-overlay.ui.h:17 +msgctxt "shortcut window" +msgid "Reply to all" +msgstr "Vastaa kaikille" + +#: ../ui/gtk/help-overlay.ui.h:18 +msgctxt "shortcut window" +msgid "Forward" +msgstr "Lähetä edelleen" + +#: ../ui/gtk/help-overlay.ui.h:19 +msgctxt "shortcut window" +msgid "Archive" +msgstr "Arkistoi" + +#: ../ui/gtk/help-overlay.ui.h:20 +msgctxt "shortcut window" +msgid "Move to trash" +msgstr "Siirrä roskakoriin" + +#: ../ui/gtk/help-overlay.ui.h:21 +msgctxt "shortcut window" +msgid "Toggle spam" +msgstr "Merkitse roskapostiksi/poista roskapostimerkintä " + +#: ../ui/gtk/help-overlay.ui.h:22 +msgctxt "shortcut window" +msgid "Move the conversation" +msgstr "Siirrä keskustelu" + +#: ../ui/gtk/help-overlay.ui.h:23 +msgctxt "shortcut window" +msgid "Label the conversation" +msgstr "Merkitse tunniste keskusteluun" + +#: ../ui/gtk/help-overlay.ui.h:24 +msgctxt "shortcut window" +msgid "Mark read" +msgstr "Merkitse luetuksi" + +#: ../ui/gtk/help-overlay.ui.h:25 +msgctxt "shortcut window" +msgid "Mark unread" +msgstr "Merkitse lukemattomaksi" + +#: ../ui/gtk/help-overlay.ui.h:26 +msgctxt "shortcut window" +msgid "View" +msgstr "Näkymä" + +#: ../ui/gtk/help-overlay.ui.h:27 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Lähennä" + +#: ../ui/gtk/help-overlay.ui.h:28 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Loitonna" + +#: ../ui/gtk/help-overlay.ui.h:29 +msgctxt "shortcut window" +msgid "Reset zoom" +msgstr "Palauta mittakaava" + +#: ../ui/gtk/help-overlay.ui.h:30 +msgctxt "shortcut window" +msgid "Additional Shortcuts" +msgstr "Muut pikanäppäimet" + +#: ../ui/gtk/help-overlay.ui.h:31 +msgctxt "shortcut window" +msgid "Star" +msgstr "Merkitse tähdellä" + +#: ../ui/gtk/help-overlay.ui.h:32 +msgctxt "shortcut window" +msgid "Unstar" +msgstr "Poista tähti" + +#: ../ui/gtk/help-overlay.ui.h:33 +msgctxt "shortcut window" +msgid "Delete" +msgstr "Poista" + +#: ../ui/gtk/help-overlay.ui.h:34 +msgctxt "shortcut window" +msgid "Jump to next (older) conversation" +msgstr "Siirry seuravaan (vanhempaan) keskusteluun" + +#: ../ui/gtk/help-overlay.ui.h:35 +msgctxt "shortcut window" +msgid "Jump to previous (newer) conversation" +msgstr "Siirry edelliseen (uudempaan) keskusteluun" + +#: ../ui/gtk/help-overlay.ui.h:36 +msgid "Composer Shortcuts" +msgstr "Lähettämisen pikanäppäimet" + +#: ../ui/gtk/help-overlay.ui.h:37 +msgctxt "shortcut window" +msgid "Quote text" +msgstr "Lainaa tekstiä" + +#: ../ui/gtk/help-overlay.ui.h:38 +msgctxt "shortcut window" +msgid "Unquote text" +msgstr "Poista tekstin lainaus" + +#: ../ui/gtk/help-overlay.ui.h:39 +msgctxt "shortcut window" +msgid "Send" +msgstr "Lähetä" + +#: ../ui/gtk/help-overlay.ui.h:40 +msgctxt "shortcut window" +msgid "Add attachment" +msgstr "Lisää liite" + +#: ../ui/gtk/help-overlay.ui.h:41 +msgctxt "shortcut window" +msgid "Rich text mode" +msgstr "Muotoilutila" + +#: ../ui/gtk/help-overlay.ui.h:42 +msgctxt "shortcut window" +msgid "Bold text" +msgstr "Lihavoitu teksti" + +#: ../ui/gtk/help-overlay.ui.h:43 +msgctxt "shortcut window" +msgid "Italicize text" +msgstr "Kursivoitu teksti" + +#: ../ui/gtk/help-overlay.ui.h:44 +msgctxt "shortcut window" +msgid "Underline text" +msgstr "Alleviivattu teksti" + +#: ../ui/gtk/help-overlay.ui.h:45 +msgctxt "shortcut window" +msgid "Strike text" +msgstr "Yliviivattu teksti" + +#: ../ui/gtk/help-overlay.ui.h:46 +msgctxt "shortcut window" +msgid "Insert a link" +msgstr "Lisää linkki" + +#: ../ui/gtk/help-overlay.ui.h:47 +msgctxt "shortcut window" +msgid "Remove formatting" +msgstr "Poista muotoilu" + +#: ../ui/gtk/menus.ui.h:2 +msgid "A_ccounts" +msgstr "_Tilit" + +#: ../ui/gtk/menus.ui.h:4 +msgid "_Keyboard Shortcuts" +msgstr "_Pikanäppäimet" + +#: ../ui/login.glade.h:1 +msgid "email@example.com" +msgstr "osoite@esimerkki.com" + +#: ../ui/login.glade.h:2 ../ui/password-dialog.glade.h:3 msgid "Password" msgstr "Salasana" -#: ../ui/login.glade.h:2 +#: ../ui/login.glade.h:3 msgid "E_mail address" msgstr "_Sähköpostiosoite" -#: ../ui/login.glade.h:3 +#: ../ui/login.glade.h:4 msgid "_Password" msgstr "_Salasana" -#: ../ui/login.glade.h:4 +#: ../ui/login.glade.h:5 msgid "S_ervice" msgstr "_Palvelu" -#: ../ui/login.glade.h:5 +#: ../ui/login.glade.h:6 msgid "N_ame" msgstr "_Nimi" -#: ../ui/login.glade.h:7 +#: ../ui/login.glade.h:8 msgid "N_ickname" msgstr "Ni_mimerkki" -#: ../ui/login.glade.h:8 +#: ../ui/login.glade.h:9 msgid "Work, Home, etc." msgstr "Koti, työ tms." -#: ../ui/login.glade.h:9 +#: ../ui/login.glade.h:10 msgid "_Save sent mail" msgstr "_Tallenna lähetetyt viestit" -#: ../ui/login.glade.h:10 +#: ../ui/login.glade.h:11 msgid "Addi_tional email addresses…" msgstr "Lisäosoitteet…" -#: ../ui/login.glade.h:11 +#: ../ui/login.glade.h:12 msgid "IMAP settings" msgstr "IMAP-asetukset" -#: ../ui/login.glade.h:12 +#: ../ui/login.glade.h:13 msgid "Se_rver" msgstr "P_alvelin" -#: ../ui/login.glade.h:13 +#: ../ui/login.glade.h:14 +msgid "imap.example.com" +msgstr "imap.esimerkki.com" + +#: ../ui/login.glade.h:15 msgid "P_ort" msgstr "P_ortti" -#: ../ui/login.glade.h:14 +#: ../ui/login.glade.h:16 +msgid "smtp.example.com" +msgstr "smtp.esimerkki.com" + +#: ../ui/login.glade.h:17 msgid "Ser_ver" msgstr "Pal_velin" -#: ../ui/login.glade.h:15 +#: ../ui/login.glade.h:18 msgid "Por_t" msgstr "Portt_i" -#: ../ui/login.glade.h:16 +#: ../ui/login.glade.h:19 msgid "SMTP settings" msgstr "SMTP-asetukset" -#: ../ui/login.glade.h:17 +#: ../ui/login.glade.h:20 msgid "User_name" msgstr "_Käyttäjätunnus" -#: ../ui/login.glade.h:18 +#: ../ui/login.glade.h:21 msgid "Pass_word" msgstr "_Salasana" -#: ../ui/login.glade.h:19 +#: ../ui/login.glade.h:22 msgid "SMTP username" msgstr "SMTP-käyttäjätunnus" -#: ../ui/login.glade.h:20 +#: ../ui/login.glade.h:23 msgid "SMTP password" msgstr "SMTP-salasana" -#: ../ui/login.glade.h:21 +#: ../ui/login.glade.h:24 msgid "_Username" msgstr "K_äyttäjätunnus" -#: ../ui/login.glade.h:22 +#: ../ui/login.glade.h:25 msgid "IMAP username" msgstr "IMAP-käyttäjätunnus" -#: ../ui/login.glade.h:23 +#: ../ui/login.glade.h:26 msgid "IMAP password" msgstr "IMAP-salasana" -#: ../ui/login.glade.h:24 +#: ../ui/login.glade.h:27 msgid "Encr_yption" msgstr "Sala_us" -#: ../ui/login.glade.h:25 +#: ../ui/login.glade.h:28 msgid "Encrypt_ion" msgstr "Salau_s" -#: ../ui/login.glade.h:27 +#: ../ui/login.glade.h:30 msgid "SSL/TLS" msgstr "SSL/TLS" -#: ../ui/login.glade.h:28 +#: ../ui/login.glade.h:31 msgid "STARTTLS" msgstr "STARTTLS" -#: ../ui/login.glade.h:29 +#: ../ui/login.glade.h:32 msgid "No authentication re_quired" msgstr "Tunnistautumista ei _vaadita" -#: ../ui/login.glade.h:30 +#: ../ui/login.glade.h:33 msgid "Use IMAP cre_dentials" msgstr "Kä_ytä IMAP-tunnuksia" -#: ../ui/login.glade.h:31 ../ui/preferences.glade.h:5 +#: ../ui/login.glade.h:34 msgid "Composer" msgstr "Lähettäminen" -#: ../ui/login.glade.h:32 +#: ../ui/login.glade.h:35 msgid "Save dra_fts on server" msgstr "Tall_enna luonnokset palvelimelle" -#: ../ui/login.glade.h:33 +#: ../ui/login.glade.h:36 msgid "Si_gn emails (HTML allowed):" msgstr "_Allekirjoita viestit (HTML sallittu):" -#: ../ui/login.glade.h:34 +#: ../ui/login.glade.h:37 msgid "Storage" msgstr "Varastointi" -#: ../ui/login.glade.h:35 +#: ../ui/login.glade.h:38 msgid "_Download mail" msgstr "_Lataa sähköposti" +#: ../ui/main-toolbar.ui.h:1 +msgid "Empty Spam or Trash folders" +msgstr "Tyhjennä roskaposti- tai roskakorikansiot" + #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" msgstr "SMTP-tunnukset" @@ -2219,47 +2623,43 @@ msgid "_Authenticate" msgstr "_Tunnistaudu" -#: ../ui/preferences.glade.h:1 +#: ../ui/preferences-dialog.ui.h:1 msgid "Reading" msgstr "Lukeminen" -#: ../ui/preferences.glade.h:2 +#: ../ui/preferences-dialog.ui.h:2 msgid "_Automatically select next message" msgstr "_Valitse automaattisesti seuraava viesti" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences-dialog.ui.h:3 msgid "_Display conversation preview" msgstr "N_äytä keskustelun esikatselu" -#: ../ui/preferences.glade.h:4 +#: ../ui/preferences-dialog.ui.h:4 msgid "Use _three pane view" msgstr "Kä_ytä kolmen paneelin näkymää" -#: ../ui/preferences.glade.h:6 -msgid "Enable _spell checking" -msgstr "_Käytä oikolukua" - -#: ../ui/preferences.glade.h:7 +#: ../ui/preferences-dialog.ui.h:5 msgid "Notifications" msgstr "Ilmoitukset" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences-dialog.ui.h:6 msgid "_Play notification sounds" msgstr "_Toista ilmoitusäänet" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences-dialog.ui.h:7 msgid "Show _notifications for new mail" msgstr "_Näytä ilmoitus uuden viestin saapuessa" -#: ../ui/preferences.glade.h:10 +#: ../ui/preferences-dialog.ui.h:8 msgid "Always _watch for new mail" msgstr "_Tarkkaile aina uusia viestejä" -#: ../ui/preferences.glade.h:11 +#: ../ui/preferences-dialog.ui.h:9 msgid "Geary will run in the background and notify of new mail" msgstr "Geary toimii taustalla ja ilmoittaa uusista viesteistä" -#: ../ui/preferences.glade.h:12 +#: ../ui/preferences-dialog.ui.h:10 msgid "Preferences" msgstr "Asetukset" @@ -2291,6 +2691,139 @@ msgid "Geary update in progress…" msgstr "Gearyn päivitys on meneillään…" +#~ msgid "Empty" +#~ msgstr "Tyhjennä" + +#~ msgid "%i match" +#~ msgid_plural "%i matches" +#~ msgstr[0] "%i tulos" +#~ msgstr[1] "%i tulosta" + +#~ msgid "%i match (wrapped)" +#~ msgid_plural "%i matches (wrapped)" +#~ msgstr[0] "%i tulos (yhteensä)" +#~ msgstr[1] "%i tulosta (yhteensä)" + +#~ msgid "not found" +#~ msgstr "ei löytynyt" + +#, fuzzy +#~| msgid "%s - Conversation Inspector" +#~ msgid "%s - Composer Inspector" +#~ msgstr "%s - Keskustelun tutkija" + +#~ msgid "No search results found." +#~ msgstr "Hakutuloksia ei löytynyt." + +#~ msgid "From:" +#~ msgstr "Lähettäjä:" + +#~ msgid "Date:" +#~ msgstr "Päiväys:" + +#~ msgid "Copy _Link" +#~ msgstr "Kopioi _linkki" + +#~ msgid "Select _Message" +#~ msgstr "_Valitse viesti" + +#~ msgid " (Invalid?)" +#~ msgstr " (Virheellinen?)" + +#~ msgid "_Save As..." +#~ msgstr "_Tallenna nimellä..." + +#~ msgid "Save A_ttachment..." +#~ msgid_plural "Save All A_ttachments..." +#~ msgstr[0] "_Tallenna liite" +#~ msgstr[1] "_Tallenna liitteet" + +#~ msgid "none" +#~ msgstr "ei mitään" + +#~| msgctxt "Label" +#~| msgid "Close and Discard" +#~ msgid "Close and Discard" +#~ msgstr "Sulje ja hylkää" + +#~| msgctxt "Label" +#~| msgid "Close and Save" +#~ msgid "Close and Save" +#~ msgstr "Sulje ja tallenna" + +#~ msgid "Link (Ctrl+L)" +#~ msgstr "Linkki (Ctrl+L)" + +#~ msgid "Enable _spell checking" +#~ msgstr "_Käytä oikolukua" + +#~ msgid "_Left" +#~ msgstr "_Vasemmalle" + +#~ msgid "_Right" +#~ msgstr "_Oikealle" + +#~ msgid "_Center" +#~ msgstr "_Keskelle" + +#~ msgid "_Justify" +#~ msgstr "_Tasaa" + +#~ msgid "More options" +#~ msgstr "Lisää valintoja" + +#~ msgctxt "Short Label" +#~ msgid "Close and Save" +#~ msgstr "Sulje ja tallenna" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Save" +#~ msgstr "Sulje ja tallenna" + +#~ msgctxt "Short Label" +#~ msgid "Close and Discard" +#~ msgstr "Sulje ja hylkää" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Discard" +#~ msgstr "Sulje ja hylkää" + +#~ msgid "Large" +#~ msgstr "Suuri" + +#~ msgid "Medium" +#~ msgstr "Normaali" + +#~ msgid "Small" +#~ msgstr "Pieni" + +#~ msgid "Sans Serif" +#~ msgstr "Päätteetön" + +#~ msgid "Serif" +#~ msgstr "Päätteellinen" + +#~ msgid "Fixed Width" +#~ msgstr "Tasalevyinen" + +#~ msgid "Detach" +#~ msgstr "Irrota" + +#~ msgid "_Attach File" +#~ msgstr "Liit_ä tiedosto" + +#~ msgid "Attach File" +#~ msgstr "Liitä tiedosto" + +#~ msgid "_Include Original Attachments" +#~ msgstr "_Sisällytä alkuperäiset liitteet" + +#~ msgid "Spelling language" +#~ msgstr "Oikoluvun kieli" + +#~ msgid "Application Menu" +#~ msgstr "Sovellusvalikko" + #~ msgid "Copyright 2011-2015 Yorba Foundation" #~ msgstr "Tekijänoikeus 2011-2015 Yorba Foundation" @@ -2330,9 +2863,6 @@ #~ msgid "Archive conversation (Delete, Backspace, A)" #~ msgstr "Arkistoi keskustelu (Delete, Backspace, A)" -#~ msgid "General" -#~ msgstr "Yleiset" - #~ msgid "Port:" #~ msgstr "Portti:" diff -Nru geary-0.11.4/po/he.po geary-0.12.0/po/he.po --- geary-0.11.4/po/he.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/he.po 2017-10-02 11:25:21.000000000 +0000 @@ -16,8 +16,8 @@ msgstr "" "Project-Id-Version: geary-0.4.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-19 13:19+0300\n" -"PO-Revision-Date: 2015-07-19 13:19+0300\n" +"POT-Creation-Date: 2016-08-09 23:56+0300\n" +"PO-Revision-Date: 2016-08-10 00:06+0300\n" "Last-Translator: Yosef Or Boczko \n" "Language-Team: עברית <>\n" "Language: he\n" @@ -71,7 +71,7 @@ msgstr "_הוספה" #. reset/clear widgets -#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 #, c-format msgid "Additional addresses for %s" msgstr "כתובות נוספות עבור %s" @@ -81,7 +81,7 @@ msgid "Accounts" msgstr "משתמשים" -#. Copyright 2011-2015 Yorba Foundation +#. Copyright 2016 Software Freedom Conservancy Inc. #. * #. * This software is licensed under the GNU Lesser General Public License #. * (version 2.1 or later). See the COPYING file in this distribution. @@ -92,107 +92,107 @@ msgid "First Last" msgstr "שם פרטי שם משפחה" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." msgstr "ברוך בואך ל־Geary." -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." msgstr "נא להזין את פרטי החשבון שלך כדי להתחיל." -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "שבועיים אחורנית" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:254 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "חודש אחד אחורנית" -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "שלושה חודשים אחורנית" -#: ../src/client/accounts/add-edit-page.vala:256 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "שישה חודשים אחורנית" -#: ../src/client/accounts/add-edit-page.vala:257 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "שנה אחת אחורנית" -#: ../src/client/accounts/add-edit-page.vala:258 +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" msgstr "שנתיים אחורנית" -#: ../src/client/accounts/add-edit-page.vala:259 +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" msgstr "ארבע שנים אחורנית" #. Separator -#: ../src/client/accounts/add-edit-page.vala:261 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "הכל" -#: ../src/client/accounts/add-edit-page.vala:280 +#: ../src/client/accounts/add-edit-page.vala:282 msgid "Edit" msgstr "עריכה" -#: ../src/client/accounts/add-edit-page.vala:282 +#: ../src/client/accounts/add-edit-page.vala:284 msgid "Preview" msgstr "תצוגה מקדימה" -#: ../src/client/accounts/add-edit-page.vala:723 +#: ../src/client/accounts/add-edit-page.vala:738 msgid "Remem_ber passwords" msgstr "זכירת סס_מאות" -#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:6 +#: ../src/client/accounts/add-edit-page.vala:745 ../ui/login.glade.h:6 msgid "Remem_ber password" msgstr "זכירת _ססמה" -#: ../src/client/accounts/add-edit-page.vala:764 +#: ../src/client/accounts/add-edit-page.vala:779 msgid "Unable to validate:\n" msgstr "לא ניתן לאמת לאמת:\n" -#: ../src/client/accounts/add-edit-page.vala:766 +#: ../src/client/accounts/add-edit-page.vala:781 msgid " • Invalid account nickname.\n" msgstr " • כינוי חשבון לא חוקי.\n" -#: ../src/client/accounts/add-edit-page.vala:769 +#: ../src/client/accounts/add-edit-page.vala:784 msgid " • Email address already added to Geary.\n" msgstr " • כתובת דוא״ל זה כבר נוסף ל־Geary.\n" -#: ../src/client/accounts/add-edit-page.vala:773 +#: ../src/client/accounts/add-edit-page.vala:788 msgid " • IMAP connection error.\n" msgstr " • IMAP בעיית חיבור.\n" -#: ../src/client/accounts/add-edit-page.vala:776 +#: ../src/client/accounts/add-edit-page.vala:791 msgid " • IMAP username or password incorrect.\n" msgstr "• שם משתמש או ססמת ה־IMAP שגויים.\n" -#: ../src/client/accounts/add-edit-page.vala:779 +#: ../src/client/accounts/add-edit-page.vala:794 msgid " • SMTP connection error.\n" msgstr " • SMTP בעיית חיבור.\n" -#: ../src/client/accounts/add-edit-page.vala:782 +#: ../src/client/accounts/add-edit-page.vala:797 msgid " • SMTP username or password incorrect.\n" msgstr " • שם משתמש או ססמת SMTP אינם נכונים.\n" -#: ../src/client/accounts/add-edit-page.vala:786 +#: ../src/client/accounts/add-edit-page.vala:801 msgid " • Connection error.\n" msgstr "• בעיית חיבור.\n" -#: ../src/client/accounts/add-edit-page.vala:790 +#: ../src/client/accounts/add-edit-page.vala:805 msgid " • Username or password incorrect.\n" msgstr " • שם משתמש או ססמה אינם נכונים.\n" #: ../src/client/application/geary-application.vala:19 -msgid "Copyright 2011-2015 Yorba Foundation" -msgstr "כל הזכויות שמורות 2011–2015 Yorba Foundation" +msgid "Copyright 2016 Software Freedom Conservancy Inc." +msgstr "כל הזכויות שמורות למוסד לחופש התכנה בע״מ. 2016" #: ../src/client/application/geary-application.vala:21 -msgid "Visit the Yorba web site" -msgstr "ביקור באתר Yorba" +msgid "Visit the Geary web site" +msgstr "ביקור באתר Geary" #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" @@ -272,196 +272,193 @@ msgid "Unrecognized command line option \"%s\"\n" msgstr "הפרמטרים לשורת הפקודה אינם מוכרים: „%s”\n" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:60 msgid "Delete conversation" msgstr "מחיקת שיחה" -#: ../src/client/application/geary-controller.vala:63 +#: ../src/client/application/geary-controller.vala:61 msgid "Delete conversation (Shift+Delete)" msgstr "מחיקת שיחה (Shift+Delete)" -#: ../src/client/application/geary-controller.vala:64 +#: ../src/client/application/geary-controller.vala:62 msgid "Delete conversations (Shift+Delete)" msgstr "מחיקת שיחות (Shift+Delete)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:68 +#: ../src/client/application/geary-controller.vala:66 msgid "Move conversation to Trash (Delete, Backspace)" msgstr "הזזת שיחה לאשפה (Delete, Backspace)" -#: ../src/client/application/geary-controller.vala:69 +#: ../src/client/application/geary-controller.vala:67 msgid "Move conversations to Trash (Delete, Backspace)" msgstr "הזזת שיחות לאשפה (Delete, Backspace)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:71 msgid "_Archive" msgstr "תיוק ב_ארכיון" -#: ../src/client/application/geary-controller.vala:74 +#: ../src/client/application/geary-controller.vala:72 msgid "Archive conversation (A)" msgstr "תיוק שיחה בארכיון (ש)" -#: ../src/client/application/geary-controller.vala:75 +#: ../src/client/application/geary-controller.vala:73 msgid "Archive conversations (A)" msgstr "תיוק שיחות בארכיון (A)" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:76 msgid "Mark as S_pam" msgstr "סימון כ_דואר זבל" -#: ../src/client/application/geary-controller.vala:79 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark as not S_pam" msgstr "סימון כלא דואר ז_בל" -#: ../src/client/application/geary-controller.vala:81 -#: ../src/client/application/geary-controller.vala:397 +#: ../src/client/application/geary-controller.vala:79 +#: ../src/client/application/geary-controller.vala:403 msgid "Mark conversation" msgstr "סימון שיחה" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:80 msgid "Mark conversations" msgstr "סימון שיחות" -#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:81 msgid "Add label to conversation" msgstr "הוספת תווית לשיחה" -#: ../src/client/application/geary-controller.vala:84 +#: ../src/client/application/geary-controller.vala:82 msgid "Add label to conversations" msgstr "הוספת תווית לשיחות" -#: ../src/client/application/geary-controller.vala:85 -#: ../src/client/application/geary-controller.vala:436 +#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:442 msgid "Move conversation" msgstr "הזזת שיחה" -#: ../src/client/application/geary-controller.vala:86 +#: ../src/client/application/geary-controller.vala:84 msgid "Move conversations" msgstr "הזזת שיחות" -#: ../src/client/application/geary-controller.vala:373 +#: ../src/client/application/geary-controller.vala:383 +#: ../ui/app_menu.interface.h:1 msgid "A_ccounts" msgstr "_חשבונות" -#: ../src/client/application/geary-controller.vala:378 -#: ../src/client/components/stock.vala:27 +#: ../src/client/application/geary-controller.vala:388 +#: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 msgid "_Preferences" msgstr "הע_דפות" -#: ../src/client/application/geary-controller.vala:382 -#: ../src/client/components/stock.vala:25 +#: ../src/client/application/geary-controller.vala:392 +#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:3 msgid "_Help" msgstr "_עזרה" -#: ../src/client/application/geary-controller.vala:386 -#: ../src/client/components/stock.vala:21 +#: ../src/client/application/geary-controller.vala:396 +#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:4 msgid "_About" msgstr "על _אודות" -#: ../src/client/application/geary-controller.vala:390 -msgid "_Donate" -msgstr "_תרומה" - -#: ../src/client/application/geary-controller.vala:394 -#: ../src/client/components/stock.vala:29 +#: ../src/client/application/geary-controller.vala:400 +#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:5 msgid "_Quit" msgstr "י_ציאה" -#: ../src/client/application/geary-controller.vala:399 +#: ../src/client/application/geary-controller.vala:405 msgid "_Mark as..." msgstr "_סימון בתור…" -#: ../src/client/application/geary-controller.vala:405 +#: ../src/client/application/geary-controller.vala:411 msgid "Mark as _Read" msgstr "סימון כ_נקרא" -#: ../src/client/application/geary-controller.vala:411 +#: ../src/client/application/geary-controller.vala:417 msgid "Mark as _Unread" msgstr "סימון כ_לא נקרא" -#: ../src/client/application/geary-controller.vala:417 +#: ../src/client/application/geary-controller.vala:423 msgid "_Star" msgstr "הוספת _כוכב" -#: ../src/client/application/geary-controller.vala:422 +#: ../src/client/application/geary-controller.vala:428 msgid "U_nstar" msgstr "ה_סרת כוכב" -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:438 msgid "Add label" msgstr "הוספת תווית" -#: ../src/client/application/geary-controller.vala:433 +#: ../src/client/application/geary-controller.vala:439 msgid "_Label" msgstr "_תווית" -#: ../src/client/application/geary-controller.vala:437 +#: ../src/client/application/geary-controller.vala:443 msgid "_Move" msgstr "ה_עברה" -#: ../src/client/application/geary-controller.vala:441 +#: ../src/client/application/geary-controller.vala:447 msgid "Compose new message (Ctrl+N, N)" msgstr "יצירת הודעה חדשה (Ctrl+מ, מ)" #. Reply to a message. -#: ../src/client/application/geary-controller.vala:445 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1857 +#: ../src/client/application/geary-controller.vala:451 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1892 msgid "_Reply" msgstr "לה_שיב" -#: ../src/client/application/geary-controller.vala:446 +#: ../src/client/application/geary-controller.vala:452 msgid "Reply (Ctrl+R, R)" msgstr "להשיב (Ctrl+ר, ר)" -#: ../src/client/application/geary-controller.vala:450 +#: ../src/client/application/geary-controller.vala:456 msgid "R_eply All" msgstr "להשיב ל_כולם" -#: ../src/client/application/geary-controller.vala:451 +#: ../src/client/application/geary-controller.vala:457 msgid "Reply all (Ctrl+Shift+R, Shift+R)" msgstr "להשיב לכולם (Ctrl+Shift+ר, Shift+ר)" #. Forward a message. -#: ../src/client/application/geary-controller.vala:456 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1867 +#: ../src/client/application/geary-controller.vala:462 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1902 msgid "_Forward" msgstr "ה_עברה" -#: ../src/client/application/geary-controller.vala:457 +#: ../src/client/application/geary-controller.vala:463 msgid "Forward (Ctrl+L, F)" msgstr "העברה (Ctrl+ך, כ)" -#: ../src/client/application/geary-controller.vala:496 +#: ../src/client/application/geary-controller.vala:502 msgid "Empty" msgstr "ריקון" -#: ../src/client/application/geary-controller.vala:497 +#: ../src/client/application/geary-controller.vala:503 msgid "Empty Spam or Trash folders" msgstr "ריקון תיקיית דואר זבל או אשפה" -#: ../src/client/application/geary-controller.vala:501 +#: ../src/client/application/geary-controller.vala:507 msgid "Empty _Spam…" msgstr "ריקון דואר _זבל…" -#: ../src/client/application/geary-controller.vala:505 +#: ../src/client/application/geary-controller.vala:511 msgid "Empty _Trash…" msgstr "ריקון א_שפה…" #. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:538 +#: ../src/client/application/geary-controller.vala:540 msgid "Toggle search bar" msgstr "הצגת סרגל החיפוש" -#: ../src/client/application/geary-controller.vala:752 +#: ../src/client/application/geary-controller.vala:735 msgid "Unable to store server trust exception" msgstr "לא ניתן לאחסן שרת מהימן חריג" -#: ../src/client/application/geary-controller.vala:989 +#: ../src/client/application/geary-controller.vala:972 msgid "Your settings are insecure" msgstr "ההגדרות שלך אינן בטוחות" -#: ../src/client/application/geary-controller.vala:990 +#: ../src/client/application/geary-controller.vala:973 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -471,17 +468,17 @@ "או TLS. משמעות הדבר ששם המשתמש והססמה שלך יכולים להיקרא ע״י תכניות מעקב ברשת " "שלך. האם להתחבר לחשבון?" -#: ../src/client/application/geary-controller.vala:991 +#: ../src/client/application/geary-controller.vala:974 msgid "Co_ntinue" msgstr "לה_משיך" #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:1069 +#: ../src/client/application/geary-controller.vala:1052 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "שגיאה בשליחת דוא״ל" -#: ../src/client/application/geary-controller.vala:1070 +#: ../src/client/application/geary-controller.vala:1053 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." @@ -491,12 +488,12 @@ #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1074 +#: ../src/client/application/geary-controller.vala:1057 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "שגיאה בשמירת דוא״ל שנשלח" -#: ../src/client/application/geary-controller.vala:1075 +#: ../src/client/application/geary-controller.vala:1058 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." @@ -504,19 +501,19 @@ "‏Geary נתקל בשגיאה בשמירת הודעה שנשלחה לדואר יוצא. ההודעה תישאר בתיקייה " "בהמתנה לשליחה עד שתמחק." -#: ../src/client/application/geary-controller.vala:1144 +#: ../src/client/application/geary-controller.vala:1127 msgid "Labels" msgstr "תוויות" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1156 +#: ../src/client/application/geary-controller.vala:1139 #, c-format msgid "Unable to open the database for %s" msgstr "לא ניתן לפתוח מסד הנתונים עבור %s" -#: ../src/client/application/geary-controller.vala:1157 +#: ../src/client/application/geary-controller.vala:1140 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -539,20 +536,20 @@ "יצירה מחדש של מסד הנתונים תמחק את כל הדוא״ל המקומי ואת כל הקבצים המצורפים " "שלו. הדואר על השרת שלך לא יושפע." -#: ../src/client/application/geary-controller.vala:1159 +#: ../src/client/application/geary-controller.vala:1142 msgid "_Rebuild" msgstr "י_צירה מחדש" -#: ../src/client/application/geary-controller.vala:1159 +#: ../src/client/application/geary-controller.vala:1142 msgid "E_xit" msgstr "י_ציאה" -#: ../src/client/application/geary-controller.vala:1168 +#: ../src/client/application/geary-controller.vala:1151 #, c-format msgid "Unable to rebuild database for \"%s\"" msgstr "לא ניתן ליצור מחדש מסד נתונים עבור „%s”" -#: ../src/client/application/geary-controller.vala:1169 +#: ../src/client/application/geary-controller.vala:1152 #, c-format msgid "" "Error during rebuild:\n" @@ -564,14 +561,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1191 -#: ../src/client/application/geary-controller.vala:1201 -#: ../src/client/application/geary-controller.vala:1212 +#: ../src/client/application/geary-controller.vala:1174 +#: ../src/client/application/geary-controller.vala:1184 +#: ../src/client/application/geary-controller.vala:1195 #, c-format msgid "Unable to open local mailbox for %s" msgstr "לא ניתן לפתוח תיבת דואר מקומית עבור %s" -#: ../src/client/application/geary-controller.vala:1192 +#: ../src/client/application/geary-controller.vala:1175 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -588,7 +585,7 @@ "יש לבדוק אם יש לך הרשאות קריאה/כתיבה לכל הקבצים בתיקייה:\n" "%s" -#: ../src/client/application/geary-controller.vala:1202 +#: ../src/client/application/geary-controller.vala:1185 msgid "" "The version number of the local mail database is formatted for a newer " "version of Geary. Unfortunately, the database cannot be \"rolled back\" to " @@ -601,7 +598,7 @@ "\n" "יש להתקין שוב את הגרסה האחרונה של Geary." -#: ../src/client/application/geary-controller.vala:1213 +#: ../src/client/application/geary-controller.vala:1196 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" @@ -612,30 +609,30 @@ "\n" "יש לבדוק את חיבור הרשת שלך ולהפעיל מחדש את Geary." -#: ../src/client/application/geary-controller.vala:1721 +#: ../src/client/application/geary-controller.vala:1708 #, c-format msgid "About %s" msgstr "על אודות %s" #. / Translators: add your name and email address to receive credit in the About dialog #. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1724 +#: ../src/client/application/geary-controller.vala:1711 msgid "translator-credits" msgstr "" "דוביקס \n" "ירון שהרבני \n" "יוסף אור בוצ׳קו " -#: ../src/client/application/geary-controller.vala:1990 +#: ../src/client/application/geary-controller.vala:1968 msgid "Undo move (Ctrl+Z)" msgstr "ביטול העברה (Ctrl+ז)" -#: ../src/client/application/geary-controller.vala:2000 +#: ../src/client/application/geary-controller.vala:1978 #, c-format msgid "Are you sure you want to open \"%s\"?" msgstr "האם אכן לפתוח את „%s”?" -#: ../src/client/application/geary-controller.vala:2001 +#: ../src/client/application/geary-controller.vala:1979 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -643,74 +640,74 @@ "קבצים מצורפים עלולים לגרום נזק למערכת שלך. כדאי לפתוח אך ורק קבצים המגיעים " "ממקור אמין." -#: ../src/client/application/geary-controller.vala:2002 +#: ../src/client/application/geary-controller.vala:1980 msgid "Don't _ask me again" msgstr "_לא לשאול אותי שוב" -#: ../src/client/application/geary-controller.vala:2020 +#: ../src/client/application/geary-controller.vala:1998 #, c-format msgid "A file named \"%s\" already exists. Do you want to replace it?" msgstr "קובץ בשם „%s” כבר קיים. האם להחליף אותו?" -#: ../src/client/application/geary-controller.vala:2022 +#: ../src/client/application/geary-controller.vala:2000 #, c-format msgid "" "The file already exists in \"%s\". Replacing it will overwrite its contents." msgstr "הקובץ כבר קיים תחת „%s”. החלפתו תגרום לאיבוד התוכן הקיים." -#: ../src/client/application/geary-controller.vala:2025 +#: ../src/client/application/geary-controller.vala:2003 msgid "_Replace" msgstr "ה_חלפה" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2323 +#: ../src/client/application/geary-controller.vala:2301 msgid "Close open draft messages?" msgstr "סגירת טיוטות פתוחות?" -#: ../src/client/application/geary-controller.vala:2453 +#: ../src/client/application/geary-controller.vala:2431 #, c-format msgid "Empty all email from your %s folder?" msgstr "ריקון כל הדואר מהתיקייה %s?" -#: ../src/client/application/geary-controller.vala:2454 +#: ../src/client/application/geary-controller.vala:2432 msgid "This removes the email from Geary and your email server." msgstr "פעולה זו מוחקת את הדואר מ־Geary וכן משרת הדוא״ל שלך." -#: ../src/client/application/geary-controller.vala:2455 +#: ../src/client/application/geary-controller.vala:2433 msgid "This cannot be undone." msgstr "פעולה זה לא ניתנת לביטול." -#: ../src/client/application/geary-controller.vala:2456 +#: ../src/client/application/geary-controller.vala:2434 #, c-format msgid "Empty %s" msgstr "ריקון %s" -#: ../src/client/application/geary-controller.vala:2473 +#: ../src/client/application/geary-controller.vala:2451 #, c-format msgid "Error emptying %s" msgstr "שגיאה בריקון %s" -#: ../src/client/application/geary-controller.vala:2503 +#: ../src/client/application/geary-controller.vala:2481 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "האם ברצונך למחוק הודעה זו לצמיתות?" msgstr[1] "האם ברצונך למחוק הודעות אלה לצמיתות?" msgstr[2] "האם ברצונך למחוק הודעות אלה לצמיתות?" -#: ../src/client/application/geary-controller.vala:2505 +#: ../src/client/application/geary-controller.vala:2483 msgid "Delete" msgstr "מחיקה" -#: ../src/client/application/geary-controller.vala:2536 +#: ../src/client/application/geary-controller.vala:2514 msgid "Undo archive (Ctrl+Z)" msgstr "ביטול ארכוב (Ctrl+ז)" -#: ../src/client/application/geary-controller.vala:2551 +#: ../src/client/application/geary-controller.vala:2529 msgid "Undo trash (Ctrl+Z)" msgstr "ביטול העברה לאשפה (Ctrl+ז)" -#: ../src/client/application/geary-controller.vala:2604 +#: ../src/client/application/geary-controller.vala:2582 msgid "Undo (Ctrl+Z)" msgstr "ביטול (Ctrl+ז)" @@ -734,28 +731,28 @@ msgid "not found" msgstr "לא נמצא" -#: ../src/client/components/main-window.vala:430 +#: ../src/client/components/main-window.vala:359 #, c-format msgid "%s (%d)" msgstr "%s (%d)" -#: ../src/client/components/search-bar.vala:10 +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "חיפוש" #. Search entry. -#: ../src/client/components/search-bar.vala:25 +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" msgstr "חיפוש בכל חשבונות הדואר עם צירוף מקשים (Ctrl+ד)" -#: ../src/client/components/search-bar.vala:118 +#: ../src/client/components/search-bar.vala:103 #, c-format msgid "Indexing %s account" msgstr "מפתוּח חשבון %s" -#: ../src/client/components/search-bar.vala:129 +#: ../src/client/components/search-bar.vala:114 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" @@ -797,7 +794,7 @@ #. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1324 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1358 msgid "Select _All" msgstr "בחירת ה_כול" @@ -805,133 +802,137 @@ msgid "_Keep" msgstr "_שמירה" -#: ../src/client/composer/composer-widget.vala:73 +#: ../src/client/composer/composer-widget.vala:71 msgid "Saved" msgstr "נשמר" -#: ../src/client/composer/composer-widget.vala:74 +#: ../src/client/composer/composer-widget.vala:72 msgid "Saving" msgstr "נשמר" -#: ../src/client/composer/composer-widget.vala:75 +#: ../src/client/composer/composer-widget.vala:73 msgid "Error saving" msgstr "שגיאת בשמירה" -#: ../src/client/composer/composer-widget.vala:76 +#: ../src/client/composer/composer-widget.vala:74 msgid "Press Backspace to delete quote" msgstr "יש להקיש על Backspace למחיקת ציטוט" -#: ../src/client/composer/composer-widget.vala:77 +#: ../src/client/composer/composer-widget.vala:75 msgid "New Message" msgstr "הודעה חדשה" #. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since #. this is full-word checking, include all variants of each word. No spaces are allowed. -#: ../src/client/composer/composer-widget.vala:138 +#: ../src/client/composer/composer-widget.vala:136 msgid "" "attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" "enclosing|encloses|enclosure|enclosures" msgstr "לצרף|צירוף|מצורף|צרף|קובץ מצורף|צורף|נספח" -#: ../src/client/composer/composer-widget.vala:1102 -#: ../src/client/composer/composer-widget.vala:1106 +#: ../src/client/composer/composer-widget.vala:1108 +#: ../src/client/composer/composer-widget.vala:1112 msgid "Do you want to discard this message?" msgstr "האם למחוק הודעה זו?" -#: ../src/client/composer/composer-widget.vala:1262 +#: ../src/client/composer/composer-widget.vala:1268 msgid "Send message with an empty subject and body?" msgstr "האם לשלוח את ההודעה ללא כותרת ותוכן?" -#: ../src/client/composer/composer-widget.vala:1264 +#: ../src/client/composer/composer-widget.vala:1270 msgid "Send message with an empty subject?" msgstr "האם לשלוח את ההודעה ללא כותרת?" -#: ../src/client/composer/composer-widget.vala:1266 +#: ../src/client/composer/composer-widget.vala:1272 msgid "Send message with an empty body?" msgstr "האם לשלוח את ההודעה ללא תוכן?" -#: ../src/client/composer/composer-widget.vala:1268 +#: ../src/client/composer/composer-widget.vala:1274 msgid "Send message without an attachment?" msgstr "האם לשלוח את ההודעה ללא קובץ מצורף?" -#: ../src/client/composer/composer-widget.vala:1530 +#: ../src/client/composer/composer-widget.vala:1536 msgid "Cannot add attachment" msgstr "לא ניתן לצרף את הקובץ המבוקש" -#: ../src/client/composer/composer-widget.vala:1541 +#: ../src/client/composer/composer-widget.vala:1547 #, c-format msgid "\"%s\" could not be found." msgstr "‏„%s” לא נמצא." -#: ../src/client/composer/composer-widget.vala:1548 +#: ../src/client/composer/composer-widget.vala:1554 #, c-format msgid "\"%s\" is a folder." msgstr "‏„%s” היא תיקייה." -#: ../src/client/composer/composer-widget.vala:1555 +#: ../src/client/composer/composer-widget.vala:1561 #, c-format msgid "\"%s\" is an empty file." msgstr "‏„%s” הוא קובץ ריק." -#: ../src/client/composer/composer-widget.vala:1569 +#: ../src/client/composer/composer-widget.vala:1575 #, c-format msgid "\"%s\" could not be opened for reading." msgstr "לא ניתן לפתוח את „%s” לקריאה." -#: ../src/client/composer/composer-widget.vala:1576 +#: ../src/client/composer/composer-widget.vala:1582 #, c-format msgid "\"%s\" already attached for delivery." msgstr "‏„%s” כבר מצורף למכתב." #. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-widget.vala:1585 +#: ../src/client/composer/composer-widget.vala:1591 #, c-format msgid "%s (%s)" msgstr "%s (%s)" -#: ../src/client/composer/composer-widget.vala:1645 +#: ../src/client/composer/composer-widget.vala:1652 msgid "To: " msgstr "אל: " -#: ../src/client/composer/composer-widget.vala:1648 +#: ../src/client/composer/composer-widget.vala:1655 msgid "Cc: " msgstr "עותק: " -#: ../src/client/composer/composer-widget.vala:1651 +#: ../src/client/composer/composer-widget.vala:1658 msgid "Bcc: " msgstr "עותק מוסתר: " -#: ../src/client/composer/composer-widget.vala:1654 +#: ../src/client/composer/composer-widget.vala:1661 msgid "Reply-To: " msgstr "להשבי אל:" -#: ../src/client/composer/composer-widget.vala:1887 +#: ../src/client/composer/composer-widget.vala:1894 msgid "Select Color" msgstr "בחר צבע" #. Displayed in the From dropdown to indicate an "alternate email address" #. for an account. The first printf argument will be the alternate email #. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2322 +#: ../src/client/composer/composer-widget.vala:2341 #, c-format msgid "%1$s via %2$s" msgstr "%1$s באמצעות %2$s" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2364 +#: ../src/client/composer/composer-widget.vala:2383 msgid "_From:" msgstr "_מאת:" +#: ../src/client/composer/spell-check-popover.vala:210 +msgid "Search for more languages" +msgstr "חיפוש שפות נוספות" + #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "אני" -#: ../src/client/conversation-viewer/conversation-viewer.vala:413 +#: ../src/client/conversation-viewer/conversation-viewer.vala:414 msgid "No conversations selected." msgstr "לא נבחרה אף תכתובת." -#: ../src/client/conversation-viewer/conversation-viewer.vala:415 +#: ../src/client/conversation-viewer/conversation-viewer.vala:416 #, c-format msgid "%u conversation selected." msgid_plural "%u conversations selected." @@ -939,55 +940,55 @@ msgstr[1] "נבחרו %u תכתובות." msgstr[2] "נבחרו שתי תכתובות." -#: ../src/client/conversation-viewer/conversation-viewer.vala:444 +#: ../src/client/conversation-viewer/conversation-viewer.vala:446 msgid "No search results found." msgstr "לא מצאו תוצאות בחיפוש." -#: ../src/client/conversation-viewer/conversation-viewer.vala:446 +#: ../src/client/conversation-viewer/conversation-viewer.vala:448 msgid "No conversations in folder." msgstr "אין תכתובות בתיקייה." -#: ../src/client/conversation-viewer/conversation-viewer.vala:708 +#: ../src/client/conversation-viewer/conversation-viewer.vala:720 msgid "This message contains remote images." msgstr "הודעה זו מכילה תמונות מרוחקות." -#: ../src/client/conversation-viewer/conversation-viewer.vala:708 +#: ../src/client/conversation-viewer/conversation-viewer.vala:720 msgid "Show Images" msgstr "הצגת תמונות" -#: ../src/client/conversation-viewer/conversation-viewer.vala:709 +#: ../src/client/conversation-viewer/conversation-viewer.vala:721 msgid "Always Show From Sender" msgstr "תמיד להציג תמונות משולח זה" -#: ../src/client/conversation-viewer/conversation-viewer.vala:733 +#: ../src/client/conversation-viewer/conversation-viewer.vala:745 msgid "Edit Draft" msgstr "עריכת טיוטה" -#: ../src/client/conversation-viewer/conversation-viewer.vala:809 +#: ../src/client/conversation-viewer/conversation-viewer.vala:838 msgid "From:" msgstr "מאת:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:812 +#: ../src/client/conversation-viewer/conversation-viewer.vala:841 msgid "To:" msgstr "אל:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:815 +#: ../src/client/conversation-viewer/conversation-viewer.vala:844 msgid "Cc:" msgstr "עותק:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:818 +#: ../src/client/conversation-viewer/conversation-viewer.vala:847 msgid "Bcc:" msgstr "עותק מוסתר:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:821 +#: ../src/client/conversation-viewer/conversation-viewer.vala:850 msgid "Subject:" msgstr "נושא:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:824 +#: ../src/client/conversation-viewer/conversation-viewer.vala:853 msgid "Date:" msgstr "תאריך:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1139 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1173 #, c-format msgid "%u read message" msgid_plural "%u read messages" @@ -995,64 +996,64 @@ msgstr[1] "%u הודעות שנקראו" msgstr[2] "שתי הודעות שנקראו" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1271 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1305 #, c-format msgid "This message was sent successfully, but could not be saved to %s." msgstr "ההודעה נשלחה בהצלחה, אך לא ניתן לשמור אותה אל %s." #. Add a menu item for copying the current selection. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1297 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1331 #: ../ui/composer.glade.h:4 msgid "_Copy" msgstr "ה_עתקה" #. Add a menu item for copying the address. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1305 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1339 msgid "Copy _Email Address" msgstr "העתקת כתובת _דוא״ל" #. Add a menu item for copying the link. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1310 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1344 #: ../ui/composer.glade.h:17 msgid "Copy _Link" msgstr "ה_עתקת קישור" #. Select message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1318 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1352 msgid "Select _Message" msgstr "_בחירת הודעה" #. Inspect. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1330 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1364 msgid "_Inspect" msgstr "_בחינה" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1556 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1591 msgid "This link appears to go to" msgstr "הקישור מראה לאן ללכת" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1557 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1592 msgid "but actually goes to" msgstr "אך למעשה הולך ל־" #. If href doesn't look like a URL, something is fishy, so warn the user -#: ../src/client/conversation-viewer/conversation-viewer.vala:1612 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1647 msgid " (Invalid?)" msgstr " (לא חוקי?)" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1718 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1753 msgid "_Save Image As..." msgstr "שמירת _תמונה בשם…" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1822 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1857 msgid "_Save As..." msgstr "_שמירה בשם…" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1827 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1862 msgid "Save All A_ttachments..." msgstr "שמירת _כל הקבצים המצורפים…" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1847 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1882 msgid "Save A_ttachment..." msgid_plural "Save All A_ttachments..." msgstr[0] "שמירת ה_קובץ המצורף…" @@ -1060,41 +1061,41 @@ msgstr[2] "שמירת הק_בצים המצורפים…" #. Reply to all on a message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1862 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1897 msgid "Reply to _All" msgstr "להשיב ל_כולם" #. Mark as read/unread. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1879 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1914 msgid "_Mark as Read" msgstr "סימון כ_נקרא" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1883 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1918 msgid "_Mark as Unread" msgstr "סימון כ_לא נקרא" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1889 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1924 msgid "Mark Unread From _Here" msgstr "סימון כלא נקרא מ_כאן" #. Separator. #. View original message source. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1904 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1939 msgid "_View Source" msgstr "צפייה ב_מקור" #. Generate the attachment table. #. / Placeholder filename for attachments with no filename. -#: ../src/client/conversation-viewer/conversation-viewer.vala:2227 -#: ../src/engine/rfc822/rfc822-utils.vala:378 +#: ../src/client/conversation-viewer/conversation-viewer.vala:2264 +#: ../src/engine/rfc822/rfc822-utils.vala:366 msgid "none" msgstr "ללא שם" -#: ../src/client/conversation-viewer/conversation-viewer.vala:2362 +#: ../src/client/conversation-viewer/conversation-viewer.vala:2399 msgid "Failed to open default text editor." msgstr "פתיחת עורך הטקסט נכשלה." -#: ../src/client/conversation-viewer/conversation-web-view.vala:322 +#: ../src/client/conversation-viewer/conversation-web-view.vala:319 #, c-format msgid "%s - Conversation Inspector" msgstr "‏%s - מפקח תכתובת" @@ -1231,7 +1232,7 @@ msgid "%s - New Messages" msgstr "‏%s - הודעות חדשות" -#: ../src/client/notification/libnotify.vala:72 +#: ../src/client/notification/libnotify.vala:74 #, c-format msgid "%d new message" msgid_plural "%d new messages" @@ -1239,7 +1240,7 @@ msgstr[1] "%d הודעות חדשות" msgstr[2] "שתי הודעות חדשות" -#: ../src/client/notification/libnotify.vala:75 +#: ../src/client/notification/libnotify.vala:77 #, c-format msgid "%s, %d new message total" msgid_plural "%s, %d new messages total" @@ -1247,7 +1248,7 @@ msgstr[1] "%s, %d הודעות חדשות סך הכל" msgstr[2] "%s, %d הודעות חדשות סך הכל" -#: ../src/client/notification/libnotify.vala:107 +#: ../src/client/notification/libnotify.vala:109 #, c-format msgid "" "%s\n" @@ -1265,7 +1266,7 @@ "%s\n" "(%d הודעות חדשות עבור %s)" -#: ../src/client/notification/libnotify.vala:160 +#: ../src/client/notification/libnotify.vala:165 msgid "Open" msgstr "פתיחה" @@ -1352,7 +1353,7 @@ msgstr "‏%A" #: ../src/client/util/util-email.vala:30 -#: ../src/engine/rfc822/rfc822-message.vala:781 +#: ../src/engine/rfc822/rfc822-message.vala:832 msgid "(no subject)" msgstr "(ללא נושא)" @@ -1448,86 +1449,202 @@ msgid "None" msgstr "כלום" -#. Map of user-supplied search field names to column names. -#. / Can be typed in the search box like attachment:file.txt to find -#. / messages with attachments with a particular name. The translated -#. / string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:710 +#. Map of possibly translated search operator names and values +#. to English/internal names and values. We include the +#. English version anyway so that when translations provide a +#. localised version of the operator names but have not also +#. translated the user manual, the English version in the +#. manual still works. +#. Can be typed in the search box like "attachment:file.txt" +#. to find messages with attachments with a particular name. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:99 +msgctxt "Search operator" msgid "attachment" msgstr "מצורף" -#. / Can be typed in the search box like bcc:johndoe@example.com to find -#. / messages bcc'd to a particular person. The translated -#. / string must match the string in Geary's help documentation. -#. Fields we allow the token to be "me" as in from:me. -#: ../src/engine/imap-db/imap-db-account.vala:714 -#: ../src/engine/imap-db/imap-db-account.vala:738 +#. Can be typed in the search box like +#. "bcc:johndoe@example.com" to find messages bcc'd to a +#. particular person. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:108 +msgctxt "Search operator" msgid "bcc" msgstr "מוסתר" -#. / Can be typed in the search box like body:word to find the word only -#. / if it occurs in the body of a message. The translated -#. / string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:718 +#. Can be typed in the search box like "body:word" to find +#. "word" only if it occurs in the body of a message. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:116 +msgctxt "Search operator" msgid "body" msgstr "גוף" -#. / Can be typed in the search box like cc:johndoe@example.com to find -#. / messages cc'd to a particular person. The translated -#. / string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:722 -#: ../src/engine/imap-db/imap-db-account.vala:738 +#. Can be typed in the search box like +#. "cc:johndoe@example.com" to find messages cc'd to a +#. particular person. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:125 +msgctxt "Search operator" msgid "cc" msgstr "עותק" -#. / Can be typed in the search box like from:johndoe@example.com to -#. / find messages from a particular sender. The translated -#. / string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:726 -#: ../src/engine/imap-db/imap-db-account.vala:738 +#. Can be typed in the search box like +#. "from:johndoe@example.com" to find messages from a +#. particular sender. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:134 +msgctxt "Search operator" msgid "from" msgstr "מאת" -#. / Can be typed in the search box like subject:word to find the word -#. / only if it occurs in the subject of a message. The translated -#. / string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:730 +#. Can be typed in the search box like "is:unread" to find +#. messages that are read, unread, or starred. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:142 +msgctxt "Search operator" +msgid "is" +msgstr "זה" + +#. Can be typed in the search box like "subject:word" to find +#. "word" only if it occurs in the subject of a message. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary +#. User Guide. +#: ../src/engine/imap-db/imap-db-account.vala:150 +msgctxt "Search operator" msgid "subject" msgstr "נושא" -#. / Can be typed in the search box like to:johndoe@example.com to find -#. / messages received by a particular person. The translated -#. / string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:734 -#: ../src/engine/imap-db/imap-db-account.vala:738 +#. Can be typed in the search box like +#. "to:johndoe@example.com" to find messages received by a +#. particular person. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:159 +msgctxt "Search operator" msgid "to" msgstr "אל" -#. "me" can be typed like from:me or cc:me, etc. as a shorthand -#. to find mail to or from yourself in search. The translated -#. string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:754 +#. Can be typed in the search box after "to:", "cc:" and +#. "bcc:" e.g.: "to:me". Matches conversations that are +#. addressed to the user. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:180 +msgctxt "Search operator value - mail addressed to the user" msgid "me" msgstr "אני" -#. List of folder names to match for Drafts, separated by |. Please add localized common -#. names for the Drafts folder, leaving in the English names as well. The first in the list -#. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:575 +#. Can be typed in the search box after "from:" i.e.: +#. "from:me". Matches conversations were sent by the user. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:192 +msgctxt "Search operator value - mail sent by the user" +msgid "me" +msgstr "אני" + +#. Can be typed in the search box after "is:" i.e.: +#. "is:read". Matches conversations that are flagged as read. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:204 +msgctxt "'is:' search operator value" +msgid "read" +msgstr "נקרא" + +#. Can be typed in the search box after "is:" i.e.: +#. "is:starred". Matches conversations that are flagged as +#. starred. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:215 +msgctxt "'is:' search operator value" +msgid "starred" +msgstr "מסומן בכוכב" + +#. Can be typed in the search box after "is:" i.e.: +#. "is:unread". Matches conversations that are flagged unread. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:225 +msgctxt "'is:' search operator value" +msgid "unread" +msgstr "לא נקרא" + +#. List of general possible folder names to match for the +#. Draft mailbox. Separate names using a vertical bar and +#. put the most common localized name to the front for the +#. default. English names do not need to be included. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:626 msgid "Drafts | Draft" msgstr "טיוטות | טיוטה | Drafts | Draft" -#. List of folder names to match for Sent Mail, separated by |. Please add localized common -#. names for the Sent Mail folder, leaving in the English names as well. The first in the list -#. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:580 +#. List of general possible folder names to match for the +#. Sent mailbox. Separate names using a vertical bar and +#. put the most common localized name to the front for the +#. default. English names do not need to be included. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:635 msgid "Sent | Sent Mail | Sent Email | Sent E-Mail" msgstr "דואר יוצא | דואר נשלח | Sent | Sent Mail | Sent Email | Sent E-Mail" -#. List of folder names to match for Spam, separated by |. Please add localized common -#. names for the Spam folder, leaving in the English names as well. The first in the list -#. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:585 +#. The localised name(s) of the Sent folder name as used +#. by MS Outlook/Exchange. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:640 +msgctxt "Outlook localised name" +msgid "Sent Items" +msgstr "דואר יוצא" + +#. List of general possible folder names to match for the +#. Spam mailbox. Separate names using a vertical bar and +#. put the most common localized name to the front for the +#. default. English names do not need to be included. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:650 msgid "" "Junk | Spam | Junk Mail | Junk Email | Junk E-Mail | Bulk Mail | Bulk Email " "| Bulk E-Mail" @@ -1535,17 +1652,26 @@ "דואר זבל | ספאם | Junk | Spam | Junk Mail | Junk Email | Junk E-Mail | Bulk " "Mail | Bulk Email | Bulk E-Mail" -#. List of folder names to match for Trash, separated by |. Please add localized common -#. names for the Trash folder, leaving in the English names as well. The first in the list -#. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:590 +#. List of general possible folder names to match for the +#. Trash mailbox. Separate names using a vertical bar and +#. put the most common localized name to the front for the +#. default. English names do not need to be included. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:660 msgid "Trash | Rubbish | Rubbish Bin" msgstr "אשפה | זבל | Trash | Rubbish | Rubbish Bin" -#. List of folder names to match for Archive, separated by |. Please add localized common -#. names for the Trash folder, leaving in the English names as well. The first in the list -#. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:595 +#. The localised name(s) of the Trash folder name as used +#. by MS Outlook/Exchange. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:665 +msgctxt "Outlook localised name" +msgid "Deleted Items" +msgstr "אשפה" + +#. List of general possible folder names to match for the +#. Archive mailbox. Separate names using a vertical bar +#. and put the most common localized name to the front for +#. the default. English names do not need to be included. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:675 msgid "Archive | Archives" msgstr "ארכיון | ארכיב | ארכיונים | ארכיבים | Archive | Archives" @@ -1840,48 +1966,56 @@ msgstr "צירוף קובץ" #: ../ui/composer.glade.h:49 +msgid "Attach File (Ctrl+T)" +msgstr "צירוף קובץ ‏(Ctrl+א)" + +#: ../ui/composer.glade.h:50 msgid "_Include Original Attachments" msgstr "_לכלול את הקבצים המצורפים המקוריים" -#: ../ui/composer.glade.h:50 +#: ../ui/composer.glade.h:51 msgid "Include Original Attachments" msgstr "לכלול את הקבצים המצורפים המקוריים" -#: ../ui/composer.glade.h:51 -msgid "Application Menu" -msgstr "תפריט יישום" +#: ../ui/composer.glade.h:52 +msgid "Select spell checking language" +msgstr "בחירת שפה לבדיקת איות" -#. Address(es) e-mail is to be sent to #: ../ui/composer.glade.h:53 +msgid "Spelling language" +msgstr "שפה לבדיקת איות" + +#. Address(es) e-mail is to be sent to +#: ../ui/composer.glade.h:55 msgid "_To" msgstr "_אל" -#: ../ui/composer.glade.h:54 +#: ../ui/composer.glade.h:56 msgid "_Cc" msgstr "_עותק" -#: ../ui/composer.glade.h:55 +#: ../ui/composer.glade.h:57 msgid "_Subject" msgstr "_נושא" -#: ../ui/composer.glade.h:56 +#: ../ui/composer.glade.h:58 msgid "_Bcc" msgstr "עותק _מוסתר" -#: ../ui/composer.glade.h:57 +#: ../ui/composer.glade.h:59 msgid "_Reply-To" msgstr "לה_שיב אל" #. Geary account mail will be sent from -#: ../ui/composer.glade.h:59 +#: ../ui/composer.glade.h:61 msgid "From" msgstr "מאת" -#: ../ui/composer.glade.h:60 +#: ../ui/composer.glade.h:62 msgid "Drop files here" msgstr "יש לגרור קבצים לכאן" -#: ../ui/composer.glade.h:61 +#: ../ui/composer.glade.h:63 msgid "To add them as attachments" msgstr "כדי להוסיף אותם כקבצים מצורפים" @@ -2140,6 +2274,15 @@ msgid "Geary update in progress…" msgstr "‏Geary בתהליך שדרוג…" +#~ msgid "Copyright 2011-2015 Yorba Foundation" +#~ msgstr "כל הזכויות שמורות 2011–2015 Yorba Foundation" + +#~ msgid "_Donate" +#~ msgstr "_תרומה" + +#~ msgid "Application Menu" +#~ msgstr "תפריט יישום" + #~ msgid "No conversations selected" #~ msgstr "לא נבחרה אף תכתובת" diff -Nru geary-0.11.4/po/hu.po geary-0.12.0/po/hu.po --- geary-0.11.4/po/hu.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/hu.po 2017-10-02 11:25:21.000000000 +0000 @@ -1,52 +1,118 @@ # Hungarian translation for Geary email client. -# Copyright 2016 Software Freedom Conservancy Inc. +# Copyright 2012, 2013, 2014, 2015, 2016, 2017 Free Software Foundation, Inc. # This file is distributed under the same license as the geary package. # # lukibeni , 2012, 2013. # metalsasi , 2012. -# Balázs Úr , 2014, 2015. +# Balázs Úr , 2014, 2015, 2017. # Gabor Kelemen , 2014. msgid "" msgstr "" "Project-Id-Version: geary-master\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" +"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "product=geary&keywords=I18N+L10N&component=internationalization\n" -"POT-Creation-Date: 2016-12-19 21:09+0000\n" -"PO-Revision-Date: 2016-12-20 10:14+0100\n" -"Last-Translator: Meskó Balázs \n" +"POT-Creation-Date: 2017-03-18 17:03+0000\n" +"PO-Revision-Date: 2017-03-21 17:50+0100\n" +"Last-Translator: Balázs Úr \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.8.11\n" +"X-Generator: Lokalize 1.2\n" -#: ../desktop/geary.desktop.in.h:1 ../desktop/geary-autostart.desktop.in.h:1 +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:1 +#: ../desktop/org.gnome.Geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" msgstr "Geary" -#: ../desktop/geary.desktop.in.h:2 ../desktop/geary-autostart.desktop.in.h:2 -#: ../src/client/application/geary-application.vala:18 +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:2 +#: ../desktop/org.gnome.Geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 +msgid "Send and receive email" +msgstr "E-mailek küldése és fogadása" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:3 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"A Geary egy e-mail alkalmazás, amely a társalgások köré szerveződik, és a " +"GNOME 3 asztalhoz készült. Segítségével e-maileket olvashat, kereshet és " +"küldhet egy lényegre törő és modern felületen." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:4 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"A társalgások segítségével teljes beszélgetéseket olvashat el anélkül, hogy " +"egyesével végig kellene kattintania a leveleken." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:5 +#| msgid "Geary's features include:" +msgid "Geary’s features include:" +msgstr "A Geary néhány funkciója:" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:6 +msgid "Quick email account setup" +msgstr "Gyors e-mailfiók beállítás" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:7 +msgid "Shows related messages together in conversations" +msgstr "A kapcsolódó leveleket együtt jeleníti meg a beszélgetésekben" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:8 +msgid "Fast, full text and keyword search" +msgstr "Gyors, teljes szöveges és kulcsszavas keresés" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:9 +msgid "Full-featured HTML and plain text message composer" +msgstr "Teljes funkcionalitású HTML és egyszerű szöveges levélszerkesztő" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:10 +msgid "Desktop notification of new mail" +msgstr "Asztali értesítések új levél érkezésekor" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:11 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" +msgstr "" +"Kompatibilis a GMaillel, a Yahoo! Maillel, az Outlook.commal és más IMAP " +"kiszolgálókkal" + +#: ../desktop/org.gnome.Geary.desktop.in.h:2 +msgid "Email" +msgstr "E-mail" + +#: ../desktop/org.gnome.Geary.desktop.in.h:3 +msgid "Geary Email" +msgstr "Geary levelező" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/org.gnome.Geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "Levél;Levelezés;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" + +#: ../desktop/org.gnome.Geary.desktop.in.h:7 ../ui/gtk/menus.ui.h:1 +msgid "Compose Message" +msgstr "Levél írása" + +#: ../desktop/geary-autostart.desktop.in.h:2 +#: ../src/client/application/geary-application.vala:21 msgid "Mail Client" msgstr "Levelezőkliens" -#: ../desktop/geary.desktop.in.h:3 ../desktop/geary-autostart.desktop.in.h:3 +#: ../desktop/geary-autostart.desktop.in.h:3 msgid "Geary Mail" msgstr "Geary levelező" -#: ../desktop/geary.desktop.in.h:4 ../desktop/geary-autostart.desktop.in.h:4 -msgid "Send and receive email" -msgstr "E-mailek küldése és fogadása" - -#: ../desktop/geary.desktop.in.h:5 ../desktop/geary-autostart.desktop.in.h:5 +#: ../desktop/geary-autostart.desktop.in.h:5 msgid "Email;E-mail;Mail;" msgstr "Email;E-mail;Levél;" -#: ../desktop/geary.desktop.in.h:6 -msgid "Compose Message" -msgstr "Levél írása" - #: ../desktop/geary-attach.contract.in.h:1 msgid "Send by email" msgstr "Elküldés levélben" @@ -57,6 +123,7 @@ #: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:31 +#: ../ui/conversation-email-menus.ui.h:10 msgid "_Save" msgstr "_Mentés" @@ -66,7 +133,7 @@ msgstr "_Hozzáadás" #. reset/clear widgets -#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 #, c-format msgid "Additional addresses for %s" msgstr "További címek a következőhöz: %s" @@ -87,109 +154,131 @@ msgid "First Last" msgstr "Last First" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." msgstr "Üdvözli a Geary!" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." msgstr "Adja meg a fiókinformációit a kezdéshez." -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "2 hétre visszamenőleg" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:254 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "1 hónapra visszamenőleg" -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "3 hónapra visszamenőleg" -#: ../src/client/accounts/add-edit-page.vala:256 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "6 hónapra visszamenőleg" -#: ../src/client/accounts/add-edit-page.vala:257 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "1 évre visszamenőleg" -#: ../src/client/accounts/add-edit-page.vala:258 +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" msgstr "2 évre visszamenőleg" -#: ../src/client/accounts/add-edit-page.vala:259 +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" msgstr "4 évre visszamenőleg" #. Separator -#: ../src/client/accounts/add-edit-page.vala:261 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "Minden" -#: ../src/client/accounts/add-edit-page.vala:280 +#: ../src/client/accounts/add-edit-page.vala:283 msgid "Edit" msgstr "Szerkesztés" -#: ../src/client/accounts/add-edit-page.vala:282 +#: ../src/client/accounts/add-edit-page.vala:285 msgid "Preview" msgstr "Előnézet" -#: ../src/client/accounts/add-edit-page.vala:723 +#: ../src/client/accounts/add-edit-page.vala:751 msgid "Remem_ber passwords" msgstr "_Jelszavak megjegyzése" -#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:7 +#: ../src/client/accounts/add-edit-page.vala:758 ../ui/login.glade.h:7 msgid "Remem_ber password" msgstr "_Jelszó megjegyzése" -#: ../src/client/accounts/add-edit-page.vala:764 +#: ../src/client/accounts/add-edit-page.vala:792 msgid "Unable to validate:\n" msgstr "Nem sikerült érvényesíteni:\n" -#: ../src/client/accounts/add-edit-page.vala:766 -msgid " • Invalid account nickname.\n" -msgstr " • Érvénytelen fiók becenév.\n" - -#: ../src/client/accounts/add-edit-page.vala:769 -msgid " • Email address already added to Geary.\n" -msgstr "" -" • Az e-mail cím már hozzá lett adva a Geary programhoz.\n" - -#: ../src/client/accounts/add-edit-page.vala:773 -msgid " • IMAP connection error.\n" -msgstr " • IMAP kapcsolódási hiba.\n" - -#: ../src/client/accounts/add-edit-page.vala:776 -msgid " • IMAP username or password incorrect.\n" -msgstr " • Az IMAP felhasználónév vagy jelszó helytelen.\n" +#: ../src/client/accounts/add-edit-page.vala:794 +#| msgid " • Invalid account nickname.\n" +msgid " • Invalid account nickname.\n" +msgstr " • Érvénytelen fiók becenév.\n" + +#: ../src/client/accounts/add-edit-page.vala:797 +#| msgid " • Email address already added to Geary.\n" +msgid " • Email address already added to Geary.\n" +msgstr " • Az e-mail cím már hozzá lett adva a Geary programhoz.\n" + +#: ../src/client/accounts/add-edit-page.vala:801 +#| msgid " • IMAP connection error.\n" +msgid " • IMAP connection error.\n" +msgstr " • IMAP kapcsolódási hiba.\n" + +#: ../src/client/accounts/add-edit-page.vala:804 +#| msgid " • IMAP username or password incorrect.\n" +msgid " • IMAP username or password incorrect.\n" +msgstr " • Az IMAP felhasználónév vagy jelszó helytelen.\n" + +#: ../src/client/accounts/add-edit-page.vala:807 +#| msgid " • SMTP connection error.\n" +msgid " • SMTP connection error.\n" +msgstr " • SMTP kapcsolódási hiba.\n" + +#: ../src/client/accounts/add-edit-page.vala:810 +#| msgid " • SMTP username or password incorrect.\n" +msgid " • SMTP username or password incorrect.\n" +msgstr " • Az SMTP felhasználónév vagy jelszó helytelen.\n" + +#: ../src/client/accounts/add-edit-page.vala:814 +#| msgid " • Connection error.\n" +msgid " • Connection error.\n" +msgstr " • Kapcsolódási hiba.\n" + +#: ../src/client/accounts/add-edit-page.vala:818 +#| msgid " • Username or password incorrect.\n" +msgid " • Username or password incorrect.\n" +msgstr " • A felhasználónév vagy jelszó helytelen.\n" -#: ../src/client/accounts/add-edit-page.vala:779 -msgid " • SMTP connection error.\n" -msgstr " • SMTP kapcsolódási hiba.\n" - -#: ../src/client/accounts/add-edit-page.vala:782 -msgid " • SMTP username or password incorrect.\n" -msgstr " • Az SMTP felhasználónév vagy jelszó helytelen.\n" - -#: ../src/client/accounts/add-edit-page.vala:786 -msgid " • Connection error.\n" -msgstr " • Kapcsolódási hiba.\n" - -#: ../src/client/accounts/add-edit-page.vala:790 -msgid " • Username or password incorrect.\n" -msgstr " • A felhasználónév vagy jelszó helytelen.\n" - -#: ../src/client/application/geary-application.vala:19 +#: ../src/client/application/geary-application.vala:22 msgid "Copyright 2016 Software Freedom Conservancy Inc." msgstr "Copyright 2016 Software Freedom Conservancy Inc." -#: ../src/client/application/geary-application.vala:21 +#: ../src/client/application/geary-application.vala:24 msgid "Visit the Geary web site" msgstr "Keresse fel a Geary weboldalát" +#: ../src/client/application/geary-application.vala:464 +#, c-format +msgid "About %s" +msgstr "%s névjegye" + +#. Translators: add your name and email address to receive +#. credit in the About dialog For example: Yamada Taro +#. +#: ../src/client/application/geary-application.vala:468 +msgid "translator-credits" +msgstr "" +"Kelemen Gábor \n" +"Lukács Bence \n" +"Úr Balázs " + #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" msgstr "A Geary indítása rejtett főablakkal" @@ -244,217 +333,193 @@ msgstr "Minden kiszolgáló tanúsítvány visszavonása TLS figyelmeztetésekkel" #: ../src/client/application/geary-args.vala:27 +msgid "Perform a graceful quit" +msgstr "Elegáns kilépés végrehajtása" + +#: ../src/client/application/geary-args.vala:28 msgid "Display program version" msgstr "A program verziójának megjelenítése" #. This gives a command-line hint on how to open new composer windows with mailto: -#: ../src/client/application/geary-args.vala:51 +#: ../src/client/application/geary-args.vala:53 #, c-format msgid "Use %s to open a new composer window" msgstr "%s használata egy új levélíró ablak megnyitásához" -#: ../src/client/application/geary-args.vala:52 +#: ../src/client/application/geary-args.vala:54 msgid "Please report comments, suggestions and bugs to:" msgstr "Kérjük írja le véleményét, észrevételeit és a hibákat ide:" #. i18n: Command line arguments are invalid -#: ../src/client/application/geary-args.vala:59 +#: ../src/client/application/geary-args.vala:61 #, c-format msgid "Failed to parse command line options: %s\n" msgstr "A parancssori kapcsolók feldolgozása meghiúsult: %s\n" -#: ../src/client/application/geary-args.vala:70 +#: ../src/client/application/geary-args.vala:72 #, c-format -msgid "Unrecognized command line option \"%s\"\n" +#| msgid "Unrecognized command line option \"%s\"\n" +msgid "Unrecognized command line option “%s”\n" msgstr "Ismeretlen parancssori kapcsoló: „%s”\n" -#: ../src/client/application/geary-controller.vala:61 +#: ../src/client/application/geary-controller.vala:57 msgid "Delete conversation" msgstr "Beszélgetés törlése" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:58 msgid "Delete conversation (Shift+Delete)" msgstr "Beszélgetés törlése (Shift+Delete)" -#: ../src/client/application/geary-controller.vala:63 +#: ../src/client/application/geary-controller.vala:59 msgid "Delete conversations (Shift+Delete)" msgstr "Beszélgetések törlése (Shift+Delete)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:67 +#: ../src/client/application/geary-controller.vala:63 msgid "Move conversation to Trash (Delete, Backspace)" msgstr "Beszélgetés áthelyezése a kukába (Delete, Backspace)" -#: ../src/client/application/geary-controller.vala:68 +#: ../src/client/application/geary-controller.vala:64 msgid "Move conversations to Trash (Delete, Backspace)" msgstr "Beszélgetések áthelyezése a kukába (Delete, Backspace)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:72 +#: ../src/client/application/geary-controller.vala:68 msgid "_Archive" msgstr "_Archiválás" -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:69 msgid "Archive conversation (A)" msgstr "Beszélgetés archiválása (A)" -#: ../src/client/application/geary-controller.vala:74 +#: ../src/client/application/geary-controller.vala:70 msgid "Archive conversations (A)" msgstr "Beszélgetések archiválása (A)" -#: ../src/client/application/geary-controller.vala:77 +#: ../src/client/application/geary-controller.vala:73 msgid "Mark as S_pam" msgstr "Megjelölés levél_szemétként" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:74 msgid "Mark as not S_pam" msgstr "Megjelölés nem levél_szemétként" -#: ../src/client/application/geary-controller.vala:80 -#: ../src/client/application/geary-controller.vala:396 +#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:448 msgid "Mark conversation" msgstr "Beszélgetés megjelölése" -#: ../src/client/application/geary-controller.vala:81 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark conversations" msgstr "Beszélgetések megjelölése" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:78 msgid "Add label to conversation" msgstr "Címke hozzáadása a beszélgetéshez" -#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:79 msgid "Add label to conversations" msgstr "Címke hozzáadása a beszélgetésekhez" -#: ../src/client/application/geary-controller.vala:84 -#: ../src/client/application/geary-controller.vala:435 +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:487 msgid "Move conversation" msgstr "Beszélgetés áthelyezése" -#: ../src/client/application/geary-controller.vala:85 +#: ../src/client/application/geary-controller.vala:81 msgid "Move conversations" msgstr "Beszélgetések áthelyezése" -#: ../src/client/application/geary-controller.vala:376 -#: ../ui/app_menu.interface.h:1 -msgid "A_ccounts" -msgstr "F_iókok" - -#: ../src/client/application/geary-controller.vala:381 -#: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 -msgid "_Preferences" -msgstr "_Beállítások" - -#: ../src/client/application/geary-controller.vala:385 -#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:3 -msgid "_Help" -msgstr "_Súgó" - -#: ../src/client/application/geary-controller.vala:389 -#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:4 -msgid "_About" -msgstr "_Névjegy" - -#: ../src/client/application/geary-controller.vala:393 -#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:5 -msgid "_Quit" -msgstr "_Kilépés" - -#: ../src/client/application/geary-controller.vala:398 -msgid "_Mark as..." +#: ../src/client/application/geary-controller.vala:450 +#| msgid "_Mark as..." +msgid "_Mark as…" msgstr "_Megjelölés mint…" -#: ../src/client/application/geary-controller.vala:404 +#: ../src/client/application/geary-controller.vala:456 msgid "Mark as _Read" msgstr "Megjelölés _olvasottként" -#: ../src/client/application/geary-controller.vala:410 +#: ../src/client/application/geary-controller.vala:462 msgid "Mark as _Unread" msgstr "Megjelölés ol_vasatlanként" -#: ../src/client/application/geary-controller.vala:416 +#: ../src/client/application/geary-controller.vala:468 msgid "_Star" msgstr "_Csillagozás" -#: ../src/client/application/geary-controller.vala:421 +#: ../src/client/application/geary-controller.vala:473 msgid "U_nstar" msgstr "C_sillagozás megszüntetése" -#: ../src/client/application/geary-controller.vala:431 +#: ../src/client/application/geary-controller.vala:483 msgid "Add label" msgstr "Címke hozzáadása" -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:484 msgid "_Label" msgstr "_Címke" -#: ../src/client/application/geary-controller.vala:436 +#: ../src/client/application/geary-controller.vala:488 msgid "_Move" msgstr "Át_helyezés" -#: ../src/client/application/geary-controller.vala:440 +#: ../src/client/application/geary-controller.vala:492 msgid "Compose new message (Ctrl+N, N)" msgstr "Új levél írása (Ctrl+N, N)" -#. Reply to a message. -#: ../src/client/application/geary-controller.vala:444 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1873 +#: ../src/client/application/geary-controller.vala:496 +#: ../ui/conversation-email-menus.ui.h:1 msgid "_Reply" msgstr "_Válasz" -#: ../src/client/application/geary-controller.vala:445 +#: ../src/client/application/geary-controller.vala:497 msgid "Reply (Ctrl+R, R)" msgstr "Válasz (Ctrl+R, R)" -#: ../src/client/application/geary-controller.vala:449 +#: ../src/client/application/geary-controller.vala:501 msgid "R_eply All" msgstr "Válasz _mindenkinek" -#: ../src/client/application/geary-controller.vala:450 +#: ../src/client/application/geary-controller.vala:502 msgid "Reply all (Ctrl+Shift+R, Shift+R)" msgstr "Válasz mindenkinek (Ctrl+Shift+R, Shift+R)" -#. Forward a message. -#: ../src/client/application/geary-controller.vala:455 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1883 +#: ../src/client/application/geary-controller.vala:507 +#: ../ui/conversation-email-menus.ui.h:3 msgid "_Forward" msgstr "T_ovábbítás" -#: ../src/client/application/geary-controller.vala:456 +#: ../src/client/application/geary-controller.vala:508 msgid "Forward (Ctrl+L, F)" msgstr "Továbbítás (Ctrl+L, F)" -#: ../src/client/application/geary-controller.vala:495 -msgid "Empty" -msgstr "Ürítés" - -#: ../src/client/application/geary-controller.vala:496 -msgid "Empty Spam or Trash folders" -msgstr "Levélszemét vagy kuka mappák ürítése" - -#: ../src/client/application/geary-controller.vala:500 +#: ../src/client/application/geary-controller.vala:538 msgid "Empty _Spam…" msgstr "_Levélszemét ürítése…" -#: ../src/client/application/geary-controller.vala:504 +#: ../src/client/application/geary-controller.vala:542 msgid "Empty _Trash…" msgstr "_Kuka ürítése…" #. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:537 +#: ../src/client/application/geary-controller.vala:574 msgid "Toggle search bar" msgstr "Keresősáv ki- vagy bekapcsolása" -#: ../src/client/application/geary-controller.vala:744 +#. No callback is connected, since we bind the toggle button to the find bar visibility +#: ../src/client/application/geary-controller.vala:579 +msgid "Toggle find bar" +msgstr "Keresősáv ki- vagy bekapcsolása" + +#: ../src/client/application/geary-controller.vala:757 msgid "Unable to store server trust exception" msgstr "Nem lehet eltárolni a kiszolgáló megbízhatósági kivételét" -#: ../src/client/application/geary-controller.vala:981 +#: ../src/client/application/geary-controller.vala:992 msgid "Your settings are insecure" msgstr "A beállításai nem biztonságosak" -#: ../src/client/application/geary-controller.vala:982 +#: ../src/client/application/geary-controller.vala:993 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -464,29 +529,29 @@ "Ez azt jelenti, hogy a felhasználónevét és a jelszavát mások elolvashatják a " "hálózaton. Biztos benne, hogy ezt szeretné tenni?" -#: ../src/client/application/geary-controller.vala:983 +#: ../src/client/application/geary-controller.vala:994 msgid "Co_ntinue" msgstr "Fo_lytatás" -#: ../src/client/application/geary-controller.vala:1030 +#: ../src/client/application/geary-controller.vala:1041 msgid "Error connecting to the server" msgstr "Hiba a kiszolgálóhoz kapcsolódás közben" -#: ../src/client/application/geary-controller.vala:1031 +#: ../src/client/application/geary-controller.vala:1042 msgid "" "Geary encountered an error while connecting to the server. Please try again " "in a few moments." msgstr "" -"A Geary hibát észlelt a kiszolgálóhoz kapcsolódás közben. Próbálja újra " -"néhány pillanat múlva." +"A Geary hibába ütközött a kiszolgálóhoz történő kapcsolódáskor. Próbálja újra " +"néhány másodperc múlva." #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:1068 +#: ../src/client/application/geary-controller.vala:1079 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "Hiba a levél küldésekor" -#: ../src/client/application/geary-controller.vala:1069 +#: ../src/client/application/geary-controller.vala:1080 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." @@ -496,12 +561,12 @@ #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1073 +#: ../src/client/application/geary-controller.vala:1084 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "Hiba az elküldött levél mentésekor" -#: ../src/client/application/geary-controller.vala:1074 +#: ../src/client/application/geary-controller.vala:1085 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." @@ -510,19 +575,19 @@ "mappába. Az üzenet a Kimenő levelek mappájában fog maradni, amíg ki nem " "törli azt." -#: ../src/client/application/geary-controller.vala:1143 +#: ../src/client/application/geary-controller.vala:1154 msgid "Labels" msgstr "Címkék" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1155 +#: ../src/client/application/geary-controller.vala:1166 #, c-format msgid "Unable to open the database for %s" msgstr "Nem sikerült megnyitni az adatbázist ehhez: %s" -#: ../src/client/application/geary-controller.vala:1156 +#: ../src/client/application/geary-controller.vala:1167 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -546,20 +611,21 @@ "Az adatbázis újjáépítése törölni fogja az összes helyi levelet és azok " "mellékleteit. A kiszolgálón lévő levelek nem érintettek." -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "_Rebuild" msgstr "Ú_jjáépítés" -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "E_xit" msgstr "_Kilépés" -#: ../src/client/application/geary-controller.vala:1167 +#: ../src/client/application/geary-controller.vala:1178 #, c-format -msgid "Unable to rebuild database for \"%s\"" +#| msgid "Unable to rebuild database for \"%s\"" +msgid "Unable to rebuild database for “%s”" msgstr "Nem sikerült újjáépíteni az adatbázist ehhez: „%s”" -#: ../src/client/application/geary-controller.vala:1168 +#: ../src/client/application/geary-controller.vala:1179 #, c-format msgid "" "Error during rebuild:\n" @@ -572,14 +638,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1190 -#: ../src/client/application/geary-controller.vala:1200 +#: ../src/client/application/geary-controller.vala:1201 #: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:1222 #, c-format msgid "Unable to open local mailbox for %s" msgstr "Nem sikerült megnyitni a helyi postafiókot ehhez: %s" -#: ../src/client/application/geary-controller.vala:1191 +#: ../src/client/application/geary-controller.vala:1202 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -598,10 +664,16 @@ "\n" "%s" -#: ../src/client/application/geary-controller.vala:1201 +#: ../src/client/application/geary-controller.vala:1212 +#| msgid "" +#| "The version number of the local mail database is formatted for a newer " +#| "version of Geary. Unfortunately, the database cannot be \"rolled back\" " +#| "to work with this version of Geary.\n" +#| "\n" +#| "Please install the latest version of Geary and try again." msgid "" "The version number of the local mail database is formatted for a newer " -"version of Geary. Unfortunately, the database cannot be \"rolled back\" to " +"version of Geary. Unfortunately, the database cannot be “rolled back” to " "work with this version of Geary.\n" "\n" "Please install the latest version of Geary and try again." @@ -612,7 +684,7 @@ "\n" "Telepítse a Geary legújabb verzióját és próbálja újra." -#: ../src/client/application/geary-controller.vala:1212 +#: ../src/client/application/geary-controller.vala:1223 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" @@ -624,30 +696,15 @@ "\n" "Ellenőrizze a hálózati kapcsolatot és indítsa újra a Geary programot." -#: ../src/client/application/geary-controller.vala:1723 -#, c-format -msgid "About %s" -msgstr "%s névjegye" - -#. / Translators: add your name and email address to receive credit in the About dialog -#. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1726 -msgid "translator-credits" -msgstr "" -"Kelemen Gábor \n" -"Lukács Bence \n" -"Úr Balázs " - -#: ../src/client/application/geary-controller.vala:1984 +#: ../src/client/application/geary-controller.vala:1999 msgid "Undo move (Ctrl+Z)" msgstr "Áthelyezés visszavonása (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:1994 -#, c-format -msgid "Are you sure you want to open \"%s\"?" -msgstr "Biztosan meg szeretné nyitni: „%s”?" +#: ../src/client/application/geary-controller.vala:2009 +msgid "Are you sure you want to open these attachments?" +msgstr "Biztosan meg szeretné nyitni ezeket a mellékleteket?" -#: ../src/client/application/geary-controller.vala:1995 +#: ../src/client/application/geary-controller.vala:2010 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -655,119 +712,110 @@ "A mellékletek kárt okozhatnak a rendszerében, ha meg vannak nyitva. Csak " "megbízható forrásokból nyisson meg fájlokat." -#: ../src/client/application/geary-controller.vala:1996 -msgid "Don't _ask me again" +#: ../src/client/application/geary-controller.vala:2011 +#| msgid "Don't _ask me again" +msgid "Don’t _ask me again" msgstr "Ne _kérdezze újra" -#: ../src/client/application/geary-controller.vala:2014 +#: ../src/client/application/geary-controller.vala:2121 #, c-format -msgid "A file named \"%s\" already exists. Do you want to replace it?" -msgstr "A(z) „%s” nevű fájl már létezik. Le akarja cserélni?" +#| msgid "A file named \"%s\" already exists. Do you want to replace it?" +msgid "A file named “%s” already exists. Do you want to replace it?" +msgstr "Már létezik „%s” nevű fájl. Le akarja cserélni?" -#: ../src/client/application/geary-controller.vala:2016 +#: ../src/client/application/geary-controller.vala:2123 #, c-format +#| msgid "" +#| "The file already exists in \"%s\". Replacing it will overwrite its " +#| "contents." msgid "" -"The file already exists in \"%s\". Replacing it will overwrite its contents." +"The file already exists in “%s”. Replacing it will overwrite its contents." msgstr "" "A fájl már létezik a(z) „%s” helyen. Lecserélésével a tartalma felül lesz " "írva." -#: ../src/client/application/geary-controller.vala:2019 +#: ../src/client/application/geary-controller.vala:2126 msgid "_Replace" msgstr "_Csere" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2324 +#: ../src/client/application/geary-controller.vala:2374 msgid "Close open draft messages?" msgstr "Bezárja a megnyitott piszkozat leveleket?" -#: ../src/client/application/geary-controller.vala:2454 +#: ../src/client/application/geary-controller.vala:2496 #, c-format msgid "Empty all email from your %s folder?" msgstr "Minden levelet kiürít a(z) %s mappából?" -#: ../src/client/application/geary-controller.vala:2455 +#: ../src/client/application/geary-controller.vala:2497 msgid "This removes the email from Geary and your email server." msgstr "" "Ez eltávolítja a levelet a Geary programból és a levelezőkiszolgálóról." -#: ../src/client/application/geary-controller.vala:2456 +#: ../src/client/application/geary-controller.vala:2498 msgid "This cannot be undone." msgstr "Ez nem vonható vissza." -#: ../src/client/application/geary-controller.vala:2457 +#: ../src/client/application/geary-controller.vala:2499 #, c-format msgid "Empty %s" msgstr "%s ürítése" -#: ../src/client/application/geary-controller.vala:2474 +#: ../src/client/application/geary-controller.vala:2516 #, c-format msgid "Error emptying %s" msgstr "Hiba a(z) %s ürítésekor" -#: ../src/client/application/geary-controller.vala:2504 +#: ../src/client/application/geary-controller.vala:2546 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "Véglegesen törölni szeretné ezt a levelet?" msgstr[1] "Véglegesen törölni szeretné ezeket a leveleket?" -#: ../src/client/application/geary-controller.vala:2506 +#: ../src/client/application/geary-controller.vala:2548 msgid "Delete" msgstr "Törlés" -#: ../src/client/application/geary-controller.vala:2537 +#: ../src/client/application/geary-controller.vala:2580 msgid "Undo archive (Ctrl+Z)" msgstr "Archiválás visszavonása (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2552 +#: ../src/client/application/geary-controller.vala:2595 msgid "Undo trash (Ctrl+Z)" msgstr "Kukába helyezés visszavonása (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2605 +#: ../src/client/application/geary-controller.vala:2649 msgid "Undo (Ctrl+Z)" msgstr "Visszavonás (Ctrl+Z)" -#: ../src/client/components/conversation-find-bar.vala:214 -#, c-format -msgid "%i match" -msgid_plural "%i matches" -msgstr[0] "%i találat" -msgstr[1] "%i találat" - -#: ../src/client/components/conversation-find-bar.vala:216 -#, c-format -msgid "%i match (wrapped)" -msgid_plural "%i matches (wrapped)" -msgstr[0] "%i találat (körbeért)" -msgstr[1] "%i találat (körbeért)" - -#: ../src/client/components/conversation-find-bar.vala:218 -msgid "not found" -msgstr "nincs találat" +#: ../src/client/application/geary-controller.vala:2780 +msgid "Failed to open default text editor." +msgstr "Nem sikerült megnyitni az alapértelmezett szövegszerkesztőt." -#: ../src/client/components/main-window.vala:438 +#: ../src/client/components/main-window.vala:389 #, c-format msgid "%s (%d)" msgstr "%s (%d)" -#: ../src/client/components/search-bar.vala:10 +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "Keresés" #. Search entry. -#: ../src/client/components/search-bar.vala:25 +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" msgstr "A fiók minden levélének keresése kulcsszavakra (Ctrl+S)" -#: ../src/client/components/search-bar.vala:118 +#: ../src/client/components/search-bar.vala:100 #, c-format msgid "Indexing %s account" msgstr "%s fiók indexelése" -#: ../src/client/components/search-bar.vala:129 +#: ../src/client/components/search-bar.vala:111 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" @@ -775,7 +823,8 @@ #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 -msgid "Sending..." +#| msgid "Sending..." +msgid "Sending…" msgstr "Küldés…" #: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 @@ -787,6 +836,10 @@ msgid "_Cancel" msgstr "Mé_gse" +#: ../src/client/components/stock.vala:21 ../ui/gtk/menus.ui.h:6 +msgid "_About" +msgstr "_Névjegy" + #: ../src/client/components/stock.vala:23 msgid "_Close" msgstr "_Bezárás" @@ -795,51 +848,73 @@ msgid "_Discard" msgstr "El_dobás" -#: ../src/client/components/stock.vala:26 +#: ../src/client/components/stock.vala:25 ../ui/gtk/menus.ui.h:5 +msgid "_Help" +msgstr "_Súgó" + +#: ../src/client/components/stock.vala:26 ../ui/conversation-email-menus.ui.h:9 msgid "_Open" msgstr "_Megnyitás" -#: ../src/client/components/stock.vala:28 -msgid "_Print..." +#: ../src/client/components/stock.vala:27 ../ui/gtk/menus.ui.h:3 +msgid "_Preferences" +msgstr "_Beállítások" + +#: ../src/client/components/stock.vala:28 ../ui/conversation-email-menus.ui.h:7 +#| msgid "_Print..." +msgid "_Print…" msgstr "_Nyomtatás…" +#: ../src/client/components/stock.vala:29 ../ui/gtk/menus.ui.h:7 +msgid "_Quit" +msgstr "_Kilépés" + #: ../src/client/components/stock.vala:30 ../ui/remove_confirm.glade.h:6 msgid "_Remove" msgstr "_Eltávolítás" -#. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1335 -msgid "Select _All" -msgstr "Ö_sszes kijelölése" - -#: ../src/client/components/stock.vala:33 msgid "_Keep" msgstr "_Megtartás" -#: ../src/client/composer/composer-widget.vala:73 +#: ../src/client/composer/composer-link-popover.vala:150 +msgid "Link URL is not correctly formatted, e.g. http://example.com" +msgstr "A hivatkozás URL nem helyesen formázott, például http://example.com" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid link URL" +msgstr "Érvénytelen hivatkozás URL" + +#: ../src/client/composer/composer-link-popover.vala:157 +#| msgid "Remove email address" +msgid "Invalid email address" +msgstr "Érvénytelen e-mail cím" + +#: ../src/client/composer/composer-widget.vala:154 msgid "Saved" msgstr "Elmentve" -#: ../src/client/composer/composer-widget.vala:74 +#: ../src/client/composer/composer-widget.vala:155 msgid "Saving" msgstr "Mentés" -#: ../src/client/composer/composer-widget.vala:75 +#: ../src/client/composer/composer-widget.vala:156 msgid "Error saving" msgstr "Hiba a mentéskor" -#: ../src/client/composer/composer-widget.vala:76 +#: ../src/client/composer/composer-widget.vala:157 msgid "Press Backspace to delete quote" msgstr "Nyomja meg a Backspace billentyűt az idézet törléséhez" -#: ../src/client/composer/composer-widget.vala:77 +#: ../src/client/composer/composer-widget.vala:158 msgid "New Message" msgstr "Új levél" -#. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since -#. this is full-word checking, include all variants of each word. No spaces are allowed. -#: ../src/client/composer/composer-widget.vala:138 +#. Translators: This is list of keywords, separated by pipe ("|") +#. characters, that suggest an attachment; since this is full-word +#. checking, include all variants of each word. No spaces are +#. allowed. +#: ../src/client/composer/composer-widget.vala:167 msgid "" "attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" "enclosing|encloses|enclosure|enclosures" @@ -854,275 +929,191 @@ "önéletrajzot|önéletrajzom|önéletrajzomat|.doc|.docx|.pdf|.xls|.xlsx|.ppt|." "pptx|.rtf|.pps|.odt|.ods|.odp|.odg|.odb" -#: ../src/client/composer/composer-widget.vala:1121 -#: ../src/client/composer/composer-widget.vala:1125 +#: ../src/client/composer/composer-widget.vala:1122 +#: ../src/client/composer/composer-widget.vala:1141 msgid "Do you want to discard this message?" msgstr "El szeretné dobni ezt a levelet?" -#: ../src/client/composer/composer-widget.vala:1281 +#: ../src/client/composer/composer-widget.vala:1245 msgid "Send message with an empty subject and body?" msgstr "Elküldi a levelet üres tárggyal és törzzsel?" -#: ../src/client/composer/composer-widget.vala:1283 +#: ../src/client/composer/composer-widget.vala:1247 msgid "Send message with an empty subject?" msgstr "Elküldi a levelet üres tárggyal?" -#: ../src/client/composer/composer-widget.vala:1285 +#: ../src/client/composer/composer-widget.vala:1249 msgid "Send message with an empty body?" msgstr "Elküldi a levelet üres törzzsel?" -#: ../src/client/composer/composer-widget.vala:1287 +#: ../src/client/composer/composer-widget.vala:1253 msgid "Send message without an attachment?" msgstr "Elküldi a levelet melléklet nélkül?" -#: ../src/client/composer/composer-widget.vala:1553 -msgid "Cannot add attachment" -msgstr "Nem sikerült mellékletet hozzáadni" +#: ../src/client/composer/composer-widget.vala:1515 +#, c-format +#| msgid "\"%s\" already attached for delivery." +msgid "“%s” already attached for delivery." +msgstr "„%s” már csatolva van a küldeményhez." -#: ../src/client/composer/composer-widget.vala:1564 +#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" +#. Translators: The first argument will be a +#. description of the document type, the second will +#. be a human-friendly size string. For example: +#. Document (100.9MB) +#: ../src/client/composer/composer-widget.vala:1523 +#: ../src/client/conversation-viewer/conversation-email.vala:138 #, c-format -msgid "\"%s\" could not be found." +msgid "%s (%s)" +msgstr "%s (%s)" + +#: ../src/client/composer/composer-widget.vala:1560 +#, c-format +#| msgid "\"%s\" could not be found." +msgid "“%s” could not be found." msgstr "„%s” nem található." -#: ../src/client/composer/composer-widget.vala:1571 +#: ../src/client/composer/composer-widget.vala:1566 #, c-format -msgid "\"%s\" is a folder." +#| msgid "\"%s\" is a folder." +msgid "“%s” is a folder." msgstr "„%s” egy mappa." -#: ../src/client/composer/composer-widget.vala:1578 +#: ../src/client/composer/composer-widget.vala:1572 #, c-format -msgid "\"%s\" is an empty file." +#| msgid "\"%s\" is an empty file." +msgid "“%s” is an empty file." msgstr "„%s” egy üres fájl." -#: ../src/client/composer/composer-widget.vala:1592 +#: ../src/client/composer/composer-widget.vala:1585 #, c-format -msgid "\"%s\" could not be opened for reading." +#| msgid "\"%s\" could not be opened for reading." +msgid "“%s” could not be opened for reading." msgstr "„%s” nem nyitható meg olvasásra." -#: ../src/client/composer/composer-widget.vala:1599 -#, c-format -msgid "\"%s\" already attached for delivery." -msgstr "„%s” már csatolva van a küldeményhez." - -#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-widget.vala:1608 -#, c-format -msgid "%s (%s)" -msgstr "%s (%s)" +#: ../src/client/composer/composer-widget.vala:1593 +msgid "Cannot add attachment" +msgstr "Nem sikerült mellékletet hozzáadni" -#: ../src/client/composer/composer-widget.vala:1668 +#: ../src/client/composer/composer-widget.vala:1645 msgid "To: " msgstr "Címzett: " -#: ../src/client/composer/composer-widget.vala:1671 +#: ../src/client/composer/composer-widget.vala:1648 msgid "Cc: " msgstr "Másolat: " -#: ../src/client/composer/composer-widget.vala:1674 +#: ../src/client/composer/composer-widget.vala:1651 msgid "Bcc: " msgstr "Titkos másolat: " -#: ../src/client/composer/composer-widget.vala:1677 +#: ../src/client/composer/composer-widget.vala:1654 msgid "Reply-To: " msgstr "Válaszcím: " -#: ../src/client/composer/composer-widget.vala:1910 +#: ../src/client/composer/composer-widget.vala:1786 msgid "Select Color" msgstr "Szín kiválasztása" #. Displayed in the From dropdown to indicate an "alternate email address" #. for an account. The first printf argument will be the alternate email #. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2345 +#: ../src/client/composer/composer-widget.vala:1986 #, c-format msgid "%1$s via %2$s" msgstr "%1$s ezen keresztül: %2$s" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2389 +#: ../src/client/composer/composer-widget.vala:2028 msgid "_From:" msgstr "_Feladó:" +#. Translators: This is the name of the file chooser filter +#. when inserting an image in the composer. +#: ../src/client/composer/composer-widget.vala:2252 +msgid "Images" +msgstr "Képek" + +#: ../src/client/composer/spell-check-popover.vala:117 +msgid "Remove this language from the preferred list" +msgstr "Nyelv eltávolítása az előnyben részesített listáról" + +#: ../src/client/composer/spell-check-popover.vala:121 +msgid "Add this language to the preferred list" +msgstr "Nyelv hozzáadása az előnyben részesített listához" + +#: ../src/client/composer/spell-check-popover.vala:217 +msgid "Search for more languages" +msgstr "Több nyelv keresése" + #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Én" -#: ../src/client/conversation-viewer/conversation-viewer.vala:414 -msgid "No conversations selected." -msgstr "Nincs beszélgetés kiválasztva." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:416 -#, c-format -msgid "%u conversation selected." -msgid_plural "%u conversations selected." -msgstr[0] "%u beszélgetés kijelölve." -msgstr[1] "%u beszélgetés kijelölve." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:446 -msgid "No search results found." -msgstr "Nincsenek találatok." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:448 -msgid "No conversations in folder." -msgstr "Nincsenek beszélgetések a mappában." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "This message contains remote images." -msgstr "Ez a levél távoli képeket tartalmaz." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "Show Images" -msgstr "Képek megjelenítése" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:715 -msgid "Always Show From Sender" -msgstr "Mindig jelenítse meg a feladótól" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:739 -msgid "Edit Draft" -msgstr "Piszkozat szerkesztése" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:815 -msgid "From:" -msgstr "Feladó:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:818 -msgid "To:" -msgstr "Címzett:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:821 -msgid "Cc:" -msgstr "Másolat:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:824 -msgid "Bcc:" -msgstr "Titkos másolat:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:827 -msgid "Subject:" -msgstr "Tárgy:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:830 -msgid "Date:" -msgstr "Dátum:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1150 -#, c-format -msgid "%u read message" -msgid_plural "%u read messages" -msgstr[0] "%u olvasott levél" -msgstr[1] "%u olvasott levél" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1282 -#, c-format -msgid "This message was sent successfully, but could not be saved to %s." -msgstr "" -"Ez a levél sikeresen el lett küldve, de nem sikerült elmenteni ide: %s." - -#. Add a menu item for copying the current selection. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1308 -#: ../ui/composer.glade.h:4 -msgid "_Copy" -msgstr "_Másolás" - -#. Add a menu item for copying the address. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1316 -msgid "Copy _Email Address" -msgstr "_E-mail cím másolása" - -#. Add a menu item for copying the link. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1321 -#: ../ui/composer.glade.h:17 -msgid "Copy _Link" -msgstr "_Hivatkozás másolása" - -#. Select message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1329 -msgid "Select _Message" -msgstr "_Levél kijelölése" - -#. Inspect. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1341 -msgid "_Inspect" -msgstr "_Vizsgálat" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1572 -msgid "This link appears to go to" -msgstr "Úgy tűnik, ez a hivatkozás ide mutat" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1573 -msgid "but actually goes to" -msgstr "de valójában ide ugrik" - -#. If href doesn't look like a URL, something is fishy, so warn the user -#: ../src/client/conversation-viewer/conversation-viewer.vala:1628 -msgid " (Invalid?)" -msgstr " (Érvénytelen?)" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1734 -msgid "_Save Image As..." -msgstr "_Kép mentése másként…" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1838 -msgid "_Save As..." -msgstr "M_entés másként…" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1843 -msgid "Save All A_ttachments..." -msgstr "Minden _melléklet mentése…" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1863 -msgid "Save A_ttachment..." -msgid_plural "Save All A_ttachments..." -msgstr[0] "M_elléklet mentése…" -msgstr[1] "Minden m_elléklet mentése…" - -#. Reply to all on a message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1878 -msgid "Reply to _All" -msgstr "_Válasz mindenkinek" - -#. Mark as read/unread. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1895 -msgid "_Mark as Read" -msgstr "_Megjelölés olvasottként" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1899 -msgid "_Mark as Unread" -msgstr "_Megjelölés olvasatlanként" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1905 -msgid "Mark Unread From _Here" -msgstr "Megjelölés olvasatlanként _innentől" +#. Translators: This is the file type displayed for +#. attachments with unknown file types. +#: ../src/client/conversation-viewer/conversation-email.vala:124 +msgid "Unknown" +msgstr "Ismeretlen" + +#. Preview headers +#. Translators: This is displayed in place of the from address +#. when the message has no from address. +#: ../src/client/conversation-viewer/conversation-message.vala:331 +msgid "No sender" +msgstr "Nincs feladó" + +#. Translators: This separates multiple 'from' +#. addresses in the header preview for a message. +#: ../src/client/conversation-viewer/conversation-message.vala:586 +msgid ", " +msgstr ", " + +#. Translators: This string is used as the HTML IMG ALT +#. attribute value when displaying an inline image in an email +#. that did not specify a file name. E.g. Image" +msgstr "Feladó: " + +#: ../ui/conversation-message.ui.h:2 +msgid "1/1/1970\t" +msgstr "1/1/1970\t" + +#: ../ui/conversation-message.ui.h:3 +msgid "Preview body text." +msgstr "Levéltörzs előnézete." -#. Address(es) e-mail is to be sent to -#: ../ui/composer.glade.h:53 -msgid "_To" -msgstr "_Címzett" +#: ../ui/conversation-message.ui.h:4 +msgid "Sent by:" +msgstr "Feladó:" -#: ../ui/composer.glade.h:54 -msgid "_Cc" -msgstr "_Másolat" +#: ../ui/conversation-message.ui.h:5 +msgid "Reply to:" +msgstr "Válasz:" + +#: ../ui/conversation-message.ui.h:6 +msgid "Subject" +msgstr "Tárgy" -#: ../ui/composer.glade.h:55 -msgid "_Subject" -msgstr "_Tárgy" +#: ../ui/conversation-message.ui.h:7 +msgid "To:" +msgstr "Címzett:" -#: ../ui/composer.glade.h:56 -msgid "_Bcc" -msgstr "Titk_os másolat" +#: ../ui/conversation-message.ui.h:8 +msgid "Cc:" +msgstr "Másolat:" -#: ../ui/composer.glade.h:57 -msgid "_Reply-To" -msgstr "_Válaszcím" +#: ../ui/conversation-message.ui.h:9 +msgid "Bcc:" +msgstr "Titkos másolat:" -#. Geary account mail will be sent from -#: ../ui/composer.glade.h:59 -msgid "From" -msgstr "Feladó" +#: ../ui/conversation-message.ui.h:10 +msgid "Show Images" +msgstr "Képek megjelenítése" -#: ../ui/composer.glade.h:60 -msgid "Drop files here" -msgstr "Ejtse ide a fájlokat" +#: ../ui/conversation-message.ui.h:11 +msgid "Always Show From Sender" +msgstr "Mindig jelenítse meg a feladótól" -#: ../ui/composer.glade.h:61 -msgid "To add them as attachments" -msgstr "Mellékletként való hozzáadáshoz" +#: ../ui/conversation-message.ui.h:12 +msgid "Remote images not shown" +msgstr "A távoli képek nincsenek megjelenítve" + +#: ../ui/conversation-message.ui.h:13 +msgid "Only show remote images from senders you trust." +msgstr "A távoli képek megjelenítése csak a megbízható feladóktól." + +#: ../ui/conversation-message.ui.h:14 +msgid "But actually goes to:" +msgstr "De valójában ide:" + +#: ../ui/conversation-message.ui.h:15 +#| msgid "This link appears to go to:" +msgid "The link appears to go to:" +msgstr "Úgy tűnik, ez a hivatkozás ide mutat:" + +#: ../ui/conversation-message.ui.h:16 +msgid "Deceptive link found" +msgstr "Megtévesztő hivatkozás található" + +#: ../ui/conversation-message.ui.h:17 +msgid "The email sender may be leading you to the wrong web site." +msgstr "Az e-mail küldője talán a rossz weboldalra vezeti Önt." + +#: ../ui/conversation-message.ui.h:18 +msgid "If unsure, contact the sender and ask before continuing." +msgstr "" +"Ha bizonytalan, vegye fel a kapcsolatot a küldővel, és kérdezzen rá a " +"folytatás előtt." + +#: ../ui/conversation-viewer.ui.h:1 +msgid "Find in conversation" +msgstr "Keresés a beszélgetésben" + +#: ../ui/conversation-viewer.ui.h:2 +msgid "Find the previous occurrence of the search string." +msgstr "Előző keresése a beszélgetésben." + +#: ../ui/conversation-viewer.ui.h:3 +msgid "Find the next occurrence of the search string." +msgstr "Következő keresése a beszélgetésben." #: ../ui/edit_alternate_emails.glade.h:1 msgid "Remove email address" @@ -2065,6 +2242,247 @@ msgid "label" msgstr "címke" +#: ../ui/gtk/help-overlay.ui.h:1 +msgid "Conversation Shortcuts" +msgstr "Beszélgetési gyorsbillentyűk" + +#: ../ui/gtk/help-overlay.ui.h:2 +msgctxt "shortcut window" +msgid "General" +msgstr "Általános" + +#: ../ui/gtk/help-overlay.ui.h:3 +msgctxt "shortcut window" +msgid "Move focus to the next/previous pane" +msgstr "Fókusz átvitele a következő/előző panelra" + +#: ../ui/gtk/help-overlay.ui.h:4 +msgctxt "shortcut window" +msgid "Move focus to conversation list" +msgstr "Fókusz átvitele a beszélgetések listájára" + +#: ../ui/gtk/help-overlay.ui.h:5 +msgctxt "shortcut window" +msgid "Detach composer window" +msgstr "Levélíró ablak leválasztása" + +#: ../ui/gtk/help-overlay.ui.h:6 +msgctxt "shortcut window" +msgid "Close composer window" +msgstr "Levélíró ablak bezárása" + +#: ../ui/gtk/help-overlay.ui.h:7 +msgctxt "shortcut window" +msgid "Show keyboard shortcuts" +msgstr "Gyorsbillentyűk megjelenítése" + +#: ../ui/gtk/help-overlay.ui.h:8 +msgctxt "shortcut window" +msgid "Show help" +msgstr "Súgó megjelenítése" + +#: ../ui/gtk/help-overlay.ui.h:9 +msgctxt "shortcut window" +msgid "Quit the application" +msgstr "Kilépés az alkalmazásból" + +#: ../ui/gtk/help-overlay.ui.h:10 +msgctxt "shortcut window" +msgid "Search" +msgstr "Keresés" + +#: ../ui/gtk/help-overlay.ui.h:11 +msgctxt "shortcut window" +msgid "Jump to search box" +msgstr "Ugrás a keresődobozra" + +#: ../ui/gtk/help-overlay.ui.h:12 +msgctxt "shortcut window" +msgid "Find in current conversation" +msgstr "Keresés a jelenlegi beszélgetésben" + +#: ../ui/gtk/help-overlay.ui.h:13 +msgctxt "shortcut window" +msgid "Find next/previous in current conversation" +msgstr "Következő/előző keresése a beszélgetésben" + +#: ../ui/gtk/help-overlay.ui.h:14 +msgctxt "shortcut window" +msgid "Actions" +msgstr "Műveletek" + +#: ../ui/gtk/help-overlay.ui.h:15 +msgctxt "shortcut window" +msgid "Compose a new message" +msgstr "Új levél írása" + +#: ../ui/gtk/help-overlay.ui.h:16 +msgctxt "shortcut window" +msgid "Reply to sender " +msgstr "Válasz a feladónak " + +#: ../ui/gtk/help-overlay.ui.h:17 +msgctxt "shortcut window" +msgid "Reply to all" +msgstr "Válasz mindenkinek" + +#: ../ui/gtk/help-overlay.ui.h:18 +msgctxt "shortcut window" +msgid "Forward" +msgstr "Továbbítás" + +#: ../ui/gtk/help-overlay.ui.h:19 +msgctxt "shortcut window" +msgid "Archive" +msgstr "Archiválás" + +#: ../ui/gtk/help-overlay.ui.h:20 +msgctxt "shortcut window" +msgid "Move to trash" +msgstr "Áthelyezés a Kukába" + +#: ../ui/gtk/help-overlay.ui.h:21 +msgctxt "shortcut window" +msgid "Toggle spam" +msgstr "Levélszemét jelölés be/ki" + +#: ../ui/gtk/help-overlay.ui.h:22 +msgctxt "shortcut window" +msgid "Move the conversation" +msgstr "Beszélgetés áthelyezése" + +#: ../ui/gtk/help-overlay.ui.h:23 +msgctxt "shortcut window" +msgid "Label the conversation" +msgstr "Beszélgetés címkézése" + +#: ../ui/gtk/help-overlay.ui.h:24 +msgctxt "shortcut window" +msgid "Mark read" +msgstr "Megjelölés olvasottként" + +#: ../ui/gtk/help-overlay.ui.h:25 +msgctxt "shortcut window" +msgid "Mark unread" +msgstr "Megjelölés olvasatlanként" + +#: ../ui/gtk/help-overlay.ui.h:26 +msgctxt "shortcut window" +msgid "View" +msgstr "Nézet" + +#: ../ui/gtk/help-overlay.ui.h:27 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Nagyítás" + +#: ../ui/gtk/help-overlay.ui.h:28 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Kicsinyítés" + +#: ../ui/gtk/help-overlay.ui.h:29 +msgctxt "shortcut window" +msgid "Reset zoom" +msgstr "Nagyítás visszaállítása" + +#: ../ui/gtk/help-overlay.ui.h:30 +msgctxt "shortcut window" +msgid "Additional Shortcuts" +msgstr "További gyorsbillentyűk" + +#: ../ui/gtk/help-overlay.ui.h:31 +msgctxt "shortcut window" +msgid "Star" +msgstr "Csillagozás" + +#: ../ui/gtk/help-overlay.ui.h:32 +msgctxt "shortcut window" +msgid "Unstar" +msgstr "Csillagozás megszüntetése" + +#: ../ui/gtk/help-overlay.ui.h:33 +msgctxt "shortcut window" +msgid "Delete" +msgstr "Törlés" + +#: ../ui/gtk/help-overlay.ui.h:34 +msgctxt "shortcut window" +msgid "Jump to next (older) conversation" +msgstr "Ugrás a következő (régebbi) beszélgetésre" + +#: ../ui/gtk/help-overlay.ui.h:35 +msgctxt "shortcut window" +msgid "Jump to previous (newer) conversation" +msgstr "Ugrás az előző (újabb) beszélgetésre" + +#: ../ui/gtk/help-overlay.ui.h:36 +msgid "Composer Shortcuts" +msgstr "Szerkesztő gyorsbillentyűk" + +#: ../ui/gtk/help-overlay.ui.h:37 +msgctxt "shortcut window" +msgid "Quote text" +msgstr "Szöveg idézése" + +#: ../ui/gtk/help-overlay.ui.h:38 +msgctxt "shortcut window" +msgid "Unquote text" +msgstr "Szöveg idézésének visszavonása" + +#: ../ui/gtk/help-overlay.ui.h:39 +msgctxt "shortcut window" +msgid "Send" +msgstr "Küldés" + +#: ../ui/gtk/help-overlay.ui.h:40 +msgctxt "shortcut window" +msgid "Add attachment" +msgstr "Melléklet hozzáadása" + +#: ../ui/gtk/help-overlay.ui.h:41 +msgctxt "shortcut window" +msgid "Rich text mode" +msgstr "Rich text mód" + +#: ../ui/gtk/help-overlay.ui.h:42 +msgctxt "shortcut window" +msgid "Bold text" +msgstr "Szöveg félkövérré tétele" + +#: ../ui/gtk/help-overlay.ui.h:43 +msgctxt "shortcut window" +msgid "Italicize text" +msgstr "Szöveg dőltté tétele" + +#: ../ui/gtk/help-overlay.ui.h:44 +msgctxt "shortcut window" +msgid "Underline text" +msgstr "Szöveg aláhúzása" + +#: ../ui/gtk/help-overlay.ui.h:45 +msgctxt "shortcut window" +msgid "Strike text" +msgstr "Szöveg áthúzása" + +#: ../ui/gtk/help-overlay.ui.h:46 +msgctxt "shortcut window" +msgid "Insert a link" +msgstr "Hivatkozás beszúrása" + +#: ../ui/gtk/help-overlay.ui.h:47 +msgctxt "shortcut window" +msgid "Remove formatting" +msgstr "Formázás eltávolítása" + +#: ../ui/gtk/menus.ui.h:2 +msgid "A_ccounts" +msgstr "F_iókok" + +#: ../ui/gtk/menus.ui.h:4 +msgid "_Keyboard Shortcuts" +msgstr "Gyorsbille_ntyűk" + #: ../ui/login.glade.h:1 msgid "email@example.com" msgstr "email@example.com" @@ -2189,7 +2607,7 @@ msgid "Use IMAP cre_dentials" msgstr "IMAP hitelesítési _adatok használata" -#: ../ui/login.glade.h:34 ../ui/preferences.glade.h:5 +#: ../ui/login.glade.h:34 msgid "Composer" msgstr "Szerkesztő" @@ -2209,6 +2627,10 @@ msgid "_Download mail" msgstr "Levél l_etöltése" +#: ../ui/main-toolbar.ui.h:1 +msgid "Empty Spam or Trash folders" +msgstr "Levélszemét vagy kuka mappák ürítése" + #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" msgstr "SMTP hitelesítési adatok" @@ -2225,47 +2647,43 @@ msgid "_Authenticate" msgstr "_Hitelesítés" -#: ../ui/preferences.glade.h:1 +#: ../ui/preferences-dialog.ui.h:1 msgid "Reading" msgstr "Olvasás" -#: ../ui/preferences.glade.h:2 +#: ../ui/preferences-dialog.ui.h:2 msgid "_Automatically select next message" msgstr "Következő levél _automatikus kiválasztása" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences-dialog.ui.h:3 msgid "_Display conversation preview" msgstr "_Beszélgetés előnézetének megjelenítése" -#: ../ui/preferences.glade.h:4 +#: ../ui/preferences-dialog.ui.h:4 msgid "Use _three pane view" msgstr "_Három ablaktábla nézet használata" -#: ../ui/preferences.glade.h:6 -msgid "Enable _spell checking" -msgstr "_Helyesírás-ellenőrzés bekapcsolása" - -#: ../ui/preferences.glade.h:7 +#: ../ui/preferences-dialog.ui.h:5 msgid "Notifications" msgstr "Értesítések" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences-dialog.ui.h:6 msgid "_Play notification sounds" msgstr "Értesítő hangok ­_lejátszása" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences-dialog.ui.h:7 msgid "Show _notifications for new mail" msgstr "É_rtesítések megjelenítése új levél érkezésekor" -#: ../ui/preferences.glade.h:10 +#: ../ui/preferences-dialog.ui.h:8 msgid "Always _watch for new mail" msgstr "Mindig _figyeljen az új levél érkezésére" -#: ../ui/preferences.glade.h:11 +#: ../ui/preferences-dialog.ui.h:9 msgid "Geary will run in the background and notify of new mail" msgstr "A Geary a háttérben fog futni és értesíteni fog új levél érkezésekor" -#: ../ui/preferences.glade.h:12 +#: ../ui/preferences-dialog.ui.h:10 msgid "Preferences" msgstr "Beállítások" @@ -2297,63 +2715,3 @@ msgid "Geary update in progress…" msgstr "Geary frissítés folyamatban…" -#~ msgid "Copyright 2011-2015 Yorba Foundation" -#~ msgstr "Copyright 2011-2015 Yorba Foundation" - -#~ msgid "_Donate" -#~ msgstr "_Adományozás" - -#~ msgid "Notify of new mail at start_up" -#~ msgstr "Értesítés új levélről in_dításkor" - -#~ msgid "_Delete" -#~ msgstr "_Törlés" - -#~ msgid "_Trash" -#~ msgstr "_Kuka" - -#~ msgid "Do you want to discard the unsaved message?" -#~ msgstr "El szeretné dobni a nem mentett leveleket?" - -#~ msgid "attach|enclosed|enclosing|cover letter" -#~ msgstr "csatolás|mellékelt|melléklet|levélborító" - -#~| msgid "Please enter your email password" -#~ msgid "Please enter your password" -#~ msgstr "Adja meg a jelszavát" - -#~ msgid "Edit recipients" -#~ msgstr "Címzettek szerkesztése" - -#~ msgid "C_lose" -#~ msgstr "_Bezárás" - -#~ msgid "Username:" -#~ msgstr "Felhasználónév:" - -#~ msgid "Password:" -#~ msgstr "Jelszó:" - -#~ msgid "Archive conversation (Delete, Backspace, A)" -#~ msgstr "Beszélgetés archiválása (Delete, Backspace, A)" - -#~ msgid "Port:" -#~ msgstr "Port:" - -#~ msgid "Real name:" -#~ msgstr "Valódi név:" - -#~ msgid "SSL" -#~ msgstr "SSL" - -#~ msgid "SSL/TLS encryption:" -#~ msgstr "SSL/TLS titkosítás:" - -#~ msgid "Server:" -#~ msgstr "Kiszolgáló:" - -#~ msgid "Unable to login to email server" -#~ msgstr "Nem lehet bejelentkezni az e-mail kiszolgálóra" - -#~ msgid "_Details" -#~ msgstr "_Részletek" diff -Nru geary-0.11.4/po/id.po geary-0.12.0/po/id.po --- geary-0.11.4/po/id.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/id.po 2017-10-02 11:25:21.000000000 +0000 @@ -8,11 +8,11 @@ # Mohamad Hasan Al Banna, 2013 msgid "" msgstr "" -"Project-Id-Version: geary geary-0.11\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" +"Project-Id-Version: geary master\n" +"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "product=geary&keywords=I18N+L10N&component=internationalization\n" -"POT-Creation-Date: 2017-02-07 11:16+0000\n" -"PO-Revision-Date: 2017-02-13 17:58+0700\n" +"POT-Creation-Date: 2017-03-04 02:45+0000\n" +"PO-Revision-Date: 2017-04-30 19:00+0000\n" "Last-Translator: Andika Triwidada \n" "Language-Team: Indonesian (http://www.transifex.com/projects/p/geary/" "language/id/)\n" @@ -21,33 +21,97 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 1.6.10\n" +"X-Generator: Poedit 2.0.1\n" -#: ../desktop/geary.desktop.in.h:1 ../desktop/geary-autostart.desktop.in.h:1 +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:1 +#: ../desktop/org.gnome.Geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" msgstr "Geary" -#: ../desktop/geary.desktop.in.h:2 ../desktop/geary-autostart.desktop.in.h:2 -#: ../src/client/application/geary-application.vala:18 +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:2 +#: ../desktop/org.gnome.Geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 +msgid "Send and receive email" +msgstr "Kirim dan terima surel" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:3 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"Geary adalah aplikasi surel yang dibangun di sekitar percakapan, bagi " +"desktop GNOME 3. Memungkinkan Anda membaca, mencari, dan mengirim surel " +"dengan antar muka yang modern, mudah." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:4 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"Percakapan memungkinkan Anda membaca diskusi lengkap tanpa perlu mencari dan " +"mengklik dari pesan ke pesan." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:5 +msgid "Geary’s features include:" +msgstr "Fitur Geary termasuk:" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:6 +msgid "Quick email account setup" +msgstr "Penyiapan akun surel cepat" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:7 +msgid "Shows related messages together in conversations" +msgstr "Menampilkan pesan-pesan yang berhubungan bersama-sama dalam percakapan" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:8 +msgid "Fast, full text and keyword search" +msgstr "Pencarian kata kunci dan teks penuh yang cepat" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:9 +msgid "Full-featured HTML and plain text message composer" +msgstr "Penyusun pesan teks polos dan HTML berfitur lengkap" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:10 +msgid "Desktop notification of new mail" +msgstr "Pemberitahuan desktop atas surat baru" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:11 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" +msgstr "" +"Kompatibel dengan GMail, Yahoo! Mail, Outlook.com, dan server IMAP lain" + +#: ../desktop/org.gnome.Geary.desktop.in.h:2 +msgid "Email" +msgstr "Surel" + +#: ../desktop/org.gnome.Geary.desktop.in.h:3 +msgid "Geary Email" +msgstr "Surel Geary" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/org.gnome.Geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "Surat;Surel;Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" + +#: ../desktop/org.gnome.Geary.desktop.in.h:7 ../ui/gtk/menus.ui.h:1 +msgid "Compose Message" +msgstr "Susun Pesan" + +#: ../desktop/geary-autostart.desktop.in.h:2 +#: ../src/client/application/geary-application.vala:21 msgid "Mail Client" msgstr "Klien Surat" -#: ../desktop/geary.desktop.in.h:3 ../desktop/geary-autostart.desktop.in.h:3 +#: ../desktop/geary-autostart.desktop.in.h:3 msgid "Geary Mail" msgstr "Surat Geary" -#: ../desktop/geary.desktop.in.h:4 ../desktop/geary-autostart.desktop.in.h:4 -msgid "Send and receive email" -msgstr "Kirim dan terima surel" - -#: ../desktop/geary.desktop.in.h:5 ../desktop/geary-autostart.desktop.in.h:5 +#: ../desktop/geary-autostart.desktop.in.h:5 msgid "Email;E-mail;Mail;" msgstr "Surel;Surat;Email;E-mail;Mail;" -#: ../desktop/geary.desktop.in.h:6 -msgid "Compose Message" -msgstr "Susun Pesan" - #: ../desktop/geary-attach.contract.in.h:1 msgid "Send by email" msgstr "Kirim melalui surel" @@ -58,6 +122,7 @@ #: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:31 +#: ../ui/conversation-email-menus.ui.h:10 msgid "_Save" msgstr "_Simpan" @@ -67,7 +132,7 @@ msgstr "T_ambah" #. reset/clear widgets -#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 #, c-format msgid "Additional addresses for %s" msgstr "Alamat tambahan bagi %s" @@ -88,110 +153,124 @@ msgid "First Last" msgstr "NamaDepan NamaBelakang" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." msgstr "Selamat datang ke Geary." -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." msgstr "Masukkan info akun Anda untuk memulai." -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "2 minggu ke belakang" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:254 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "1 bulan ke belakang" -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "3 bulan ke belakang" -#: ../src/client/accounts/add-edit-page.vala:256 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "6 bulan ke belakang" -#: ../src/client/accounts/add-edit-page.vala:257 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "1 tahun ke belakang" -#: ../src/client/accounts/add-edit-page.vala:258 +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" msgstr "2 tahun ke belakang" -#: ../src/client/accounts/add-edit-page.vala:259 +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" msgstr "4 tahun ke belakang" #. Separator -#: ../src/client/accounts/add-edit-page.vala:261 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "Semua" -#: ../src/client/accounts/add-edit-page.vala:280 +#: ../src/client/accounts/add-edit-page.vala:283 msgid "Edit" msgstr "Sunting" -#: ../src/client/accounts/add-edit-page.vala:282 +#: ../src/client/accounts/add-edit-page.vala:285 msgid "Preview" msgstr "Pratinjau" -#: ../src/client/accounts/add-edit-page.vala:723 +#: ../src/client/accounts/add-edit-page.vala:751 msgid "Remem_ber passwords" msgstr "I_ngat sandi" -#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:7 +#: ../src/client/accounts/add-edit-page.vala:758 ../ui/login.glade.h:7 msgid "Remem_ber password" msgstr "I_ngat sandi" -#: ../src/client/accounts/add-edit-page.vala:764 +#: ../src/client/accounts/add-edit-page.vala:792 msgid "Unable to validate:\n" msgstr "Tak dapat mengesahkan:\n" -#: ../src/client/accounts/add-edit-page.vala:766 -msgid " • Invalid account nickname.\n" -msgstr "• Nama panggilan akun tidak sah.\n" +#: ../src/client/accounts/add-edit-page.vala:794 +msgid " • Invalid account nickname.\n" +msgstr " • Nama panggilan akun tidak sah.\n" -#: ../src/client/accounts/add-edit-page.vala:769 -msgid " • Email address already added to Geary.\n" +#: ../src/client/accounts/add-edit-page.vala:797 +msgid " • Email address already added to Geary.\n" msgstr "" -"• Alamat surel telah ditambahkan ke Geary.\n" +" • Alamat surel telah ditambahkan ke Geary.\n" "\n" -#: ../src/client/accounts/add-edit-page.vala:773 -msgid " • IMAP connection error.\n" -msgstr "• Galat koneksi IMAP.\n" - -#: ../src/client/accounts/add-edit-page.vala:776 -msgid " • IMAP username or password incorrect.\n" -msgstr "• Nama pengguna atau sandi IMAP salah.\n" - -#: ../src/client/accounts/add-edit-page.vala:779 -msgid " • SMTP connection error.\n" -msgstr "• Koneksi SMTP galat.\n" - -#: ../src/client/accounts/add-edit-page.vala:782 -msgid " • SMTP username or password incorrect.\n" -msgstr "• Nama pengguna atau sandi SMTP salah.\n" - -#: ../src/client/accounts/add-edit-page.vala:786 -msgid " • Connection error.\n" -msgstr "• Galat koneksi.\n" - -#: ../src/client/accounts/add-edit-page.vala:790 -msgid " • Username or password incorrect.\n" -msgstr "• Nama pengguna atau sandi salah.\n" +#: ../src/client/accounts/add-edit-page.vala:801 +msgid " • IMAP connection error.\n" +msgstr " • Galat koneksi IMAP.\n" + +#: ../src/client/accounts/add-edit-page.vala:804 +msgid " • IMAP username or password incorrect.\n" +msgstr " • Nama pengguna atau sandi IMAP salah.\n" + +#: ../src/client/accounts/add-edit-page.vala:807 +msgid " • SMTP connection error.\n" +msgstr " • Koneksi SMTP galat.\n" + +#: ../src/client/accounts/add-edit-page.vala:810 +msgid " • SMTP username or password incorrect.\n" +msgstr " • Nama pengguna atau sandi SMTP salah.\n" + +#: ../src/client/accounts/add-edit-page.vala:814 +msgid " • Connection error.\n" +msgstr " • Galat koneksi.\n" + +#: ../src/client/accounts/add-edit-page.vala:818 +msgid " • Username or password incorrect.\n" +msgstr " • Nama pengguna atau sandi salah.\n" -#: ../src/client/application/geary-application.vala:19 +#: ../src/client/application/geary-application.vala:22 msgid "Copyright 2016 Software Freedom Conservancy Inc." msgstr "Hak Cipta 2016 Software Freedom Conservancy Inc." -#: ../src/client/application/geary-application.vala:21 +#: ../src/client/application/geary-application.vala:24 msgid "Visit the Geary web site" msgstr "Kunjungi situs web Geary" +#: ../src/client/application/geary-application.vala:464 +#, c-format +msgid "About %s" +msgstr "Tentang %s" + +#. Translators: add your name and email address to receive +#. credit in the About dialog For example: Yamada Taro +#. +#: ../src/client/application/geary-application.vala:468 +msgid "translator-credits" +msgstr "" +"Andika Triwidada , 2012, 2013, 2016, 2017\n" +"Dani Pratomo , 2012." + #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" msgstr "Mulai Geary dengan jendela utama tersembunyi" @@ -246,217 +325,191 @@ msgstr "Cabut semua sertifikat server yang memiliki peringatan TLS" #: ../src/client/application/geary-args.vala:27 +msgid "Perform a graceful quit" +msgstr "Keluar secara anggun" + +#: ../src/client/application/geary-args.vala:28 msgid "Display program version" msgstr "Tampilkan versi program" #. This gives a command-line hint on how to open new composer windows with mailto: -#: ../src/client/application/geary-args.vala:51 +#: ../src/client/application/geary-args.vala:53 #, c-format msgid "Use %s to open a new composer window" msgstr "Pakai %s untuk membuka jendela penyusun baru" -#: ../src/client/application/geary-args.vala:52 +#: ../src/client/application/geary-args.vala:54 msgid "Please report comments, suggestions and bugs to:" msgstr "Harap kirimkan komentar, saran, dan kutu ke:" #. i18n: Command line arguments are invalid -#: ../src/client/application/geary-args.vala:59 +#: ../src/client/application/geary-args.vala:61 #, c-format msgid "Failed to parse command line options: %s\n" msgstr "Gagal mengurai opsi baris perintah: %s\n" -#: ../src/client/application/geary-args.vala:70 +#: ../src/client/application/geary-args.vala:72 #, c-format -msgid "Unrecognized command line option \"%s\"\n" -msgstr "Baris perintah asing \"%s\"\n" +msgid "Unrecognized command line option “%s”\n" +msgstr "Opsi baris perintah tidak dikenal \"%s\"\n" -#: ../src/client/application/geary-controller.vala:61 +#: ../src/client/application/geary-controller.vala:57 msgid "Delete conversation" msgstr "Hapus percakapan" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:58 msgid "Delete conversation (Shift+Delete)" msgstr "Hapus percakapan (Shift+Delete)" -#: ../src/client/application/geary-controller.vala:63 +#: ../src/client/application/geary-controller.vala:59 msgid "Delete conversations (Shift+Delete)" msgstr "Hapus percakapan (Shift+Delete)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:67 +#: ../src/client/application/geary-controller.vala:63 msgid "Move conversation to Trash (Delete, Backspace)" msgstr "Pindahkan percakapan ke Tong Sampah (Delete, Backspace)" -#: ../src/client/application/geary-controller.vala:68 +#: ../src/client/application/geary-controller.vala:64 msgid "Move conversations to Trash (Delete, Backspace)" msgstr "Pindahkan percakapan ke Tong Sampah (Delete, Backspace)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:72 +#: ../src/client/application/geary-controller.vala:68 msgid "_Archive" msgstr "_Arsip" -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:69 msgid "Archive conversation (A)" msgstr "Arsipkan percakapan (A)" -#: ../src/client/application/geary-controller.vala:74 +#: ../src/client/application/geary-controller.vala:70 msgid "Archive conversations (A)" msgstr "Arsipkan percakapan (A)" -#: ../src/client/application/geary-controller.vala:77 +#: ../src/client/application/geary-controller.vala:73 msgid "Mark as S_pam" msgstr "Tandai sebagai S_pam" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:74 msgid "Mark as not S_pam" msgstr "Tandai sebagai bukan S_pam" -#: ../src/client/application/geary-controller.vala:80 -#: ../src/client/application/geary-controller.vala:396 +#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:448 msgid "Mark conversation" msgstr "Tandai percakapan" -#: ../src/client/application/geary-controller.vala:81 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark conversations" msgstr "Tandai percakapan" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:78 msgid "Add label to conversation" msgstr "Tambahkan label ke percakapan" -#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:79 msgid "Add label to conversations" msgstr "Tambahkan label ke percakapan" -#: ../src/client/application/geary-controller.vala:84 -#: ../src/client/application/geary-controller.vala:435 +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:487 msgid "Move conversation" msgstr "Pindahkan percakapan" -#: ../src/client/application/geary-controller.vala:85 +#: ../src/client/application/geary-controller.vala:81 msgid "Move conversations" msgstr "Pindahkan percakapan" -#: ../src/client/application/geary-controller.vala:376 -#: ../ui/app_menu.interface.h:1 -msgid "A_ccounts" -msgstr "A_kun" - -#: ../src/client/application/geary-controller.vala:381 -#: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 -msgid "_Preferences" -msgstr "_Preferensi" - -#: ../src/client/application/geary-controller.vala:385 -#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:3 -msgid "_Help" -msgstr "_Bantuan" - -#: ../src/client/application/geary-controller.vala:389 -#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:4 -msgid "_About" -msgstr "Tent_ang" - -#: ../src/client/application/geary-controller.vala:393 -#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:5 -msgid "_Quit" -msgstr "_Keluar" - -#: ../src/client/application/geary-controller.vala:398 -msgid "_Mark as..." -msgstr "Tan_dai sebagai..." +#: ../src/client/application/geary-controller.vala:450 +msgid "_Mark as…" +msgstr "_Tandai sebagai…" -#: ../src/client/application/geary-controller.vala:404 +#: ../src/client/application/geary-controller.vala:456 msgid "Mark as _Read" msgstr "Tandai Sudah Di_baca" -#: ../src/client/application/geary-controller.vala:410 +#: ../src/client/application/geary-controller.vala:462 msgid "Mark as _Unread" msgstr "Tandai _Belum Dibaca" -#: ../src/client/application/geary-controller.vala:416 +#: ../src/client/application/geary-controller.vala:468 msgid "_Star" msgstr "_Bintangi" -#: ../src/client/application/geary-controller.vala:421 +#: ../src/client/application/geary-controller.vala:473 msgid "U_nstar" msgstr "Hapus bi_ntang" -#: ../src/client/application/geary-controller.vala:431 +#: ../src/client/application/geary-controller.vala:483 msgid "Add label" msgstr "Tambah label" -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:484 msgid "_Label" msgstr "_Label" -#: ../src/client/application/geary-controller.vala:436 +#: ../src/client/application/geary-controller.vala:488 msgid "_Move" msgstr "_Pindahkan" -#: ../src/client/application/geary-controller.vala:440 +#: ../src/client/application/geary-controller.vala:492 msgid "Compose new message (Ctrl+N, N)" msgstr "Susun pesan baru (Ctrl+N, N)" -#. Reply to a message. -#: ../src/client/application/geary-controller.vala:444 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1873 +#: ../src/client/application/geary-controller.vala:496 +#: ../ui/conversation-email-menus.ui.h:1 msgid "_Reply" msgstr "B_alas" -#: ../src/client/application/geary-controller.vala:445 +#: ../src/client/application/geary-controller.vala:497 msgid "Reply (Ctrl+R, R)" msgstr "Balas (Ctrl+R, R)" -#: ../src/client/application/geary-controller.vala:449 +#: ../src/client/application/geary-controller.vala:501 msgid "R_eply All" msgstr "Balas S_emua" -#: ../src/client/application/geary-controller.vala:450 +#: ../src/client/application/geary-controller.vala:502 msgid "Reply all (Ctrl+Shift+R, Shift+R)" msgstr "Balas semua (Ctrl+Shift+R, Shift+R)" -#. Forward a message. -#: ../src/client/application/geary-controller.vala:455 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1883 +#: ../src/client/application/geary-controller.vala:507 +#: ../ui/conversation-email-menus.ui.h:3 msgid "_Forward" msgstr "_Teruskan" -#: ../src/client/application/geary-controller.vala:456 +#: ../src/client/application/geary-controller.vala:508 msgid "Forward (Ctrl+L, F)" msgstr "Maju (Ctrl+L, F)" -#: ../src/client/application/geary-controller.vala:495 -msgid "Empty" -msgstr "Kosong" - -#: ../src/client/application/geary-controller.vala:496 -msgid "Empty Spam or Trash folders" -msgstr "Kosongkan folder Spam atau Sampah" - -#: ../src/client/application/geary-controller.vala:500 +#: ../src/client/application/geary-controller.vala:538 msgid "Empty _Spam…" -msgstr "Kosongkan _Spam..." +msgstr "Kosongkan _Spam…" -#: ../src/client/application/geary-controller.vala:504 +#: ../src/client/application/geary-controller.vala:542 msgid "Empty _Trash…" -msgstr "Kosongkan _Tong Sampah..." +msgstr "Kosongkan _Tong Sampah…" #. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:537 +#: ../src/client/application/geary-controller.vala:574 msgid "Toggle search bar" msgstr "Jungkitkan bilah pencarian" -#: ../src/client/application/geary-controller.vala:744 +#. No callback is connected, since we bind the toggle button to the find bar visibility +#: ../src/client/application/geary-controller.vala:579 +msgid "Toggle find bar" +msgstr "Jungkitkan bilah pencarian" + +#: ../src/client/application/geary-controller.vala:757 msgid "Unable to store server trust exception" msgstr "Tak bisa menyimpan pengecualian kepercayaan server" -#: ../src/client/application/geary-controller.vala:981 +#: ../src/client/application/geary-controller.vala:992 msgid "Your settings are insecure" msgstr "Pengaturan Anda tak aman" -#: ../src/client/application/geary-controller.vala:982 +#: ../src/client/application/geary-controller.vala:993 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -466,15 +519,15 @@ "nama pengguna dan sandi Anda bisa dibaca orang lain di jaringan ini. Anda " "yakin ingin melakukan ini?" -#: ../src/client/application/geary-controller.vala:983 +#: ../src/client/application/geary-controller.vala:994 msgid "Co_ntinue" msgstr "La_njutkan" -#: ../src/client/application/geary-controller.vala:1030 +#: ../src/client/application/geary-controller.vala:1041 msgid "Error connecting to the server" -msgstr "Galat saat menyambung ke server" +msgstr "Kesalahan saat menyambung ke server" -#: ../src/client/application/geary-controller.vala:1031 +#: ../src/client/application/geary-controller.vala:1042 msgid "" "Geary encountered an error while connecting to the server. Please try again " "in a few moments." @@ -483,47 +536,47 @@ "beberapa saat." #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:1068 +#: ../src/client/application/geary-controller.vala:1079 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "Galat saat mengirim surel" -#: ../src/client/application/geary-controller.vala:1069 +#: ../src/client/application/geary-controller.vala:1080 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." msgstr "" -"Geary menemui galat ketika mengirim sebuah surel. Bila masalah tetap muncul, " +"Gary menemui galat ketika mengirim sebuah surel. Bila masalah tetap muncul, " "harap hapus surel secara manual dari folder Kotak Keluar Anda." #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1073 +#: ../src/client/application/geary-controller.vala:1084 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "Galat saat menyimpan surel terkirim" -#: ../src/client/application/geary-controller.vala:1074 +#: ../src/client/application/geary-controller.vala:1085 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." msgstr "" -"Geary menemui galat ketika menyimpan sebuah surel terkirim ke Sent Mail. " +"Gary menemui galat ketika menyimpan sebuah surel terkirim ke Sent Mail. " "Pesan akan tetap berada di folder Kotak Keluar Anda sampai Anda menghapusnya." -#: ../src/client/application/geary-controller.vala:1143 +#: ../src/client/application/geary-controller.vala:1154 msgid "Labels" msgstr "Label" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1155 +#: ../src/client/application/geary-controller.vala:1166 #, c-format msgid "Unable to open the database for %s" msgstr "Tak bisa membuka basis data bagi %s" -#: ../src/client/application/geary-controller.vala:1156 +#: ../src/client/application/geary-controller.vala:1167 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -547,20 +600,20 @@ "Membangun ulang basis data akan menghancurkan semua surel lokal dan " "lampirannya. Surat pada server Anda tak akan terpengaruh." -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "_Rebuild" msgstr "_Bangun Ulang" -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "E_xit" msgstr "_Keluar" -#: ../src/client/application/geary-controller.vala:1167 +#: ../src/client/application/geary-controller.vala:1178 #, c-format -msgid "Unable to rebuild database for \"%s\"" +msgid "Unable to rebuild database for “%s”" msgstr "Tak bisa membangun ulang basis data bagi \"%s\"" -#: ../src/client/application/geary-controller.vala:1168 +#: ../src/client/application/geary-controller.vala:1179 #, c-format msgid "" "Error during rebuild:\n" @@ -573,14 +626,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1190 -#: ../src/client/application/geary-controller.vala:1200 +#: ../src/client/application/geary-controller.vala:1201 #: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:1222 #, c-format msgid "Unable to open local mailbox for %s" msgstr "Tak bisa membuka kotak surat bagi %s" -#: ../src/client/application/geary-controller.vala:1191 +#: ../src/client/application/geary-controller.vala:1202 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -599,10 +652,10 @@ "\n" "%s" -#: ../src/client/application/geary-controller.vala:1201 +#: ../src/client/application/geary-controller.vala:1212 msgid "" "The version number of the local mail database is formatted for a newer " -"version of Geary. Unfortunately, the database cannot be \"rolled back\" to " +"version of Geary. Unfortunately, the database cannot be “rolled back” to " "work with this version of Geary.\n" "\n" "Please install the latest version of Geary and try again." @@ -613,7 +666,7 @@ "\n" "Harap pasang versi Geary terbaru dan coba lagi." -#: ../src/client/application/geary-controller.vala:1212 +#: ../src/client/application/geary-controller.vala:1223 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" @@ -624,29 +677,15 @@ "\n" "Harap periksa koneksi jaringan Anda dan start ulang Geary." -#: ../src/client/application/geary-controller.vala:1723 -#, c-format -msgid "About %s" -msgstr "Tentang %s" - -#. / Translators: add your name and email address to receive credit in the About dialog -#. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1726 -msgid "translator-credits" -msgstr "" -"Andika Triwidada , 2012, 2013, 2016\n" -"Dani Pratomo , 2012." - -#: ../src/client/application/geary-controller.vala:1984 +#: ../src/client/application/geary-controller.vala:1999 msgid "Undo move (Ctrl+Z)" msgstr "Tak jadi pindah (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:1994 -#, c-format -msgid "Are you sure you want to open \"%s\"?" -msgstr "Anda yakin ingin membuka \"%s\"?" +#: ../src/client/application/geary-controller.vala:2009 +msgid "Are you sure you want to open these attachments?" +msgstr "Anda yakin ingin membuka lampiran-lampiran ini?" -#: ../src/client/application/geary-controller.vala:1995 +#: ../src/client/application/geary-controller.vala:2010 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -654,113 +693,101 @@ "Lampiran berpotensi bahaya jika dibuka. Hanya buka berkas dari sumber " "terpercaya." -#: ../src/client/application/geary-controller.vala:1996 -msgid "Don't _ask me again" -msgstr "Jangan t_anya lagi" +#: ../src/client/application/geary-controller.vala:2011 +msgid "Don’t _ask me again" +msgstr "Jangan tanya s_aya lagi" -#: ../src/client/application/geary-controller.vala:2014 +#: ../src/client/application/geary-controller.vala:2121 #, c-format -msgid "A file named \"%s\" already exists. Do you want to replace it?" +msgid "A file named “%s” already exists. Do you want to replace it?" msgstr "Berkas bernama \"%s\" sudah ada. Anda ingin menimpanya?" -#: ../src/client/application/geary-controller.vala:2016 +#: ../src/client/application/geary-controller.vala:2123 #, c-format msgid "" -"The file already exists in \"%s\". Replacing it will overwrite its contents." +"The file already exists in “%s”. Replacing it will overwrite its contents." msgstr "Berkas telah ada di \"%s\". Kalau ditimpa isi sebelumnya hilang." -#: ../src/client/application/geary-controller.vala:2019 +#: ../src/client/application/geary-controller.vala:2126 msgid "_Replace" msgstr "Timp_a" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2324 +#: ../src/client/application/geary-controller.vala:2374 msgid "Close open draft messages?" msgstr "Tutup draf pesan yang terbuka?" -#: ../src/client/application/geary-controller.vala:2454 +#: ../src/client/application/geary-controller.vala:2496 #, c-format msgid "Empty all email from your %s folder?" msgstr "Kosongkan semua surel dari folder %s Anda?" -#: ../src/client/application/geary-controller.vala:2455 +#: ../src/client/application/geary-controller.vala:2497 msgid "This removes the email from Geary and your email server." msgstr "Ini menghapus surel dari Geary dan server surel Anda." -#: ../src/client/application/geary-controller.vala:2456 +#: ../src/client/application/geary-controller.vala:2498 msgid "This cannot be undone." msgstr "Ini tidak bisa dibatalkan." -#: ../src/client/application/geary-controller.vala:2457 +#: ../src/client/application/geary-controller.vala:2499 #, c-format msgid "Empty %s" msgstr "Kosongkan %s" -#: ../src/client/application/geary-controller.vala:2474 +#: ../src/client/application/geary-controller.vala:2516 #, c-format msgid "Error emptying %s" msgstr "Galat saat mengosongkan %s" -#: ../src/client/application/geary-controller.vala:2504 +#: ../src/client/application/geary-controller.vala:2546 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "Anda mau membuang pesan ini secara permanen?" -#: ../src/client/application/geary-controller.vala:2506 +#: ../src/client/application/geary-controller.vala:2548 msgid "Delete" msgstr "Hapus" -#: ../src/client/application/geary-controller.vala:2537 +#: ../src/client/application/geary-controller.vala:2580 msgid "Undo archive (Ctrl+Z)" msgstr "Tak jadi arsipkan (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2552 +#: ../src/client/application/geary-controller.vala:2595 msgid "Undo trash (Ctrl+Z)" msgstr "Tak jadi buang ke tong sampah (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2605 +#: ../src/client/application/geary-controller.vala:2649 msgid "Undo (Ctrl+Z)" msgstr "Tak jadi (Ctrl+Z)" -#: ../src/client/components/conversation-find-bar.vala:214 -#, c-format -msgid "%i match" -msgid_plural "%i matches" -msgstr[0] "%i cocok" - -#: ../src/client/components/conversation-find-bar.vala:216 -#, c-format -msgid "%i match (wrapped)" -msgid_plural "%i matches (wrapped)" -msgstr[0] "%i cocok (dilipat)" - -#: ../src/client/components/conversation-find-bar.vala:218 -msgid "not found" -msgstr "tak ditemukan" +#: ../src/client/application/geary-controller.vala:2780 +msgid "Failed to open default text editor." +msgstr "Gagal membuka penyunting teks utama." -#: ../src/client/components/main-window.vala:438 +#: ../src/client/components/main-window.vala:389 #, c-format msgid "%s (%d)" msgstr "%s (%d)" -#: ../src/client/components/search-bar.vala:10 +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "Cari" #. Search entry. -#: ../src/client/components/search-bar.vala:25 +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" msgstr "Cari kata kunci pada semua surat dalam akun (Ctrl+S)" -#: ../src/client/components/search-bar.vala:118 +#: ../src/client/components/search-bar.vala:100 #, c-format msgid "Indexing %s account" msgstr "Mengindeks akun %s" -#: ../src/client/components/search-bar.vala:129 +#: ../src/client/components/search-bar.vala:111 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" @@ -768,20 +795,22 @@ #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 -msgid "Sending..." -msgstr "Mengirim..." +msgid "Sending…" +msgstr "Mengirim…" -#: ../src/client/components/stock.vala:18 -#: ../ui/account_cannot_remove.glade.h:3 +#: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 msgid "_OK" msgstr "_OK" -#: ../src/client/components/stock.vala:19 -#: ../ui/edit_alternate_emails.glade.h:3 ../ui/password-dialog.glade.h:5 -#: ../ui/remove_confirm.glade.h:5 +#: ../src/client/components/stock.vala:19 ../ui/edit_alternate_emails.glade.h:3 +#: ../ui/password-dialog.glade.h:5 ../ui/remove_confirm.glade.h:5 msgid "_Cancel" msgstr "Ba_tal" +#: ../src/client/components/stock.vala:21 ../ui/gtk/menus.ui.h:6 +msgid "_About" +msgstr "Tent_ang" + #: ../src/client/components/stock.vala:23 msgid "_Close" msgstr "_Tutup" @@ -790,51 +819,71 @@ msgid "_Discard" msgstr "_Buang" -#: ../src/client/components/stock.vala:26 +#: ../src/client/components/stock.vala:25 ../ui/gtk/menus.ui.h:5 +msgid "_Help" +msgstr "_Bantuan" + +#: ../src/client/components/stock.vala:26 ../ui/conversation-email-menus.ui.h:9 msgid "_Open" msgstr "_Buka" -#: ../src/client/components/stock.vala:28 -msgid "_Print..." -msgstr "_Cetak..." +#: ../src/client/components/stock.vala:27 ../ui/gtk/menus.ui.h:3 +msgid "_Preferences" +msgstr "_Preferensi" + +#: ../src/client/components/stock.vala:28 ../ui/conversation-email-menus.ui.h:7 +msgid "_Print…" +msgstr "_Cetak…" + +#: ../src/client/components/stock.vala:29 ../ui/gtk/menus.ui.h:7 +msgid "_Quit" +msgstr "_Keluar" #: ../src/client/components/stock.vala:30 ../ui/remove_confirm.glade.h:6 msgid "_Remove" msgstr "Singki_rkan" -#. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1335 -msgid "Select _All" -msgstr "Pilih Semu_a" - -#: ../src/client/components/stock.vala:33 msgid "_Keep" msgstr "_Pertahankan" -#: ../src/client/composer/composer-widget.vala:73 +#: ../src/client/composer/composer-link-popover.vala:150 +msgid "Link URL is not correctly formatted, e.g. http://example.com" +msgstr "URL tautan tidak diformat secara benar, mis. http://contoh.com" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid link URL" +msgstr "URL tautan tidak valid" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid email address" +msgstr "Alamat surel tidak valid" + +#: ../src/client/composer/composer-widget.vala:154 msgid "Saved" msgstr "Disimpan" -#: ../src/client/composer/composer-widget.vala:74 +#: ../src/client/composer/composer-widget.vala:155 msgid "Saving" msgstr "Menyimpan" -#: ../src/client/composer/composer-widget.vala:75 +#: ../src/client/composer/composer-widget.vala:156 msgid "Error saving" msgstr "Galat saat menyimpan" -#: ../src/client/composer/composer-widget.vala:76 +#: ../src/client/composer/composer-widget.vala:157 msgid "Press Backspace to delete quote" msgstr "Tekan Backspace untuk menghapus kutip" -#: ../src/client/composer/composer-widget.vala:77 +#: ../src/client/composer/composer-widget.vala:158 msgid "New Message" msgstr "Pesan Baru" -#. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since -#. this is full-word checking, include all variants of each word. No spaces are allowed. -#: ../src/client/composer/composer-widget.vala:138 +#. Translators: This is list of keywords, separated by pipe ("|") +#. characters, that suggest an attachment; since this is full-word +#. checking, include all variants of each word. No spaces are +#. allowed. +#: ../src/client/composer/composer-widget.vala:167 msgid "" "attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" "enclosing|encloses|enclosure|enclosures" @@ -843,271 +892,187 @@ "attachment|attachments|attached|enclose|enclosed|enclosing|encloses|" "enclosure|enclosures" -#: ../src/client/composer/composer-widget.vala:1121 -#: ../src/client/composer/composer-widget.vala:1125 +#: ../src/client/composer/composer-widget.vala:1122 +#: ../src/client/composer/composer-widget.vala:1141 msgid "Do you want to discard this message?" msgstr "Anda mau membuang pesan ini?" -#: ../src/client/composer/composer-widget.vala:1281 +#: ../src/client/composer/composer-widget.vala:1245 msgid "Send message with an empty subject and body?" msgstr "Kirim pesan dengan subjek dan isi kosong?" -#: ../src/client/composer/composer-widget.vala:1283 +#: ../src/client/composer/composer-widget.vala:1247 msgid "Send message with an empty subject?" msgstr "Kirim pesan dengan subjek kosong?" -#: ../src/client/composer/composer-widget.vala:1285 +#: ../src/client/composer/composer-widget.vala:1249 msgid "Send message with an empty body?" msgstr "Kirim pesan tanpa isi?" -#: ../src/client/composer/composer-widget.vala:1287 +#: ../src/client/composer/composer-widget.vala:1253 msgid "Send message without an attachment?" msgstr "Kirim pesan tanpa lampiran?" -#: ../src/client/composer/composer-widget.vala:1553 -msgid "Cannot add attachment" -msgstr "Tak bisa menambah lampiran" +#: ../src/client/composer/composer-widget.vala:1515 +#, c-format +msgid "“%s” already attached for delivery." +msgstr "\"%s\" sudah dilampirkan untuk pengiriman." + +#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" +#. Translators: The first argument will be a +#. description of the document type, the second will +#. be a human-friendly size string. For example: +#. Document (100.9MB) +#: ../src/client/composer/composer-widget.vala:1523 +#: ../src/client/conversation-viewer/conversation-email.vala:138 +#, c-format +msgid "%s (%s)" +msgstr "%s (%s)" -#: ../src/client/composer/composer-widget.vala:1564 +#: ../src/client/composer/composer-widget.vala:1560 #, c-format -msgid "\"%s\" could not be found." +msgid "“%s” could not be found." msgstr "\"%s\" tidak ditemukan." -#: ../src/client/composer/composer-widget.vala:1571 +#: ../src/client/composer/composer-widget.vala:1566 #, c-format -msgid "\"%s\" is a folder." -msgstr "\"%s\" adalah map." +msgid "“%s” is a folder." +msgstr "\"%s\" adalah sebuah folder." -#: ../src/client/composer/composer-widget.vala:1578 +#: ../src/client/composer/composer-widget.vala:1572 #, c-format -msgid "\"%s\" is an empty file." +msgid "“%s” is an empty file." msgstr "\"%s\" adalah berkas kosong." -#: ../src/client/composer/composer-widget.vala:1592 +#: ../src/client/composer/composer-widget.vala:1585 #, c-format -msgid "\"%s\" could not be opened for reading." +msgid "“%s” could not be opened for reading." msgstr "\"%s\" tak bisa dibuka untuk dibaca." -#: ../src/client/composer/composer-widget.vala:1599 -#, c-format -msgid "\"%s\" already attached for delivery." -msgstr "\"%s\" sudah dilampirkan untuk pengiriman." - -#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-widget.vala:1608 -#, c-format -msgid "%s (%s)" -msgstr "%s (%s)" +#: ../src/client/composer/composer-widget.vala:1593 +msgid "Cannot add attachment" +msgstr "Tak bisa menambah lampiran" -#: ../src/client/composer/composer-widget.vala:1668 +#: ../src/client/composer/composer-widget.vala:1645 msgid "To: " -msgstr "Kepada:" +msgstr "Kepada: " -#: ../src/client/composer/composer-widget.vala:1671 +#: ../src/client/composer/composer-widget.vala:1648 msgid "Cc: " msgstr "Cc: " -#: ../src/client/composer/composer-widget.vala:1674 +#: ../src/client/composer/composer-widget.vala:1651 msgid "Bcc: " msgstr "Bcc: " -#: ../src/client/composer/composer-widget.vala:1677 +#: ../src/client/composer/composer-widget.vala:1654 msgid "Reply-To: " -msgstr "Balas-Ke:" +msgstr "Balas-Ke: " -#: ../src/client/composer/composer-widget.vala:1910 +#: ../src/client/composer/composer-widget.vala:1786 msgid "Select Color" msgstr "Pilih Warna" #. Displayed in the From dropdown to indicate an "alternate email address" #. for an account. The first printf argument will be the alternate email #. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2345 +#: ../src/client/composer/composer-widget.vala:1986 #, c-format msgid "%1$s via %2$s" msgstr "%1$s via %2$s" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2389 +#: ../src/client/composer/composer-widget.vala:2028 msgid "_From:" msgstr "_Dari:" +#. Translators: This is the name of the file chooser filter +#. when inserting an image in the composer. +#: ../src/client/composer/composer-widget.vala:2252 +msgid "Images" +msgstr "Citra" + +#: ../src/client/composer/spell-check-popover.vala:117 +msgid "Remove this language from the preferred list" +msgstr "Hapus bahasa ini dari daftar yang disukai" + +#: ../src/client/composer/spell-check-popover.vala:121 +msgid "Add this language to the preferred list" +msgstr "Tambahkan bahasa ini ke daftar yang disukai" + +#: ../src/client/composer/spell-check-popover.vala:217 +msgid "Search for more languages" +msgstr "Cari lebih banyak bahasa lagi" + #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Aku" -#: ../src/client/conversation-viewer/conversation-viewer.vala:414 -msgid "No conversations selected." -msgstr "Tidak ada percakapan yang dipilih." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:416 -#, c-format -msgid "%u conversation selected." -msgid_plural "%u conversations selected." -msgstr[0] "%u percakapan dipilih." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:446 -msgid "No search results found." -msgstr "Tak ada hasil pencarian." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:448 -msgid "No conversations in folder." -msgstr "Tak ada percakapan dalam map." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "This message contains remote images." -msgstr "Pesan ini memuat gambar remote." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "Show Images" -msgstr "Tampilkan Gambar" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:715 -msgid "Always Show From Sender" -msgstr "Selalu Tampilkan Dari Pengirim" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:739 -msgid "Edit Draft" -msgstr "Sunting Draf" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:815 -msgid "From:" -msgstr "Dari:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:818 -msgid "To:" -msgstr "Ke:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:821 -msgid "Cc:" -msgstr "Cc:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:824 -msgid "Bcc:" -msgstr "Bcc:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:827 -msgid "Subject:" -msgstr "Perihal:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:830 -msgid "Date:" -msgstr "Tanggal:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1150 -#, c-format -msgid "%u read message" -msgid_plural "%u read messages" -msgstr[0] "%u pesan terbaca" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1282 -#, c-format -msgid "This message was sent successfully, but could not be saved to %s." -msgstr "Pesan ini sukses dikirim, tapi tak bisa disimpan ke %s." - -#. Add a menu item for copying the current selection. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1308 -#: ../ui/composer.glade.h:4 -msgid "_Copy" -msgstr "Sali_n" - -#. Add a menu item for copying the address. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1316 -msgid "Copy _Email Address" -msgstr "Salin Alamat Sur_el" - -#. Add a menu item for copying the link. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1321 -#: ../ui/composer.glade.h:17 -msgid "Copy _Link" -msgstr "Sa_lin Tautan" - -#. Select message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1329 -msgid "Select _Message" -msgstr "Pilih _Pesan" - -#. Inspect. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1341 -msgid "_Inspect" -msgstr "Per_iksa" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1572 -msgid "This link appears to go to" -msgstr "Tautan ini nampaknya menuju ke" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1573 -msgid "but actually goes to" -msgstr "tapi sebenarnya ke" - -#. If href doesn't look like a URL, something is fishy, so warn the user -#: ../src/client/conversation-viewer/conversation-viewer.vala:1628 -msgid " (Invalid?)" -msgstr "(Tak valid?)" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1734 -msgid "_Save Image As..." -msgstr "_Simpan Gambar Sebagai..." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1838 -msgid "_Save As..." -msgstr "_Simpan Sebagai..." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1843 -msgid "Save All A_ttachments..." -msgstr "Simpan Semua _Lampiran..." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1863 -msgid "Save A_ttachment..." -msgid_plural "Save All A_ttachments..." -msgstr[0] "Simpan Semua _Lampiran..." - -#. Reply to all on a message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1878 -msgid "Reply to _All" -msgstr "Balas ke Semu_a" - -#. Mark as read/unread. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1895 -msgid "_Mark as Read" -msgstr "Tan_dai sudah Dibaca" +#. Translators: This is the file type displayed for +#. attachments with unknown file types. +#: ../src/client/conversation-viewer/conversation-email.vala:124 +msgid "Unknown" +msgstr "Tak dikenal" + +#. Preview headers +#. Translators: This is displayed in place of the from address +#. when the message has no from address. +#: ../src/client/conversation-viewer/conversation-message.vala:331 +msgid "No sender" +msgstr "Tidak ada pengirim" + +#. Translators: This separates multiple 'from' +#. addresses in the header preview for a message. +#: ../src/client/conversation-viewer/conversation-message.vala:586 +msgid ", " +msgstr ", " + +#. Translators: This string is used as the HTML IMG ALT +#. attribute value when displaying an inline image in an email +#. that did not specify a file name. E.g. Image" +msgstr "Dari " + +#: ../ui/conversation-message.ui.h:2 +msgid "1/1/1970\t" +msgstr "1/1/1970\t" + +#: ../ui/conversation-message.ui.h:3 +msgid "Preview body text." +msgstr "Pratinjau tubuh teks." + +#: ../ui/conversation-message.ui.h:4 +msgid "Sent by:" +msgstr "Dikirim oleh:" + +#: ../ui/conversation-message.ui.h:5 +msgid "Reply to:" +msgstr "Balas ke:" + +#: ../ui/conversation-message.ui.h:6 +msgid "Subject" +msgstr "Perihal" + +#: ../ui/conversation-message.ui.h:7 +msgid "To:" +msgstr "Ke:" + +#: ../ui/conversation-message.ui.h:8 +msgid "Cc:" +msgstr "Cc:" + +#: ../ui/conversation-message.ui.h:9 +msgid "Bcc:" +msgstr "Bcc:" + +#: ../ui/conversation-message.ui.h:10 +msgid "Show Images" +msgstr "Tampilkan Gambar" + +#: ../ui/conversation-message.ui.h:11 +msgid "Always Show From Sender" +msgstr "Selalu Tampilkan Dari Pengirim" + +#: ../ui/conversation-message.ui.h:12 +msgid "Remote images not shown" +msgstr "Citra remote tidak ditampilkan" + +#: ../ui/conversation-message.ui.h:13 +msgid "Only show remote images from senders you trust." +msgstr "Hanya tampilkan citra remote dari pengirim yang Anda percayai." + +#: ../ui/conversation-message.ui.h:14 +msgid "But actually goes to:" +msgstr "Tapi sebenarnya ke:" + +#: ../ui/conversation-message.ui.h:15 +msgid "The link appears to go to:" +msgstr "Tautan ini nampaknya menuju ke:" + +#: ../ui/conversation-message.ui.h:16 +msgid "Deceptive link found" +msgstr "Ditemukan tautan yang menipu" + +#: ../ui/conversation-message.ui.h:17 +msgid "The email sender may be leading you to the wrong web site." +msgstr "Pengirim surel mungkin mengecoh Anda ke situs web yang salah." + +#: ../ui/conversation-message.ui.h:18 +msgid "If unsure, contact the sender and ask before continuing." +msgstr "Bila tidak yakin, hubungi pengirim dan tanyakan sebelum melanjutkan." + +#: ../ui/conversation-viewer.ui.h:1 +msgid "Find in conversation" +msgstr "Cari dalam percakapan" + +#: ../ui/conversation-viewer.ui.h:2 +msgid "Find the previous occurrence of the search string." +msgstr "Cari kemunculan sebelumnya dari kalimat yang dicari." + +#: ../ui/conversation-viewer.ui.h:3 +msgid "Find the next occurrence of the search string." +msgstr "Cari kemunculan selanjutnya dari kalimat yang dicari." + #: ../ui/edit_alternate_emails.glade.h:1 msgid "Remove email address" msgstr "Hapus alamat surel" @@ -2036,6 +2155,247 @@ msgid "label" msgstr "label" +#: ../ui/gtk/help-overlay.ui.h:1 +msgid "Conversation Shortcuts" +msgstr "Pintasan Percakapan" + +#: ../ui/gtk/help-overlay.ui.h:2 +msgctxt "shortcut window" +msgid "General" +msgstr "Umum" + +#: ../ui/gtk/help-overlay.ui.h:3 +msgctxt "shortcut window" +msgid "Move focus to the next/previous pane" +msgstr "Pindahkan fokus ke panel selanjutnya/sebelumnya" + +#: ../ui/gtk/help-overlay.ui.h:4 +msgctxt "shortcut window" +msgid "Move focus to conversation list" +msgstr "Pindahkan fokus ke daftar percakapan" + +#: ../ui/gtk/help-overlay.ui.h:5 +msgctxt "shortcut window" +msgid "Detach composer window" +msgstr "Copot jendela penyusun" + +#: ../ui/gtk/help-overlay.ui.h:6 +msgctxt "shortcut window" +msgid "Close composer window" +msgstr "Tutup jendela penyusun" + +#: ../ui/gtk/help-overlay.ui.h:7 +msgctxt "shortcut window" +msgid "Show keyboard shortcuts" +msgstr "Tampilkan pintasan papan tik" + +#: ../ui/gtk/help-overlay.ui.h:8 +msgctxt "shortcut window" +msgid "Show help" +msgstr "Tampilkan bantuan" + +#: ../ui/gtk/help-overlay.ui.h:9 +msgctxt "shortcut window" +msgid "Quit the application" +msgstr "Keluar aplikasi" + +#: ../ui/gtk/help-overlay.ui.h:10 +msgctxt "shortcut window" +msgid "Search" +msgstr "Cari" + +#: ../ui/gtk/help-overlay.ui.h:11 +msgctxt "shortcut window" +msgid "Jump to search box" +msgstr "Lompat ke kotak pencarian" + +#: ../ui/gtk/help-overlay.ui.h:12 +msgctxt "shortcut window" +msgid "Find in current conversation" +msgstr "Cari dalam percakapan saat ini" + +#: ../ui/gtk/help-overlay.ui.h:13 +msgctxt "shortcut window" +msgid "Find next/previous in current conversation" +msgstr "Cari selanjutnya/sebelumnya dalam percakapan saat ini" + +#: ../ui/gtk/help-overlay.ui.h:14 +msgctxt "shortcut window" +msgid "Actions" +msgstr "Aksi" + +#: ../ui/gtk/help-overlay.ui.h:15 +msgctxt "shortcut window" +msgid "Compose a new message" +msgstr "Susun suatu pesan baru" + +#: ../ui/gtk/help-overlay.ui.h:16 +msgctxt "shortcut window" +msgid "Reply to sender " +msgstr "Balas ke pengirim " + +#: ../ui/gtk/help-overlay.ui.h:17 +msgctxt "shortcut window" +msgid "Reply to all" +msgstr "Balas ke semua" + +#: ../ui/gtk/help-overlay.ui.h:18 +msgctxt "shortcut window" +msgid "Forward" +msgstr "Teruskan" + +#: ../ui/gtk/help-overlay.ui.h:19 +msgctxt "shortcut window" +msgid "Archive" +msgstr "Arsip" + +#: ../ui/gtk/help-overlay.ui.h:20 +msgctxt "shortcut window" +msgid "Move to trash" +msgstr "Pindah ke tong sampah" + +#: ../ui/gtk/help-overlay.ui.h:21 +msgctxt "shortcut window" +msgid "Toggle spam" +msgstr "Jungkitkan spam" + +#: ../ui/gtk/help-overlay.ui.h:22 +msgctxt "shortcut window" +msgid "Move the conversation" +msgstr "Pindahkan percakapan" + +#: ../ui/gtk/help-overlay.ui.h:23 +msgctxt "shortcut window" +msgid "Label the conversation" +msgstr "Labeli ke percakapan" + +#: ../ui/gtk/help-overlay.ui.h:24 +msgctxt "shortcut window" +msgid "Mark read" +msgstr "Tandai sudah dibaca" + +#: ../ui/gtk/help-overlay.ui.h:25 +msgctxt "shortcut window" +msgid "Mark unread" +msgstr "Tandai belum dibaca" + +#: ../ui/gtk/help-overlay.ui.h:26 +msgctxt "shortcut window" +msgid "View" +msgstr "Tilik" + +#: ../ui/gtk/help-overlay.ui.h:27 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Perbesar" + +#: ../ui/gtk/help-overlay.ui.h:28 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Perkecil" + +#: ../ui/gtk/help-overlay.ui.h:29 +msgctxt "shortcut window" +msgid "Reset zoom" +msgstr "Reset zum" + +#: ../ui/gtk/help-overlay.ui.h:30 +msgctxt "shortcut window" +msgid "Additional Shortcuts" +msgstr "Pintasan Tambahan" + +#: ../ui/gtk/help-overlay.ui.h:31 +msgctxt "shortcut window" +msgid "Star" +msgstr "Bintangi" + +#: ../ui/gtk/help-overlay.ui.h:32 +msgctxt "shortcut window" +msgid "Unstar" +msgstr "Hapus bintang" + +#: ../ui/gtk/help-overlay.ui.h:33 +msgctxt "shortcut window" +msgid "Delete" +msgstr "Hapus" + +#: ../ui/gtk/help-overlay.ui.h:34 +msgctxt "shortcut window" +msgid "Jump to next (older) conversation" +msgstr "Lompat ke lokasi selanjutnya (lebih lama)" + +#: ../ui/gtk/help-overlay.ui.h:35 +msgctxt "shortcut window" +msgid "Jump to previous (newer) conversation" +msgstr "Lompat ke lokasi sebelumnya (lebih baru)" + +#: ../ui/gtk/help-overlay.ui.h:36 +msgid "Composer Shortcuts" +msgstr "Pintasan Penyusun" + +#: ../ui/gtk/help-overlay.ui.h:37 +msgctxt "shortcut window" +msgid "Quote text" +msgstr "Kutip teks" + +#: ../ui/gtk/help-overlay.ui.h:38 +msgctxt "shortcut window" +msgid "Unquote text" +msgstr "Tidak mengutip teks" + +#: ../ui/gtk/help-overlay.ui.h:39 +msgctxt "shortcut window" +msgid "Send" +msgstr "Kirim" + +#: ../ui/gtk/help-overlay.ui.h:40 +msgctxt "shortcut window" +msgid "Add attachment" +msgstr "Tambah lampiran" + +#: ../ui/gtk/help-overlay.ui.h:41 +msgctxt "shortcut window" +msgid "Rich text mode" +msgstr "Mode rich text" + +#: ../ui/gtk/help-overlay.ui.h:42 +msgctxt "shortcut window" +msgid "Bold text" +msgstr "Teks tebal" + +#: ../ui/gtk/help-overlay.ui.h:43 +msgctxt "shortcut window" +msgid "Italicize text" +msgstr "Miringkan teks" + +#: ../ui/gtk/help-overlay.ui.h:44 +msgctxt "shortcut window" +msgid "Underline text" +msgstr "Garisbawahi teks" + +#: ../ui/gtk/help-overlay.ui.h:45 +msgctxt "shortcut window" +msgid "Strike text" +msgstr "Coret teks" + +#: ../ui/gtk/help-overlay.ui.h:46 +msgctxt "shortcut window" +msgid "Insert a link" +msgstr "Sisipkan tautan" + +#: ../ui/gtk/help-overlay.ui.h:47 +msgctxt "shortcut window" +msgid "Remove formatting" +msgstr "Buang format" + +#: ../ui/gtk/menus.ui.h:2 +msgid "A_ccounts" +msgstr "A_kun" + +#: ../ui/gtk/menus.ui.h:4 +msgid "_Keyboard Shortcuts" +msgstr "Pintasan Papan Ti_k" + #: ../ui/login.glade.h:1 msgid "email@example.com" msgstr "email@example.com" @@ -2074,7 +2434,7 @@ #: ../ui/login.glade.h:11 msgid "Addi_tional email addresses…" -msgstr "Alamat surel _tambahan..." +msgstr "Alamat surel _tambahan…" #: ../ui/login.glade.h:12 msgid "IMAP settings" @@ -2114,7 +2474,7 @@ #: ../ui/login.glade.h:21 msgid "Pass_word" -msgstr "San_di:" +msgstr "San_di" #: ../ui/login.glade.h:22 msgid "SMTP username" @@ -2160,7 +2520,7 @@ msgid "Use IMAP cre_dentials" msgstr "Pakai kre_densial IMAP" -#: ../ui/login.glade.h:34 ../ui/preferences.glade.h:5 +#: ../ui/login.glade.h:34 msgid "Composer" msgstr "Penyusun" @@ -2180,6 +2540,10 @@ msgid "_Download mail" msgstr "Un_duh surat" +#: ../ui/main-toolbar.ui.h:1 +msgid "Empty Spam or Trash folders" +msgstr "Kosongkan folder Spam atau Sampah" + #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" msgstr "Kredensial SMTP" @@ -2196,47 +2560,43 @@ msgid "_Authenticate" msgstr "Otentik_asikan" -#: ../ui/preferences.glade.h:1 +#: ../ui/preferences-dialog.ui.h:1 msgid "Reading" msgstr "Membaca" -#: ../ui/preferences.glade.h:2 +#: ../ui/preferences-dialog.ui.h:2 msgid "_Automatically select next message" msgstr "Otom_atis pilih pesan selanjutnya" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences-dialog.ui.h:3 msgid "_Display conversation preview" msgstr "_Tampilkan pratinjau percakapan" -#: ../ui/preferences.glade.h:4 +#: ../ui/preferences-dialog.ui.h:4 msgid "Use _three pane view" msgstr "Pakai tilikan _tiga panel" -#: ../ui/preferences.glade.h:6 -msgid "Enable _spell checking" -msgstr "Fung_sikan pemeriksa ejaan" - -#: ../ui/preferences.glade.h:7 +#: ../ui/preferences-dialog.ui.h:5 msgid "Notifications" msgstr "Pemberitahuan" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences-dialog.ui.h:6 msgid "_Play notification sounds" msgstr "Bunyikan suara _pemberitahuan" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences-dialog.ui.h:7 msgid "Show _notifications for new mail" msgstr "Tu_njukkan pemberitahuan bagi surat baru" -#: ../ui/preferences.glade.h:10 +#: ../ui/preferences-dialog.ui.h:8 msgid "Always _watch for new mail" msgstr "Selalu a_wasi surat baru" -#: ../ui/preferences.glade.h:11 +#: ../ui/preferences-dialog.ui.h:9 msgid "Geary will run in the background and notify of new mail" msgstr "Geary akan berjalan di latar dan memberitahukan adanya surel baru" -#: ../ui/preferences.glade.h:12 +#: ../ui/preferences-dialog.ui.h:10 msgid "Preferences" msgstr "Preferensi" @@ -2246,7 +2606,7 @@ "account? " msgstr "" "Anda yakin ingin menghapus akun ini?" +"span> " #: ../ui/remove_confirm.glade.h:2 msgid "" @@ -2266,4 +2626,4 @@ #: ../ui/upgrade_dialog.glade.h:1 msgid "Geary update in progress…" -msgstr "Pemutakhiran Geary sedang berlangsung..." +msgstr "Pemutakhiran Geary sedang berlangsung…" diff -Nru geary-0.11.4/po/it.po geary-0.12.0/po/it.po --- geary-0.11.4/po/it.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/it.po 2017-10-02 11:25:21.000000000 +0000 @@ -12,15 +12,15 @@ # Piercarlo Bennici , 2013 # Vincenzo Cerminara , 2012 # Gianvito Cavasoli , 2016. -# Federico Bruni , 2013, 2014, 2015, 2016. +# Federico Bruni , 2013, 2014, 2015, 2016, 2017. # msgid "" msgstr "" "Project-Id-Version: geary master\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" +"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "product=geary&keywords=I18N+L10N&component=internationalization\n" -"POT-Creation-Date: 2016-12-18 15:36+0000\n" -"PO-Revision-Date: 2016-12-19 18:48+0100\n" +"POT-Creation-Date: 2017-02-22 19:19+0000\n" +"PO-Revision-Date: 2017-03-03 13:13+0100\n" "Last-Translator: Federico Bruni \n" "Language-Team: Italiano <>\n" "Language: it\n" @@ -30,31 +30,97 @@ "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Gtranslator 2.91.7\n" -#: ../desktop/geary.desktop.in.h:1 ../desktop/geary-autostart.desktop.in.h:1 +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:1 +#: ../desktop/org.gnome.Geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" msgstr "Geary" -#: ../desktop/geary.desktop.in.h:2 ../desktop/geary-autostart.desktop.in.h:2 -#: ../src/client/application/geary-application.vala:18 +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:2 +#: ../desktop/org.gnome.Geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 +msgid "Send and receive email" +msgstr "Invia e riceve email" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:3 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"Geary è un'applicazione di posta elettronica basata sulle conversazioni, per " +"l'ambiente desktop GNOME 3. Permette di leggere, trovare e inviare email con " +"un'interfaccia semplice e moderna." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:4 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"Le conversazioni permettono di leggere un'intera discussione senza dover " +"cercare e fare clic su ogni messaggio." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:5 +msgid "Geary’s features include:" +msgstr "Le funzionalità di Geary comprendono:" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:6 +msgid "Quick email account setup" +msgstr "Rapida configurazione dell'account di posta" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:7 +msgid "Shows related messages together in conversations" +msgstr "Mostra messaggi correlati insieme in conversazioni" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:8 +msgid "Fast, full text and keyword search" +msgstr "Ricerca rapida \"full text\" e per parole chiave" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:9 +msgid "Full-featured HTML and plain text message composer" +msgstr "Compositore dei messaggi in HTML e testo semplice" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:10 +#| msgid "Show _notifications for new mail" +msgid "Desktop notification of new mail" +msgstr "Notifiche desktop della nuova posta" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:11 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" +msgstr "Compatibile con GMail, Yahoo! Mail, Outlook.com e altri server IMAP" + +#: ../desktop/org.gnome.Geary.desktop.in.h:2 +#| msgid "Gmail" +msgid "Email" +msgstr "Email" + +#: ../desktop/org.gnome.Geary.desktop.in.h:3 +#| msgid "Geary Mail" +msgid "Geary Email" +msgstr "Geary Email" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/org.gnome.Geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" + +#: ../desktop/org.gnome.Geary.desktop.in.h:7 ../ui/gtk/menus.ui.h:1 +msgid "Compose Message" +msgstr "Componi messaggio" + +#: ../desktop/geary-autostart.desktop.in.h:2 +#: ../src/client/application/geary-application.vala:21 msgid "Mail Client" msgstr "Client di posta" -#: ../desktop/geary.desktop.in.h:3 ../desktop/geary-autostart.desktop.in.h:3 +#: ../desktop/geary-autostart.desktop.in.h:3 msgid "Geary Mail" msgstr "Geary Mail" -#: ../desktop/geary.desktop.in.h:4 ../desktop/geary-autostart.desktop.in.h:4 -msgid "Send and receive email" -msgstr "Invia e riceve email" - -#: ../desktop/geary.desktop.in.h:5 ../desktop/geary-autostart.desktop.in.h:5 +#: ../desktop/geary-autostart.desktop.in.h:5 msgid "Email;E-mail;Mail;" msgstr "Email;E-mail;Mail;Posta;" -#: ../desktop/geary.desktop.in.h:6 -msgid "Compose Message" -msgstr "Componi messaggio" - #: ../desktop/geary-attach.contract.in.h:1 msgid "Send by email" msgstr "Invia per email" @@ -65,6 +131,7 @@ #: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:31 +#: ../ui/conversation-email-menus.ui.h:10 msgid "_Save" msgstr "_Salva" @@ -74,7 +141,7 @@ msgstr "A_ggiungi" #. reset/clear widgets -#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 #, c-format msgid "Additional addresses for %s" msgstr "Indirizzi aggiuntivi per %s" @@ -95,108 +162,131 @@ msgid "First Last" msgstr "Nome Cognome" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." msgstr "Benvenuti in Geary." -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." msgstr "Inserire le informazioni del proprio account per iniziare." -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "2 settimane fa" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:254 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "1 mese fa" -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "3 mesi fa" -#: ../src/client/accounts/add-edit-page.vala:256 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "6 mesi fa" -#: ../src/client/accounts/add-edit-page.vala:257 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "1 anno fa" -#: ../src/client/accounts/add-edit-page.vala:258 +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" msgstr "2 anni fa" -#: ../src/client/accounts/add-edit-page.vala:259 +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" msgstr "4 anni fa" #. Separator -#: ../src/client/accounts/add-edit-page.vala:261 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "Tutto" -#: ../src/client/accounts/add-edit-page.vala:280 +#: ../src/client/accounts/add-edit-page.vala:283 msgid "Edit" msgstr "Modifica" -#: ../src/client/accounts/add-edit-page.vala:282 +#: ../src/client/accounts/add-edit-page.vala:285 msgid "Preview" msgstr "Anteprima" -#: ../src/client/accounts/add-edit-page.vala:723 +#: ../src/client/accounts/add-edit-page.vala:739 msgid "Remem_ber passwords" msgstr "Ric_ordare le password" -#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:7 +#: ../src/client/accounts/add-edit-page.vala:746 ../ui/login.glade.h:7 msgid "Remem_ber password" msgstr "Ric_ordare la password" -#: ../src/client/accounts/add-edit-page.vala:764 +#: ../src/client/accounts/add-edit-page.vala:780 msgid "Unable to validate:\n" msgstr "Impossibile da convalidare:\n" -#: ../src/client/accounts/add-edit-page.vala:766 -msgid " • Invalid account nickname.\n" -msgstr " • Soprannome dell'account non valido.\n" - -#: ../src/client/accounts/add-edit-page.vala:769 -msgid " • Email address already added to Geary.\n" -msgstr " • Indirizzo email già presente nell'applicazione.\n" - -#: ../src/client/accounts/add-edit-page.vala:773 -msgid " • IMAP connection error.\n" -msgstr " • Errore di connessione IMAP.\n" - -#: ../src/client/accounts/add-edit-page.vala:776 -msgid " • IMAP username or password incorrect.\n" -msgstr " • Nome utente o password IMAP non corretti.\n" - -#: ../src/client/accounts/add-edit-page.vala:779 -msgid " • SMTP connection error.\n" -msgstr " • Errore di connessione SMTP.\n" - #: ../src/client/accounts/add-edit-page.vala:782 -msgid " • SMTP username or password incorrect.\n" -msgstr " • Nome utente o password SMTP non corretti.\n" +#| msgid " • Invalid account nickname.\n" +msgid " • Invalid account nickname.\n" +msgstr " • Soprannome dell'account non valido.\n" + +#: ../src/client/accounts/add-edit-page.vala:785 +#| msgid " • Email address already added to Geary.\n" +msgid " • Email address already added to Geary.\n" +msgstr " • Indirizzo email già presente nell'applicazione.\n" + +#: ../src/client/accounts/add-edit-page.vala:789 +#| msgid " • IMAP connection error.\n" +msgid " • IMAP connection error.\n" +msgstr " • Errore di connessione IMAP.\n" + +#: ../src/client/accounts/add-edit-page.vala:792 +#| msgid " • IMAP username or password incorrect.\n" +msgid " • IMAP username or password incorrect.\n" +msgstr " • Nome utente o password IMAP non corretti.\n" + +#: ../src/client/accounts/add-edit-page.vala:795 +#| msgid " • SMTP connection error.\n" +msgid " • SMTP connection error.\n" +msgstr " • Errore di connessione SMTP.\n" + +#: ../src/client/accounts/add-edit-page.vala:798 +#| msgid " • SMTP username or password incorrect.\n" +msgid " • SMTP username or password incorrect.\n" +msgstr " • Nome utente o password SMTP non corretti.\n" + +#: ../src/client/accounts/add-edit-page.vala:802 +#| msgid " • Connection error.\n" +msgid " • Connection error.\n" +msgstr " • Errore di connessione.\n" + +#: ../src/client/accounts/add-edit-page.vala:806 +#| msgid " • Username or password incorrect.\n" +msgid " • Username or password incorrect.\n" +msgstr " • Nome utente o password non corretti.\n" -#: ../src/client/accounts/add-edit-page.vala:786 -msgid " • Connection error.\n" -msgstr " • Errore di connessione.\n" - -#: ../src/client/accounts/add-edit-page.vala:790 -msgid " • Username or password incorrect.\n" -msgstr " • Nome utente o password non corretti.\n" - -#: ../src/client/application/geary-application.vala:19 +#: ../src/client/application/geary-application.vala:22 msgid "Copyright 2016 Software Freedom Conservancy Inc." msgstr "Copyright 2016 Software Freedom Conservancy Inc." -#: ../src/client/application/geary-application.vala:21 +#: ../src/client/application/geary-application.vala:24 msgid "Visit the Geary web site" msgstr "Visita il sito web di Geary" +#: ../src/client/application/geary-application.vala:445 +#, c-format +msgid "About %s" +msgstr "Informazioni su %s" + +#. Translators: add your name and email address to receive +#. credit in the About dialog For example: Yamada Taro +#. +#: ../src/client/application/geary-application.vala:449 +msgid "translator-credits" +msgstr "" +"Daniele Napolitano\n" +"Federico Bruni\n" +"Gianvito Cavasoli " + #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" msgstr "Avvia l'applicazione nascondendo la finestra principale" @@ -251,217 +341,194 @@ msgstr "Revoca tutti i certificati del server con avvisi TLS" #: ../src/client/application/geary-args.vala:27 +msgid "Perform a graceful quit" +msgstr "Esegui un'uscita non forzata" + +#: ../src/client/application/geary-args.vala:28 msgid "Display program version" msgstr "Visualizza la versione del programma" #. This gives a command-line hint on how to open new composer windows with mailto: -#: ../src/client/application/geary-args.vala:51 +#: ../src/client/application/geary-args.vala:53 #, c-format msgid "Use %s to open a new composer window" msgstr "Usa %s per aprire una nuova finestra di composizione" -#: ../src/client/application/geary-args.vala:52 +#: ../src/client/application/geary-args.vala:54 msgid "Please report comments, suggestions and bugs to:" msgstr "Inviare commenti, suggerimenti e segnalazioni di bug a:" #. i18n: Command line arguments are invalid -#: ../src/client/application/geary-args.vala:59 +#: ../src/client/application/geary-args.vala:61 #, c-format msgid "Failed to parse command line options: %s\n" msgstr "Analisi delle opzioni a riga di comando non riuscita: %s\n" -#: ../src/client/application/geary-args.vala:70 +#: ../src/client/application/geary-args.vala:72 #, c-format -msgid "Unrecognized command line option \"%s\"\n" +#| msgid "Unrecognized command line option \"%s\"\n" +msgid "Unrecognized command line option “%s”\n" msgstr "Opzione a riga di comando «%s» non riconosciuta\n" -#: ../src/client/application/geary-controller.vala:61 +#: ../src/client/application/geary-controller.vala:57 msgid "Delete conversation" msgstr "Elimina conversazione" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:58 msgid "Delete conversation (Shift+Delete)" msgstr "Elimina conversazione (Maiusc+Canc)" -#: ../src/client/application/geary-controller.vala:63 +#: ../src/client/application/geary-controller.vala:59 msgid "Delete conversations (Shift+Delete)" msgstr "Elimina conversazioni (Maiusc+Canc)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:67 +#: ../src/client/application/geary-controller.vala:63 msgid "Move conversation to Trash (Delete, Backspace)" msgstr "Sposta la conversazione nel cestino (Canc, Backspace)" -#: ../src/client/application/geary-controller.vala:68 +#: ../src/client/application/geary-controller.vala:64 msgid "Move conversations to Trash (Delete, Backspace)" msgstr "Sposta le conversazioni nel cestino (Canc, Backspace)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:72 +#: ../src/client/application/geary-controller.vala:68 msgid "_Archive" msgstr "_Archivia" -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:69 msgid "Archive conversation (A)" msgstr "Archivia conversazione (A)" -#: ../src/client/application/geary-controller.vala:74 +#: ../src/client/application/geary-controller.vala:70 msgid "Archive conversations (A)" msgstr "Archivia conversazioni (A)" -#: ../src/client/application/geary-controller.vala:77 +#: ../src/client/application/geary-controller.vala:73 msgid "Mark as S_pam" msgstr "Segna come i_ndesiderata" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:74 msgid "Mark as not S_pam" msgstr "Segna come non i_ndesiderata" -#: ../src/client/application/geary-controller.vala:80 -#: ../src/client/application/geary-controller.vala:396 +#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:449 msgid "Mark conversation" msgstr "Segna conversazione" -#: ../src/client/application/geary-controller.vala:81 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark conversations" msgstr "Segna conversazioni" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:78 msgid "Add label to conversation" msgstr "Aggiunge etichetta alla conversazione" -#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:79 msgid "Add label to conversations" msgstr "Aggiunge etichetta alle conversazioni" -#: ../src/client/application/geary-controller.vala:84 -#: ../src/client/application/geary-controller.vala:435 +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:488 msgid "Move conversation" msgstr "Sposta conversazione" -#: ../src/client/application/geary-controller.vala:85 +#: ../src/client/application/geary-controller.vala:81 msgid "Move conversations" msgstr "Sposta conversazioni" -#: ../src/client/application/geary-controller.vala:376 -#: ../ui/app_menu.interface.h:1 -msgid "A_ccounts" -msgstr "A_ccount" - -#: ../src/client/application/geary-controller.vala:381 -#: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 -msgid "_Preferences" -msgstr "Preferen_ze" - -#: ../src/client/application/geary-controller.vala:385 -#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:3 -msgid "_Help" -msgstr "A_iuto" +#: ../src/client/application/geary-controller.vala:451 +#| msgid "_Mark as..." +msgid "_Mark as…" +msgstr "_Segna come…" -#: ../src/client/application/geary-controller.vala:389 -#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:4 -msgid "_About" -msgstr "I_nformazioni" - -#: ../src/client/application/geary-controller.vala:393 -#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:5 -msgid "_Quit" -msgstr "_Chiudi" - -#: ../src/client/application/geary-controller.vala:398 -msgid "_Mark as..." -msgstr "_Segna come..." - -#: ../src/client/application/geary-controller.vala:404 +#: ../src/client/application/geary-controller.vala:457 msgid "Mark as _Read" msgstr "Segna come _letto" -#: ../src/client/application/geary-controller.vala:410 +#: ../src/client/application/geary-controller.vala:463 msgid "Mark as _Unread" msgstr "Segna come _non letto" -#: ../src/client/application/geary-controller.vala:416 +#: ../src/client/application/geary-controller.vala:469 msgid "_Star" msgstr "_Speciale" -#: ../src/client/application/geary-controller.vala:421 +#: ../src/client/application/geary-controller.vala:474 msgid "U_nstar" msgstr "_Non speciale" -#: ../src/client/application/geary-controller.vala:431 +#: ../src/client/application/geary-controller.vala:484 msgid "Add label" msgstr "Aggiunge etichetta" -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:485 msgid "_Label" msgstr "_Etichetta" -#: ../src/client/application/geary-controller.vala:436 +#: ../src/client/application/geary-controller.vala:489 msgid "_Move" msgstr "_Sposta" -#: ../src/client/application/geary-controller.vala:440 +#: ../src/client/application/geary-controller.vala:493 msgid "Compose new message (Ctrl+N, N)" msgstr "Compone un nuovo messaggio (Ctrl+N, N)" -#. Reply to a message. -#: ../src/client/application/geary-controller.vala:444 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1873 +#: ../src/client/application/geary-controller.vala:497 +#: ../ui/conversation-email-menus.ui.h:1 msgid "_Reply" msgstr "_Rispondi" -#: ../src/client/application/geary-controller.vala:445 +#: ../src/client/application/geary-controller.vala:498 msgid "Reply (Ctrl+R, R)" msgstr "Risponde (Ctrl+R, R)" -#: ../src/client/application/geary-controller.vala:449 +#: ../src/client/application/geary-controller.vala:502 msgid "R_eply All" msgstr "R_ispondi a tutti" -#: ../src/client/application/geary-controller.vala:450 +#: ../src/client/application/geary-controller.vala:503 msgid "Reply all (Ctrl+Shift+R, Shift+R)" msgstr "Risponde a tutti (Ctrl+Maiusc+R, Maiusc+R)" -#. Forward a message. -#: ../src/client/application/geary-controller.vala:455 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1883 +#: ../src/client/application/geary-controller.vala:508 +#: ../ui/conversation-email-menus.ui.h:3 msgid "_Forward" msgstr "_Inoltra" -#: ../src/client/application/geary-controller.vala:456 +#: ../src/client/application/geary-controller.vala:509 msgid "Forward (Ctrl+L, F)" msgstr "Inoltra (Ctrl+L, F)" -#: ../src/client/application/geary-controller.vala:495 -msgid "Empty" -msgstr "Svuota" - -#: ../src/client/application/geary-controller.vala:496 -msgid "Empty Spam or Trash folders" -msgstr "Svuota la cartella indesiderata o il cestino" - -#: ../src/client/application/geary-controller.vala:500 +#: ../src/client/application/geary-controller.vala:539 msgid "Empty _Spam…" msgstr "Svuota _indesiderata…" -#: ../src/client/application/geary-controller.vala:504 +#: ../src/client/application/geary-controller.vala:543 msgid "Empty _Trash…" msgstr "Svuota _cestino…" #. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:537 +#: ../src/client/application/geary-controller.vala:575 msgid "Toggle search bar" msgstr "Attiva/Disattiva barra di ricerca" -#: ../src/client/application/geary-controller.vala:744 +#. No callback is connected, since we bind the toggle button to the find bar visibility +#: ../src/client/application/geary-controller.vala:580 +#| msgid "Toggle search bar" +msgid "Toggle find bar" +msgstr "Attiva/Disattiva barra di ricerca nella conversazione" + +#: ../src/client/application/geary-controller.vala:758 msgid "Unable to store server trust exception" msgstr "Impossibile salvare l'eccezione di fiducia nel server" -#: ../src/client/application/geary-controller.vala:981 +#: ../src/client/application/geary-controller.vala:993 msgid "Your settings are insecure" msgstr "Le impostazioni non sono sicure" -#: ../src/client/application/geary-controller.vala:982 +#: ../src/client/application/geary-controller.vala:994 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -471,29 +538,29 @@ "che nome utente e password potrebbero essere letti da altre persone sulla " "rete. Sicuri di volerlo?" -#: ../src/client/application/geary-controller.vala:983 +#: ../src/client/application/geary-controller.vala:995 msgid "Co_ntinue" msgstr "Co_ntinua" -#: ../src/client/application/geary-controller.vala:1030 +#: ../src/client/application/geary-controller.vala:1042 msgid "Error connecting to the server" -msgstr "Errore nella connessione al server" +msgstr "Errore di connessione col server" -#: ../src/client/application/geary-controller.vala:1031 +#: ../src/client/application/geary-controller.vala:1043 msgid "" "Geary encountered an error while connecting to the server. Please try again " "in a few moments." msgstr "" -"L'applicazione ha riscontrato un errore durante la connessione al server. " -"Riprova tra poco." +"L'applicazione ha riscontrato un errore durante la connessione col server. " +"Riprovare in un secondo momento." #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:1068 +#: ../src/client/application/geary-controller.vala:1080 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "Errore durante l'invio dell'email" -#: ../src/client/application/geary-controller.vala:1069 +#: ../src/client/application/geary-controller.vala:1081 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." @@ -503,12 +570,12 @@ #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1073 +#: ../src/client/application/geary-controller.vala:1085 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "Errore durante il salvataggio dell'email inviata" -#: ../src/client/application/geary-controller.vala:1074 +#: ../src/client/application/geary-controller.vala:1086 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." @@ -517,19 +584,19 @@ "messaggio resterà nella cartella della posta in uscita finché non viene " "eliminato." -#: ../src/client/application/geary-controller.vala:1143 +#: ../src/client/application/geary-controller.vala:1155 msgid "Labels" msgstr "Etichette" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1155 +#: ../src/client/application/geary-controller.vala:1167 #, c-format msgid "Unable to open the database for %s" msgstr "Impossibile aprire il database per %s" -#: ../src/client/application/geary-controller.vala:1156 +#: ../src/client/application/geary-controller.vala:1168 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -555,20 +622,21 @@ "allegati. Tale operazione non ha effetti sulla posta presente sul server." "" -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1170 msgid "_Rebuild" msgstr "_Ricostruisci" -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1170 msgid "E_xit" msgstr "_Esci" -#: ../src/client/application/geary-controller.vala:1167 +#: ../src/client/application/geary-controller.vala:1179 #, c-format -msgid "Unable to rebuild database for \"%s\"" +#| msgid "Unable to rebuild database for \"%s\"" +msgid "Unable to rebuild database for “%s”" msgstr "Impossibile ricostruire il database per «%s»" -#: ../src/client/application/geary-controller.vala:1168 +#: ../src/client/application/geary-controller.vala:1180 #, c-format msgid "" "Error during rebuild:\n" @@ -581,14 +649,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1190 -#: ../src/client/application/geary-controller.vala:1200 -#: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:1202 +#: ../src/client/application/geary-controller.vala:1212 +#: ../src/client/application/geary-controller.vala:1223 #, c-format msgid "Unable to open local mailbox for %s" msgstr "Impossibile aprire la casella di posta locale per %s" -#: ../src/client/application/geary-controller.vala:1191 +#: ../src/client/application/geary-controller.vala:1203 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -607,10 +675,16 @@ "\n" "%s" -#: ../src/client/application/geary-controller.vala:1201 +#: ../src/client/application/geary-controller.vala:1213 +#| msgid "" +#| "The version number of the local mail database is formatted for a newer " +#| "version of Geary. Unfortunately, the database cannot be \"rolled back\" " +#| "to work with this version of Geary.\n" +#| "\n" +#| "Please install the latest version of Geary and try again." msgid "" "The version number of the local mail database is formatted for a newer " -"version of Geary. Unfortunately, the database cannot be \"rolled back\" to " +"version of Geary. Unfortunately, the database cannot be “rolled back” to " "work with this version of Geary.\n" "\n" "Please install the latest version of Geary and try again." @@ -622,7 +696,7 @@ "\n" "Si consiglia di installare l'ultima versione dell'applicazione e riprovare." -#: ../src/client/application/geary-controller.vala:1212 +#: ../src/client/application/geary-controller.vala:1224 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" @@ -634,30 +708,16 @@ "\n" "Controllare la connessione di rete e riavviare l'applicazione." -#: ../src/client/application/geary-controller.vala:1723 -#, c-format -msgid "About %s" -msgstr "Informazioni su %s" - -#. / Translators: add your name and email address to receive credit in the About dialog -#. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1726 -msgid "translator-credits" -msgstr "" -"Daniele Napolitano\n" -"Federico Bruni\n" -"Gianvito Cavasoli " - -#: ../src/client/application/geary-controller.vala:1984 +#: ../src/client/application/geary-controller.vala:1999 msgid "Undo move (Ctrl+Z)" msgstr "Annulla lo spostamento (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:1994 -#, c-format -msgid "Are you sure you want to open \"%s\"?" -msgstr "Sicuri di voler aprire «%s»?" +#: ../src/client/application/geary-controller.vala:2009 +#| msgid "Are you sure you want to open \"%s\"?" +msgid "Are you sure you want to open these attachments?" +msgstr "Sicuri di voler aprire questi allegati?" -#: ../src/client/application/geary-controller.vala:1995 +#: ../src/client/application/geary-controller.vala:2010 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -665,117 +725,108 @@ "Gli allegati possono danneggiare il sistema se aperti. Aprire solo file " "provenienti da fonti fidate." -#: ../src/client/application/geary-controller.vala:1996 -msgid "Don't _ask me again" +#: ../src/client/application/geary-controller.vala:2011 +#| msgid "Don't _ask me again" +msgid "Don’t _ask me again" msgstr "_Non chiederlo più" -#: ../src/client/application/geary-controller.vala:2014 +#: ../src/client/application/geary-controller.vala:2146 #, c-format -msgid "A file named \"%s\" already exists. Do you want to replace it?" +#| msgid "A file named \"%s\" already exists. Do you want to replace it?" +msgid "A file named “%s” already exists. Do you want to replace it?" msgstr "Il file «%s» esiste già. Sostituirlo?" -#: ../src/client/application/geary-controller.vala:2016 +#: ../src/client/application/geary-controller.vala:2148 #, c-format +#| msgid "" +#| "The file already exists in \"%s\". Replacing it will overwrite its " +#| "contents." msgid "" -"The file already exists in \"%s\". Replacing it will overwrite its contents." +"The file already exists in “%s”. Replacing it will overwrite its contents." msgstr "" "Il file esiste già in «%s». Sostituendolo il suo contenuto sarà sovrascritto." -#: ../src/client/application/geary-controller.vala:2019 +#: ../src/client/application/geary-controller.vala:2151 msgid "_Replace" msgstr "_Sostituisci" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2324 +#: ../src/client/application/geary-controller.vala:2398 msgid "Close open draft messages?" msgstr "Chiudere le bozze aperte?" -#: ../src/client/application/geary-controller.vala:2454 +#: ../src/client/application/geary-controller.vala:2520 #, c-format msgid "Empty all email from your %s folder?" msgstr "Svuotare tutte le email dalla cartella %s?" -#: ../src/client/application/geary-controller.vala:2455 +#: ../src/client/application/geary-controller.vala:2521 msgid "This removes the email from Geary and your email server." msgstr "Questo rimuoverà le email dall'applicazione e dal server di posta." -#: ../src/client/application/geary-controller.vala:2456 +#: ../src/client/application/geary-controller.vala:2522 msgid "This cannot be undone." msgstr "Impossibile annullare questa azione." -#: ../src/client/application/geary-controller.vala:2457 +#: ../src/client/application/geary-controller.vala:2523 #, c-format msgid "Empty %s" msgstr "Svuota %s" -#: ../src/client/application/geary-controller.vala:2474 +#: ../src/client/application/geary-controller.vala:2540 #, c-format msgid "Error emptying %s" msgstr "Errore nello svuotare %s" -#: ../src/client/application/geary-controller.vala:2504 +#: ../src/client/application/geary-controller.vala:2570 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "Eliminare permanentemente questo messaggio?" msgstr[1] "Eliminare permanentemente questi messaggi?" -#: ../src/client/application/geary-controller.vala:2506 +#: ../src/client/application/geary-controller.vala:2572 msgid "Delete" msgstr "Elimina" -#: ../src/client/application/geary-controller.vala:2537 +#: ../src/client/application/geary-controller.vala:2604 msgid "Undo archive (Ctrl+Z)" msgstr "Annulla l'archiviazione (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2552 +#: ../src/client/application/geary-controller.vala:2619 msgid "Undo trash (Ctrl+Z)" msgstr "Annulla lo spostamento nel cestino (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2605 +#: ../src/client/application/geary-controller.vala:2673 msgid "Undo (Ctrl+Z)" msgstr "Annulla (Ctrl+Z)" -#: ../src/client/components/conversation-find-bar.vala:214 -#, c-format -msgid "%i match" -msgid_plural "%i matches" -msgstr[0] "%i corrispondenza" -msgstr[1] "%i corrispondenze" - -#: ../src/client/components/conversation-find-bar.vala:216 -#, c-format -msgid "%i match (wrapped)" -msgid_plural "%i matches (wrapped)" -msgstr[0] "%i corrispondenza (ricomincia dall'inizio)" -msgstr[1] "%i corrispondenze (ricomincia dall'inizio)" - -#: ../src/client/components/conversation-find-bar.vala:218 -msgid "not found" -msgstr "non trovato" +#: ../src/client/application/geary-controller.vala:2806 +msgid "Failed to open default text editor." +msgstr "Apertura dell'editor di testo predefinito non riuscita." -#: ../src/client/components/main-window.vala:438 +#: ../src/client/components/main-window.vala:389 #, c-format msgid "%s (%d)" msgstr "%s (%d)" -#: ../src/client/components/search-bar.vala:10 +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "Cerca" #. Search entry. -#: ../src/client/components/search-bar.vala:25 +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" msgstr "Cerca le parole chiave in tutta la posta dell'account (Ctrl+S)" -#: ../src/client/components/search-bar.vala:118 +#: ../src/client/components/search-bar.vala:100 #, c-format msgid "Indexing %s account" msgstr "Indicizzazione dell'account %s" -#: ../src/client/components/search-bar.vala:129 +#: ../src/client/components/search-bar.vala:111 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" @@ -783,8 +834,9 @@ #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 -msgid "Sending..." -msgstr "Invio..." +#| msgid "Sending..." +msgid "Sending…" +msgstr "Invio…" #: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 msgid "_OK" @@ -795,6 +847,10 @@ msgid "_Cancel" msgstr "A_nnulla" +#: ../src/client/components/stock.vala:21 ../ui/gtk/menus.ui.h:6 +msgid "_About" +msgstr "I_nformazioni" + #: ../src/client/components/stock.vala:23 msgid "_Close" msgstr "_Chiudi" @@ -803,51 +859,75 @@ msgid "_Discard" msgstr "_Scarta" -#: ../src/client/components/stock.vala:26 +#: ../src/client/components/stock.vala:25 ../ui/gtk/menus.ui.h:5 +msgid "_Help" +msgstr "A_iuto" + +#: ../src/client/components/stock.vala:26 ../ui/conversation-email-menus.ui.h:9 msgid "_Open" msgstr "_Apri" -#: ../src/client/components/stock.vala:28 -msgid "_Print..." -msgstr "Stam_pa..." +#: ../src/client/components/stock.vala:27 ../ui/gtk/menus.ui.h:3 +msgid "_Preferences" +msgstr "Preferen_ze" + +#: ../src/client/components/stock.vala:28 ../ui/conversation-email-menus.ui.h:7 +#| msgid "_Print..." +msgid "_Print…" +msgstr "Stam_pa…" + +#: ../src/client/components/stock.vala:29 ../ui/gtk/menus.ui.h:7 +msgid "_Quit" +msgstr "_Chiudi" #: ../src/client/components/stock.vala:30 ../ui/remove_confirm.glade.h:6 msgid "_Remove" msgstr "_Rimuovi" -#. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1335 -msgid "Select _All" -msgstr "Seleziona _tutto" - -#: ../src/client/components/stock.vala:33 msgid "_Keep" msgstr "_Conserva" -#: ../src/client/composer/composer-widget.vala:73 +#: ../src/client/composer/composer-link-popover.vala:150 +msgid "Link URL is not correctly formatted, e.g. http://example.com" +msgstr "" +"L'URL del collegamento non ha un formato corretto, per esempio http://" +"esempio.com" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid link URL" +msgstr "URL del collegamento non valido" + +#: ../src/client/composer/composer-link-popover.vala:157 +#| msgid "Remove email address" +msgid "Invalid email address" +msgstr "Indirizzo email non valido" + +#: ../src/client/composer/composer-widget.vala:154 msgid "Saved" msgstr "Salvato" -#: ../src/client/composer/composer-widget.vala:74 +#: ../src/client/composer/composer-widget.vala:155 msgid "Saving" msgstr "Salvataggio" -#: ../src/client/composer/composer-widget.vala:75 +#: ../src/client/composer/composer-widget.vala:156 msgid "Error saving" msgstr "Errore durante il salvataggio" -#: ../src/client/composer/composer-widget.vala:76 +#: ../src/client/composer/composer-widget.vala:157 msgid "Press Backspace to delete quote" msgstr "Premere Backspace per eliminare la citazione" -#: ../src/client/composer/composer-widget.vala:77 +#: ../src/client/composer/composer-widget.vala:158 msgid "New Message" msgstr "Nuovo messaggio" -#. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since -#. this is full-word checking, include all variants of each word. No spaces are allowed. -#: ../src/client/composer/composer-widget.vala:138 +#. Translators: This is list of keywords, separated by pipe ("|") +#. characters, that suggest an attachment; since this is full-word +#. checking, include all variants of each word. No spaces are +#. allowed. +#: ../src/client/composer/composer-widget.vala:167 msgid "" "attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" "enclosing|encloses|enclosure|enclosures" @@ -857,275 +937,197 @@ "allegare|allegando|includo" #: ../src/client/composer/composer-widget.vala:1121 -#: ../src/client/composer/composer-widget.vala:1125 +#: ../src/client/composer/composer-widget.vala:1140 msgid "Do you want to discard this message?" msgstr "Scartare questo messaggio?" -#: ../src/client/composer/composer-widget.vala:1281 +#: ../src/client/composer/composer-widget.vala:1237 msgid "Send message with an empty subject and body?" msgstr "Inviare il messaggio senza l'oggetto e il testo?" -#: ../src/client/composer/composer-widget.vala:1283 +#: ../src/client/composer/composer-widget.vala:1239 msgid "Send message with an empty subject?" msgstr "Inviare il messaggio senza un oggetto?" -#: ../src/client/composer/composer-widget.vala:1285 +#: ../src/client/composer/composer-widget.vala:1241 msgid "Send message with an empty body?" msgstr "Inviare il messaggio senza il testo?" -#: ../src/client/composer/composer-widget.vala:1287 +#: ../src/client/composer/composer-widget.vala:1245 msgid "Send message without an attachment?" msgstr "Inviare il messaggio senza un allegato?" -#: ../src/client/composer/composer-widget.vala:1553 -msgid "Cannot add attachment" -msgstr "Impossibile aggiungere l'allegato" +#: ../src/client/composer/composer-widget.vala:1498 +#, c-format +#| msgid "\"%s\" already attached for delivery." +msgid "“%s” already attached for delivery." +msgstr "«%s» è già allegato per l'invio." -#: ../src/client/composer/composer-widget.vala:1564 +#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" +#. Translators: The first argument will be a +#. description of the document type, the second will +#. be a human-friendly size string. For example: +#. Document (100.9MB) +#: ../src/client/composer/composer-widget.vala:1506 +#: ../src/client/conversation-viewer/conversation-email.vala:135 +#, c-format +msgid "%s (%s)" +msgstr "%s (%s)" + +#: ../src/client/composer/composer-widget.vala:1543 #, c-format -msgid "\"%s\" could not be found." +#| msgid "\"%s\" could not be found." +msgid "“%s” could not be found." msgstr "«%s» non può essere trovato." -#: ../src/client/composer/composer-widget.vala:1571 +#: ../src/client/composer/composer-widget.vala:1549 #, c-format -msgid "\"%s\" is a folder." +#| msgid "\"%s\" is a folder." +msgid "“%s” is a folder." msgstr "«%s» è una cartella." -#: ../src/client/composer/composer-widget.vala:1578 +#: ../src/client/composer/composer-widget.vala:1555 #, c-format -msgid "\"%s\" is an empty file." +#| msgid "\"%s\" is an empty file." +msgid "“%s” is an empty file." msgstr "«%s» è un file vuoto." -#: ../src/client/composer/composer-widget.vala:1592 +#: ../src/client/composer/composer-widget.vala:1568 #, c-format -msgid "\"%s\" could not be opened for reading." +#| msgid "\"%s\" could not be opened for reading." +msgid "“%s” could not be opened for reading." msgstr "«%s» non può essere aperto per la lettura." -#: ../src/client/composer/composer-widget.vala:1599 -#, c-format -msgid "\"%s\" already attached for delivery." -msgstr "«%s» è già allegato per l'invio." - -#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-widget.vala:1608 -#, c-format -msgid "%s (%s)" -msgstr "%s (%s)" +#: ../src/client/composer/composer-widget.vala:1576 +msgid "Cannot add attachment" +msgstr "Impossibile aggiungere l'allegato" -#: ../src/client/composer/composer-widget.vala:1668 +#: ../src/client/composer/composer-widget.vala:1638 msgid "To: " msgstr "A: " -#: ../src/client/composer/composer-widget.vala:1671 +#: ../src/client/composer/composer-widget.vala:1641 msgid "Cc: " msgstr "Cc: " -#: ../src/client/composer/composer-widget.vala:1674 +#: ../src/client/composer/composer-widget.vala:1644 msgid "Bcc: " msgstr "Ccn: " -#: ../src/client/composer/composer-widget.vala:1677 +#: ../src/client/composer/composer-widget.vala:1647 msgid "Reply-To: " msgstr "Rispondi a:" -#: ../src/client/composer/composer-widget.vala:1910 +#: ../src/client/composer/composer-widget.vala:1778 msgid "Select Color" msgstr "Seleziona colore" #. Displayed in the From dropdown to indicate an "alternate email address" #. for an account. The first printf argument will be the alternate email #. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2345 +#: ../src/client/composer/composer-widget.vala:1978 #, c-format msgid "%1$s via %2$s" msgstr "%1$s tramite %2$s" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2389 +#: ../src/client/composer/composer-widget.vala:2020 msgid "_From:" msgstr "_Da:" +#. Translators: This is the name of the file chooser filter +#. when inserting an image in the composer. +#: ../src/client/composer/composer-widget.vala:2243 +#| msgid "Show Images" +msgid "Images" +msgstr "Immagini" + +#: ../src/client/composer/spell-check-popover.vala:117 +msgid "Remove this language from the preferred list" +msgstr "Togli questa lingua dalla lista dei preferiti" + +#: ../src/client/composer/spell-check-popover.vala:121 +msgid "Add this language to the preferred list" +msgstr "Aggiungi questa lingua alla lista dei preferiti" + +#: ../src/client/composer/spell-check-popover.vala:217 +msgid "Search for more languages" +msgstr "Cerca altre lingue" + #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Io" -#: ../src/client/conversation-viewer/conversation-viewer.vala:414 -msgid "No conversations selected." +#. Translators: This is the file type displayed for +#. attachments with unknown file types. +#: ../src/client/conversation-viewer/conversation-email.vala:121 +msgid "Unknown" +msgstr "Sconosciuto" + +#. Preview headers +#. Translators: This is displayed in place of the from address +#. when the message has no from address. +#: ../src/client/conversation-viewer/conversation-message.vala:330 +msgid "No sender" +msgstr "Nessun mittente" + +#. Translators: This separates multiple 'from' +#. addresses in the header preview for a message. +#: ../src/client/conversation-viewer/conversation-message.vala:585 +msgid ", " +msgstr ", " + +#. Translators: This string is used as the HTML IMG ALT +#. attribute value when displaying an inline image in an email +#. that did not specify a file name. E.g. Image" +msgstr "Da " + +#: ../ui/conversation-message.ui.h:2 +msgid "1/1/1970\t" +msgstr "1/1/1970\t" + +#: ../ui/conversation-message.ui.h:3 +msgid "Preview body text." +msgstr "Anteprima corpo del testo." + +#: ../ui/conversation-message.ui.h:4 +msgid "Sent by:" +msgstr "Inviato da:" + +#: ../ui/conversation-message.ui.h:5 +#| msgid "Reply-To: " +msgid "Reply to:" +msgstr "Rispondi a:" + +#: ../ui/conversation-message.ui.h:6 +#| msgid "Subject:" +msgid "Subject" +msgstr "Oggetto" + +#: ../ui/conversation-message.ui.h:7 +msgid "To:" +msgstr "A:" + +#: ../ui/conversation-message.ui.h:8 +msgid "Cc:" +msgstr "Cc:" + +#: ../ui/conversation-message.ui.h:9 +msgid "Bcc:" +msgstr "Ccn:" + +#: ../ui/conversation-message.ui.h:10 +msgid "Show Images" +msgstr "Mostra immagini" + +#: ../ui/conversation-message.ui.h:11 +msgid "Always Show From Sender" +msgstr "Mostra sempre dal mittente" + +#: ../ui/conversation-message.ui.h:12 +msgid "Remote images not shown" +msgstr "Immagini remote non mostrate" + +#: ../ui/conversation-message.ui.h:13 +msgid "Only show remote images from senders you trust." +msgstr "Mostra immagini remote solo da mittenti fidati." + +#: ../ui/conversation-message.ui.h:14 +#| msgid "but actually goes to" +msgid "But actually goes to:" +msgstr "Ma in realtà va in:" + +#: ../ui/conversation-message.ui.h:15 +#| msgid "This link appears to go to" +msgid "The link appears to go to:" +msgstr "Il collegamento sembra portare a:" + +#: ../ui/conversation-message.ui.h:16 +msgid "Deceptive link found" +msgstr "Trovato collegamento ingannevole" + +#: ../ui/conversation-message.ui.h:17 +msgid "The email sender may be leading you to the wrong web site." +msgstr "Il mittente dell'email potrebbe condurre al sito web sbagliato." + +#: ../ui/conversation-message.ui.h:18 +msgid "If unsure, contact the sender and ask before continuing." +msgstr "" +"In caso di dubbio, contattare il mittente e chiedere prima di continuare." + +#: ../ui/conversation-viewer.ui.h:1 +#| msgid "Mark conversation" +msgid "Find in conversation" +msgstr "Trova nella conversazione" + +#: ../ui/conversation-viewer.ui.h:2 +msgid "Find the previous occurrence of the search string." +msgstr "Trova l'occorrenza precedente della stringa di ricerca." + +#: ../ui/conversation-viewer.ui.h:3 +msgid "Find the next occurrence of the search string." +msgstr "Trova l'occorrenza successiva della stringa di ricerca." + #: ../ui/edit_alternate_emails.glade.h:1 msgid "Remove email address" msgstr "Rimuovi indirizzo email" @@ -2068,9 +2276,281 @@ msgid "label" msgstr "etichetta" +#: ../ui/gtk/help-overlay.ui.h:1 +#| msgid "%s - Conversation Inspector" +msgid "Conversation Shortcuts" +msgstr "Scorciatoie conversazioni" + +#: ../ui/gtk/help-overlay.ui.h:2 +msgctxt "shortcut window" +msgid "General" +msgstr "Generale" + +#: ../ui/gtk/help-overlay.ui.h:3 +msgctxt "shortcut window" +msgid "Move focus to the next/previous pane" +msgstr "Sposta lo stato attivo al pannello successivo/precedente" + +#: ../ui/gtk/help-overlay.ui.h:4 +#| msgid "Move conversations" +msgctxt "shortcut window" +msgid "Move focus to conversation list" +msgstr "Sposta lo stato attivo sull'elenco delle conversazioni" + +#: ../ui/gtk/help-overlay.ui.h:5 +#| msgid "Use %s to open a new composer window" +msgctxt "shortcut window" +msgid "Detach composer window" +msgstr "Stacca la finestra di composizione" + +#: ../ui/gtk/help-overlay.ui.h:6 +#| msgid "Use %s to open a new composer window" +msgctxt "shortcut window" +msgid "Close composer window" +msgstr "Chiudi la finestra di composizione" + +#: ../ui/gtk/help-overlay.ui.h:7 +msgctxt "shortcut window" +msgid "Show keyboard shortcuts" +msgstr "Mostra le scorciatoie da tastiera" + +#: ../ui/gtk/help-overlay.ui.h:8 +#| msgid "Show Images" +msgctxt "shortcut window" +msgid "Show help" +msgstr "Mostra aiuto" + +#: ../ui/gtk/help-overlay.ui.h:9 +msgctxt "shortcut window" +msgid "Quit the application" +msgstr "Chiudi l'applicazione" + +#: ../ui/gtk/help-overlay.ui.h:10 +#| msgid "Search" +msgctxt "shortcut window" +msgid "Search" +msgstr "Cerca" + +#: ../ui/gtk/help-overlay.ui.h:11 +msgctxt "shortcut window" +msgid "Jump to search box" +msgstr "Salta alla casella di ricerca" + +#: ../ui/gtk/help-overlay.ui.h:12 +#| msgid "Add label to conversation" +msgctxt "shortcut window" +msgid "Find in current conversation" +msgstr "Trova nella conversazione corrente" + +#: ../ui/gtk/help-overlay.ui.h:13 +msgctxt "shortcut window" +msgid "Find next/previous in current conversation" +msgstr "Trova successivo/precedente nella conversazione corrente" + +#: ../ui/gtk/help-overlay.ui.h:14 +#| msgid "Notifications" +msgctxt "shortcut window" +msgid "Actions" +msgstr "Azioni" + +#: ../ui/gtk/help-overlay.ui.h:15 +#| msgid "Compose Message" +msgctxt "shortcut window" +msgid "Compose a new message" +msgstr "Componi un nuovo messaggio" + +#: ../ui/gtk/help-overlay.ui.h:16 +#| msgid "Reply to _All" +msgctxt "shortcut window" +msgid "Reply to sender " +msgstr "Rispondi al mittente" + +#: ../ui/gtk/help-overlay.ui.h:17 +#| msgid "Reply to _All" +msgctxt "shortcut window" +msgid "Reply to all" +msgstr "Rispondi a tutti" + +#: ../ui/gtk/help-overlay.ui.h:18 +#| msgid "_Forward" +msgctxt "shortcut window" +msgid "Forward" +msgstr "Inoltra" + +#: ../ui/gtk/help-overlay.ui.h:19 +#| msgid "Archive" +msgctxt "shortcut window" +msgid "Archive" +msgstr "Archivia" + +#: ../ui/gtk/help-overlay.ui.h:20 +msgctxt "shortcut window" +msgid "Move to trash" +msgstr "Sposta nel cestino" + +#: ../ui/gtk/help-overlay.ui.h:21 +#| msgid "Toggle search bar" +msgctxt "shortcut window" +msgid "Toggle spam" +msgstr "Attiva/Disattiva posta indesiderata" + +#: ../ui/gtk/help-overlay.ui.h:22 +#| msgid "Move conversation" +msgctxt "shortcut window" +msgid "Move the conversation" +msgstr "Sposta la conversazione" + +#: ../ui/gtk/help-overlay.ui.h:23 +#| msgid "Delete conversation" +msgctxt "shortcut window" +msgid "Label the conversation" +msgstr "Etichetta la conversazione" + +#: ../ui/gtk/help-overlay.ui.h:24 +#| msgid "Mark as _Unread" +msgctxt "shortcut window" +msgid "Mark read" +msgstr "Segna come letto" + +#: ../ui/gtk/help-overlay.ui.h:25 +#| msgid "Mark as _Unread" +msgctxt "shortcut window" +msgid "Mark unread" +msgstr "Segna come non letto" + +#: ../ui/gtk/help-overlay.ui.h:26 +msgctxt "shortcut window" +msgid "View" +msgstr "Vista" + +#: ../ui/gtk/help-overlay.ui.h:27 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Aumenta ingrandimento" + +#: ../ui/gtk/help-overlay.ui.h:28 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Diminuisci ingrandimento" + +#: ../ui/gtk/help-overlay.ui.h:29 +msgctxt "shortcut window" +msgid "Reset zoom" +msgstr "Azzera ingrandimento" + +#: ../ui/gtk/help-overlay.ui.h:30 +msgctxt "shortcut window" +msgid "Additional Shortcuts" +msgstr "Scorciatoie ulteriori" + +#: ../ui/gtk/help-overlay.ui.h:31 +#| msgid "_Star" +msgctxt "shortcut window" +msgid "Star" +msgstr "Speciale" + +#: ../ui/gtk/help-overlay.ui.h:32 +#| msgid "U_nstar" +msgctxt "shortcut window" +msgid "Unstar" +msgstr "Non speciale" + +#: ../ui/gtk/help-overlay.ui.h:33 +#| msgid "Delete" +msgctxt "shortcut window" +msgid "Delete" +msgstr "Elimina" + +#: ../ui/gtk/help-overlay.ui.h:34 +#| msgid "Delete conversation" +msgctxt "shortcut window" +msgid "Jump to next (older) conversation" +msgstr "Salta alla conversazione successiva (più vecchia)" + +#: ../ui/gtk/help-overlay.ui.h:35 +msgctxt "shortcut window" +msgid "Jump to previous (newer) conversation" +msgstr "Salta alla conversazione precedente (più recente)" + +#: ../ui/gtk/help-overlay.ui.h:36 +#| msgid "Composer" +msgid "Composer Shortcuts" +msgstr "Scorciatoie compositore" + +#: ../ui/gtk/help-overlay.ui.h:37 +#| msgid "Quote text (Ctrl+])" +msgctxt "shortcut window" +msgid "Quote text" +msgstr "Cita il testo" + +#: ../ui/gtk/help-overlay.ui.h:38 +#| msgid "Unquote text (Ctrl+[)" +msgctxt "shortcut window" +msgid "Unquote text" +msgstr "Rimuovi la citazione del testo" + +#: ../ui/gtk/help-overlay.ui.h:39 +#| msgid "Send" +msgctxt "shortcut window" +msgid "Send" +msgstr "Invia" + +#: ../ui/gtk/help-overlay.ui.h:40 +#| msgctxt "Search operator" +#| msgid "attachment" +msgctxt "shortcut window" +msgid "Add attachment" +msgstr "Aggiungi allegato" + +#: ../ui/gtk/help-overlay.ui.h:41 +#| msgid "_Rich Text" +msgctxt "shortcut window" +msgid "Rich text mode" +msgstr "Modalità testo formattato" + +#: ../ui/gtk/help-overlay.ui.h:42 +msgctxt "shortcut window" +msgid "Bold text" +msgstr "Testo in grassetto" + +#: ../ui/gtk/help-overlay.ui.h:43 +msgctxt "shortcut window" +msgid "Italicize text" +msgstr "Testo in corsivo" + +#: ../ui/gtk/help-overlay.ui.h:44 +#| msgid "Underline (Ctrl+U)" +msgctxt "shortcut window" +msgid "Underline text" +msgstr "Testo sottolineato" + +#: ../ui/gtk/help-overlay.ui.h:45 +msgctxt "shortcut window" +msgid "Strike text" +msgstr "Testo barrato" + +#: ../ui/gtk/help-overlay.ui.h:46 +msgctxt "shortcut window" +msgid "Insert a link" +msgstr "Inserisci un collegamento" + +#: ../ui/gtk/help-overlay.ui.h:47 +#| msgid "Remove formatting (Ctrl+Space)" +msgctxt "shortcut window" +msgid "Remove formatting" +msgstr "Rimuovi formattazione" + +#: ../ui/gtk/menus.ui.h:2 +msgid "A_ccounts" +msgstr "A_ccount" + +#: ../ui/gtk/menus.ui.h:4 +msgid "_Keyboard Shortcuts" +msgstr "Scorciatoie _tastiera" + #: ../ui/login.glade.h:1 msgid "email@example.com" -msgstr "email@esempio.it" +msgstr "email@esempio.com" #: ../ui/login.glade.h:2 ../ui/password-dialog.glade.h:3 msgid "Password" @@ -2118,7 +2598,7 @@ #: ../ui/login.glade.h:14 msgid "imap.example.com" -msgstr "imap.esempio.it" +msgstr "imap.esempio.com" #: ../ui/login.glade.h:15 msgid "P_ort" @@ -2126,7 +2606,7 @@ #: ../ui/login.glade.h:16 msgid "smtp.example.com" -msgstr "smtp.esempio.it" +msgstr "smtp.esempio.com" #: ../ui/login.glade.h:17 msgid "Ser_ver" @@ -2192,7 +2672,7 @@ msgid "Use IMAP cre_dentials" msgstr "Usare le cre_denziali IMAP" -#: ../ui/login.glade.h:34 ../ui/preferences.glade.h:5 +#: ../ui/login.glade.h:34 msgid "Composer" msgstr "Compositore" @@ -2212,6 +2692,10 @@ msgid "_Download mail" msgstr "_Scarica posta" +#: ../ui/main-toolbar.ui.h:1 +msgid "Empty Spam or Trash folders" +msgstr "Svuota la cartella indesiderata o il cestino" + #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" msgstr "Credenziali SMTP" @@ -2228,49 +2712,45 @@ msgid "_Authenticate" msgstr "_Autentica" -#: ../ui/preferences.glade.h:1 +#: ../ui/preferences-dialog.ui.h:1 msgid "Reading" msgstr "Lettura" -#: ../ui/preferences.glade.h:2 +#: ../ui/preferences-dialog.ui.h:2 msgid "_Automatically select next message" msgstr "_Selezionare automaticamente il messaggio successivo" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences-dialog.ui.h:3 msgid "_Display conversation preview" msgstr "_Visualizzare l'anteprima della conversazione" -#: ../ui/preferences.glade.h:4 +#: ../ui/preferences-dialog.ui.h:4 msgid "Use _three pane view" msgstr "Usare la visuale a _tre riquadri" -#: ../ui/preferences.glade.h:6 -msgid "Enable _spell checking" -msgstr "Abilitare il _controllo ortografico" - -#: ../ui/preferences.glade.h:7 +#: ../ui/preferences-dialog.ui.h:5 msgid "Notifications" msgstr "Notifiche" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences-dialog.ui.h:6 msgid "_Play notification sounds" msgstr "Ri_produrre avvisi sonori" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences-dialog.ui.h:7 msgid "Show _notifications for new mail" msgstr "Mostrare _notifiche per la nuova posta" -#: ../ui/preferences.glade.h:10 +#: ../ui/preferences-dialog.ui.h:8 msgid "Always _watch for new mail" msgstr "_Controllare sempre per la nuova posta" -#: ../ui/preferences.glade.h:11 +#: ../ui/preferences-dialog.ui.h:9 msgid "Geary will run in the background and notify of new mail" msgstr "" "L'applicazione sarà eseguita in background e notificherà l'arrivo di nuova " "posta" -#: ../ui/preferences.glade.h:12 +#: ../ui/preferences-dialog.ui.h:10 msgid "Preferences" msgstr "Preferenze" @@ -2301,7 +2781,125 @@ msgid "Geary update in progress…" msgstr "Aggiornamento dell'applicazione in corso…" -#~| msgid "me" -#~ msgctxt "Addressable search operator value" -#~ msgid "me" -#~ msgstr "me" +#~ msgid "Empty" +#~ msgstr "Svuota" + +#~ msgid "%i match" +#~ msgid_plural "%i matches" +#~ msgstr[0] "%i corrispondenza" +#~ msgstr[1] "%i corrispondenze" + +#~ msgid "%i match (wrapped)" +#~ msgid_plural "%i matches (wrapped)" +#~ msgstr[0] "%i corrispondenza (ricomincia dall'inizio)" +#~ msgstr[1] "%i corrispondenze (ricomincia dall'inizio)" + +#~ msgid "not found" +#~ msgstr "non trovato" + +#~ msgid "No search results found." +#~ msgstr "Nessun risultato trovato." + +#~ msgid "From:" +#~ msgstr "Da:" + +#~ msgid "Date:" +#~ msgstr "Data:" + +#~ msgid "Copy _Link" +#~ msgstr "Copia co_llegamento" + +#~ msgid "Select _Message" +#~ msgstr "Seleziona _messaggio" + +#~ msgid " (Invalid?)" +#~ msgstr "(Non corretto?)" + +#~ msgid "_Save As..." +#~ msgstr "_Salva come..." + +#~ msgid "Save A_ttachment..." +#~ msgid_plural "Save All A_ttachments..." +#~ msgstr[0] "Salva a_llegato..." +#~ msgstr[1] "Salva a_llegati..." + +#~ msgid "none" +#~ msgstr "nulla" + +#~ msgid "_Left" +#~ msgstr "_Sinistra" + +#~ msgid "_Right" +#~ msgstr "_Destra" + +#~ msgid "_Center" +#~ msgstr "_Centrato" + +#~ msgid "_Justify" +#~ msgstr "_Giustificato" + +#~ msgid "Link (Ctrl+L)" +#~ msgstr "Collegamento (Ctrl+L)" + +#~ msgid "More options" +#~ msgstr "Ulteriori opzioni" + +#~ msgctxt "Label" +#~ msgid "Close and Save" +#~ msgstr "Chiude e salva" + +#~ msgctxt "Short Label" +#~ msgid "Close and Save" +#~ msgstr "Chiude e salva" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Save" +#~ msgstr "Chiude e salva" + +#~ msgctxt "Label" +#~ msgid "Close and Discard" +#~ msgstr "Chiude e scarta" + +#~ msgctxt "Short Label" +#~ msgid "Close and Discard" +#~ msgstr "Chiude e scarta" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Discard" +#~ msgstr "Chiude e scarta" + +#~ msgid "Large" +#~ msgstr "Grande" + +#~ msgid "Medium" +#~ msgstr "Medio" + +#~ msgid "Small" +#~ msgstr "Piccolo" + +#~ msgid "Sans Serif" +#~ msgstr "Senza grazie" + +#~ msgid "Serif" +#~ msgstr "Con grazie" + +#~ msgid "Fixed Width" +#~ msgstr "Larghezza fissa" + +#~ msgid "Detach" +#~ msgstr "Sgancia" + +#~ msgid "_Attach File" +#~ msgstr "_Allega file" + +#~ msgid "Attach File" +#~ msgstr "Allega file" + +#~ msgid "_Include Original Attachments" +#~ msgstr "_Includi gli allegati originali" + +#~ msgid "Spelling language" +#~ msgstr "Lingua del controllo ortografico" + +#~ msgid "Enable _spell checking" +#~ msgstr "Abilitare il _controllo ortografico" diff -Nru geary-0.11.4/po/kk.po geary-0.12.0/po/kk.po --- geary-0.11.4/po/kk.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/kk.po 2017-10-02 11:25:21.000000000 +0000 @@ -1,15 +1,15 @@ # Kazakh translation for geary. # Copyright (C) 2014 geary's COPYRIGHT HOLDER # This file is distributed under the same license as the geary package. -# Baurzhan Muftakhidinov , 2014. +# Baurzhan Muftakhidinov , 2014-2017. # msgid "" msgstr "" "Project-Id-Version: geary master\n" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "product=geary&keywords=I18N+L10N&component=internationalization\n" -"POT-Creation-Date: 2017-03-05 11:05+0000\n" -"PO-Revision-Date: 2017-03-17 08:43+0500\n" +"POT-Creation-Date: 2017-09-26 12:56+0000\n" +"PO-Revision-Date: 2017-09-26 20:17+0500\n" "Last-Translator: Baurzhan Muftakhidinov \n" "Language-Team: Kazakh \n" "Language: kk\n" @@ -17,32 +17,114 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 1.8.11\n" +"X-Generator: Poedit 2.0.3\n" -#: ../desktop/geary.desktop.in.h:1 ../desktop/geary-autostart.desktop.in.h:1 +#. Translators: The application name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:2 +#: ../desktop/org.gnome.Geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" msgstr "Geary" -#: ../desktop/geary.desktop.in.h:2 ../desktop/geary-autostart.desktop.in.h:2 -#: ../src/client/application/geary-application.vala:18 +#. Translators: The development team's name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:4 +msgid "Geary Development Team" +msgstr "Geary әзірлеушілер тобы" + +#. Translators: The application's summary / tagline +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:6 +#: ../desktop/org.gnome.Geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 +msgid "Send and receive email" +msgstr "Эл. поштаны жіберу және қабылдау" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:7 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"Geary - бұл сөйлесулер негізінде жасалған эл. пошта қолданбасы, GNOME 3 " +"жұмыс үстелі үшін арналған. Оның көмегімен тура, замануи интерфейсін " +"қолданып, эл. поштаны оқу, табу және жіберуге болады." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:8 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"Сөйлесулер көмегімен сіз талқылауды толығымен оқи аласыз, бір хаттан екінші " +"хатқа іздеп, шертуді орындамай-ақ." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:9 +msgid "Geary’s features include:" +msgstr "Geary мүмкіндіктерінің ішінде:" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:10 +msgid "Quick email account setup" +msgstr "Эл. пошта тіркелгісін жылдам баптау" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:11 +msgid "Shows related messages together in conversations" +msgstr "Өзара байланысқан хабарламаларды сөйлесуде бірге көрсетеді" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:12 +msgid "Fast, full text and keyword search" +msgstr "Жылдам, толық мәтіндік және кілт сөздерін іздеу" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:13 +msgid "Full-featured HTML and plain text message composer" +msgstr "Кең мүмкіндікті HTML және ашық мәтін хаттарын құрастыру түзеткіші" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:14 +msgid "Desktop notification of new mail" +msgstr "Жаңа хаттар үшін жұмыс үстел хабарламаларын көрсету" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:15 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" +msgstr "" +"GMail, Yahoo! Mail, Outlook.com және басқа да IMAP серверлерімен үйлесімді" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:17 +#| msgid "_Display conversation preview" +msgid "Geary displaying a conversation" +msgstr "Geary сөйлесуді көрсетуде" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:19 +msgid "Geary showing the rich text composer" +msgstr "Geary мәтінді мүмкіндіктері кең түзеткішін көрсетуде" + +#: ../desktop/org.gnome.Geary.desktop.in.h:2 +msgid "Email" +msgstr "Эл. пошта" + +#: ../desktop/org.gnome.Geary.desktop.in.h:3 +msgid "Geary Email" +msgstr "Geary поштасы" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/org.gnome.Geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;Пошта;Эл.пошта;" + +#: ../desktop/org.gnome.Geary.desktop.in.h:7 ../ui/gtk/menus.ui.h:1 +msgid "Compose Message" +msgstr "Хатты жазу" + +#: ../desktop/geary-autostart.desktop.in.h:2 +#: ../src/client/application/geary-application.vala:21 msgid "Mail Client" msgstr "Пошта клиенті" -#: ../desktop/geary.desktop.in.h:3 ../desktop/geary-autostart.desktop.in.h:3 +#: ../desktop/geary-autostart.desktop.in.h:3 msgid "Geary Mail" msgstr "Geary поштасы" -#: ../desktop/geary.desktop.in.h:4 ../desktop/geary-autostart.desktop.in.h:4 -msgid "Send and receive email" -msgstr "Эл. поштаны жіберу және қабылдау" - -#: ../desktop/geary.desktop.in.h:5 ../desktop/geary-autostart.desktop.in.h:5 +#: ../desktop/geary-autostart.desktop.in.h:5 msgid "Email;E-mail;Mail;" -msgstr "Эл. пошта;электрондық пошта;е-пошта;" - -#: ../desktop/geary.desktop.in.h:6 -msgid "Compose Message" -msgstr "Хатты жазу" +msgstr "Email;E-mail;Mail;Эл. пошта;электрондық пошта;е-пошта;" #: ../desktop/geary-attach.contract.in.h:1 msgid "Send by email" @@ -54,6 +136,7 @@ #: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:31 +#: ../ui/conversation-email-menus.ui.h:10 msgid "_Save" msgstr "_Сақтау" @@ -63,7 +146,7 @@ msgstr "Қо_су" #. reset/clear widgets -#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 #, c-format msgid "Additional addresses for %s" msgstr "%s үшін қосымша адрестер" @@ -84,108 +167,120 @@ msgid "First Last" msgstr "Аты Фамилиясы" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." msgstr "Geary қолданбасына қош келдіңіз." -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." msgstr "Бастау үшін тіркелгі ақпаратыңызды енгізіңіз." -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "2 апта бұрын" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:254 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "1 ай бұрын" -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "3 ай бұрын" -#: ../src/client/accounts/add-edit-page.vala:256 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "6 ай бұрын" -#: ../src/client/accounts/add-edit-page.vala:257 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "1 жыл бұрын" -#: ../src/client/accounts/add-edit-page.vala:258 +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" msgstr "2 жыл бұрын" -#: ../src/client/accounts/add-edit-page.vala:259 +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" msgstr "4 жыл бұрын" #. Separator -#: ../src/client/accounts/add-edit-page.vala:261 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "Барлығы" -#: ../src/client/accounts/add-edit-page.vala:280 +#: ../src/client/accounts/add-edit-page.vala:283 msgid "Edit" msgstr "Түзету" -#: ../src/client/accounts/add-edit-page.vala:282 +#: ../src/client/accounts/add-edit-page.vala:285 msgid "Preview" msgstr "Алдын-ала қарау" -#: ../src/client/accounts/add-edit-page.vala:723 +#: ../src/client/accounts/add-edit-page.vala:751 msgid "Remem_ber passwords" msgstr "Парольдерді есте сақ_тау" -#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:7 +#: ../src/client/accounts/add-edit-page.vala:758 ../ui/login.glade.h:7 msgid "Remem_ber password" msgstr "Парольді есте сақ_тау" -#: ../src/client/accounts/add-edit-page.vala:764 +#: ../src/client/accounts/add-edit-page.vala:792 msgid "Unable to validate:\n" msgstr "Тексеру сәтсіз аяқталды:\n" -#: ../src/client/accounts/add-edit-page.vala:766 -msgid " • Invalid account nickname.\n" -msgstr " • Тіркелгінің ник аты қате.\n" - -#: ../src/client/accounts/add-edit-page.vala:769 -msgid " • Email address already added to Geary.\n" -msgstr " • Эл. пошта адресі Geary-ге бұрын қосылған.\n" - -#: ../src/client/accounts/add-edit-page.vala:773 -msgid " • IMAP connection error.\n" -msgstr " • IMAP байланысу қатесі.\n" - -#: ../src/client/accounts/add-edit-page.vala:776 -msgid " • IMAP username or password incorrect.\n" -msgstr " • IMAP пайдаланушы аты не паролі қате.\n" - -#: ../src/client/accounts/add-edit-page.vala:779 -msgid " • SMTP connection error.\n" -msgstr " • SMTP байланысу қатесі.\n" - -#: ../src/client/accounts/add-edit-page.vala:782 -msgid " • SMTP username or password incorrect.\n" -msgstr " • SMTP пайдаланушы аты не паролі қате.\n" - -#: ../src/client/accounts/add-edit-page.vala:786 -msgid " • Connection error.\n" -msgstr " • Байланыс қатесі.\n" - -#: ../src/client/accounts/add-edit-page.vala:790 -msgid " • Username or password incorrect.\n" -msgstr " • Пайдаланушы аты не паролі қате.\n" +#: ../src/client/accounts/add-edit-page.vala:794 +msgid " • Invalid account nickname.\n" +msgstr " • Тіркелгінің ник аты қате.\n" + +#: ../src/client/accounts/add-edit-page.vala:797 +msgid " • Email address already added to Geary.\n" +msgstr " • Эл. пошта адресі Geary-ге бұрын қосылған.\n" + +#: ../src/client/accounts/add-edit-page.vala:801 +msgid " • IMAP connection error.\n" +msgstr " • IMAP байланысу қатесі.\n" + +#: ../src/client/accounts/add-edit-page.vala:804 +msgid " • IMAP username or password incorrect.\n" +msgstr " • IMAP пайдаланушы аты не паролі қате.\n" + +#: ../src/client/accounts/add-edit-page.vala:807 +msgid " • SMTP connection error.\n" +msgstr " • SMTP байланысу қатесі.\n" + +#: ../src/client/accounts/add-edit-page.vala:810 +msgid " • SMTP username or password incorrect.\n" +msgstr " • SMTP пайдаланушы аты не паролі қате.\n" + +#: ../src/client/accounts/add-edit-page.vala:814 +msgid " • Connection error.\n" +msgstr " • Байланыс қатесі.\n" + +#: ../src/client/accounts/add-edit-page.vala:818 +msgid " • Username or password incorrect.\n" +msgstr " • Пайдаланушы аты не паролі қате.\n" -#: ../src/client/application/geary-application.vala:19 +#: ../src/client/application/geary-application.vala:22 msgid "Copyright 2016 Software Freedom Conservancy Inc." msgstr "Copyright 2016 Software Freedom Conservancy Inc." -#: ../src/client/application/geary-application.vala:21 +#: ../src/client/application/geary-application.vala:24 msgid "Visit the Geary web site" msgstr "Geary веб сайтын шолу" +#: ../src/client/application/geary-application.vala:464 +#, c-format +msgid "About %s" +msgstr "%s туралы" + +#. Translators: add your name and email address to receive +#. credit in the About dialog For example: Yamada Taro +#. +#: ../src/client/application/geary-application.vala:468 +msgid "translator-credits" +msgstr "Baurzhan Muftakhidinov " + #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" msgstr "Geary қолданбасын жасырылған басты тереземен іске қосу" @@ -240,217 +335,191 @@ msgstr "TLS ескертулері бар барлық сервер сертификаттарын қайта шақыру" #: ../src/client/application/geary-args.vala:27 +msgid "Perform a graceful quit" +msgstr "Қалыпты шығуды орындау" + +#: ../src/client/application/geary-args.vala:28 msgid "Display program version" msgstr "Бағдарлама нұсқасын көрсету" #. This gives a command-line hint on how to open new composer windows with mailto: -#: ../src/client/application/geary-args.vala:51 +#: ../src/client/application/geary-args.vala:53 #, c-format msgid "Use %s to open a new composer window" msgstr "Жаңа хатты жазу терезесін ашу үшін %s қолданыңыз" -#: ../src/client/application/geary-args.vala:52 +#: ../src/client/application/geary-args.vala:54 msgid "Please report comments, suggestions and bugs to:" msgstr "Пікірлер, ұсыныстар және ақаулықтарды хабарлау жері:" #. i18n: Command line arguments are invalid -#: ../src/client/application/geary-args.vala:59 +#: ../src/client/application/geary-args.vala:61 #, c-format msgid "Failed to parse command line options: %s\n" msgstr "Командалық жол опцияларын талдау сәтсіз аяқталды: %s\n" -#: ../src/client/application/geary-args.vala:70 +#: ../src/client/application/geary-args.vala:72 #, c-format -msgid "Unrecognized command line option \"%s\"\n" +msgid "Unrecognized command line option “%s”\n" msgstr "Белгісіз командалық жол опциясы \"%s\"\n" -#: ../src/client/application/geary-controller.vala:61 +#: ../src/client/application/geary-controller.vala:57 msgid "Delete conversation" msgstr "Сөйлесуді өшіру" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:58 msgid "Delete conversation (Shift+Delete)" msgstr "Сөйлесуді өшіру (Shift+Delete)" -#: ../src/client/application/geary-controller.vala:63 +#: ../src/client/application/geary-controller.vala:59 msgid "Delete conversations (Shift+Delete)" msgstr "Сөйлесулерді өшіру (Shift+Delete)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:67 +#: ../src/client/application/geary-controller.vala:63 msgid "Move conversation to Trash (Delete, Backspace)" msgstr "Сөйлесуді қоқыс шелегіне тастау (Delete, Backspace)" -#: ../src/client/application/geary-controller.vala:68 +#: ../src/client/application/geary-controller.vala:64 msgid "Move conversations to Trash (Delete, Backspace)" msgstr "Сөйлесудерді қоқыс шелегіне тастау (Delete, Backspace)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:72 +#: ../src/client/application/geary-controller.vala:68 msgid "_Archive" msgstr "_Архив" -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:69 msgid "Archive conversation (A)" msgstr "Сөйлесуді архивтеу (A)" -#: ../src/client/application/geary-controller.vala:74 +#: ../src/client/application/geary-controller.vala:70 msgid "Archive conversations (A)" msgstr "Сөйлесулерді архивтеу (A)" -#: ../src/client/application/geary-controller.vala:77 +#: ../src/client/application/geary-controller.vala:73 msgid "Mark as S_pam" msgstr "С_пам етіп белгілеу" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:74 msgid "Mark as not S_pam" msgstr "С_пам емес етіп белгілеу" -#: ../src/client/application/geary-controller.vala:80 -#: ../src/client/application/geary-controller.vala:396 +#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:448 msgid "Mark conversation" msgstr "Сөйлесуді белгілеу" -#: ../src/client/application/geary-controller.vala:81 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark conversations" msgstr "Сөйлесулерді белгілеу" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:78 msgid "Add label to conversation" msgstr "Сөйлесуге белгіні қосу" -#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:79 msgid "Add label to conversations" msgstr "Сөйлесулерге белгіні қосу" -#: ../src/client/application/geary-controller.vala:84 -#: ../src/client/application/geary-controller.vala:435 +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:487 msgid "Move conversation" msgstr "Сөйлесуді жылжыту" -#: ../src/client/application/geary-controller.vala:85 +#: ../src/client/application/geary-controller.vala:81 msgid "Move conversations" msgstr "Сөйлесулерді жылжыту" -#: ../src/client/application/geary-controller.vala:376 -#: ../ui/app_menu.interface.h:1 -msgid "A_ccounts" -msgstr "_Тіркелгілер" - -#: ../src/client/application/geary-controller.vala:381 -#: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 -msgid "_Preferences" -msgstr "Ба_птаулар" - -#: ../src/client/application/geary-controller.vala:385 -#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:3 -msgid "_Help" -msgstr "_Көмек" - -#: ../src/client/application/geary-controller.vala:389 -#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:4 -msgid "_About" -msgstr "Осы тур_алы" - -#: ../src/client/application/geary-controller.vala:393 -#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:5 -msgid "_Quit" -msgstr "_Шығу" - -#: ../src/client/application/geary-controller.vala:398 -msgid "_Mark as..." -msgstr "Қалайша _белгілеу..." +#: ../src/client/application/geary-controller.vala:450 +msgid "_Mark as…" +msgstr "Қалайша _белгілеу…" -#: ../src/client/application/geary-controller.vala:404 +#: ../src/client/application/geary-controller.vala:456 msgid "Mark as _Read" msgstr "Оқ_ылған етіп белгілеу" -#: ../src/client/application/geary-controller.vala:410 +#: ../src/client/application/geary-controller.vala:462 msgid "Mark as _Unread" msgstr "Оқыл_маған етіп белгілеу" -#: ../src/client/application/geary-controller.vala:416 +#: ../src/client/application/geary-controller.vala:468 msgid "_Star" msgstr "_Жұлдызшаны орнату" -#: ../src/client/application/geary-controller.vala:421 +#: ../src/client/application/geary-controller.vala:473 msgid "U_nstar" msgstr "Жұлдызшаны алы_п тастау" -#: ../src/client/application/geary-controller.vala:431 +#: ../src/client/application/geary-controller.vala:483 msgid "Add label" msgstr "Белгіні қосу" -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:484 msgid "_Label" msgstr "Ж_азу" -#: ../src/client/application/geary-controller.vala:436 +#: ../src/client/application/geary-controller.vala:488 msgid "_Move" msgstr "Жы_лжыту" -#: ../src/client/application/geary-controller.vala:440 +#: ../src/client/application/geary-controller.vala:492 msgid "Compose new message (Ctrl+N, N)" msgstr "Жаңа хатты жазу (Ctrl+N, N)" -#. Reply to a message. -#: ../src/client/application/geary-controller.vala:444 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1873 +#: ../src/client/application/geary-controller.vala:496 +#: ../ui/conversation-email-menus.ui.h:1 msgid "_Reply" msgstr "Жауап бе_ру" -#: ../src/client/application/geary-controller.vala:445 +#: ../src/client/application/geary-controller.vala:497 msgid "Reply (Ctrl+R, R)" msgstr "Жауап беру (Ctrl+R, R)" -#: ../src/client/application/geary-controller.vala:449 +#: ../src/client/application/geary-controller.vala:501 msgid "R_eply All" msgstr "Барлығына жауап б_еру" -#: ../src/client/application/geary-controller.vala:450 +#: ../src/client/application/geary-controller.vala:502 msgid "Reply all (Ctrl+Shift+R, Shift+R)" msgstr "Барлығына жауап беру (Ctrl+Shift+R, Shift+R)" -#. Forward a message. -#: ../src/client/application/geary-controller.vala:455 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1883 +#: ../src/client/application/geary-controller.vala:507 +#: ../ui/conversation-email-menus.ui.h:3 msgid "_Forward" msgstr "Қа_йта бағдарлау" -#: ../src/client/application/geary-controller.vala:456 +#: ../src/client/application/geary-controller.vala:508 msgid "Forward (Ctrl+L, F)" msgstr "Қайта бағдарлау (Ctrl+L, F)" -#: ../src/client/application/geary-controller.vala:495 -msgid "Empty" -msgstr "Босату" - -#: ../src/client/application/geary-controller.vala:496 -msgid "Empty Spam or Trash folders" -msgstr "Спам немесе Қоқыс шелегі бумаларын босату" - -#: ../src/client/application/geary-controller.vala:500 +#: ../src/client/application/geary-controller.vala:538 msgid "Empty _Spam…" msgstr "_Спам бумасын босату…" -#: ../src/client/application/geary-controller.vala:504 +#: ../src/client/application/geary-controller.vala:542 msgid "Empty _Trash…" msgstr "Қ_оқыс шелегін босату…" #. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:537 +#: ../src/client/application/geary-controller.vala:574 msgid "Toggle search bar" msgstr "Іздеу панелін іске қосу/сөндіру" -#: ../src/client/application/geary-controller.vala:744 +#. No callback is connected, since we bind the toggle button to the find bar visibility +#: ../src/client/application/geary-controller.vala:579 +msgid "Toggle find bar" +msgstr "Іздеу панелін іске қосу/сөндіру" + +#: ../src/client/application/geary-controller.vala:757 msgid "Unable to store server trust exception" msgstr "Серверге сену ережесін сақтау қатесі" -#: ../src/client/application/geary-controller.vala:981 +#: ../src/client/application/geary-controller.vala:992 msgid "Your settings are insecure" msgstr "Сіздің баптауларыңыз қауіпсіз емес" -#: ../src/client/application/geary-controller.vala:982 +#: ../src/client/application/geary-controller.vala:993 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -460,15 +529,15 @@ "Бұл дегеніміз, сіздің пайдаланушы аты мен пароліңіз желідегі басқа адам біле " "алады. Осыны жасауды шынымен қалайсыз ба?" -#: ../src/client/application/geary-controller.vala:983 +#: ../src/client/application/geary-controller.vala:994 msgid "Co_ntinue" msgstr "Жалғ_астыру" -#: ../src/client/application/geary-controller.vala:1030 +#: ../src/client/application/geary-controller.vala:1041 msgid "Error connecting to the server" msgstr "Серверге байланысу қатесі" -#: ../src/client/application/geary-controller.vala:1031 +#: ../src/client/application/geary-controller.vala:1042 msgid "" "Geary encountered an error while connecting to the server. Please try again " "in a few moments." @@ -477,12 +546,12 @@ "қайталап көріңіз." #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:1068 +#: ../src/client/application/geary-controller.vala:1079 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "Хатты жіберу сәтсіз" -#: ../src/client/application/geary-controller.vala:1069 +#: ../src/client/application/geary-controller.vala:1080 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." @@ -492,12 +561,12 @@ #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1073 +#: ../src/client/application/geary-controller.vala:1084 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "Жіберліген хаттын сақтау сәтсіз" -#: ../src/client/application/geary-controller.vala:1074 +#: ../src/client/application/geary-controller.vala:1085 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." @@ -505,19 +574,19 @@ "Geary жіберілген хатты Жіберілген хаттар бумасына сақтау кезінде қате орын " "алды. Бұл хат сіз оны қолмен өшірілгенге дейін Шығыс бумасында қала береді." -#: ../src/client/application/geary-controller.vala:1143 +#: ../src/client/application/geary-controller.vala:1154 msgid "Labels" msgstr "Белгілер" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1155 +#: ../src/client/application/geary-controller.vala:1166 #, c-format msgid "Unable to open the database for %s" msgstr "%s үшін дерекқорды ашу мүмкін емес" -#: ../src/client/application/geary-controller.vala:1156 +#: ../src/client/application/geary-controller.vala:1167 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -541,20 +610,20 @@ "Дерекқорды қайта құрастыру барлық жергілікті пошта хаттар және салынымдарын " "жояды. Сервердегі поштаға әсері болмайды." -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "_Rebuild" msgstr "Қа_йта құрастыру" -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "E_xit" msgstr "_Шығу" -#: ../src/client/application/geary-controller.vala:1167 +#: ../src/client/application/geary-controller.vala:1178 #, c-format -msgid "Unable to rebuild database for \"%s\"" +msgid "Unable to rebuild database for “%s”" msgstr "\"%s\" үшін дерекқорды қайта құрастыру мүмкін емес" -#: ../src/client/application/geary-controller.vala:1168 +#: ../src/client/application/geary-controller.vala:1179 #, c-format msgid "" "Error during rebuild:\n" @@ -567,14 +636,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1190 -#: ../src/client/application/geary-controller.vala:1200 +#: ../src/client/application/geary-controller.vala:1201 #: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:1222 #, c-format msgid "Unable to open local mailbox for %s" msgstr "%s үшін жергілікті эл. пошта жәшігін ашу мүмкін емес" -#: ../src/client/application/geary-controller.vala:1191 +#: ../src/client/application/geary-controller.vala:1202 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -593,10 +662,10 @@ "\n" "%s" -#: ../src/client/application/geary-controller.vala:1201 +#: ../src/client/application/geary-controller.vala:1212 msgid "" "The version number of the local mail database is formatted for a newer " -"version of Geary. Unfortunately, the database cannot be \"rolled back\" to " +"version of Geary. Unfortunately, the database cannot be “rolled back” to " "work with this version of Geary.\n" "\n" "Please install the latest version of Geary and try again." @@ -608,7 +677,7 @@ "\n" "Geary қолданбасының соңғы нұсқасын орнатып, қайталап көріңіз." -#: ../src/client/application/geary-controller.vala:1212 +#: ../src/client/application/geary-controller.vala:1223 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" @@ -620,27 +689,15 @@ "\n" "Желілік байланысыңызды тексеріп, Geary қолданбасын қайта іске қосыңыз." -#: ../src/client/application/geary-controller.vala:1723 -#, c-format -msgid "About %s" -msgstr "%s туралы" - -#. / Translators: add your name and email address to receive credit in the About dialog -#. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1726 -msgid "translator-credits" -msgstr "Baurzhan Muftakhidinov " - -#: ../src/client/application/geary-controller.vala:1984 +#: ../src/client/application/geary-controller.vala:1999 msgid "Undo move (Ctrl+Z)" msgstr "Жылжытуды болдырмау (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:1994 -#, c-format -msgid "Are you sure you want to open \"%s\"?" -msgstr "\"%s\" ашуды шынымен қалайсыз ба?" +#: ../src/client/application/geary-controller.vala:2009 +msgid "Are you sure you want to open these attachments?" +msgstr "Бұл салынымдарды ашуды шынымен қалайсыз ба?" -#: ../src/client/application/geary-controller.vala:1995 +#: ../src/client/application/geary-controller.vala:2010 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -648,117 +705,104 @@ "Салынымдар ашылса, жүйеңіздге зақым келтіруі мүмкін. Тек сенімді " "жіберушілерден салынымдарды ашыңыз." -#: ../src/client/application/geary-controller.vala:1996 -msgid "Don't _ask me again" +#: ../src/client/application/geary-controller.vala:2011 +msgid "Don’t _ask me again" msgstr "М_ені қайта сұрамау" -#: ../src/client/application/geary-controller.vala:2014 +#: ../src/client/application/geary-controller.vala:2121 #, c-format -msgid "A file named \"%s\" already exists. Do you want to replace it?" -msgstr "" -"\"%s\" деп аталатын файл бар болып тұр. Оны үстінен жазуды қалайсыз ба?" +msgid "A file named “%s” already exists. Do you want to replace it?" +msgstr "\"%s\" деп аталатын файл бар болып тұр. Оны алмастыруды қалайсыз ба?" -#: ../src/client/application/geary-controller.vala:2016 +#: ../src/client/application/geary-controller.vala:2123 #, c-format msgid "" -"The file already exists in \"%s\". Replacing it will overwrite its contents." +"The file already exists in “%s”. Replacing it will overwrite its contents." msgstr "" "Файл \"%s\" ішінде бар болып тұр. Оны ауыстырсаңыз, құрамы үстінен жазылады." -#: ../src/client/application/geary-controller.vala:2019 +#: ../src/client/application/geary-controller.vala:2126 msgid "_Replace" msgstr "А_лмастыру" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2324 +#: ../src/client/application/geary-controller.vala:2374 msgid "Close open draft messages?" msgstr "Ашық шимай хаттарды жабу керек пе?" -#: ../src/client/application/geary-controller.vala:2454 +#: ../src/client/application/geary-controller.vala:2496 #, c-format msgid "Empty all email from your %s folder?" msgstr "Барлық хаттарды сіздің %s бумаңыздан босату керек пе?" -#: ../src/client/application/geary-controller.vala:2455 +#: ../src/client/application/geary-controller.vala:2497 msgid "This removes the email from Geary and your email server." msgstr "" "Бұл әрекет бұл эл. пошта хатын Geary ішінен және эл. пошта серверінен де " "өшіреді." -#: ../src/client/application/geary-controller.vala:2456 +#: ../src/client/application/geary-controller.vala:2498 msgid "This cannot be undone." msgstr "Бұны болдырмау мүмкін емес болады." -#: ../src/client/application/geary-controller.vala:2457 +#: ../src/client/application/geary-controller.vala:2499 #, c-format msgid "Empty %s" msgstr "%s босату" -#: ../src/client/application/geary-controller.vala:2474 +#: ../src/client/application/geary-controller.vala:2516 #, c-format msgid "Error emptying %s" msgstr "%s босату сәтсіз аяқталды" -#: ../src/client/application/geary-controller.vala:2504 +#: ../src/client/application/geary-controller.vala:2546 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "Бұл хат(тар)ды толығымен өшіруді қалайсыз ба?" -#: ../src/client/application/geary-controller.vala:2506 +#: ../src/client/application/geary-controller.vala:2548 msgid "Delete" msgstr "Өшіру" -#: ../src/client/application/geary-controller.vala:2537 +#: ../src/client/application/geary-controller.vala:2580 msgid "Undo archive (Ctrl+Z)" msgstr "Архивтеуді болдырмау (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2552 +#: ../src/client/application/geary-controller.vala:2595 msgid "Undo trash (Ctrl+Z)" msgstr "Қоқыс шелегіне тастауды болдырмау (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2605 +#: ../src/client/application/geary-controller.vala:2649 msgid "Undo (Ctrl+Z)" msgstr "Болдырмау (Ctrl+Z)" -#: ../src/client/components/conversation-find-bar.vala:214 -#, c-format -msgid "%i match" -msgid_plural "%i matches" -msgstr[0] "%i сәйкестік" - -#: ../src/client/components/conversation-find-bar.vala:216 -#, c-format -msgid "%i match (wrapped)" -msgid_plural "%i matches (wrapped)" -msgstr[0] "%i сәйкестік (тасымалданған)" - -#: ../src/client/components/conversation-find-bar.vala:218 -msgid "not found" -msgstr "табылмады" +#: ../src/client/application/geary-controller.vala:2780 +msgid "Failed to open default text editor." +msgstr "Үнсіз келісім бойынша мәтіндік түзеткішін ашу сәтсіз аяқталды." -#: ../src/client/components/main-window.vala:438 +#: ../src/client/components/main-window.vala:389 #, c-format msgid "%s (%d)" msgstr "%s (%d)" -#: ../src/client/components/search-bar.vala:10 +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "Іздеу" #. Search entry. -#: ../src/client/components/search-bar.vala:25 +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" msgstr "Тіркелгінің барлық хаттарынан кілтсөзді іздеу (Ctrl+S)" -#: ../src/client/components/search-bar.vala:118 +#: ../src/client/components/search-bar.vala:100 #, c-format msgid "Indexing %s account" msgstr "%s тіркелгісін индекстеу" -#: ../src/client/components/search-bar.vala:129 +#: ../src/client/components/search-bar.vala:111 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" @@ -766,8 +810,8 @@ #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 -msgid "Sending..." -msgstr "Жіберуде..." +msgid "Sending…" +msgstr "Жіберуде…" #: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 msgid "_OK" @@ -778,6 +822,10 @@ msgid "_Cancel" msgstr "Ба_с тарту" +#: ../src/client/components/stock.vala:21 ../ui/gtk/menus.ui.h:6 +msgid "_About" +msgstr "Осы тур_алы" + #: ../src/client/components/stock.vala:23 msgid "_Close" msgstr "_Жабу" @@ -786,51 +834,71 @@ msgid "_Discard" msgstr "_Елемеу" -#: ../src/client/components/stock.vala:26 +#: ../src/client/components/stock.vala:25 ../ui/gtk/menus.ui.h:5 +msgid "_Help" +msgstr "_Көмек" + +#: ../src/client/components/stock.vala:26 ../ui/conversation-email-menus.ui.h:9 msgid "_Open" msgstr "_Ашу" -#: ../src/client/components/stock.vala:28 -msgid "_Print..." -msgstr "Бас_паға шығару..." +#: ../src/client/components/stock.vala:27 ../ui/gtk/menus.ui.h:3 +msgid "_Preferences" +msgstr "Ба_птаулар" + +#: ../src/client/components/stock.vala:28 ../ui/conversation-email-menus.ui.h:7 +msgid "_Print…" +msgstr "Бас_паға шығару…" + +#: ../src/client/components/stock.vala:29 ../ui/gtk/menus.ui.h:7 +msgid "_Quit" +msgstr "_Шығу" #: ../src/client/components/stock.vala:30 ../ui/remove_confirm.glade.h:6 msgid "_Remove" msgstr "Ө_шіру" -#. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1335 -msgid "Select _All" -msgstr "Барлығын _таңдау" - -#: ../src/client/components/stock.vala:33 msgid "_Keep" msgstr "Ұс_тау" -#: ../src/client/composer/composer-widget.vala:73 +#: ../src/client/composer/composer-link-popover.vala:150 +msgid "Link URL is not correctly formatted, e.g. http://example.com" +msgstr "Сілтеме URL-ы дұрыс пішімделмеген, мыс. http://example.com" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid link URL" +msgstr "Бұл сілтеменің URL-ы қате" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid email address" +msgstr "Эл. пошта адресі қате" + +#: ../src/client/composer/composer-widget.vala:154 msgid "Saved" msgstr "Сақталды" -#: ../src/client/composer/composer-widget.vala:74 +#: ../src/client/composer/composer-widget.vala:155 msgid "Saving" msgstr "Сақталуда" -#: ../src/client/composer/composer-widget.vala:75 +#: ../src/client/composer/composer-widget.vala:156 msgid "Error saving" msgstr "Сақтау қатесі" -#: ../src/client/composer/composer-widget.vala:76 +#: ../src/client/composer/composer-widget.vala:157 msgid "Press Backspace to delete quote" msgstr "Дәйексөзді өшіру үшін Backspace басыңыз" -#: ../src/client/composer/composer-widget.vala:77 +#: ../src/client/composer/composer-widget.vala:158 msgid "New Message" msgstr "Жаңа хат" -#. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since -#. this is full-word checking, include all variants of each word. No spaces are allowed. -#: ../src/client/composer/composer-widget.vala:138 +#. Translators: This is list of keywords, separated by pipe ("|") +#. characters, that suggest an attachment; since this is full-word +#. checking, include all variants of each word. No spaces are +#. allowed. +#: ../src/client/composer/composer-widget.vala:167 msgid "" "attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" "enclosing|encloses|enclosure|enclosures" @@ -839,272 +907,185 @@ "attachment|attachments|attached|enclose|enclosed|enclosing|encloses|" "enclosure|enclosures" -#: ../src/client/composer/composer-widget.vala:1121 -#: ../src/client/composer/composer-widget.vala:1125 +#: ../src/client/composer/composer-widget.vala:1122 +#: ../src/client/composer/composer-widget.vala:1141 msgid "Do you want to discard this message?" msgstr "Бұл хатты елемеуді қалайсыз ба?" -#: ../src/client/composer/composer-widget.vala:1281 +#: ../src/client/composer/composer-widget.vala:1245 msgid "Send message with an empty subject and body?" msgstr "Хатты бос тақырыппен және бос денесімен жіберу керек пе?" -#: ../src/client/composer/composer-widget.vala:1283 +#: ../src/client/composer/composer-widget.vala:1247 msgid "Send message with an empty subject?" msgstr "Хатты бос тақырыппен жіберу керек пе?" -#: ../src/client/composer/composer-widget.vala:1285 +#: ../src/client/composer/composer-widget.vala:1249 msgid "Send message with an empty body?" msgstr "Хатты бос денесімен жіберу керек пе?" -#: ../src/client/composer/composer-widget.vala:1287 +#: ../src/client/composer/composer-widget.vala:1253 msgid "Send message without an attachment?" msgstr "Хатты салынымсыз жіберу керек пе?" -#: ../src/client/composer/composer-widget.vala:1553 -msgid "Cannot add attachment" -msgstr "Салынымды қосу мүмкін емес" +#: ../src/client/composer/composer-widget.vala:1515 +#, c-format +msgid "“%s” already attached for delivery." +msgstr "\"%s\" салыным ретінде белгіленіп тұр." + +#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" +#. Translators: The first argument will be a +#. description of the document type, the second will +#. be a human-friendly size string. For example: +#. Document (100.9MB) +#: ../src/client/composer/composer-widget.vala:1523 +#: ../src/client/conversation-viewer/conversation-email.vala:138 +#, c-format +msgid "%s (%s)" +msgstr "%s (%s)" -#: ../src/client/composer/composer-widget.vala:1564 +#: ../src/client/composer/composer-widget.vala:1560 #, c-format -msgid "\"%s\" could not be found." +msgid "“%s” could not be found." msgstr "\"%s\" табу мүмкін емес." -#: ../src/client/composer/composer-widget.vala:1571 +#: ../src/client/composer/composer-widget.vala:1566 #, c-format -msgid "\"%s\" is a folder." +msgid "“%s” is a folder." msgstr "\"%s\" бума болып тұр." -#: ../src/client/composer/composer-widget.vala:1578 +#: ../src/client/composer/composer-widget.vala:1572 #, c-format -msgid "\"%s\" is an empty file." +msgid "“%s” is an empty file." msgstr "\"%s\" бос файл болып тұр." -#: ../src/client/composer/composer-widget.vala:1592 +#: ../src/client/composer/composer-widget.vala:1585 #, c-format -msgid "\"%s\" could not be opened for reading." +msgid "“%s” could not be opened for reading." msgstr "\"%s\" оқу үшін ашу мүмкін емес." -#: ../src/client/composer/composer-widget.vala:1599 -#, c-format -msgid "\"%s\" already attached for delivery." -msgstr "\"%s\" салыным ретінде белгіленіп тұр." - -#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-widget.vala:1608 -#, c-format -msgid "%s (%s)" -msgstr "%s (%s)" +#: ../src/client/composer/composer-widget.vala:1593 +msgid "Cannot add attachment" +msgstr "Салынымды қосу мүмкін емес" -#: ../src/client/composer/composer-widget.vala:1668 +#: ../src/client/composer/composer-widget.vala:1645 msgid "To: " msgstr "Кімге:" -#: ../src/client/composer/composer-widget.vala:1671 +#: ../src/client/composer/composer-widget.vala:1648 msgid "Cc: " msgstr "Көшірмесі:" -#: ../src/client/composer/composer-widget.vala:1674 +#: ../src/client/composer/composer-widget.vala:1651 msgid "Bcc: " msgstr "Жасырын көшірме:" -#: ../src/client/composer/composer-widget.vala:1677 +#: ../src/client/composer/composer-widget.vala:1654 msgid "Reply-To: " msgstr "Жауап беру:" -#: ../src/client/composer/composer-widget.vala:1910 +#: ../src/client/composer/composer-widget.vala:1786 msgid "Select Color" msgstr "Түсті таңдаңыз" #. Displayed in the From dropdown to indicate an "alternate email address" #. for an account. The first printf argument will be the alternate email #. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2345 +#: ../src/client/composer/composer-widget.vala:1986 #, c-format msgid "%1$s via %2$s" msgstr "%1$s, %2$s арқылы" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2389 +#: ../src/client/composer/composer-widget.vala:2028 msgid "_From:" msgstr "_Кімнен:" +#. Translators: This is the name of the file chooser filter +#. when inserting an image in the composer. +#: ../src/client/composer/composer-widget.vala:2252 +msgid "Images" +msgstr "Суреттер" + +#: ../src/client/composer/spell-check-popover.vala:117 +msgid "Remove this language from the preferred list" +msgstr "Бұл тілді таңдамалы тілдер тізімінен өшіру" + +#: ../src/client/composer/spell-check-popover.vala:121 +msgid "Add this language to the preferred list" +msgstr "Бұл тілді таңдамалы тілдер тізіміне қосу" + +#: ../src/client/composer/spell-check-popover.vala:217 +msgid "Search for more languages" +msgstr "Көбірек тілдерді іздеу" + #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Мен" -#: ../src/client/conversation-viewer/conversation-viewer.vala:414 -msgid "No conversations selected." -msgstr "Бірде-бір сөйлесу таңдалмады." +#. Translators: This is the file type displayed for +#. attachments with unknown file types. +#: ../src/client/conversation-viewer/conversation-email.vala:124 +msgid "Unknown" +msgstr "Белгісіз" + +#. Preview headers +#. Translators: This is displayed in place of the from address +#. when the message has no from address. +#: ../src/client/conversation-viewer/conversation-message.vala:331 +msgid "No sender" +msgstr "Жіберуші жоқ" + +#. Translators: This separates multiple 'from' +#. addresses in the header preview for a message. +#: ../src/client/conversation-viewer/conversation-message.vala:586 +msgid ", " +msgstr ", " + +#. Translators: This string is used as the HTML IMG ALT +#. attribute value when displaying an inline image in an email +#. that did not specify a file name. E.g. Image" +msgstr " жіберген" + +#: ../ui/conversation-message.ui.h:2 +msgid "1/1/1970\t" +msgstr "1/1/1970\t" + +#: ../ui/conversation-message.ui.h:3 +msgid "Preview body text." +msgstr "Дене мәтінін алдын-ала қарау." + +#: ../ui/conversation-message.ui.h:4 +msgid "Sent by:" +msgstr "Кім жіберген:" + +#: ../ui/conversation-message.ui.h:5 +msgid "Reply to:" +msgstr "Кімге жауап беру:" + +#: ../ui/conversation-message.ui.h:6 +msgid "Subject" +msgstr "Тақырыбы" + +#: ../ui/conversation-message.ui.h:7 +msgid "To:" +msgstr "Кімге:" + +#: ../ui/conversation-message.ui.h:8 +msgid "Cc:" +msgstr "Көшірмесі:" + +#: ../ui/conversation-message.ui.h:9 +msgid "Bcc:" +msgstr "Жасырын көшірме:" + +#: ../ui/conversation-message.ui.h:10 +msgid "Show Images" +msgstr "Суреттерді көрсету" + +#: ../ui/conversation-message.ui.h:11 +msgid "Always Show From Sender" +msgstr "Жіберушіден әрқашан көрсету" + +#: ../ui/conversation-message.ui.h:12 +msgid "Remote images not shown" +msgstr "Қашықтағы суреттер көрсетілмейді" + +#: ../ui/conversation-message.ui.h:13 +msgid "Only show remote images from senders you trust." +msgstr "Тек өзіңіз сенетін жіберушілерден суреттерді көрсету." + +#: ../ui/conversation-message.ui.h:14 +msgid "But actually goes to:" +msgstr "Бірақ, шын мәнінде мына жерге барады:" + +#: ../ui/conversation-message.ui.h:15 +msgid "The link appears to go to:" +msgstr "Бұл сілтеме осы жерге көрсетіп тұрған сияқты:" + +#: ../ui/conversation-message.ui.h:16 +msgid "Deceptive link found" +msgstr "Зиянкес сілтеме табылды" + +#: ../ui/conversation-message.ui.h:17 +msgid "The email sender may be leading you to the wrong web site." +msgstr "Эл. поштаны жіберуші сізді қате сайтқа бағдарлауы мүмкін." + +#: ../ui/conversation-message.ui.h:18 +msgid "If unsure, contact the sender and ask before continuing." +msgstr "Сенімсіз болсаңыз, жалғастыру алдында жіберушіге хабарласыңыз." + +#: ../ui/conversation-viewer.ui.h:1 +msgid "Find in conversation" +msgstr "Сөйлесуден табу" + +#: ../ui/conversation-viewer.ui.h:2 +msgid "Find the previous occurrence of the search string." +msgstr "Ізделетін мәтіннің алдыңғы кездесуін табу." + +#: ../ui/conversation-viewer.ui.h:3 +msgid "Find the next occurrence of the search string." +msgstr "Ізделетін мәтіннің келесі кездесуін табу." + #: ../ui/edit_alternate_emails.glade.h:1 msgid "Remove email address" msgstr "Эл. пошта адресін өшіру" @@ -2036,6 +2170,247 @@ msgid "label" msgstr "белгі" +#: ../ui/gtk/help-overlay.ui.h:1 +msgid "Conversation Shortcuts" +msgstr "Сөйлесулер жарлықтары" + +#: ../ui/gtk/help-overlay.ui.h:2 +msgctxt "shortcut window" +msgid "General" +msgstr "Жалпы" + +#: ../ui/gtk/help-overlay.ui.h:3 +msgctxt "shortcut window" +msgid "Move focus to the next/previous pane" +msgstr "Фокусты келесі/алдыңғы панельге жылжыту" + +#: ../ui/gtk/help-overlay.ui.h:4 +msgctxt "shortcut window" +msgid "Move focus to conversation list" +msgstr "Фокусты сөйлесулер тізіміне жылжыту" + +#: ../ui/gtk/help-overlay.ui.h:5 +msgctxt "shortcut window" +msgid "Detach composer window" +msgstr "Жаңа хатты жазу терезесін бөліп жіберу" + +#: ../ui/gtk/help-overlay.ui.h:6 +msgctxt "shortcut window" +msgid "Close composer window" +msgstr "Жаңа хатты жазу терезесін жабу" + +#: ../ui/gtk/help-overlay.ui.h:7 +msgctxt "shortcut window" +msgid "Show keyboard shortcuts" +msgstr "Пернетақта жарлықтарын көрсету" + +#: ../ui/gtk/help-overlay.ui.h:8 +msgctxt "shortcut window" +msgid "Show help" +msgstr "Көмекті көрсету" + +#: ../ui/gtk/help-overlay.ui.h:9 +msgctxt "shortcut window" +msgid "Quit the application" +msgstr "Қолданба жұмысын аяқтау" + +#: ../ui/gtk/help-overlay.ui.h:10 +msgctxt "shortcut window" +msgid "Search" +msgstr "Іздеу" + +#: ../ui/gtk/help-overlay.ui.h:11 +msgctxt "shortcut window" +msgid "Jump to search box" +msgstr "Іздеу жолағына өту" + +#: ../ui/gtk/help-overlay.ui.h:12 +msgctxt "shortcut window" +msgid "Find in current conversation" +msgstr "Ағымдағы сөйлесуден табу" + +#: ../ui/gtk/help-overlay.ui.h:13 +msgctxt "shortcut window" +msgid "Find next/previous in current conversation" +msgstr "Ағымдағы сөйлесуден алдыңғы/келесі сәйкестікті табу" + +#: ../ui/gtk/help-overlay.ui.h:14 +msgctxt "shortcut window" +msgid "Actions" +msgstr "Әрекеттер" + +#: ../ui/gtk/help-overlay.ui.h:15 +msgctxt "shortcut window" +msgid "Compose a new message" +msgstr "Жаңа хатты жазу" + +#: ../ui/gtk/help-overlay.ui.h:16 +msgctxt "shortcut window" +msgid "Reply to sender " +msgstr "Жіберушіге жауап беру " + +#: ../ui/gtk/help-overlay.ui.h:17 +msgctxt "shortcut window" +msgid "Reply to all" +msgstr "Барлығына жауап беру" + +#: ../ui/gtk/help-overlay.ui.h:18 +msgctxt "shortcut window" +msgid "Forward" +msgstr "Қайта бағдарлау" + +#: ../ui/gtk/help-overlay.ui.h:19 +msgctxt "shortcut window" +msgid "Archive" +msgstr "Архивтек" + +#: ../ui/gtk/help-overlay.ui.h:20 +msgctxt "shortcut window" +msgid "Move to trash" +msgstr "Қоқыс шелегіне тастау" + +#: ../ui/gtk/help-overlay.ui.h:21 +msgctxt "shortcut window" +msgid "Toggle spam" +msgstr "Спам күйін ауыстыру" + +#: ../ui/gtk/help-overlay.ui.h:22 +msgctxt "shortcut window" +msgid "Move the conversation" +msgstr "Сөйлесуді жылжыту" + +#: ../ui/gtk/help-overlay.ui.h:23 +msgctxt "shortcut window" +msgid "Label the conversation" +msgstr "Сөйлесуге белгіні орнату" + +#: ../ui/gtk/help-overlay.ui.h:24 +msgctxt "shortcut window" +msgid "Mark read" +msgstr "Оқылған етіп белгілеу" + +#: ../ui/gtk/help-overlay.ui.h:25 +msgctxt "shortcut window" +msgid "Mark unread" +msgstr "Оқылмаған етіп белгілеу" + +#: ../ui/gtk/help-overlay.ui.h:26 +msgctxt "shortcut window" +msgid "View" +msgstr "Қарау" + +#: ../ui/gtk/help-overlay.ui.h:27 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Үлкейту" + +#: ../ui/gtk/help-overlay.ui.h:28 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Кішірейту" + +#: ../ui/gtk/help-overlay.ui.h:29 +msgctxt "shortcut window" +msgid "Reset zoom" +msgstr "Масштабты тастау" + +#: ../ui/gtk/help-overlay.ui.h:30 +msgctxt "shortcut window" +msgid "Additional Shortcuts" +msgstr "Қосымша жарлықтар" + +#: ../ui/gtk/help-overlay.ui.h:31 +msgctxt "shortcut window" +msgid "Star" +msgstr "Жұлдызшаны орнату" + +#: ../ui/gtk/help-overlay.ui.h:32 +msgctxt "shortcut window" +msgid "Unstar" +msgstr "Жұлдызшаны алып тастау" + +#: ../ui/gtk/help-overlay.ui.h:33 +msgctxt "shortcut window" +msgid "Delete" +msgstr "Өшіру" + +#: ../ui/gtk/help-overlay.ui.h:34 +msgctxt "shortcut window" +msgid "Jump to next (older) conversation" +msgstr "Келесі (ескілеу) сөйлесуге өту" + +#: ../ui/gtk/help-overlay.ui.h:35 +msgctxt "shortcut window" +msgid "Jump to previous (newer) conversation" +msgstr "Алдыңғы (жаңалау) сөйлесуге өту" + +#: ../ui/gtk/help-overlay.ui.h:36 +msgid "Composer Shortcuts" +msgstr "Хатты жазу терезесінің жарлықтары" + +#: ../ui/gtk/help-overlay.ui.h:37 +msgctxt "shortcut window" +msgid "Quote text" +msgstr "Мәтінді дәйексөз қылу" + +#: ../ui/gtk/help-overlay.ui.h:38 +msgctxt "shortcut window" +msgid "Unquote text" +msgstr "Мәтінді дәйексөз емес қылу" + +#: ../ui/gtk/help-overlay.ui.h:39 +msgctxt "shortcut window" +msgid "Send" +msgstr "Жіберу" + +#: ../ui/gtk/help-overlay.ui.h:40 +msgctxt "shortcut window" +msgid "Add attachment" +msgstr "Салынымды қосу" + +#: ../ui/gtk/help-overlay.ui.h:41 +msgctxt "shortcut window" +msgid "Rich text mode" +msgstr "Кеңейтілген пішімдеу" + +#: ../ui/gtk/help-overlay.ui.h:42 +msgctxt "shortcut window" +msgid "Bold text" +msgstr "Жуан қаріп" + +#: ../ui/gtk/help-overlay.ui.h:43 +msgctxt "shortcut window" +msgid "Italicize text" +msgstr "Мәтінді көлбеу қылу" + +#: ../ui/gtk/help-overlay.ui.h:44 +msgctxt "shortcut window" +msgid "Underline text" +msgstr "Асты сызылған" + +#: ../ui/gtk/help-overlay.ui.h:45 +msgctxt "shortcut window" +msgid "Strike text" +msgstr "Мәтінді сызылған қылу" + +#: ../ui/gtk/help-overlay.ui.h:46 +msgctxt "shortcut window" +msgid "Insert a link" +msgstr "Сілтемені кірістіру" + +#: ../ui/gtk/help-overlay.ui.h:47 +msgctxt "shortcut window" +msgid "Remove formatting" +msgstr "Пішімдеуді өшіру" + +#: ../ui/gtk/menus.ui.h:2 +msgid "A_ccounts" +msgstr "_Тіркелгілер" + +#: ../ui/gtk/menus.ui.h:4 +msgid "_Keyboard Shortcuts" +msgstr "Пернетақта жарлықтары" + #: ../ui/login.glade.h:1 msgid "email@example.com" msgstr "email@example.com" @@ -2160,7 +2535,7 @@ msgid "Use IMAP cre_dentials" msgstr "IMAP тіркелгі _деректерін қолдану" -#: ../ui/login.glade.h:34 ../ui/preferences.glade.h:5 +#: ../ui/login.glade.h:34 msgid "Composer" msgstr "Хатты жазу терезесі" @@ -2180,6 +2555,10 @@ msgid "_Download mail" msgstr "_Поштаны жүктеп алу" +#: ../ui/main-toolbar.ui.h:1 +msgid "Empty Spam or Trash folders" +msgstr "Спам немесе Қоқыс шелегі бумаларын босату" + #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" msgstr "SMTP тіркелгі ақпараты" @@ -2196,47 +2575,43 @@ msgid "_Authenticate" msgstr "_Аутентификация" -#: ../ui/preferences.glade.h:1 +#: ../ui/preferences-dialog.ui.h:1 msgid "Reading" msgstr "Оқу" -#: ../ui/preferences.glade.h:2 +#: ../ui/preferences-dialog.ui.h:2 msgid "_Automatically select next message" msgstr "Келесі хатты _автотаңдау" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences-dialog.ui.h:3 msgid "_Display conversation preview" msgstr "Сөйлесудің алдын-ала көрінісін көр_сету" -#: ../ui/preferences.glade.h:4 +#: ../ui/preferences-dialog.ui.h:4 msgid "Use _three pane view" msgstr "_Ағаш тектес панель көрінісін қолдану" -#: ../ui/preferences.glade.h:6 -msgid "Enable _spell checking" -msgstr "Е_млені тексеруді іске қосу" - -#: ../ui/preferences.glade.h:7 +#: ../ui/preferences-dialog.ui.h:5 msgid "Notifications" msgstr "Хабарламалар" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences-dialog.ui.h:6 msgid "_Play notification sounds" msgstr "Хабарлау дыбы_старын ойнату" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences-dialog.ui.h:7 msgid "Show _notifications for new mail" msgstr "Жаңа хаттар үшін _хабарламаларды көрсету" -#: ../ui/preferences.glade.h:10 +#: ../ui/preferences-dialog.ui.h:8 msgid "Always _watch for new mail" msgstr "Жаңа хаттар келгенін _бақылау" -#: ../ui/preferences.glade.h:11 +#: ../ui/preferences-dialog.ui.h:9 msgid "Geary will run in the background and notify of new mail" msgstr "Geary фонда орындалып, жаңа түскен хаттар жөнінде хабарлайды" -#: ../ui/preferences.glade.h:12 +#: ../ui/preferences-dialog.ui.h:10 msgid "Preferences" msgstr "Баптаулар" @@ -2268,6 +2643,126 @@ msgid "Geary update in progress…" msgstr "Geary жаңартуы жүруде…" +#~ msgid "Empty" +#~ msgstr "Босату" + +#~ msgid "%i match" +#~ msgid_plural "%i matches" +#~ msgstr[0] "%i сәйкестік" + +#~ msgid "%i match (wrapped)" +#~ msgid_plural "%i matches (wrapped)" +#~ msgstr[0] "%i сәйкестік (тасымалданған)" + +#~ msgid "not found" +#~ msgstr "табылмады" + +#~ msgid "No search results found." +#~ msgstr "Іздеу нәтижелері жоқ." + +#~ msgid "From:" +#~ msgstr "Кімнен:" + +#~ msgid "Date:" +#~ msgstr "Күні:" + +#~ msgid "Copy _Link" +#~ msgstr "_Сілтемені көшіріп алу" + +#~ msgid "Select _Message" +#~ msgstr "_Хатты таңдау" + +#~ msgid " (Invalid?)" +#~ msgstr " (Жарамсыз?)" + +#~ msgid "_Save As..." +#~ msgstr "Қала_йша сақтау..." + +#~ msgid "Save A_ttachment..." +#~ msgid_plural "Save All A_ttachments..." +#~ msgstr[0] "Салы_нымдарды сақтау..." + +#~ msgid "none" +#~ msgstr "жоқ" + +#~ msgid "_Left" +#~ msgstr "_Сол жақтан" + +#~ msgid "_Right" +#~ msgstr "_Оң жақ" + +#~ msgid "_Center" +#~ msgstr "_Ортасынан" + +#~ msgid "_Justify" +#~ msgstr "_Туралануы" + +#~ msgid "Link (Ctrl+L)" +#~ msgstr "Сілтеме (Ctrl+L)" + +#~ msgid "More options" +#~ msgstr "Көбірек опциялар" + +#~ msgctxt "Label" +#~ msgid "Close and Save" +#~ msgstr "Жабу және сақтау" + +#~ msgctxt "Short Label" +#~ msgid "Close and Save" +#~ msgstr "Жабу және сақтау" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Save" +#~ msgstr "Жабу және сақтау" + +#~ msgctxt "Label" +#~ msgid "Close and Discard" +#~ msgstr "Жабу және тайдыру" + +#~ msgctxt "Short Label" +#~ msgid "Close and Discard" +#~ msgstr "Жабу және тайдыру" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Discard" +#~ msgstr "Жабу және тайдыру" + +#~ msgid "Large" +#~ msgstr "Үлкен" + +#~ msgid "Medium" +#~ msgstr "Орташа" + +#~ msgid "Small" +#~ msgstr "Кішкентай" + +#~ msgid "Sans Serif" +#~ msgstr "Sans Serif" + +#~ msgid "Serif" +#~ msgstr "Serif" + +#~ msgid "Fixed Width" +#~ msgstr "Бекітілген ені" + +#~ msgid "Detach" +#~ msgstr "Бөліп жіберу" + +#~ msgid "_Attach File" +#~ msgstr "Ф_айлды қосып жіберу" + +#~ msgid "Attach File" +#~ msgstr "Файлды қосып жіберу" + +#~ msgid "_Include Original Attachments" +#~ msgstr "Бастапқы салынымдарды қ_осып жіберу" + +#~ msgid "Enable _spell checking" +#~ msgstr "Е_млені тексеруді іске қосу" + +#~ msgid "Application Menu" +#~ msgstr "Қолданбалар мәзірі" + #~ msgid "Copyright 2011-2015 Yorba Foundation" #~ msgstr "Copyright 2011-2015 Yorba Foundation" diff -Nru geary-0.11.4/po/lt.po geary-0.12.0/po/lt.po --- geary-0.11.4/po/lt.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/lt.po 2017-10-02 11:25:21.000000000 +0000 @@ -6,15 +6,15 @@ # Translators: # velniukas6 , 2014. # Jonas Skarulskis , 2015. -# Aurimas Černius , 2015. +# Aurimas Černius , 2015, 2016. # msgid "" msgstr "" "Project-Id-Version: geary-0.4.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" -"product=geary&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2016-01-08 06:46+0000\n" -"PO-Revision-Date: 2016-01-08 13:21+0200\n" +"product=geary&keywords=I18N+L10N&component=internationalization\n" +"POT-Creation-Date: 2016-09-11 07:18+0000\n" +"PO-Revision-Date: 2016-09-17 14:24+0300\n" "Last-Translator: Aurimas Černius \n" "Language-Team: Lietuvių \n" "Language: lt\n" @@ -23,33 +23,98 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" "%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 1.8.6\n" +"X-Generator: Gtranslator 2.91.7\n" -#: ../desktop/geary.desktop.in.h:1 ../desktop/geary-autostart.desktop.in.h:1 +#: ../desktop/geary.appdata.xml.in.h:1 ../desktop/geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" msgstr "Geary" -#: ../desktop/geary.desktop.in.h:2 ../desktop/geary-autostart.desktop.in.h:2 +#: ../desktop/geary.appdata.xml.in.h:2 ../desktop/geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 +msgid "Send and receive email" +msgstr "Siųsti ir gauti paštą" + +#: ../desktop/geary.appdata.xml.in.h:3 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"Geary yra el. pašto programa GNOME 3 darbalaukiui, sukurta pokalbių " +"pagrindu. Ji leidžia skaityti, surasti bei išsiųsti el. laiškus naudojant " +"paprastą bei šiuolaikišką sąsają." + +#: ../desktop/geary.appdata.xml.in.h:4 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"Pokalbiai leidžia skaityti pilnas diskusijas be laiškų ieškojimo ir " +"spaudinėjimo ant jų." + +#: ../desktop/geary.appdata.xml.in.h:5 +msgid "Geary's features include:" +msgstr "Kai kurios Geary savybės:" + +#: ../desktop/geary.appdata.xml.in.h:6 +msgid "Quick email account setup" +msgstr "Greitas el. pašto paskyros nustatymas" + +#: ../desktop/geary.appdata.xml.in.h:7 +msgid "Shows related messages together in conversations" +msgstr "Rodo susijusius laiškus kartu pokalbiuose" + +#: ../desktop/geary.appdata.xml.in.h:8 +msgid "Fast, full text and keyword search" +msgstr "Greita viso teksto be raktinių žodžių paieška" + +#: ../desktop/geary.appdata.xml.in.h:9 +msgid "Full-featured HTML and plain text message composer" +msgstr "Pilno funkcionalumo HTML ir grynojo teksto laiko redaktorius" + +#: ../desktop/geary.appdata.xml.in.h:10 +#| msgid "Show _notifications for new mail" +msgid "Desktop notification of new mail" +msgstr "Darbalaukio pranešimai gavus naują laišką" + +#: ../desktop/geary.appdata.xml.in.h:11 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" +msgstr "" +"Suderinama su GMail, Yahoo! Mail. Outlook.com ir kitais IMAP serveriais" + +#: ../desktop/geary.desktop.in.h:2 +#| msgid "Gmail" +msgid "Email" +msgstr "El. paštas" + +#: ../desktop/geary.desktop.in.h:3 +#| msgid "Geary Mail" +msgid "Geary Email" +msgstr "Geary el. paštas" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "Paštas;El. paštas;IMAP;GMail;Yahoo;Hotmail;Outlook;" + +#: ../desktop/geary.desktop.in.h:7 +msgid "Compose Message" +msgstr "Rašyti laišką" + +#: ../desktop/geary-autostart.desktop.in.h:2 #: ../src/client/application/geary-application.vala:18 msgid "Mail Client" msgstr "Pašto klientas" -#: ../desktop/geary.desktop.in.h:3 ../desktop/geary-autostart.desktop.in.h:3 +#: ../desktop/geary-autostart.desktop.in.h:3 msgid "Geary Mail" msgstr "Geary Mail" -#: ../desktop/geary.desktop.in.h:4 ../desktop/geary-autostart.desktop.in.h:4 -msgid "Send and receive email" -msgstr "Siųsti ir gauti paštą" - -#: ../desktop/geary.desktop.in.h:5 ../desktop/geary-autostart.desktop.in.h:5 +#: ../desktop/geary-autostart.desktop.in.h:5 msgid "Email;E-mail;Mail;" msgstr "El. paštas;E. paštas;Paštas;" -#: ../desktop/geary.desktop.in.h:6 -msgid "Compose Message" -msgstr "Rašyti laišką" - #: ../desktop/geary-attach.contract.in.h:1 msgid "Send by email" msgstr "Siųsti el. paštu" @@ -69,7 +134,7 @@ msgstr "_Pridėti" #. reset/clear widgets -#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 #, c-format msgid "Additional addresses for %s" msgstr "Papildomi %s adresai" @@ -79,7 +144,7 @@ msgid "Accounts" msgstr "Paskyros" -#. Copyright 2011-2015 Yorba Foundation +#. Copyright 2016 Software Freedom Conservancy Inc. #. * #. * This software is licensed under the GNU Lesser General Public License #. * (version 2.1 or later). See the COPYING file in this distribution. @@ -90,107 +155,107 @@ msgid "First Last" msgstr "Pirmas paskutinis" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." msgstr "Sveiki įsijungę Geary." -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." msgstr "Norėdami pradėti įveskite naudotojo duomenis." -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "2 savaičių senumo" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:254 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "1 mėnesio senumo" -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "3 mėnesių senumo" -#: ../src/client/accounts/add-edit-page.vala:256 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "6 mėnesių senumo" -#: ../src/client/accounts/add-edit-page.vala:257 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "1 metų senumo" -#: ../src/client/accounts/add-edit-page.vala:258 +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" msgstr "2 metų senumo" -#: ../src/client/accounts/add-edit-page.vala:259 +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" msgstr "4 metų senumo" #. Separator -#: ../src/client/accounts/add-edit-page.vala:261 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "Viskas" -#: ../src/client/accounts/add-edit-page.vala:280 +#: ../src/client/accounts/add-edit-page.vala:282 msgid "Edit" msgstr "Taisymas" -#: ../src/client/accounts/add-edit-page.vala:282 +#: ../src/client/accounts/add-edit-page.vala:284 msgid "Preview" msgstr "Peržiūra" -#: ../src/client/accounts/add-edit-page.vala:723 +#: ../src/client/accounts/add-edit-page.vala:738 msgid "Remem_ber passwords" msgstr "Primin_ti slaptažodžius" -#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:6 +#: ../src/client/accounts/add-edit-page.vala:745 ../ui/login.glade.h:6 msgid "Remem_ber password" msgstr "Primin_ti slaptažodį" -#: ../src/client/accounts/add-edit-page.vala:764 +#: ../src/client/accounts/add-edit-page.vala:779 msgid "Unable to validate:\n" msgstr "Negalima patvirtinti:\n" -#: ../src/client/accounts/add-edit-page.vala:766 +#: ../src/client/accounts/add-edit-page.vala:781 msgid " • Invalid account nickname.\n" msgstr " • Neteisingas naudotojo vardas.\n" -#: ../src/client/accounts/add-edit-page.vala:769 +#: ../src/client/accounts/add-edit-page.vala:784 msgid " • Email address already added to Geary.\n" msgstr " • Pašto adresas pridėtas į Geary.\n" -#: ../src/client/accounts/add-edit-page.vala:773 +#: ../src/client/accounts/add-edit-page.vala:788 msgid " • IMAP connection error.\n" msgstr " • IMAP prisijungimo klaida.\n" -#: ../src/client/accounts/add-edit-page.vala:776 +#: ../src/client/accounts/add-edit-page.vala:791 msgid " • IMAP username or password incorrect.\n" msgstr " • IMAP neteisingas naudotojo vardas ar slaptažodis.\n" -#: ../src/client/accounts/add-edit-page.vala:779 +#: ../src/client/accounts/add-edit-page.vala:794 msgid " • SMTP connection error.\n" msgstr " • SMTP prisijungimo klaida.\n" -#: ../src/client/accounts/add-edit-page.vala:782 +#: ../src/client/accounts/add-edit-page.vala:797 msgid " • SMTP username or password incorrect.\n" msgstr " • SMTP neteisingas naudotojo vardas ar slaptažodis.\n" -#: ../src/client/accounts/add-edit-page.vala:786 +#: ../src/client/accounts/add-edit-page.vala:801 msgid " • Connection error.\n" msgstr " • Prisijungimo klaida.\n" -#: ../src/client/accounts/add-edit-page.vala:790 +#: ../src/client/accounts/add-edit-page.vala:805 msgid " • Username or password incorrect.\n" msgstr " • neteisingas naudotojo vardas ar slaptažodis.\n" #: ../src/client/application/geary-application.vala:19 -msgid "Copyright 2011-2015 Yorba Foundation" -msgstr "Autorinės teisės priklauso 2011-2015 Yorba Foundation" +msgid "Copyright 2016 Software Freedom Conservancy Inc." +msgstr "Autorių teisės 2016 Software Freedom Conservancy Inc." #: ../src/client/application/geary-application.vala:21 -msgid "Visit the Yorba web site" -msgstr "Aplankykite Yorba internetinį puslapį" +msgid "Visit the Geary web site" +msgstr "Aplankykite Geary internetinį puslapį" #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" @@ -270,198 +335,193 @@ msgid "Unrecognized command line option \"%s\"\n" msgstr "Neatpažintas komandinės eilutės parametras \"%s\"\n" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:60 msgid "Delete conversation" msgstr "Trinti pokalbį" -#: ../src/client/application/geary-controller.vala:63 +#: ../src/client/application/geary-controller.vala:61 msgid "Delete conversation (Shift+Delete)" msgstr "Ištrinti pokalbį (Lyg2+Trinti)" -#: ../src/client/application/geary-controller.vala:64 +#: ../src/client/application/geary-controller.vala:62 msgid "Delete conversations (Shift+Delete)" msgstr "Ištrinti pokalbius (Lyg2+Trinti)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:68 +#: ../src/client/application/geary-controller.vala:66 msgid "Move conversation to Trash (Delete, Backspace)" msgstr "Perkelti pokalbį į šiukšlinę (Trinti, Grįžtamasis trynimas)" -#: ../src/client/application/geary-controller.vala:69 +#: ../src/client/application/geary-controller.vala:67 msgid "Move conversations to Trash (Delete, Backspace)" msgstr "Perkelti pokalbius į šiukšlinę (Trinti, Grįžtamasis trynimas)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:71 msgid "_Archive" msgstr "_Archyvuoti" -#: ../src/client/application/geary-controller.vala:74 +#: ../src/client/application/geary-controller.vala:72 msgid "Archive conversation (A)" msgstr "Archyvuoti pokalbį (A)" -#: ../src/client/application/geary-controller.vala:75 +#: ../src/client/application/geary-controller.vala:73 msgid "Archive conversations (A)" msgstr "Archyvuoti pokalbius (A)" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:76 msgid "Mark as S_pam" msgstr "Žymėti kaip š_lamštą" -#: ../src/client/application/geary-controller.vala:79 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark as not S_pam" msgstr "Žymėti kaip ne š_lamštą" -#: ../src/client/application/geary-controller.vala:81 -#: ../src/client/application/geary-controller.vala:397 +#: ../src/client/application/geary-controller.vala:79 +#: ../src/client/application/geary-controller.vala:403 msgid "Mark conversation" msgstr "Žymėti pokalbį" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:80 msgid "Mark conversations" msgstr "Žymėti pokalbius" -#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:81 msgid "Add label to conversation" msgstr "Pridėti žymą pokalbiui" -#: ../src/client/application/geary-controller.vala:84 +#: ../src/client/application/geary-controller.vala:82 msgid "Add label to conversations" msgstr "Pridėti žymas pokalbiams" -#: ../src/client/application/geary-controller.vala:85 -#: ../src/client/application/geary-controller.vala:436 +#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:442 msgid "Move conversation" msgstr "Perkelti pokalbį" -#: ../src/client/application/geary-controller.vala:86 +#: ../src/client/application/geary-controller.vala:84 msgid "Move conversations" msgstr "Perkelti pokalbius" -#: ../src/client/application/geary-controller.vala:373 +#: ../src/client/application/geary-controller.vala:383 #: ../ui/app_menu.interface.h:1 msgid "A_ccounts" msgstr "Var_totojai" -#: ../src/client/application/geary-controller.vala:378 +#: ../src/client/application/geary-controller.vala:388 #: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 msgid "_Preferences" msgstr "_Nuostatos" -#: ../src/client/application/geary-controller.vala:382 -#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:4 +#: ../src/client/application/geary-controller.vala:392 +#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:3 msgid "_Help" msgstr "_Pagalba" -#: ../src/client/application/geary-controller.vala:386 -#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:5 +#: ../src/client/application/geary-controller.vala:396 +#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:4 msgid "_About" msgstr "_Apie" -#: ../src/client/application/geary-controller.vala:390 -#: ../ui/app_menu.interface.h:3 -msgid "_Donate" -msgstr "_Aukoti" - -#: ../src/client/application/geary-controller.vala:394 -#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:6 +#: ../src/client/application/geary-controller.vala:400 +#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:5 msgid "_Quit" msgstr "_Baigti" -#: ../src/client/application/geary-controller.vala:399 +#: ../src/client/application/geary-controller.vala:405 msgid "_Mark as..." msgstr "_Žymėti kaip..." -#: ../src/client/application/geary-controller.vala:405 +#: ../src/client/application/geary-controller.vala:411 msgid "Mark as _Read" msgstr "Žymėti kaip _skaitytą" -#: ../src/client/application/geary-controller.vala:411 +#: ../src/client/application/geary-controller.vala:417 msgid "Mark as _Unread" msgstr "Žymėti kaip _neskaitytą" -#: ../src/client/application/geary-controller.vala:417 +#: ../src/client/application/geary-controller.vala:423 msgid "_Star" msgstr "_Žymėti žvaigždute" -#: ../src/client/application/geary-controller.vala:422 +#: ../src/client/application/geary-controller.vala:428 msgid "U_nstar" msgstr "At_žymėti" -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:438 msgid "Add label" msgstr "Pridėti žymą" -#: ../src/client/application/geary-controller.vala:433 +#: ../src/client/application/geary-controller.vala:439 msgid "_Label" msgstr "_Žymė" -#: ../src/client/application/geary-controller.vala:437 +#: ../src/client/application/geary-controller.vala:443 msgid "_Move" msgstr "_Perkelti" -#: ../src/client/application/geary-controller.vala:441 +#: ../src/client/application/geary-controller.vala:447 msgid "Compose new message (Ctrl+N, N)" msgstr "Rašyti naują laišką (Ctrl+N, N)" #. Reply to a message. -#: ../src/client/application/geary-controller.vala:445 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1857 +#: ../src/client/application/geary-controller.vala:451 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1896 msgid "_Reply" msgstr "_Atsakyti" -#: ../src/client/application/geary-controller.vala:446 +#: ../src/client/application/geary-controller.vala:452 msgid "Reply (Ctrl+R, R)" msgstr "Atsakyti (Ctrl+R, R)" -#: ../src/client/application/geary-controller.vala:450 +#: ../src/client/application/geary-controller.vala:456 msgid "R_eply All" msgstr "At_sakyti visiems" -#: ../src/client/application/geary-controller.vala:451 +#: ../src/client/application/geary-controller.vala:457 msgid "Reply all (Ctrl+Shift+R, Shift+R)" msgstr "Atsakyti visiems (Ctrl+Shift+R, Shift+R)" #. Forward a message. -#: ../src/client/application/geary-controller.vala:456 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1867 +#: ../src/client/application/geary-controller.vala:462 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1906 msgid "_Forward" msgstr "_Persiųsti" -#: ../src/client/application/geary-controller.vala:457 +#: ../src/client/application/geary-controller.vala:463 msgid "Forward (Ctrl+L, F)" msgstr "Persiųsti (Ctrl+L, F)" -#: ../src/client/application/geary-controller.vala:496 +#: ../src/client/application/geary-controller.vala:502 msgid "Empty" msgstr "Išvalyti" -#: ../src/client/application/geary-controller.vala:497 +#: ../src/client/application/geary-controller.vala:503 msgid "Empty Spam or Trash folders" msgstr "Išvalyti šlamšto ir šiukšlių aplankus" -#: ../src/client/application/geary-controller.vala:501 +#: ../src/client/application/geary-controller.vala:507 msgid "Empty _Spam…" msgstr "Išvalyti š_lamštą" -#: ../src/client/application/geary-controller.vala:505 +#: ../src/client/application/geary-controller.vala:511 msgid "Empty _Trash…" msgstr "Išvalyti _šiukšlinę" #. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:538 +#: ../src/client/application/geary-controller.vala:540 msgid "Toggle search bar" msgstr "Perjungti paieškos juostą" -#: ../src/client/application/geary-controller.vala:752 +#: ../src/client/application/geary-controller.vala:735 msgid "Unable to store server trust exception" msgstr "Nepavyko išsaugoti serverio patikimumo išimties" -#: ../src/client/application/geary-controller.vala:989 +#: ../src/client/application/geary-controller.vala:972 msgid "Your settings are insecure" msgstr "Jūsų nustatytmai yra nesaugūs" -#: ../src/client/application/geary-controller.vala:990 +#: ../src/client/application/geary-controller.vala:973 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -471,17 +531,17 @@ "naudotojo vardas bei slaptažodis gali būti nuskaitytas tinkle. Ar tikrai " "norite tęsti?" -#: ../src/client/application/geary-controller.vala:991 +#: ../src/client/application/geary-controller.vala:974 msgid "Co_ntinue" msgstr "Tęs_ti" #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:1069 +#: ../src/client/application/geary-controller.vala:1052 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "Siuntimo klaida" -#: ../src/client/application/geary-controller.vala:1070 +#: ../src/client/application/geary-controller.vala:1053 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." @@ -491,12 +551,12 @@ #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1074 +#: ../src/client/application/geary-controller.vala:1057 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "Pašto siuntimo klaida" -#: ../src/client/application/geary-controller.vala:1075 +#: ../src/client/application/geary-controller.vala:1058 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." @@ -504,19 +564,19 @@ "Geary įvyko klaida įrašant laišką į siunčiamų laiškų aplanką. Jeigu klaida " "išlieka, prašome ištrinti laišką iš Siunčiamieji aplanko." -#: ../src/client/application/geary-controller.vala:1144 +#: ../src/client/application/geary-controller.vala:1127 msgid "Labels" msgstr "Žymos" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1156 +#: ../src/client/application/geary-controller.vala:1139 #, c-format msgid "Unable to open the database for %s" msgstr "Negalima atidaryti duomenų bazės %s" -#: ../src/client/application/geary-controller.vala:1157 +#: ../src/client/application/geary-controller.vala:1140 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -540,20 +600,20 @@ "Duomenų bazės perkūrimas pašalins visus lokalius laiškus bei prisegtukus. " "Paštas esantis serveryje nebus įtakotas." -#: ../src/client/application/geary-controller.vala:1159 +#: ../src/client/application/geary-controller.vala:1142 msgid "_Rebuild" msgstr "_Atstatyti" -#: ../src/client/application/geary-controller.vala:1159 +#: ../src/client/application/geary-controller.vala:1142 msgid "E_xit" msgstr "Iš_eiti" -#: ../src/client/application/geary-controller.vala:1168 +#: ../src/client/application/geary-controller.vala:1151 #, c-format msgid "Unable to rebuild database for \"%s\"" msgstr "Negalima atstatyti duomenų bazės \"%s\"" -#: ../src/client/application/geary-controller.vala:1169 +#: ../src/client/application/geary-controller.vala:1152 #, c-format msgid "" "Error during rebuild:\n" @@ -566,14 +626,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1191 -#: ../src/client/application/geary-controller.vala:1201 -#: ../src/client/application/geary-controller.vala:1212 +#: ../src/client/application/geary-controller.vala:1174 +#: ../src/client/application/geary-controller.vala:1184 +#: ../src/client/application/geary-controller.vala:1195 #, c-format msgid "Unable to open local mailbox for %s" msgstr "Negalima atidaryti lokalios pašto dėžutės %s" -#: ../src/client/application/geary-controller.vala:1192 +#: ../src/client/application/geary-controller.vala:1175 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -592,7 +652,7 @@ "\n" "%s" -#: ../src/client/application/geary-controller.vala:1202 +#: ../src/client/application/geary-controller.vala:1185 msgid "" "The version number of the local mail database is formatted for a newer " "version of Geary. Unfortunately, the database cannot be \"rolled back\" to " @@ -606,7 +666,7 @@ "\n" "Prašome įdiegti naujausią Geary versiją ir bandyti dar kartą." -#: ../src/client/application/geary-controller.vala:1213 +#: ../src/client/application/geary-controller.vala:1196 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" @@ -618,27 +678,27 @@ "\n" "Prašome patikrinti tinklą ir iš naujo paleisti Geary." -#: ../src/client/application/geary-controller.vala:1721 +#: ../src/client/application/geary-controller.vala:1708 #, c-format msgid "About %s" msgstr "Apie %s" #. / Translators: add your name and email address to receive credit in the About dialog #. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1724 +#: ../src/client/application/geary-controller.vala:1711 msgid "translator-credits" msgstr "Vertėjų sąrašas" -#: ../src/client/application/geary-controller.vala:1990 +#: ../src/client/application/geary-controller.vala:1968 msgid "Undo move (Ctrl+Z)" msgstr "Atšaukti perkelimą (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2000 +#: ../src/client/application/geary-controller.vala:1978 #, c-format msgid "Are you sure you want to open \"%s\"?" msgstr "Ar tikrai norite atidaryti \"%s\"?" -#: ../src/client/application/geary-controller.vala:2001 +#: ../src/client/application/geary-controller.vala:1979 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -646,74 +706,74 @@ "Prisegti failai gali pakenkti jūsų sistemai. Atidarykite failus tik iš " "patikimų šaltinių." -#: ../src/client/application/geary-controller.vala:2002 +#: ../src/client/application/geary-controller.vala:1980 msgid "Don't _ask me again" msgstr "Nebeklausti _" -#: ../src/client/application/geary-controller.vala:2020 +#: ../src/client/application/geary-controller.vala:1998 #, c-format msgid "A file named \"%s\" already exists. Do you want to replace it?" msgstr "Failas su pavadinimu \"%s\" jau yra. Norite jį pakeisti?" -#: ../src/client/application/geary-controller.vala:2022 +#: ../src/client/application/geary-controller.vala:2000 #, c-format msgid "" "The file already exists in \"%s\". Replacing it will overwrite its contents." msgstr "Toks failas jau yra \"%s\". Pakeitimas perrašys failo turinį." -#: ../src/client/application/geary-controller.vala:2025 +#: ../src/client/application/geary-controller.vala:2003 msgid "_Replace" msgstr "_Pakeisti" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2323 +#: ../src/client/application/geary-controller.vala:2301 msgid "Close open draft messages?" msgstr "Užverti atvertus juodraščius?" -#: ../src/client/application/geary-controller.vala:2453 +#: ../src/client/application/geary-controller.vala:2431 #, c-format msgid "Empty all email from your %s folder?" msgstr "Išvalyti visus laiškus iš %s katalogo?" -#: ../src/client/application/geary-controller.vala:2454 +#: ../src/client/application/geary-controller.vala:2432 msgid "This removes the email from Geary and your email server." msgstr "Tai pašalina laiškus iš Geary ir jūsų el. pašto serverio." -#: ../src/client/application/geary-controller.vala:2455 +#: ../src/client/application/geary-controller.vala:2433 msgid "This cannot be undone." msgstr "Tai negali būti atšaukta." -#: ../src/client/application/geary-controller.vala:2456 +#: ../src/client/application/geary-controller.vala:2434 #, c-format msgid "Empty %s" msgstr "Išvalyti %s" -#: ../src/client/application/geary-controller.vala:2473 +#: ../src/client/application/geary-controller.vala:2451 #, c-format msgid "Error emptying %s" msgstr "Klaida išvalant %s" -#: ../src/client/application/geary-controller.vala:2503 +#: ../src/client/application/geary-controller.vala:2481 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "Norite visam laikui ištrinti šį laišką?" msgstr[1] "Norite visam laikui ištrinti šiuos laiškus?" msgstr[2] "Norite visam laikui ištrinti šiuos laiškus?" -#: ../src/client/application/geary-controller.vala:2505 +#: ../src/client/application/geary-controller.vala:2483 msgid "Delete" msgstr "Ištrinti" -#: ../src/client/application/geary-controller.vala:2536 +#: ../src/client/application/geary-controller.vala:2514 msgid "Undo archive (Ctrl+Z)" msgstr "Atšaukti archyvavimą (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2551 +#: ../src/client/application/geary-controller.vala:2529 msgid "Undo trash (Ctrl+Z)" msgstr "Atšaukti išmetimą (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2604 +#: ../src/client/application/geary-controller.vala:2582 msgid "Undo (Ctrl+Z)" msgstr "Atšaukti (Ctrl+Z)" @@ -737,28 +797,28 @@ msgid "not found" msgstr "nerasta" -#: ../src/client/components/main-window.vala:430 +#: ../src/client/components/main-window.vala:372 #, c-format msgid "%s (%d)" msgstr "%s (%d)" -#: ../src/client/components/search-bar.vala:10 +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "Paieška" #. Search entry. -#: ../src/client/components/search-bar.vala:25 +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" msgstr "Ieškoti visame naudotojo pašte pagal žodžius (Ctrl+S)" -#: ../src/client/components/search-bar.vala:118 +#: ../src/client/components/search-bar.vala:103 #, c-format msgid "Indexing %s account" msgstr "Indeksuojama %s paskyra" -#: ../src/client/components/search-bar.vala:129 +#: ../src/client/components/search-bar.vala:114 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" @@ -800,7 +860,7 @@ #. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1324 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1358 msgid "Select _All" msgstr "Pasirinkti _viską" @@ -808,29 +868,29 @@ msgid "_Keep" msgstr "_Paimti" -#: ../src/client/composer/composer-widget.vala:73 +#: ../src/client/composer/composer-widget.vala:71 msgid "Saved" msgstr "Išsaugota" -#: ../src/client/composer/composer-widget.vala:74 +#: ../src/client/composer/composer-widget.vala:72 msgid "Saving" msgstr "Saugoma" -#: ../src/client/composer/composer-widget.vala:75 +#: ../src/client/composer/composer-widget.vala:73 msgid "Error saving" msgstr "Saugojimo klaida" -#: ../src/client/composer/composer-widget.vala:76 +#: ../src/client/composer/composer-widget.vala:74 msgid "Press Backspace to delete quote" msgstr "Paspauskite naikinimo klavišą citatai ištrinti" -#: ../src/client/composer/composer-widget.vala:77 +#: ../src/client/composer/composer-widget.vala:75 msgid "New Message" msgstr "Naujas laiškas" #. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since #. this is full-word checking, include all variants of each word. No spaces are allowed. -#: ../src/client/composer/composer-widget.vala:138 +#: ../src/client/composer/composer-widget.vala:136 msgid "" "attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" "enclosing|encloses|enclosure|enclosures" @@ -839,24 +899,24 @@ "failas|failai|failų|byla|bylos|bylų|rinkmena|rinkmenos|rinkmenų|prisegtukas|" "priedas|priedai" -#: ../src/client/composer/composer-widget.vala:1102 -#: ../src/client/composer/composer-widget.vala:1106 +#: ../src/client/composer/composer-widget.vala:1108 +#: ../src/client/composer/composer-widget.vala:1112 msgid "Do you want to discard this message?" msgstr "Norite atmesti šį laišką?" -#: ../src/client/composer/composer-widget.vala:1262 +#: ../src/client/composer/composer-widget.vala:1268 msgid "Send message with an empty subject and body?" msgstr "Ar siųsti laišką be teksto ir temos?" -#: ../src/client/composer/composer-widget.vala:1264 +#: ../src/client/composer/composer-widget.vala:1270 msgid "Send message with an empty subject?" msgstr "Ar siųsti laišką be temos?" -#: ../src/client/composer/composer-widget.vala:1266 +#: ../src/client/composer/composer-widget.vala:1272 msgid "Send message with an empty body?" msgstr "Ar siųsti laišką be teksto?" -#: ../src/client/composer/composer-widget.vala:1268 +#: ../src/client/composer/composer-widget.vala:1274 msgid "Send message without an attachment?" msgstr "Ar siųsti laišką be priedų?" @@ -895,49 +955,53 @@ msgid "%s (%s)" msgstr "%s (%s)" -#: ../src/client/composer/composer-widget.vala:1645 +#: ../src/client/composer/composer-widget.vala:1646 msgid "To: " msgstr "Kam: " -#: ../src/client/composer/composer-widget.vala:1648 +#: ../src/client/composer/composer-widget.vala:1649 msgid "Cc: " msgstr "Kopija: " -#: ../src/client/composer/composer-widget.vala:1651 +#: ../src/client/composer/composer-widget.vala:1652 msgid "Bcc: " msgstr "Nematoma kopija: " -#: ../src/client/composer/composer-widget.vala:1654 +#: ../src/client/composer/composer-widget.vala:1655 msgid "Reply-To: " msgstr "Kam _atsakyti:" -#: ../src/client/composer/composer-widget.vala:1887 +#: ../src/client/composer/composer-widget.vala:1888 msgid "Select Color" msgstr "Pasirinkti spalvą" #. Displayed in the From dropdown to indicate an "alternate email address" #. for an account. The first printf argument will be the alternate email #. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2322 +#: ../src/client/composer/composer-widget.vala:2335 #, c-format msgid "%1$s via %2$s" msgstr "%1$s per %2$s" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2364 +#: ../src/client/composer/composer-widget.vala:2377 msgid "_From:" msgstr "_Nuo:" +#: ../src/client/composer/spell-check-popover.vala:210 +msgid "Search for more languages" +msgstr "Ieškoti daugiau kalbų" + #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Aš" -#: ../src/client/conversation-viewer/conversation-viewer.vala:413 +#: ../src/client/conversation-viewer/conversation-viewer.vala:414 msgid "No conversations selected." msgstr "Nepasirinkti jokie pokalbiai." -#: ../src/client/conversation-viewer/conversation-viewer.vala:415 +#: ../src/client/conversation-viewer/conversation-viewer.vala:416 #, c-format msgid "%u conversation selected." msgid_plural "%u conversations selected." @@ -945,55 +1009,55 @@ msgstr[1] "%u pasirinkti pokalbiai." msgstr[2] "%u pasirinktų pokalbių." -#: ../src/client/conversation-viewer/conversation-viewer.vala:444 +#: ../src/client/conversation-viewer/conversation-viewer.vala:446 msgid "No search results found." msgstr "Nieko nerasta." -#: ../src/client/conversation-viewer/conversation-viewer.vala:446 +#: ../src/client/conversation-viewer/conversation-viewer.vala:448 msgid "No conversations in folder." msgstr "Tuščias aplnakas." -#: ../src/client/conversation-viewer/conversation-viewer.vala:708 +#: ../src/client/conversation-viewer/conversation-viewer.vala:720 msgid "This message contains remote images." msgstr "Šiame laiške yra nuotolinių paveikslėlių." -#: ../src/client/conversation-viewer/conversation-viewer.vala:708 +#: ../src/client/conversation-viewer/conversation-viewer.vala:720 msgid "Show Images" msgstr "Rodyti paveikslėlius" -#: ../src/client/conversation-viewer/conversation-viewer.vala:709 +#: ../src/client/conversation-viewer/conversation-viewer.vala:721 msgid "Always Show From Sender" msgstr "Visada rodyti iš siuntėjo" -#: ../src/client/conversation-viewer/conversation-viewer.vala:733 +#: ../src/client/conversation-viewer/conversation-viewer.vala:745 msgid "Edit Draft" msgstr "Redaguoti juodraštį" -#: ../src/client/conversation-viewer/conversation-viewer.vala:809 +#: ../src/client/conversation-viewer/conversation-viewer.vala:838 msgid "From:" msgstr "Nuo:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:812 +#: ../src/client/conversation-viewer/conversation-viewer.vala:841 msgid "To:" msgstr "Kam:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:815 +#: ../src/client/conversation-viewer/conversation-viewer.vala:844 msgid "Cc:" msgstr "Kopija:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:818 +#: ../src/client/conversation-viewer/conversation-viewer.vala:847 msgid "Bcc:" msgstr "Nematoma kopija:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:821 +#: ../src/client/conversation-viewer/conversation-viewer.vala:850 msgid "Subject:" msgstr "Tema:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:824 +#: ../src/client/conversation-viewer/conversation-viewer.vala:853 msgid "Date:" msgstr "Data:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1139 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1173 #, c-format msgid "%u read message" msgid_plural "%u read messages" @@ -1001,64 +1065,64 @@ msgstr[1] "%u perskaityti laiškai" msgstr[2] "%u perskaitytų laiškų" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1271 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1305 #, c-format msgid "This message was sent successfully, but could not be saved to %s." msgstr "Šis pranešimas buvo sėkmingai išsiųstas, bet nepavyko jo įrašyti į %s." #. Add a menu item for copying the current selection. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1297 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1331 #: ../ui/composer.glade.h:4 msgid "_Copy" msgstr "_Kopijuoti" #. Add a menu item for copying the address. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1305 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1339 msgid "Copy _Email Address" msgstr "Kopijuoti _pašto adresą" #. Add a menu item for copying the link. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1310 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1344 #: ../ui/composer.glade.h:17 msgid "Copy _Link" msgstr "Kopijuoti _nuorodą" #. Select message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1318 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1352 msgid "Select _Message" msgstr "Pasirinkti _laišką" #. Inspect. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1330 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1364 msgid "_Inspect" msgstr "_Tikrinti" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1556 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1595 msgid "This link appears to go to" msgstr "Ši nuoroda rodo į" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1557 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1596 msgid "but actually goes to" msgstr "bet iš tiesų nukreipia į" #. If href doesn't look like a URL, something is fishy, so warn the user -#: ../src/client/conversation-viewer/conversation-viewer.vala:1612 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1651 msgid " (Invalid?)" msgstr " (Negaliojantis?)" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1718 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1757 msgid "_Save Image As..." msgstr "_Išsaugoti paveikslą kaip..." -#: ../src/client/conversation-viewer/conversation-viewer.vala:1822 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1861 msgid "_Save As..." msgstr "_Išsaugoti kaip..." -#: ../src/client/conversation-viewer/conversation-viewer.vala:1827 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1866 msgid "Save All A_ttachments..." msgstr "Išsaugoti visus pri_segtukus..." -#: ../src/client/conversation-viewer/conversation-viewer.vala:1847 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1886 msgid "Save A_ttachment..." msgid_plural "Save All A_ttachments..." msgstr[0] "Išsaugoti Pri_segtuką" @@ -1066,41 +1130,41 @@ msgstr[2] "Išsaugoti Pri_segtukus" #. Reply to all on a message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1862 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1901 msgid "Reply to _All" msgstr "Atsakyti _visiems" #. Mark as read/unread. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1879 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1918 msgid "_Mark as Read" msgstr "_Žymėti kaip skaitytą" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1883 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1922 msgid "_Mark as Unread" msgstr "_Žymėti kaip neskaitytą" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1889 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1928 msgid "Mark Unread From _Here" msgstr "Žymėti neskaitytą nuo _čia" #. Separator. #. View original message source. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1904 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1943 msgid "_View Source" msgstr "_Žiūrėti kodą" #. Generate the attachment table. #. / Placeholder filename for attachments with no filename. -#: ../src/client/conversation-viewer/conversation-viewer.vala:2227 -#: ../src/engine/rfc822/rfc822-utils.vala:378 +#: ../src/client/conversation-viewer/conversation-viewer.vala:2268 +#: ../src/engine/rfc822/rfc822-utils.vala:364 msgid "none" msgstr "tuščia" -#: ../src/client/conversation-viewer/conversation-viewer.vala:2362 +#: ../src/client/conversation-viewer/conversation-viewer.vala:2403 msgid "Failed to open default text editor." msgstr "Klaida bandant atidaryti numatytą teksto redaktorių." -#: ../src/client/conversation-viewer/conversation-web-view.vala:322 +#: ../src/client/conversation-viewer/conversation-web-view.vala:319 #, c-format msgid "%s - Conversation Inspector" msgstr "%s - Pokalbio tikrintojas" @@ -1240,7 +1304,7 @@ msgid "%s - New Messages" msgstr "%s - Nauji laiškai" -#: ../src/client/notification/libnotify.vala:72 +#: ../src/client/notification/libnotify.vala:74 #, c-format msgid "%d new message" msgid_plural "%d new messages" @@ -1248,7 +1312,7 @@ msgstr[1] "%d nauji laiškai" msgstr[2] "%d naujų laiškų" -#: ../src/client/notification/libnotify.vala:75 +#: ../src/client/notification/libnotify.vala:77 #, c-format msgid "%s, %d new message total" msgid_plural "%s, %d new messages total" @@ -1256,7 +1320,7 @@ msgstr[1] "%s, iš viso %d nauji laiškai" msgstr[2] "%s, iš viso %d naujų laiškų" -#: ../src/client/notification/libnotify.vala:107 +#: ../src/client/notification/libnotify.vala:109 #, c-format msgid "" "%s\n" @@ -1274,7 +1338,7 @@ "%s\n" "(%d naujų laiškų %s)" -#: ../src/client/notification/libnotify.vala:160 +#: ../src/client/notification/libnotify.vala:165 msgid "Open" msgstr "Atverti" @@ -1361,7 +1425,7 @@ msgstr "%A" #: ../src/client/util/util-email.vala:30 -#: ../src/engine/rfc822/rfc822-message.vala:781 +#: ../src/engine/rfc822/rfc822-message.vala:808 msgid "(no subject)" msgstr "(be temos)" @@ -1457,102 +1521,227 @@ msgid "None" msgstr "Nieko" -#. Map of user-supplied search field names to column names. -#. / Can be typed in the search box like attachment:file.txt to find -#. / messages with attachments with a particular name. The translated -#. / string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:710 +#. Map of possibly translated search operator names and values +#. to English/internal names and values. We include the +#. English version anyway so that when translations provide a +#. localised version of the operator names but have not also +#. translated the user manual, the English version in the +#. manual still works. +#. Can be typed in the search box like "attachment:file.txt" +#. to find messages with attachments with a particular name. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:99 +msgctxt "Search operator" msgid "attachment" msgstr "priedas" -#. / Can be typed in the search box like bcc:johndoe@example.com to find -#. / messages bcc'd to a particular person. The translated -#. / string must match the string in Geary's help documentation. -#. Fields we allow the token to be "me" as in from:me. -#: ../src/engine/imap-db/imap-db-account.vala:714 -#: ../src/engine/imap-db/imap-db-account.vala:738 +#. Can be typed in the search box like +#. "bcc:johndoe@example.com" to find messages bcc'd to a +#. particular person. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:108 +msgctxt "Search operator" msgid "bcc" msgstr "nematoma kopija" -#. / Can be typed in the search box like body:word to find the word only -#. / if it occurs in the body of a message. The translated -#. / string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:718 +#. Can be typed in the search box like "body:word" to find +#. "word" only if it occurs in the body of a message. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:116 +msgctxt "Search operator" msgid "body" msgstr "laiško tekstas" -#. / Can be typed in the search box like cc:johndoe@example.com to find -#. / messages cc'd to a particular person. The translated -#. / string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:722 -#: ../src/engine/imap-db/imap-db-account.vala:738 +#. Can be typed in the search box like +#. "cc:johndoe@example.com" to find messages cc'd to a +#. particular person. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:125 +msgctxt "Search operator" msgid "cc" msgstr "kopija" -#. / Can be typed in the search box like from:johndoe@example.com to -#. / find messages from a particular sender. The translated -#. / string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:726 -#: ../src/engine/imap-db/imap-db-account.vala:738 +#. Can be typed in the search box like +#. "from:johndoe@example.com" to find messages from a +#. particular sender. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:134 +msgctxt "Search operator" msgid "from" msgstr "nuo" -#. / Can be typed in the search box like subject:word to find the word -#. / only if it occurs in the subject of a message. The translated -#. / string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:730 +#. Can be typed in the search box like "is:unread" to find +#. messages that are read, unread, or starred. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:142 +msgctxt "Search operator" +msgid "is" +msgstr "yra" + +#. Can be typed in the search box like "subject:word" to find +#. "word" only if it occurs in the subject of a message. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary +#. User Guide. +#: ../src/engine/imap-db/imap-db-account.vala:150 +msgctxt "Search operator" msgid "subject" msgstr "tema" -#. / Can be typed in the search box like to:johndoe@example.com to find -#. / messages received by a particular person. The translated -#. / string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:734 -#: ../src/engine/imap-db/imap-db-account.vala:738 +#. Can be typed in the search box like +#. "to:johndoe@example.com" to find messages received by a +#. particular person. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:159 +msgctxt "Search operator" msgid "to" msgstr "gavėjas" -#. "me" can be typed like from:me or cc:me, etc. as a shorthand -#. to find mail to or from yourself in search. The translated -#. string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:754 +#. Can be typed in the search box after "to:", "cc:" and +#. "bcc:" e.g.: "to:me". Matches conversations that are +#. addressed to the user. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:180 +msgctxt "Search operator value - mail addressed to the user" +msgid "me" +msgstr "man" + +#. Can be typed in the search box after "from:" i.e.: +#. "from:me". Matches conversations were sent by the user. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:192 +msgctxt "Search operator value - mail sent by the user" msgid "me" msgstr "man" -#. List of folder names to match for Drafts, separated by |. Please add localized common -#. names for the Drafts folder, leaving in the English names as well. The first in the list -#. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:575 +#. Can be typed in the search box after "is:" i.e.: +#. "is:read". Matches conversations that are flagged as read. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:204 +msgctxt "'is:' search operator value" +msgid "read" +msgstr "perskaitytas" + +#. Can be typed in the search box after "is:" i.e.: +#. "is:starred". Matches conversations that are flagged as +#. starred. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:215 +msgctxt "'is:' search operator value" +msgid "starred" +msgstr "žvaigždutė" + +#. Can be typed in the search box after "is:" i.e.: +#. "is:unread". Matches conversations that are flagged unread. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:225 +msgctxt "'is:' search operator value" +msgid "unread" +msgstr "neskaitytas" + +#. List of general possible folder names to match for the +#. Draft mailbox. Separate names using a vertical bar and +#. put the most common localized name to the front for the +#. default. English names do not need to be included. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:626 msgid "Drafts | Draft" msgstr "Juodraščiai" -#. List of folder names to match for Sent Mail, separated by |. Please add localized common -#. names for the Sent Mail folder, leaving in the English names as well. The first in the list -#. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:580 +#. List of general possible folder names to match for the +#. Sent mailbox. Separate names using a vertical bar and +#. put the most common localized name to the front for the +#. default. English names do not need to be included. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:635 msgid "Sent | Sent Mail | Sent Email | Sent E-Mail" msgstr "Išsiųsti | Išsiųsti laiškai | Išsiųstas paštas | Išsiųstas el. paštas" -#. List of folder names to match for Spam, separated by |. Please add localized common -#. names for the Spam folder, leaving in the English names as well. The first in the list -#. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:585 +#. The localised name(s) of the Sent folder name as used +#. by MS Outlook/Exchange. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:640 +msgctxt "Outlook localised name" +msgid "Sent Items" +msgstr "Išsiųsti laiškai" + +#. List of general possible folder names to match for the +#. Spam mailbox. Separate names using a vertical bar and +#. put the most common localized name to the front for the +#. default. English names do not need to be included. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:650 msgid "" "Junk | Spam | Junk Mail | Junk Email | Junk E-Mail | Bulk Mail | Bulk Email " "| Bulk E-Mail" msgstr "Šlamšas | Brukalas | Šlamšto laiškai | Šlamšto el. laiškai" -#. List of folder names to match for Trash, separated by |. Please add localized common -#. names for the Trash folder, leaving in the English names as well. The first in the list -#. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:590 +#. List of general possible folder names to match for the +#. Trash mailbox. Separate names using a vertical bar and +#. put the most common localized name to the front for the +#. default. English names do not need to be included. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:660 msgid "Trash | Rubbish | Rubbish Bin" msgstr "Šiukšlinė | Ištrinti laiškai" -#. List of folder names to match for Archive, separated by |. Please add localized common -#. names for the Trash folder, leaving in the English names as well. The first in the list -#. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:595 +#. The localised name(s) of the Trash folder name as used +#. by MS Outlook/Exchange. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:665 +msgctxt "Outlook localised name" +msgid "Deleted Items" +msgstr "Ištrinti laiškai" + +#. List of general possible folder names to match for the +#. Archive mailbox. Separate names using a vertical bar +#. and put the most common localized name to the front for +#. the default. English names do not need to be included. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:675 msgid "Archive | Archives" msgstr "Archive | Archives | Archyvas | Archyvai" @@ -1850,48 +2039,56 @@ msgstr "Prisegti failą" #: ../ui/composer.glade.h:49 +msgid "Attach File (Ctrl+T)" +msgstr "Prisegti failą (Vald+T)" + +#: ../ui/composer.glade.h:50 msgid "_Include Original Attachments" msgstr "_Pridėti pradinius prisegtukus" -#: ../ui/composer.glade.h:50 +#: ../ui/composer.glade.h:51 msgid "Include Original Attachments" msgstr "Įtraukti pradinius priedus" -#: ../ui/composer.glade.h:51 -msgid "Application Menu" -msgstr "Programos meniu" +#: ../ui/composer.glade.h:52 +msgid "Select spell checking language" +msgstr "Pasirinkite _rašybos tikrinimo kalbą" -#. Address(es) e-mail is to be sent to #: ../ui/composer.glade.h:53 +msgid "Spelling language" +msgstr "Rašymos tikrinimo kalba" + +#. Address(es) e-mail is to be sent to +#: ../ui/composer.glade.h:55 msgid "_To" msgstr "_Kam:" -#: ../ui/composer.glade.h:54 +#: ../ui/composer.glade.h:56 msgid "_Cc" msgstr "_Kopija:" -#: ../ui/composer.glade.h:55 +#: ../ui/composer.glade.h:57 msgid "_Subject" msgstr "_Tema" -#: ../ui/composer.glade.h:56 +#: ../ui/composer.glade.h:58 msgid "_Bcc" msgstr "_Nematoma kopija:" -#: ../ui/composer.glade.h:57 +#: ../ui/composer.glade.h:59 msgid "_Reply-To" msgstr "_Atsakyti" #. Geary account mail will be sent from -#: ../ui/composer.glade.h:59 +#: ../ui/composer.glade.h:61 msgid "From" msgstr "Nuo:" -#: ../ui/composer.glade.h:60 +#: ../ui/composer.glade.h:62 msgid "Drop files here" msgstr "Tempti failus čia" -#: ../ui/composer.glade.h:61 +#: ../ui/composer.glade.h:63 msgid "To add them as attachments" msgstr "Pridėti kaip prisegtukus" @@ -2151,6 +2348,15 @@ msgid "Geary update in progress…" msgstr "Vykdomas Geary atnaujinimas..." +#~ msgid "Copyright 2011-2015 Yorba Foundation" +#~ msgstr "Autorinės teisės priklauso 2011-2015 Yorba Foundation" + +#~ msgid "_Donate" +#~ msgstr "_Aukoti" + +#~ msgid "Application Menu" +#~ msgstr "Programos meniu" + #~ msgid "Notify of new mail at start_up" #~ msgstr "Įjungiant pranešti apie naujus laiškus " diff -Nru geary-0.11.4/po/nb.po geary-0.12.0/po/nb.po --- geary-0.11.4/po/nb.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/nb.po 2017-10-02 11:25:21.000000000 +0000 @@ -1,55 +1,117 @@ -# po/geary.pot -# PO message string template file for Geary email client +# Norwegian (bokmål) translation of Geary # Copyright 2016 Software Freedom Conservancy Inc. -# This file is distributed under the GNU LGPL, version 2.1. +# This file is distributed under the same license as Geary itself # # Translators: # zatox , 2013 # messo , 2012 # yorbajim , 2014. # ProsjektX , 2014 -# Åka Sikrom , 2015 +# Åka Sikrom , 2016 +# Kjartan Maraas , 2017 # msgid "" msgstr "" "Project-Id-Version: geary-master\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-28 16:48+0100\n" -"PO-Revision-Date: 2015-11-27 07:58+0100\n" -"Last-Translator: Åka Sikrom \n" +"POT-Creation-Date: 2017-06-13 17:58+0200\n" +"PO-Revision-Date: 2017-06-13 18:05+0200\n" +"Last-Translator: Kjartan Maraas \n" "Language-Team: https://l10n.gnome.org/teams/no/\n" "Language: nb\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.7.1\n" -#: ../desktop/geary.desktop.in.h:1 ../desktop/geary-autostart.desktop.in.h:1 +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:1 +#: ../desktop/org.gnome.Geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" msgstr "Geary" -#: ../desktop/geary.desktop.in.h:2 ../desktop/geary-autostart.desktop.in.h:2 -#: ../src/client/application/geary-application.vala:18 +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:2 +#: ../desktop/org.gnome.Geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 +msgid "Send and receive email" +msgstr "Send og motta e-post" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:3 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"Geary er et samtaleorientert e-postprogram for skrivebordsmiljøet GNOME 3. " +"Det lar deg lese, finne og sende e-post med et enkelt og moderne grensesnitt." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:4 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"Samtaler lar deg lese en hel diskusjon uten å måtte trykke deg videre fra " +"melding til melding." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:5 +msgid "Geary’s features include:" +msgstr "Her er noen av Gearys funksjoner:" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:6 +msgid "Quick email account setup" +msgstr "Raskt oppsett av e-postkonto" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:7 +msgid "Shows related messages together in conversations" +msgstr "Viser relaterte meldinger som samtaler" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:8 +msgid "Fast, full text and keyword search" +msgstr "Raskt søk på nøkkelord og innholdstekst" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:9 +msgid "Full-featured HTML and plain text message composer" +msgstr "Meldingsbehandler med fullverdig støtte for HTML og ren tekst" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:10 +msgid "Desktop notification of new mail" +msgstr "Vis skrivebordsvarsel ved ny e-post" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:11 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" +msgstr "Fungerer med GMail, Yahoo! Mail, Outlook.com og andre IMAP-tjenere" + +#: ../desktop/org.gnome.Geary.desktop.in.h:2 +msgid "Email" +msgstr "E-post" + +#: ../desktop/org.gnome.Geary.desktop.in.h:3 +msgid "Geary Email" +msgstr "Geary e-post" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/org.gnome.Geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "Post;E-post;IMAP;GMail;Yahoo;Hotmail;Outlook;" + +#: ../desktop/org.gnome.Geary.desktop.in.h:7 ../ui/gtk/menus.ui.h:1 +msgid "Compose Message" +msgstr "Skriv melding" + +#: ../desktop/geary-autostart.desktop.in.h:2 +#: ../src/client/application/geary-application.vala:21 msgid "Mail Client" msgstr "E-postklient" -#: ../desktop/geary.desktop.in.h:3 ../desktop/geary-autostart.desktop.in.h:3 +#: ../desktop/geary-autostart.desktop.in.h:3 msgid "Geary Mail" msgstr "Geary e-post" -#: ../desktop/geary.desktop.in.h:4 ../desktop/geary-autostart.desktop.in.h:4 -msgid "Send and receive email" -msgstr "Send og motta e-post" - -#: ../desktop/geary.desktop.in.h:5 ../desktop/geary-autostart.desktop.in.h:5 +#: ../desktop/geary-autostart.desktop.in.h:5 msgid "Email;E-mail;Mail;" msgstr "E-post;E-brev;Post;" -#: ../desktop/geary.desktop.in.h:6 -msgid "Compose Message" -msgstr "Skriv melding" - #: ../desktop/geary-attach.contract.in.h:1 msgid "Send by email" msgstr "Send via e-post" @@ -60,6 +122,7 @@ #: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:31 +#: ../ui/conversation-email-menus.ui.h:10 msgid "_Save" msgstr "_Lagre" @@ -69,7 +132,7 @@ msgstr "_Legg til" #. reset/clear widgets -#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 #, c-format msgid "Additional addresses for %s" msgstr "Flere adresser for %s" @@ -79,7 +142,7 @@ msgid "Accounts" msgstr "Kontoer" -#. Copyright 2011-2015 Yorba Foundation +#. Copyright 2016 Software Freedom Conservancy Inc. #. * #. * This software is licensed under the GNU Lesser General Public License #. * (version 2.1 or later). See the COPYING file in this distribution. @@ -90,107 +153,121 @@ msgid "First Last" msgstr "Fornavn Etternavn" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." msgstr "Velkommen til Geary." -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." msgstr "Skriv inn kontoinformasjon for å komme i gang." -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "2 uker tilbake" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:254 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "1 måned tilbake" -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "3 måneder tilbake" -#: ../src/client/accounts/add-edit-page.vala:256 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "6 måneder tilbake" -#: ../src/client/accounts/add-edit-page.vala:257 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "1 år tilbake" -#: ../src/client/accounts/add-edit-page.vala:258 +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" msgstr "2 år tilbake" -#: ../src/client/accounts/add-edit-page.vala:259 +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" msgstr "4 år tilbake" #. Separator -#: ../src/client/accounts/add-edit-page.vala:261 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "Alt" -#: ../src/client/accounts/add-edit-page.vala:280 +#: ../src/client/accounts/add-edit-page.vala:283 msgid "Edit" msgstr "Rediger" -#: ../src/client/accounts/add-edit-page.vala:282 +#: ../src/client/accounts/add-edit-page.vala:285 msgid "Preview" msgstr "Forhåndsvis" -#: ../src/client/accounts/add-edit-page.vala:723 +#: ../src/client/accounts/add-edit-page.vala:751 msgid "Remem_ber passwords" msgstr "_Husk passord" -#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:6 +#: ../src/client/accounts/add-edit-page.vala:758 ../ui/login.glade.h:7 msgid "Remem_ber password" msgstr "_Husk passord" -#: ../src/client/accounts/add-edit-page.vala:764 +#: ../src/client/accounts/add-edit-page.vala:792 msgid "Unable to validate:\n" msgstr "Klarte ikke å sjekke gyldighet:\n" -#: ../src/client/accounts/add-edit-page.vala:766 -msgid " • Invalid account nickname.\n" -msgstr " • Ugyldig konto-kallenavn.\n" - -#: ../src/client/accounts/add-edit-page.vala:769 -msgid " • Email address already added to Geary.\n" -msgstr " • Denne e-postadressen brukes av Geary allerede.\n" - -#: ../src/client/accounts/add-edit-page.vala:773 -msgid " • IMAP connection error.\n" -msgstr " • IMAP-tilkoblingsfeil.\n" - -#: ../src/client/accounts/add-edit-page.vala:776 -msgid " • IMAP username or password incorrect.\n" -msgstr " • IMAP-brukernavn eller -passord er feil.\n" - -#: ../src/client/accounts/add-edit-page.vala:779 -msgid " • SMTP connection error.\n" -msgstr " • SMTP-tilkoblingsfeil.\n" - -#: ../src/client/accounts/add-edit-page.vala:782 -msgid " • SMTP username or password incorrect.\n" -msgstr " • SMTP-brukernavn eller -passord er feil.\n" - -#: ../src/client/accounts/add-edit-page.vala:786 -msgid " • Connection error.\n" -msgstr " • Tilkoblingsfeil.\n" - -#: ../src/client/accounts/add-edit-page.vala:790 -msgid " • Username or password incorrect.\n" -msgstr " • Brukernavn eller passord er feil.\n" - -#: ../src/client/application/geary-application.vala:19 -msgid "Copyright 2011-2015 Yorba Foundation" -msgstr "Opphavsrett 2011-2015 Yorba Foundation" +#: ../src/client/accounts/add-edit-page.vala:794 +msgid " • Invalid account nickname.\n" +msgstr " • Ugyldig konto-kallenavn.\n" + +#: ../src/client/accounts/add-edit-page.vala:797 +msgid " • Email address already added to Geary.\n" +msgstr " • Denne e-postadressen brukes av Geary allerede.\n" + +#: ../src/client/accounts/add-edit-page.vala:801 +msgid " • IMAP connection error.\n" +msgstr " • IMAP-tilkoblingsfeil.\n" + +#: ../src/client/accounts/add-edit-page.vala:804 +msgid " • IMAP username or password incorrect.\n" +msgstr " • IMAP-brukernavn eller -passord er feil.\n" + +#: ../src/client/accounts/add-edit-page.vala:807 +msgid " • SMTP connection error.\n" +msgstr " • SMTP-tilkoblingsfeil.\n" + +#: ../src/client/accounts/add-edit-page.vala:810 +msgid " • SMTP username or password incorrect.\n" +msgstr " • SMTP-brukernavn eller -passord er feil.\n" + +#: ../src/client/accounts/add-edit-page.vala:814 +msgid " • Connection error.\n" +msgstr " • Tilkoblingsfeil.\n" + +#: ../src/client/accounts/add-edit-page.vala:818 +msgid " • Username or password incorrect.\n" +msgstr " • Brukernavn eller passord er feil.\n" + +#: ../src/client/application/geary-application.vala:22 +msgid "Copyright 2016 Software Freedom Conservancy Inc." +msgstr "Opphavsrett 2016 Software Freedom Conservancy Inc." + +#: ../src/client/application/geary-application.vala:24 +msgid "Visit the Geary web site" +msgstr "Besøk Geary-nettsiden" -#: ../src/client/application/geary-application.vala:21 -msgid "Visit the Yorba web site" -msgstr "Besøk nettsiden til Yorba" +#: ../src/client/application/geary-application.vala:464 +#, c-format +msgid "About %s" +msgstr "Om %s" + +#. Translators: add your name and email address to receive +#. credit in the About dialog For example: Yamada Taro +#. +#: ../src/client/application/geary-application.vala:468 +msgid "translator-credits" +msgstr "" +"ProsjektX Åka Sikrom " #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" @@ -246,222 +323,191 @@ msgstr "Trekk tilbake alle tjenersertifikater med TLS-varsler" #: ../src/client/application/geary-args.vala:27 +msgid "Perform a graceful quit" +msgstr "Avslutt på riktig måte" + +#: ../src/client/application/geary-args.vala:28 msgid "Display program version" msgstr "Vis programversjon" #. This gives a command-line hint on how to open new composer windows with mailto: -#: ../src/client/application/geary-args.vala:51 +#: ../src/client/application/geary-args.vala:53 #, c-format msgid "Use %s to open a new composer window" msgstr "Bruk %s for å åpne et nytt meldingsvindu" -#: ../src/client/application/geary-args.vala:52 +#: ../src/client/application/geary-args.vala:54 msgid "Please report comments, suggestions and bugs to:" msgstr "Send kommentarer, forslag og feilrapporter til:" #. i18n: Command line arguments are invalid -#: ../src/client/application/geary-args.vala:59 +#: ../src/client/application/geary-args.vala:61 #, c-format msgid "Failed to parse command line options: %s\n" msgstr "Klarte ikke å tolke kommandolinjevalg: %s\n" -#: ../src/client/application/geary-args.vala:70 +#: ../src/client/application/geary-args.vala:72 #, c-format -msgid "Unrecognized command line option \"%s\"\n" +msgid "Unrecognized command line option “%s”\n" msgstr "«%s» er et ukjent kommandolinjevalg\n" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:57 msgid "Delete conversation" msgstr "Slett samtale" -#: ../src/client/application/geary-controller.vala:63 +#: ../src/client/application/geary-controller.vala:58 msgid "Delete conversation (Shift+Delete)" msgstr "Slett samtale (Shift+Delete)" -#: ../src/client/application/geary-controller.vala:64 +#: ../src/client/application/geary-controller.vala:59 msgid "Delete conversations (Shift+Delete)" msgstr "Slett samtaler (Shift+Delete)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:68 +#: ../src/client/application/geary-controller.vala:63 msgid "Move conversation to Trash (Delete, Backspace)" msgstr "Flytt samtale til papirkurv (Delete, Rettetast)" -#: ../src/client/application/geary-controller.vala:69 +#: ../src/client/application/geary-controller.vala:64 msgid "Move conversations to Trash (Delete, Backspace)" msgstr "Flytt samtaler til papirkurv (Delete, Rettetast)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:68 msgid "_Archive" msgstr "_Arkiver" -#: ../src/client/application/geary-controller.vala:74 +#: ../src/client/application/geary-controller.vala:69 msgid "Archive conversation (A)" msgstr "Arkiver samtale (A)" -#: ../src/client/application/geary-controller.vala:75 +#: ../src/client/application/geary-controller.vala:70 msgid "Archive conversations (A)" msgstr "Arkiver samtaler (A)" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:73 msgid "Mark as S_pam" msgstr "Marker som sø_ppelpost" -#: ../src/client/application/geary-controller.vala:79 +#: ../src/client/application/geary-controller.vala:74 msgid "Mark as not S_pam" msgstr "Marker som ikke sø_ppelpost" -#: ../src/client/application/geary-controller.vala:81 -#: ../src/client/application/geary-controller.vala:397 +#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:448 msgid "Mark conversation" msgstr "Marker samtale" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark conversations" msgstr "Marker samtaler" -#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:78 msgid "Add label to conversation" msgstr "Sett merkelapp på samtale" -#: ../src/client/application/geary-controller.vala:84 +#: ../src/client/application/geary-controller.vala:79 msgid "Add label to conversations" msgstr "Sett merkelapp på samtaler" -#: ../src/client/application/geary-controller.vala:85 -#: ../src/client/application/geary-controller.vala:436 +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:487 msgid "Move conversation" msgstr "Flytt samtale" -#: ../src/client/application/geary-controller.vala:86 +#: ../src/client/application/geary-controller.vala:81 msgid "Move conversations" msgstr "Flytt samtaler" -#: ../src/client/application/geary-controller.vala:373 -#: ../ui/app_menu.interface.h:1 -msgid "A_ccounts" -msgstr "K_ontoer" - -#: ../src/client/application/geary-controller.vala:378 -#: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 -msgid "_Preferences" -msgstr "_Innstillinger" - -#: ../src/client/application/geary-controller.vala:382 -#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:4 -msgid "_Help" -msgstr "_Hjelp" - -#: ../src/client/application/geary-controller.vala:386 -#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:5 -msgid "_About" -msgstr "_Om" - -#: ../src/client/application/geary-controller.vala:390 -#: ../ui/app_menu.interface.h:3 -msgid "_Donate" -msgstr "_Doner" - -#: ../src/client/application/geary-controller.vala:394 -#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:6 -msgid "_Quit" -msgstr "_Avslutt" - -#: ../src/client/application/geary-controller.vala:399 -msgid "_Mark as..." +#: ../src/client/application/geary-controller.vala:450 +msgid "_Mark as…" msgstr "_Marker som …" -#: ../src/client/application/geary-controller.vala:405 +#: ../src/client/application/geary-controller.vala:456 msgid "Mark as _Read" msgstr "Marker som _lest" -#: ../src/client/application/geary-controller.vala:411 +#: ../src/client/application/geary-controller.vala:462 msgid "Mark as _Unread" msgstr "Marker som _ulest" -#: ../src/client/application/geary-controller.vala:417 +#: ../src/client/application/geary-controller.vala:468 msgid "_Star" msgstr "_Stjerne" -#: ../src/client/application/geary-controller.vala:422 +#: ../src/client/application/geary-controller.vala:473 msgid "U_nstar" msgstr "F_jern stjerne" -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:483 msgid "Add label" msgstr "Legg til merkelapp" -#: ../src/client/application/geary-controller.vala:433 +#: ../src/client/application/geary-controller.vala:484 msgid "_Label" msgstr "_Merkelapp" -#: ../src/client/application/geary-controller.vala:437 +#: ../src/client/application/geary-controller.vala:488 msgid "_Move" msgstr "_Flytt" -#: ../src/client/application/geary-controller.vala:441 +#: ../src/client/application/geary-controller.vala:492 msgid "Compose new message (Ctrl+N, N)" msgstr "Skriv ny melding (Ctrl+N, N)" -#. Reply to a message. -#: ../src/client/application/geary-controller.vala:445 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1857 +#: ../src/client/application/geary-controller.vala:496 +#: ../ui/conversation-email-menus.ui.h:1 msgid "_Reply" msgstr "_Svar" -#: ../src/client/application/geary-controller.vala:446 +#: ../src/client/application/geary-controller.vala:497 msgid "Reply (Ctrl+R, R)" msgstr "Svar (Ctrl+R, R)" -#: ../src/client/application/geary-controller.vala:450 +#: ../src/client/application/geary-controller.vala:501 msgid "R_eply All" msgstr "Sv_ar alle" -#: ../src/client/application/geary-controller.vala:451 +#: ../src/client/application/geary-controller.vala:502 msgid "Reply all (Ctrl+Shift+R, Shift+R)" msgstr "Svar alle (Ctrl+Shift+R, Shift+R)" -#. Forward a message. -#: ../src/client/application/geary-controller.vala:456 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1867 +#: ../src/client/application/geary-controller.vala:507 +#: ../ui/conversation-email-menus.ui.h:3 msgid "_Forward" msgstr "_Videresend" -#: ../src/client/application/geary-controller.vala:457 +#: ../src/client/application/geary-controller.vala:508 msgid "Forward (Ctrl+L, F)" msgstr "Videresend (Ctrl+L, F)" -#: ../src/client/application/geary-controller.vala:496 -msgid "Empty" -msgstr "Tøm" - -#: ../src/client/application/geary-controller.vala:497 -msgid "Empty Spam or Trash folders" -msgstr "Tøm søppelpost eller papirkurv" - -#: ../src/client/application/geary-controller.vala:501 +#: ../src/client/application/geary-controller.vala:538 msgid "Empty _Spam…" msgstr "Tøm _søppelpost …" -#: ../src/client/application/geary-controller.vala:505 +#: ../src/client/application/geary-controller.vala:542 msgid "Empty _Trash…" msgstr "Tøm _papirkurv …" #. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:538 +#: ../src/client/application/geary-controller.vala:574 msgid "Toggle search bar" msgstr "Vis/skjul søkefelt" -#: ../src/client/application/geary-controller.vala:752 +#. No callback is connected, since we bind the toggle button to the find bar visibility +#: ../src/client/application/geary-controller.vala:579 +msgid "Toggle find bar" +msgstr "Slå av/på søkefelt" + +#: ../src/client/application/geary-controller.vala:757 msgid "Unable to store server trust exception" msgstr "Klarte ikke å lagre godkjenningsunntak for tjener" -#: ../src/client/application/geary-controller.vala:989 +#: ../src/client/application/geary-controller.vala:992 msgid "Your settings are insecure" msgstr "Innstillingene dine er utrygge" -#: ../src/client/application/geary-controller.vala:990 +#: ../src/client/application/geary-controller.vala:993 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -472,17 +518,29 @@ "klartekst, som gjør det mulig for andre å plukke det opp. Er du sikker på at " "du vil fortsette?" -#: ../src/client/application/geary-controller.vala:991 +#: ../src/client/application/geary-controller.vala:994 msgid "Co_ntinue" msgstr "Fo_rtsett" +#: ../src/client/application/geary-controller.vala:1041 +msgid "Error connecting to the server" +msgstr "Feil under tilkobling til tjener" + +#: ../src/client/application/geary-controller.vala:1042 +msgid "" +"Geary encountered an error while connecting to the server. Please try again " +"in a few moments." +msgstr "" +"Geary støtte på en feil under tilkobling til tjener. Vent litt, og prøv " +"deretter på nytt." + #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:1069 +#: ../src/client/application/geary-controller.vala:1079 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "Feil under sending av e-post" -#: ../src/client/application/geary-controller.vala:1070 +#: ../src/client/application/geary-controller.vala:1080 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." @@ -492,12 +550,12 @@ #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1074 +#: ../src/client/application/geary-controller.vala:1084 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "Feil under lagring av sent e-postmelding" -#: ../src/client/application/geary-controller.vala:1075 +#: ../src/client/application/geary-controller.vala:1085 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." @@ -505,19 +563,19 @@ "Geary klarte ikke å lagre en sendt melding i mappen for sendt e-post. " "Meldingen blir liggende i utboksen til du sletter den." -#: ../src/client/application/geary-controller.vala:1144 +#: ../src/client/application/geary-controller.vala:1154 msgid "Labels" msgstr "Merkelapper" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1156 +#: ../src/client/application/geary-controller.vala:1166 #, c-format msgid "Unable to open the database for %s" msgstr "Klarte ikke å åpne database for %s" -#: ../src/client/application/geary-controller.vala:1157 +#: ../src/client/application/geary-controller.vala:1167 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -542,20 +600,20 @@ "vedlegg blir slettet. E-post som ligger på tjeneren blir ikke påvirket." -#: ../src/client/application/geary-controller.vala:1159 +#: ../src/client/application/geary-controller.vala:1169 msgid "_Rebuild" msgstr "_Bygg på nytt" -#: ../src/client/application/geary-controller.vala:1159 +#: ../src/client/application/geary-controller.vala:1169 msgid "E_xit" msgstr "Av_slutt" -#: ../src/client/application/geary-controller.vala:1168 +#: ../src/client/application/geary-controller.vala:1178 #, c-format -msgid "Unable to rebuild database for \"%s\"" +msgid "Unable to rebuild database for “%s”" msgstr "Klarte ikke å bygge database for «%s» på nytt" -#: ../src/client/application/geary-controller.vala:1169 +#: ../src/client/application/geary-controller.vala:1179 #, c-format msgid "" "Error during rebuild:\n" @@ -568,14 +626,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1191 #: ../src/client/application/geary-controller.vala:1201 -#: ../src/client/application/geary-controller.vala:1212 +#: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:1222 #, c-format msgid "Unable to open local mailbox for %s" msgstr "Klarte ikke å åpne lokal e-postboks for %s" -#: ../src/client/application/geary-controller.vala:1192 +#: ../src/client/application/geary-controller.vala:1202 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -594,10 +652,10 @@ "\n" "%s" -#: ../src/client/application/geary-controller.vala:1202 +#: ../src/client/application/geary-controller.vala:1212 msgid "" "The version number of the local mail database is formatted for a newer " -"version of Geary. Unfortunately, the database cannot be \"rolled back\" to " +"version of Geary. Unfortunately, the database cannot be “rolled back” to " "work with this version of Geary.\n" "\n" "Please install the latest version of Geary and try again." @@ -607,7 +665,7 @@ "\n" "Installer nyeste versjon av Geary, og prøv på nytt." -#: ../src/client/application/geary-controller.vala:1213 +#: ../src/client/application/geary-controller.vala:1223 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" @@ -619,29 +677,15 @@ "\n" "Kontroller nettverksforbindelsen, og start Geary på nytt." -#: ../src/client/application/geary-controller.vala:1721 -#, c-format -msgid "About %s" -msgstr "Om %s" - -#. / Translators: add your name and email address to receive credit in the About dialog -#. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1724 -msgid "translator-credits" -msgstr "" -"ProsjektX Åka Sikrom " - -#: ../src/client/application/geary-controller.vala:1990 +#: ../src/client/application/geary-controller.vala:1999 msgid "Undo move (Ctrl+Z)" msgstr "Angre flytting (Ctrl+U)" -#: ../src/client/application/geary-controller.vala:2000 -#, c-format -msgid "Are you sure you want to open \"%s\"?" -msgstr "Er du sikker på at du vil åpne «%s»?" +#: ../src/client/application/geary-controller.vala:2009 +msgid "Are you sure you want to open these attachments?" +msgstr "Er du sikker på at du vil åpne disse vedleggene?" -#: ../src/client/application/geary-controller.vala:2001 +#: ../src/client/application/geary-controller.vala:2010 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -649,118 +693,104 @@ "Vedlegg kan skade systemet ditt hvis du åpner dem. Bare åpne vedlegg fra " "avsendere du stoler på." -#: ../src/client/application/geary-controller.vala:2002 -msgid "Don't _ask me again" +#: ../src/client/application/geary-controller.vala:2011 +msgid "Don’t _ask me again" msgstr "Ikke _spør meg igjen" -#: ../src/client/application/geary-controller.vala:2020 +#: ../src/client/application/geary-controller.vala:2121 #, c-format -msgid "A file named \"%s\" already exists. Do you want to replace it?" +msgid "A file named “%s” already exists. Do you want to replace it?" msgstr "Filen «%s» finnes allerede. Vil du erstatte den?" -#: ../src/client/application/geary-controller.vala:2022 +#: ../src/client/application/geary-controller.vala:2123 #, c-format msgid "" -"The file already exists in \"%s\". Replacing it will overwrite its contents." +"The file already exists in “%s”. Replacing it will overwrite its contents." msgstr "" "Filen finnes allerede i «%s». Innholdet blir overskrevet hvis du erstatter " "den." -#: ../src/client/application/geary-controller.vala:2025 +#: ../src/client/application/geary-controller.vala:2126 msgid "_Replace" msgstr "_Erstatt" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2323 +#: ../src/client/application/geary-controller.vala:2374 msgid "Close open draft messages?" msgstr "Vil du lukke alle meldingsutkast?" -#: ../src/client/application/geary-controller.vala:2453 +#: ../src/client/application/geary-controller.vala:2496 #, c-format msgid "Empty all email from your %s folder?" msgstr "Vil du tømme mappen %s for meldinger?" -#: ../src/client/application/geary-controller.vala:2454 +#: ../src/client/application/geary-controller.vala:2497 msgid "This removes the email from Geary and your email server." msgstr "Denne handlingen fjerner e-post fra både Geary og e-posttjeneren." -#: ../src/client/application/geary-controller.vala:2455 +#: ../src/client/application/geary-controller.vala:2498 msgid "This cannot be undone." msgstr "Denne handlingen kan ikke gjøres om." -#: ../src/client/application/geary-controller.vala:2456 +#: ../src/client/application/geary-controller.vala:2499 #, c-format msgid "Empty %s" msgstr "Tøm %s" -#: ../src/client/application/geary-controller.vala:2473 +#: ../src/client/application/geary-controller.vala:2516 #, c-format msgid "Error emptying %s" msgstr "Feil under tømming av %s" -#: ../src/client/application/geary-controller.vala:2503 +#: ../src/client/application/geary-controller.vala:2546 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "Vil du slette denne meldingen permanent?" msgstr[1] "Vil du slette disse meldingene permanent?" -#: ../src/client/application/geary-controller.vala:2505 +#: ../src/client/application/geary-controller.vala:2548 msgid "Delete" msgstr "Slett" -#: ../src/client/application/geary-controller.vala:2536 +#: ../src/client/application/geary-controller.vala:2580 msgid "Undo archive (Ctrl+Z)" msgstr "Angre arkivering (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2551 +#: ../src/client/application/geary-controller.vala:2595 msgid "Undo trash (Ctrl+Z)" msgstr "Angre flytting til papirkurv (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2604 +#: ../src/client/application/geary-controller.vala:2649 msgid "Undo (Ctrl+Z)" msgstr "Angre (Ctrl+Z)" -#: ../src/client/components/conversation-find-bar.vala:214 -#, c-format -msgid "%i match" -msgid_plural "%i matches" -msgstr[0] "%i treff" -msgstr[1] "%i treff" - -#: ../src/client/components/conversation-find-bar.vala:216 -#, c-format -msgid "%i match (wrapped)" -msgid_plural "%i matches (wrapped)" -msgstr[0] "%i treff (sideskift)" -msgstr[1] "%i treff (sideskift)" - -#: ../src/client/components/conversation-find-bar.vala:218 -msgid "not found" -msgstr "ikke funnet" +#: ../src/client/application/geary-controller.vala:2780 +msgid "Failed to open default text editor." +msgstr "Klarte ikke å åpne forvalgt tekstbehandler." -#: ../src/client/components/main-window.vala:430 +#: ../src/client/components/main-window.vala:389 #, c-format msgid "%s (%d)" msgstr "%s (%d)" -#: ../src/client/components/search-bar.vala:10 +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "Søk" #. Search entry. -#: ../src/client/components/search-bar.vala:25 +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" msgstr "Søk etter nøkkelord (Ctrl+S) blant all e-post som ligger på kontoen" -#: ../src/client/components/search-bar.vala:118 +#: ../src/client/components/search-bar.vala:100 #, c-format msgid "Indexing %s account" msgstr "Indekserer kontoen %s" -#: ../src/client/components/search-bar.vala:129 +#: ../src/client/components/search-bar.vala:111 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" @@ -768,7 +798,7 @@ #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 -msgid "Sending..." +msgid "Sending…" msgstr "Sender …" #: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 @@ -780,6 +810,10 @@ msgid "_Cancel" msgstr "_Avbryt" +#: ../src/client/components/stock.vala:21 ../ui/gtk/menus.ui.h:6 +msgid "_About" +msgstr "_Om" + #: ../src/client/components/stock.vala:23 msgid "_Close" msgstr "_Lukk" @@ -788,51 +822,71 @@ msgid "_Discard" msgstr "_Forkast" -#: ../src/client/components/stock.vala:26 +#: ../src/client/components/stock.vala:25 ../ui/gtk/menus.ui.h:5 +msgid "_Help" +msgstr "_Hjelp" + +#: ../src/client/components/stock.vala:26 ../ui/conversation-email-menus.ui.h:9 msgid "_Open" msgstr "_Åpne" -#: ../src/client/components/stock.vala:28 -msgid "_Print..." +#: ../src/client/components/stock.vala:27 ../ui/gtk/menus.ui.h:3 +msgid "_Preferences" +msgstr "_Innstillinger" + +#: ../src/client/components/stock.vala:28 ../ui/conversation-email-menus.ui.h:7 +msgid "_Print…" msgstr "Skriv _ut …" +#: ../src/client/components/stock.vala:29 ../ui/gtk/menus.ui.h:7 +msgid "_Quit" +msgstr "_Avslutt" + #: ../src/client/components/stock.vala:30 ../ui/remove_confirm.glade.h:6 msgid "_Remove" msgstr "_Fjern" -#. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1324 -msgid "Select _All" -msgstr "Velg _alt" - -#: ../src/client/components/stock.vala:33 msgid "_Keep" msgstr "_Behold" -#: ../src/client/composer/composer-widget.vala:73 +#: ../src/client/composer/composer-link-popover.vala:150 +msgid "Link URL is not correctly formatted, e.g. http://example.com" +msgstr "" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid link URL" +msgstr "Ugyldig URL for lenke" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid email address" +msgstr "Ugyldig e-postadresse" + +#: ../src/client/composer/composer-widget.vala:154 msgid "Saved" msgstr "Lagret" -#: ../src/client/composer/composer-widget.vala:74 +#: ../src/client/composer/composer-widget.vala:155 msgid "Saving" msgstr "Lagrer" -#: ../src/client/composer/composer-widget.vala:75 +#: ../src/client/composer/composer-widget.vala:156 msgid "Error saving" msgstr "Feil under lagring" -#: ../src/client/composer/composer-widget.vala:76 +#: ../src/client/composer/composer-widget.vala:157 msgid "Press Backspace to delete quote" msgstr "Trykk rettetast for å slette stitat" -#: ../src/client/composer/composer-widget.vala:77 +#: ../src/client/composer/composer-widget.vala:158 msgid "New Message" msgstr "Ny melding" -#. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since -#. this is full-word checking, include all variants of each word. No spaces are allowed. -#: ../src/client/composer/composer-widget.vala:138 +#. Translators: This is list of keywords, separated by pipe ("|") +#. characters, that suggest an attachment; since this is full-word +#. checking, include all variants of each word. No spaces are +#. allowed. +#: ../src/client/composer/composer-widget.vala:167 msgid "" "attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" "enclosing|encloses|enclosure|enclosures" @@ -840,61 +894,66 @@ "vedlegg|attach|attaching|attaches|attachment|attachments|attached|enclose|" "enclosed|enclosing|encloses|enclosure|enclosures" -#: ../src/client/composer/composer-widget.vala:1102 -#: ../src/client/composer/composer-widget.vala:1106 +#: ../src/client/composer/composer-widget.vala:1122 +#: ../src/client/composer/composer-widget.vala:1141 msgid "Do you want to discard this message?" msgstr "Vil du forkaste denne meldingen?" -#: ../src/client/composer/composer-widget.vala:1262 +#: ../src/client/composer/composer-widget.vala:1245 msgid "Send message with an empty subject and body?" msgstr "Vil du sende melding med tom tittel og innhold?" -#: ../src/client/composer/composer-widget.vala:1264 +#: ../src/client/composer/composer-widget.vala:1247 msgid "Send message with an empty subject?" msgstr "Vil du sende melding med tom tittel?" -#: ../src/client/composer/composer-widget.vala:1266 +#: ../src/client/composer/composer-widget.vala:1249 msgid "Send message with an empty body?" msgstr "Vil du sende melding med tomt innhold?" -#: ../src/client/composer/composer-widget.vala:1268 +#: ../src/client/composer/composer-widget.vala:1253 msgid "Send message without an attachment?" msgstr "Vil du sende melding uten vedlegg?" -#: ../src/client/composer/composer-widget.vala:1530 -msgid "Cannot add attachment" -msgstr "Klarte ikke å legge ved fil" +#: ../src/client/composer/composer-widget.vala:1515 +#, c-format +msgid "“%s” already attached for delivery." +msgstr "«%s» er allerede lagt ved for levering." -#: ../src/client/composer/composer-widget.vala:1541 +#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" +#. Translators: The first argument will be a +#. description of the document type, the second will +#. be a human-friendly size string. For example: +#. Document (100.9MB) +#: ../src/client/composer/composer-widget.vala:1523 +#: ../src/client/conversation-viewer/conversation-email.vala:138 #, c-format -msgid "\"%s\" could not be found." +msgid "%s (%s)" +msgstr "%s (%s)" + +#: ../src/client/composer/composer-widget.vala:1560 +#, c-format +msgid "“%s” could not be found." msgstr "Fant ikke «%s»." -#: ../src/client/composer/composer-widget.vala:1548 +#: ../src/client/composer/composer-widget.vala:1566 #, c-format -msgid "\"%s\" is a folder." +msgid "“%s” is a folder." msgstr "«%s» er en mappe." -#: ../src/client/composer/composer-widget.vala:1555 +#: ../src/client/composer/composer-widget.vala:1572 #, c-format -msgid "\"%s\" is an empty file." +msgid "“%s” is an empty file." msgstr "«%s» er en tom fil." -#: ../src/client/composer/composer-widget.vala:1569 +#: ../src/client/composer/composer-widget.vala:1585 #, c-format -msgid "\"%s\" could not be opened for reading." +msgid "“%s” could not be opened for reading." msgstr "Klarte ikke å åpne «%s» for lesing." -#: ../src/client/composer/composer-widget.vala:1576 -#, c-format -msgid "\"%s\" already attached for delivery." -msgstr "«%s» er allerede lagt ved." - -#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-widget.vala:1585 -#, c-format -msgid "%s (%s)" -msgstr "%s (%s)" +#: ../src/client/composer/composer-widget.vala:1593 +msgid "Cannot add attachment" +msgstr "Klarte ikke å legge ved fil" #: ../src/client/composer/composer-widget.vala:1645 msgid "To: " @@ -912,203 +971,108 @@ msgid "Reply-To: " msgstr "Svar til:" -#: ../src/client/composer/composer-widget.vala:1887 +#: ../src/client/composer/composer-widget.vala:1786 msgid "Select Color" msgstr "Velg farge" #. Displayed in the From dropdown to indicate an "alternate email address" #. for an account. The first printf argument will be the alternate email #. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2322 +#: ../src/client/composer/composer-widget.vala:1986 #, c-format msgid "%1$s via %2$s" msgstr "%1$s via %2$s" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2364 +#: ../src/client/composer/composer-widget.vala:2028 msgid "_From:" msgstr "_Fra:" -#: ../src/client/conversation-list/formatted-conversation-data.vala:11 -msgid "Me" -msgstr "Meg" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:413 -msgid "No conversations selected." -msgstr "Ingen samtaler valgt." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:415 -#, c-format -msgid "%u conversation selected." -msgid_plural "%u conversations selected." -msgstr[0] "%u samtale valgt." -msgstr[1] "%u samtaler valgt." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:444 -msgid "No search results found." -msgstr "Søket ga ingen treff." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:446 -msgid "No conversations in folder." -msgstr "Ingen samtaler." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:708 -msgid "This message contains remote images." -msgstr "Denne meldingen inneholder eksterne bilder." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:708 -msgid "Show Images" -msgstr "Vis bilder" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:709 -msgid "Always Show From Sender" -msgstr "Vis alltid fra denne avsenderen" +#. Translators: This is the name of the file chooser filter +#. when inserting an image in the composer. +#: ../src/client/composer/composer-widget.vala:2252 +msgid "Images" +msgstr "Bilder" -#: ../src/client/conversation-viewer/conversation-viewer.vala:733 -msgid "Edit Draft" -msgstr "Rediger utkast" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:809 -msgid "From:" -msgstr "Fra:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:812 -msgid "To:" -msgstr "Til:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:815 -msgid "Cc:" -msgstr "Kopi:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:818 -msgid "Bcc:" -msgstr "Blindkopi:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:821 -msgid "Subject:" -msgstr "Emne:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:824 -msgid "Date:" -msgstr "Dato:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1139 -#, c-format -msgid "%u read message" -msgid_plural "%u read messages" -msgstr[0] "%u lest melding" -msgstr[1] "%u leste meldinger" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1271 -#, c-format -msgid "This message was sent successfully, but could not be saved to %s." +#: ../src/client/composer/spell-check-popover.vala:117 +msgid "Remove this language from the preferred list" msgstr "" -"Denne meldingen er sendt, men på grunn av en feil ble den ikke lagret i %s." - -#. Add a menu item for copying the current selection. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1297 -#: ../ui/composer.glade.h:4 -msgid "_Copy" -msgstr "_Kopier" - -#. Add a menu item for copying the address. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1305 -msgid "Copy _Email Address" -msgstr "Kopier _e-postadresse" - -#. Add a menu item for copying the link. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1310 -#: ../ui/composer.glade.h:17 -msgid "Copy _Link" -msgstr "Kopier _lenke" - -#. Select message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1318 -msgid "Select _Message" -msgstr "Velg _melding" - -#. Inspect. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1330 -msgid "_Inspect" -msgstr "_Undersøk" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1556 -msgid "This link appears to go to" -msgstr "Denne lenken ser ut til å peke på" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1557 -msgid "but actually goes to" -msgstr "men leder deg egentlig til" - -#. If href doesn't look like a URL, something is fishy, so warn the user -#: ../src/client/conversation-viewer/conversation-viewer.vala:1612 -msgid " (Invalid?)" -msgstr " (ugyldig?)" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1718 -msgid "_Save Image As..." -msgstr "_Lagre bilde som …" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1822 -msgid "_Save As..." -msgstr "_Lagre som …" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1827 -msgid "Save All A_ttachments..." -msgstr "Lagre alle v_edlegg …" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1847 -msgid "Save A_ttachment..." -msgid_plural "Save All A_ttachments..." -msgstr[0] "Lagre v_edlegg …" -msgstr[1] "Lagre alle v_edlegg …" - -#. Reply to all on a message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1862 -msgid "Reply to _All" -msgstr "Svar _alle" - -#. Mark as read/unread. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1879 -msgid "_Mark as Read" -msgstr "_Merk som lest" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1883 -msgid "_Mark as Unread" -msgstr "_Merk som ulest" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1889 -msgid "Mark Unread From _Here" -msgstr "Marker som ulest _herfra" -#. Separator. -#. View original message source. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1904 -msgid "_View Source" -msgstr "Vis meldings_data" +#: ../src/client/composer/spell-check-popover.vala:121 +msgid "Add this language to the preferred list" +msgstr "" -#. Generate the attachment table. -#. / Placeholder filename for attachments with no filename. -#: ../src/client/conversation-viewer/conversation-viewer.vala:2227 -#: ../src/engine/rfc822/rfc822-utils.vala:378 -msgid "none" -msgstr "ingen" +#: ../src/client/composer/spell-check-popover.vala:217 +msgid "Search for more languages" +msgstr "Søk etter flere språk" -#: ../src/client/conversation-viewer/conversation-viewer.vala:2362 -msgid "Failed to open default text editor." -msgstr "Klarte ikke å åpne forvalgt tekstbehandler." +#: ../src/client/conversation-list/formatted-conversation-data.vala:11 +msgid "Me" +msgstr "Meg" -#: ../src/client/conversation-viewer/conversation-web-view.vala:322 -#, c-format -msgid "%s - Conversation Inspector" -msgstr "%s - Samtale Inspektør" +#. Translators: This is the file type displayed for +#. attachments with unknown file types. +#: ../src/client/conversation-viewer/conversation-email.vala:124 +msgid "Unknown" +msgstr "Ukjent" + +#. Preview headers +#. Translators: This is displayed in place of the from address +#. when the message has no from address. +#: ../src/client/conversation-viewer/conversation-message.vala:331 +msgid "No sender" +msgstr "Ingen avsender" + +#. Translators: This separates multiple 'from' +#. addresses in the header preview for a message. +#: ../src/client/conversation-viewer/conversation-message.vala:586 +msgid ", " +msgstr ", " + +#. Translators: This string is used as the HTML IMG ALT +#. attribute value when displaying an inline image in an email +#. that did not specify a file name. E.g. Image" +msgstr "Fra " + +#: ../ui/conversation-message.ui.h:2 +msgid "1/1/1970\t" +msgstr "1/1/1970\t" + +#: ../ui/conversation-message.ui.h:3 +msgid "Preview body text." +msgstr "Forhåndsvis meldingstekst." + +#: ../ui/conversation-message.ui.h:4 +msgid "Sent by:" +msgstr "Sendt av:" -#: ../ui/composer.glade.h:55 -msgid "_Subject" -msgstr "_Emne" +#: ../ui/conversation-message.ui.h:5 +msgid "Reply to:" +msgstr "Svar til:" -#: ../ui/composer.glade.h:56 -msgid "_Bcc" -msgstr "_Blindkopi" +#: ../ui/conversation-message.ui.h:6 +msgid "Subject" +msgstr "Emne" -#: ../ui/composer.glade.h:57 -msgid "_Reply-To" -msgstr "_Svar til" +#: ../ui/conversation-message.ui.h:7 +msgid "To:" +msgstr "Til:" -#. Geary account mail will be sent from -#: ../ui/composer.glade.h:59 -msgid "From" -msgstr "Fra" +#: ../ui/conversation-message.ui.h:8 +msgid "Cc:" +msgstr "Kopi:" -#: ../ui/composer.glade.h:60 -msgid "Drop files here" -msgstr "Slipp filer her" +#: ../ui/conversation-message.ui.h:9 +msgid "Bcc:" +msgstr "Blindkopi:" -#: ../ui/composer.glade.h:61 -msgid "To add them as attachments" -msgstr "For å legge dem til som vedlegg" +#: ../ui/conversation-message.ui.h:10 +msgid "Show Images" +msgstr "Vis bilder" + +#: ../ui/conversation-message.ui.h:11 +msgid "Always Show From Sender" +msgstr "Vis alltid fra denne avsenderen" + +#: ../ui/conversation-message.ui.h:12 +msgid "Remote images not shown" +msgstr "Eksterne bilder vises ikke" + +#: ../ui/conversation-message.ui.h:13 +msgid "Only show remote images from senders you trust." +msgstr "Bare last inn eksterne bilder fra sendere du stoler på." + +#: ../ui/conversation-message.ui.h:14 +msgid "But actually goes to:" +msgstr "men leder deg egentlig til:" + +#: ../ui/conversation-message.ui.h:15 +msgid "The link appears to go to:" +msgstr "Denne lenken ser ut til å peke på:" + +#: ../ui/conversation-message.ui.h:16 +msgid "Deceptive link found" +msgstr "" + +#: ../ui/conversation-message.ui.h:17 +msgid "The email sender may be leading you to the wrong web site." +msgstr "" + +#: ../ui/conversation-message.ui.h:18 +msgid "If unsure, contact the sender and ask before continuing." +msgstr "" + +#: ../ui/conversation-viewer.ui.h:1 +msgid "Find in conversation" +msgstr "Finn i samtale" + +#: ../ui/conversation-viewer.ui.h:2 +msgid "Find the previous occurrence of the search string." +msgstr "Finn forrige forekomst av søkestreng." + +#: ../ui/conversation-viewer.ui.h:3 +msgid "Find the next occurrence of the search string." +msgstr "Finn neste forekomst av søkestreng." #: ../ui/edit_alternate_emails.glade.h:1 msgid "Remove email address" @@ -1923,138 +2166,395 @@ msgid "label" msgstr "merkelapp" -#: ../ui/login.glade.h:1 ../ui/password-dialog.glade.h:3 +#: ../ui/gtk/help-overlay.ui.h:1 +msgid "Conversation Shortcuts" +msgstr "Samtalesnarveier" + +#: ../ui/gtk/help-overlay.ui.h:2 +msgctxt "shortcut window" +msgid "General" +msgstr "Generelt" + +#: ../ui/gtk/help-overlay.ui.h:3 +msgctxt "shortcut window" +msgid "Move focus to the next/previous pane" +msgstr "Fokuser på neste/forrige fane" + +#: ../ui/gtk/help-overlay.ui.h:4 +msgctxt "shortcut window" +msgid "Move focus to conversation list" +msgstr "Fokuser på samtaleliste" + +#: ../ui/gtk/help-overlay.ui.h:5 +msgctxt "shortcut window" +msgid "Detach composer window" +msgstr "Frigjør skrivevindu" + +#: ../ui/gtk/help-overlay.ui.h:6 +msgctxt "shortcut window" +msgid "Close composer window" +msgstr "Lukk skrivevindu" + +#: ../ui/gtk/help-overlay.ui.h:7 +msgctxt "shortcut window" +msgid "Show keyboard shortcuts" +msgstr "Vis tastatursnarveier" + +#: ../ui/gtk/help-overlay.ui.h:8 +msgctxt "shortcut window" +msgid "Show help" +msgstr "Vis hjelp" + +#: ../ui/gtk/help-overlay.ui.h:9 +msgctxt "shortcut window" +msgid "Quit the application" +msgstr "Avslutt programmet" + +#: ../ui/gtk/help-overlay.ui.h:10 +msgctxt "shortcut window" +msgid "Search" +msgstr "Søk" + +#: ../ui/gtk/help-overlay.ui.h:11 +msgctxt "shortcut window" +msgid "Jump to search box" +msgstr "Hopp til søkeboks" + +#: ../ui/gtk/help-overlay.ui.h:12 +msgctxt "shortcut window" +msgid "Find in current conversation" +msgstr "Finn i gjeldende samtale" + +#: ../ui/gtk/help-overlay.ui.h:13 +msgctxt "shortcut window" +msgid "Find next/previous in current conversation" +msgstr "Søk etter neste/forrige i gjeldende samtale" + +#: ../ui/gtk/help-overlay.ui.h:14 +msgctxt "shortcut window" +msgid "Actions" +msgstr "Handlinger" + +#: ../ui/gtk/help-overlay.ui.h:15 +msgctxt "shortcut window" +msgid "Compose a new message" +msgstr "Skriv ny melding" + +#: ../ui/gtk/help-overlay.ui.h:16 +msgctxt "shortcut window" +msgid "Reply to sender " +msgstr "Svar avsender" + +#: ../ui/gtk/help-overlay.ui.h:17 +msgctxt "shortcut window" +msgid "Reply to all" +msgstr "Svar alle" + +#: ../ui/gtk/help-overlay.ui.h:18 +msgctxt "shortcut window" +msgid "Forward" +msgstr "Videresend" + +#: ../ui/gtk/help-overlay.ui.h:19 +msgctxt "shortcut window" +msgid "Archive" +msgstr "Arkiver" + +#: ../ui/gtk/help-overlay.ui.h:20 +msgctxt "shortcut window" +msgid "Move to trash" +msgstr "Flytt til papirkurv" + +#: ../ui/gtk/help-overlay.ui.h:21 +msgctxt "shortcut window" +msgid "Toggle spam" +msgstr "Merk/avmerk spøppelpost" + +#: ../ui/gtk/help-overlay.ui.h:22 +msgctxt "shortcut window" +msgid "Move the conversation" +msgstr "Flytt samtale" + +#: ../ui/gtk/help-overlay.ui.h:23 +msgctxt "shortcut window" +msgid "Label the conversation" +msgstr "Knytt samtale til kategori" + +#: ../ui/gtk/help-overlay.ui.h:24 +msgctxt "shortcut window" +msgid "Mark read" +msgstr "Merk som lest" + +#: ../ui/gtk/help-overlay.ui.h:25 +msgctxt "shortcut window" +msgid "Mark unread" +msgstr "Merk som ulest" + +#: ../ui/gtk/help-overlay.ui.h:26 +msgctxt "shortcut window" +msgid "View" +msgstr "Vis" + +#: ../ui/gtk/help-overlay.ui.h:27 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Forstørr" + +#: ../ui/gtk/help-overlay.ui.h:28 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Forminsk" + +#: ../ui/gtk/help-overlay.ui.h:29 +msgctxt "shortcut window" +msgid "Reset zoom" +msgstr "Tilbakestill skalering" + +#: ../ui/gtk/help-overlay.ui.h:30 +msgctxt "shortcut window" +msgid "Additional Shortcuts" +msgstr "Flere snarveier" + +#: ../ui/gtk/help-overlay.ui.h:31 +msgctxt "shortcut window" +msgid "Star" +msgstr "Gi stjerne" + +#: ../ui/gtk/help-overlay.ui.h:32 +msgctxt "shortcut window" +msgid "Unstar" +msgstr "F_jern stjerne" + +#: ../ui/gtk/help-overlay.ui.h:33 +msgctxt "shortcut window" +msgid "Delete" +msgstr "Slett" + +#: ../ui/gtk/help-overlay.ui.h:34 +msgctxt "shortcut window" +msgid "Jump to next (older) conversation" +msgstr "Hopp til neste (eldre) samtale" + +#: ../ui/gtk/help-overlay.ui.h:35 +msgctxt "shortcut window" +msgid "Jump to previous (newer) conversation" +msgstr "Hopp til forrige (nyere) samtale" + +#: ../ui/gtk/help-overlay.ui.h:36 +msgid "Composer Shortcuts" +msgstr "Meldingsskriver" + +#: ../ui/gtk/help-overlay.ui.h:37 +msgctxt "shortcut window" +msgid "Quote text" +msgstr "Siter tekst" + +#: ../ui/gtk/help-overlay.ui.h:38 +msgctxt "shortcut window" +msgid "Unquote text" +msgstr "Fjern sitat" + +#: ../ui/gtk/help-overlay.ui.h:39 +msgctxt "shortcut window" +msgid "Send" +msgstr "Send" + +#: ../ui/gtk/help-overlay.ui.h:40 +msgctxt "shortcut window" +msgid "Add attachment" +msgstr "Legg til vedlegg" + +#: ../ui/gtk/help-overlay.ui.h:41 +msgctxt "shortcut window" +msgid "Rich text mode" +msgstr "Rik tekstmodus" + +#: ../ui/gtk/help-overlay.ui.h:42 +msgctxt "shortcut window" +msgid "Bold text" +msgstr "Fet skrift" + +#: ../ui/gtk/help-overlay.ui.h:43 +msgctxt "shortcut window" +msgid "Italicize text" +msgstr "Kursiver tekst" + +#: ../ui/gtk/help-overlay.ui.h:44 +msgctxt "shortcut window" +msgid "Underline text" +msgstr "Understrek tekst" + +#: ../ui/gtk/help-overlay.ui.h:45 +msgctxt "shortcut window" +msgid "Strike text" +msgstr "Gjennomstrek tekst" + +#: ../ui/gtk/help-overlay.ui.h:46 +msgctxt "shortcut window" +msgid "Insert a link" +msgstr "Sett inn lenke" + +#: ../ui/gtk/help-overlay.ui.h:47 +msgctxt "shortcut window" +msgid "Remove formatting" +msgstr "Fjern formatering" + +#: ../ui/gtk/menus.ui.h:2 +msgid "A_ccounts" +msgstr "K_ontoer" + +#: ../ui/gtk/menus.ui.h:4 +msgid "_Keyboard Shortcuts" +msgstr "_Tastatursnarveier" + +#: ../ui/login.glade.h:1 +msgid "email@example.com" +msgstr "e-post@eksempel.no" + +#: ../ui/login.glade.h:2 ../ui/password-dialog.glade.h:3 msgid "Password" msgstr "Passord" -#: ../ui/login.glade.h:2 +#: ../ui/login.glade.h:3 msgid "E_mail address" msgstr "E-postadresse" -#: ../ui/login.glade.h:3 +#: ../ui/login.glade.h:4 msgid "_Password" msgstr "_Passord" -#: ../ui/login.glade.h:4 +#: ../ui/login.glade.h:5 msgid "S_ervice" msgstr "Tj_eneste" -#: ../ui/login.glade.h:5 +#: ../ui/login.glade.h:6 msgid "N_ame" msgstr "N_avn" -#: ../ui/login.glade.h:7 +#: ../ui/login.glade.h:8 msgid "N_ickname" msgstr "_Kallenavn" -#: ../ui/login.glade.h:8 +#: ../ui/login.glade.h:9 msgid "Work, Home, etc." msgstr "Arbeid, Hjemme, osv." -#: ../ui/login.glade.h:9 +#: ../ui/login.glade.h:10 msgid "_Save sent mail" msgstr "_Lagre sendt e-post" -#: ../ui/login.glade.h:10 +#: ../ui/login.glade.h:11 msgid "Addi_tional email addresses…" msgstr "_Flere e-postadresser …" -#: ../ui/login.glade.h:11 +#: ../ui/login.glade.h:12 msgid "IMAP settings" msgstr "IMAP-innstillinger" -#: ../ui/login.glade.h:12 +#: ../ui/login.glade.h:13 msgid "Se_rver" msgstr "Tj_ener" -#: ../ui/login.glade.h:13 +#: ../ui/login.glade.h:14 +msgid "imap.example.com" +msgstr "imap.eksempel.no" + +#: ../ui/login.glade.h:15 msgid "P_ort" msgstr "P_ort" -#: ../ui/login.glade.h:14 +#: ../ui/login.glade.h:16 +msgid "smtp.example.com" +msgstr "smtp.eksempel.no" + +#: ../ui/login.glade.h:17 msgid "Ser_ver" msgstr "Tje_ner" -#: ../ui/login.glade.h:15 +#: ../ui/login.glade.h:18 msgid "Por_t" msgstr "Por_t" -#: ../ui/login.glade.h:16 +#: ../ui/login.glade.h:19 msgid "SMTP settings" msgstr "SMTP innstillinger" -#: ../ui/login.glade.h:17 +#: ../ui/login.glade.h:20 msgid "User_name" msgstr "Bruker_navn" -#: ../ui/login.glade.h:18 +#: ../ui/login.glade.h:21 msgid "Pass_word" msgstr "Pass_ord" -#: ../ui/login.glade.h:19 +#: ../ui/login.glade.h:22 msgid "SMTP username" msgstr "SMTP-brukernavn" -#: ../ui/login.glade.h:20 +#: ../ui/login.glade.h:23 msgid "SMTP password" msgstr "SMTP-passord" -#: ../ui/login.glade.h:21 +#: ../ui/login.glade.h:24 msgid "_Username" msgstr "_Brukernavn" -#: ../ui/login.glade.h:22 +#: ../ui/login.glade.h:25 msgid "IMAP username" msgstr "IMAP-brukernavn" -#: ../ui/login.glade.h:23 +#: ../ui/login.glade.h:26 msgid "IMAP password" msgstr "IMAP-passord" -#: ../ui/login.glade.h:24 +#: ../ui/login.glade.h:27 msgid "Encr_yption" msgstr "Kryp_tering" -#: ../ui/login.glade.h:25 +#: ../ui/login.glade.h:28 msgid "Encrypt_ion" msgstr "Krypter_ing" -#: ../ui/login.glade.h:27 +#: ../ui/login.glade.h:30 msgid "SSL/TLS" msgstr "SSL/TLS" -#: ../ui/login.glade.h:28 +#: ../ui/login.glade.h:31 msgid "STARTTLS" msgstr "STARTTLS" -#: ../ui/login.glade.h:29 +#: ../ui/login.glade.h:32 msgid "No authentication re_quired" msgstr "Aut_entisering kreves ikke" -#: ../ui/login.glade.h:30 +#: ../ui/login.glade.h:33 msgid "Use IMAP cre_dentials" msgstr "Bruk IMAP-akkred_itiver" -#: ../ui/login.glade.h:31 ../ui/preferences.glade.h:5 +#: ../ui/login.glade.h:34 msgid "Composer" msgstr "Meldingsskriver" -#: ../ui/login.glade.h:32 +#: ../ui/login.glade.h:35 msgid "Save dra_fts on server" msgstr "Lagre _utkast på tjener" -#: ../ui/login.glade.h:33 +#: ../ui/login.glade.h:36 msgid "Si_gn emails (HTML allowed):" msgstr "Si_gner e-poster (HTML tillatt):" -#: ../ui/login.glade.h:34 +#: ../ui/login.glade.h:37 msgid "Storage" msgstr "Lagring" -#: ../ui/login.glade.h:35 +#: ../ui/login.glade.h:38 msgid "_Download mail" msgstr "_Last ned e-post" +#: ../ui/main-toolbar.ui.h:1 +msgid "Empty Spam or Trash folders" +msgstr "Tøm søppelpost eller papirkurv" + #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" msgstr "SMTP-akkreditiver" @@ -2071,47 +2571,43 @@ msgid "_Authenticate" msgstr "_Autentiser" -#: ../ui/preferences.glade.h:1 +#: ../ui/preferences-dialog.ui.h:1 msgid "Reading" msgstr "Lese meldinger" -#: ../ui/preferences.glade.h:2 +#: ../ui/preferences-dialog.ui.h:2 msgid "_Automatically select next message" msgstr "Velg neste melding _automatisk" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences-dialog.ui.h:3 msgid "_Display conversation preview" msgstr "_Forhåndsvisning av samtale" -#: ../ui/preferences.glade.h:4 +#: ../ui/preferences-dialog.ui.h:4 msgid "Use _three pane view" msgstr "Bruk trefanevisning" -#: ../ui/preferences.glade.h:6 -msgid "Enable _spell checking" -msgstr "Slå på _stavekontroll" - -#: ../ui/preferences.glade.h:7 +#: ../ui/preferences-dialog.ui.h:5 msgid "Notifications" msgstr "Varslinger" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences-dialog.ui.h:6 msgid "_Play notification sounds" msgstr "_Spill varslingslyder" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences-dialog.ui.h:7 msgid "Show _notifications for new mail" msgstr "Vis _varslinger for ny e-post" -#: ../ui/preferences.glade.h:10 +#: ../ui/preferences-dialog.ui.h:8 msgid "Always _watch for new mail" msgstr "Alltid s_jekk for ny e-post" -#: ../ui/preferences.glade.h:11 +#: ../ui/preferences-dialog.ui.h:9 msgid "Geary will run in the background and notify of new mail" msgstr "Geary kjører i bakgrunnen og varsler deg når det kommer ny e-post" -#: ../ui/preferences.glade.h:12 +#: ../ui/preferences-dialog.ui.h:10 msgid "Preferences" msgstr "Innstillinger" diff -Nru geary-0.11.4/po/nl.po geary-0.12.0/po/nl.po --- geary-0.11.4/po/nl.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/nl.po 2017-10-02 11:25:21.000000000 +0000 @@ -1,6 +1,6 @@ # po/geary.pot # PO message string template file for Geary email client -# Copyright 2016 Software Freedom Conservancy Inc. +# Copyright 2012-2013 Yorba Foundation # This file is distributed under the GNU LGPL, version 2.1. # # Translators: @@ -11,66 +11,163 @@ # Peter Nijssen , 2012. # Martijn Braam , 2013. # renearts , 2013. -# Hannie Dumoleyn , 2014. +# Hannie Dumoleyn , 2014, 2017. +# Nathan Follens , 2015-2016. +# Justin van Steijn , 2016. msgid "" msgstr "" "Project-Id-Version: geary-0.4.1\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" -"product=geary&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2014-08-04 20:47+0000\n" -"PO-Revision-Date: 2014-08-23 12:20+0200\n" +"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=geary" +"&keywords=I18N+L10N&component=internationalization\n" +"POT-Creation-Date: 2017-09-26 12:56+0000\n" +"PO-Revision-Date: 2017-09-26 17:15+0100\n" "Last-Translator: Hannie Dumoleyn \n" -"Language-Team: Dutch \n" -"geary/language/nl_NL/)\n" -"Language: nl\n" +"Language-Team: Dutch \n" +"Language: nl_NL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Lokalize 1.5\n" +"X-Generator: Lokalize 2.0\n" -#: ../desktop/geary.desktop.in.h:1 ../desktop/geary-autostart.desktop.in.h:1 -#| msgid "Geary Mail" +#. Translators: The application name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:2 +#: ../desktop/org.gnome.Geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" msgstr "Geary" -#: ../desktop/geary.desktop.in.h:2 ../desktop/geary-autostart.desktop.in.h:2 -#: ../src/client/application/geary-application.vala:18 +#. Translators: The development team's name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:4 +msgid "Geary Development Team" +msgstr "Geary-ontwikkelingsteam" + +#. Translators: The application's summary / tagline +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:6 +#: ../desktop/org.gnome.Geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 +msgid "Send and receive email" +msgstr "E-mail verzenden en ontvangen" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:7 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"Geary is een e-mailtoepassing die draait om gesprekken, voor de Gnome" +" 3-desktop. Via de duidelijke, moderne interface kunt u e-mails lezen, zoeken" +" en verzenden." +"." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:8 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"Met gesprekken kunt u een volledige discussie lezen zonder te hoeven zoeken " +"of van bericht naar bericht te hoeven klikken." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:9 +msgid "Geary’s features include:" +msgstr "Functies van Geary zijn:" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:10 +msgid "Quick email account setup" +msgstr "Snel instellen van e-mailaccount" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:11 +msgid "Shows related messages together in conversations" +msgstr "Groepeert gerelateerde berichten in gesprekken" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:12 +msgid "Fast, full text and keyword search" +msgstr "Snel zoeken in volledige tekst met zoekwoorden" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:13 +msgid "Full-featured HTML and plain text message composer" +msgstr "Berichten opstellen in HTML en platte tekst met veel functies" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:14 +msgid "Desktop notification of new mail" +msgstr "Bureaubladmelding voor nieuwe e-mail" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:15 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" +msgstr "Werkt met Gmail, Yahoo! Mail, Outlook.com en andere IMAP-servers" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:17 +#| msgid "_Display conversation preview" +msgid "Geary displaying a conversation" +msgstr "Weergave van een gesprek in Geary" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:19 +msgid "Geary showing the rich text composer" +msgstr "Tekstverwerker met opmaakmogelijkheden in Geary" + +#: ../desktop/org.gnome.Geary.desktop.in.h:2 +msgid "Email" +msgstr "E-mail" + +#: ../desktop/org.gnome.Geary.desktop.in.h:3 +msgid "Geary Email" +msgstr "Geary e-mail" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/org.gnome.Geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" + +#: ../desktop/org.gnome.Geary.desktop.in.h:7 ../ui/gtk/menus.ui.h:1 +msgid "Compose Message" +msgstr "Bericht opstellen" + +#: ../desktop/geary-autostart.desktop.in.h:2 +#: ../src/client/application/geary-application.vala:21 msgid "Mail Client" msgstr "E-mailprogramma" -#: ../desktop/geary.desktop.in.h:3 ../desktop/geary-autostart.desktop.in.h:3 +#: ../desktop/geary-autostart.desktop.in.h:3 msgid "Geary Mail" -msgstr "Geary Mail" +msgstr "Geary e-mail" -#: ../desktop/geary.desktop.in.h:4 ../desktop/geary-autostart.desktop.in.h:4 -msgid "Send and receive email" -msgstr "E-mail verzenden en ontvangen" - -#: ../desktop/geary.desktop.in.h:5 ../desktop/geary-autostart.desktop.in.h:5 +#: ../desktop/geary-autostart.desktop.in.h:5 msgid "Email;E-mail;Mail;" msgstr "Email;E-mail;Mail;" -#: ../desktop/geary.desktop.in.h:6 -msgid "Compose Message" -msgstr "Bericht opstellen" +#: ../desktop/geary-attach.contract.in.h:1 +msgid "Send by email" +msgstr "Verzenden via e-mail" + +#: ../desktop/geary-attach.contract.in.h:2 +msgid "Send files using Geary" +msgstr "Bestanden verzenden met Geary" -#: ../src/client/accounts/account-dialog-add-edit-pane.vala:48 +#: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:31 +#: ../ui/conversation-email-menus.ui.h:10 msgid "_Save" -msgstr "_Opslaan" +msgstr "Op_slaan" -#: ../src/client/accounts/account-dialog-add-edit-pane.vala:48 +#: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:22 msgid "_Add" msgstr "_Toevoegen" +#. reset/clear widgets +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 +#, c-format +msgid "Additional addresses for %s" +msgstr "Bijkomstige adressen voor %s" + #. Sets min size. -#: ../src/client/accounts/account-dialog.vala:19 +#: ../src/client/accounts/account-dialog.vala:21 msgid "Accounts" msgstr "Accounts" -#. Copyright 2011-2014 Yorba Foundation +#. Copyright 2016 Software Freedom Conservancy Inc. #. * #. * This software is licensed under the GNU Lesser General Public License #. * (version 2.1 or later). See the COPYING file in this distribution. @@ -81,102 +178,124 @@ msgid "First Last" msgstr "Voornaam Achternaam" -#: ../src/client/accounts/add-edit-page.vala:228 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." msgstr "Welkom bij Geary." -#: ../src/client/accounts/add-edit-page.vala:228 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." msgstr "Vul uw accountgegevens in om te beginnen." -#: ../src/client/accounts/add-edit-page.vala:247 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "Tot 2 weken geleden" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:248 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "Tot 1 maand geleden" -#: ../src/client/accounts/add-edit-page.vala:249 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "Tot 3 maanden geleden" -#: ../src/client/accounts/add-edit-page.vala:250 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "Tot 6 maanden geleden" -#: ../src/client/accounts/add-edit-page.vala:251 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "Tot 1 jaar geleden" -#: ../src/client/accounts/add-edit-page.vala:252 -#| msgid "1 year back" +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" msgstr "Tot 2 jaar geleden" -#: ../src/client/accounts/add-edit-page.vala:253 -#| msgid "1 year back" +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" msgstr "Tot 4 jaar geleden" #. Separator -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "Alles" -#: ../src/client/accounts/add-edit-page.vala:686 +#: ../src/client/accounts/add-edit-page.vala:283 +msgid "Edit" +msgstr "Bewerken" + +#: ../src/client/accounts/add-edit-page.vala:285 +msgid "Preview" +msgstr "Voorbeeld" + +#: ../src/client/accounts/add-edit-page.vala:751 msgid "Remem_ber passwords" msgstr "_Wachtwoorden onthouden" -#: ../src/client/accounts/add-edit-page.vala:693 ../ui/login.glade.h:6 +#: ../src/client/accounts/add-edit-page.vala:758 ../ui/login.glade.h:7 msgid "Remem_ber password" msgstr "Wachtwoord _onthouden" -#: ../src/client/accounts/add-edit-page.vala:727 +#: ../src/client/accounts/add-edit-page.vala:792 msgid "Unable to validate:\n" msgstr "Verifiëren mislukt:\n" -#: ../src/client/accounts/add-edit-page.vala:729 -msgid " • Invalid account nickname.\n" -msgstr " • Ongeldige accountbijnaam.\n" - -#: ../src/client/accounts/add-edit-page.vala:732 -msgid " • Email address already added to Geary.\n" -msgstr " • E-mailadres is al aan Geary toegevoegd.\n" - -#: ../src/client/accounts/add-edit-page.vala:736 -msgid " • IMAP connection error.\n" -msgstr " • IMAP-verbindingsfout.\n" - -#: ../src/client/accounts/add-edit-page.vala:739 -msgid " • IMAP username or password incorrect.\n" -msgstr " • IMAP-gebruikersnaam of -wachtwoord onjuist.\n" - -#: ../src/client/accounts/add-edit-page.vala:742 -msgid " • SMTP connection error.\n" -msgstr " • SMTP-verbindingsfout.\n" - -#: ../src/client/accounts/add-edit-page.vala:745 -msgid " • SMTP username or password incorrect.\n" -msgstr " • SMTP-gebruikersnaam of -wachtwoord onjuist.\n" - -#: ../src/client/accounts/add-edit-page.vala:749 -msgid " • Connection error.\n" -msgstr " • Verbindingsfout.\n" - -#: ../src/client/accounts/add-edit-page.vala:753 -msgid " • Username or password incorrect.\n" -msgstr " • Gebruikersnaam of wachtwoord onjuist.\n" - -#: ../src/client/application/geary-application.vala:19 -#| msgid "Copyright 2011-2013 Yorba Foundation" -msgid "Copyright 2011-2014 Yorba Foundation" -msgstr "Copyright 2011-2014 Yorba Foundation" +#: ../src/client/accounts/add-edit-page.vala:794 +msgid " • Invalid account nickname.\n" +msgstr " • Ongeldige accountbijnaam.\n" + +#: ../src/client/accounts/add-edit-page.vala:797 +msgid " • Email address already added to Geary.\n" +msgstr " • E-mailadres is al aan Geary toegevoegd.\n" + +#: ../src/client/accounts/add-edit-page.vala:801 +msgid " • IMAP connection error.\n" +msgstr " • IMAP-verbindingsfout.\n" + +#: ../src/client/accounts/add-edit-page.vala:804 +msgid " • IMAP username or password incorrect.\n" +msgstr " • IMAP-gebruikersnaam of -wachtwoord onjuist.\n" + +#: ../src/client/accounts/add-edit-page.vala:807 +msgid " • SMTP connection error.\n" +msgstr " • SMTP-verbindingsfout.\n" + +#: ../src/client/accounts/add-edit-page.vala:810 +msgid " • SMTP username or password incorrect.\n" +msgstr " • SMTP-gebruikersnaam of -wachtwoord onjuist.\n" + +#: ../src/client/accounts/add-edit-page.vala:814 +msgid " • Connection error.\n" +msgstr " • Verbindingsfout.\n" + +#: ../src/client/accounts/add-edit-page.vala:818 +msgid " • Username or password incorrect.\n" +msgstr " • Gebruikersnaam of wachtwoord onjuist.\n" + +#: ../src/client/application/geary-application.vala:22 +msgid "Copyright 2016 Software Freedom Conservancy Inc." +msgstr "Copyright 2016 Software Freedom Conservancy Inc." + +#: ../src/client/application/geary-application.vala:24 +msgid "Visit the Geary web site" +msgstr "Bezoek de Geary-website" -#: ../src/client/application/geary-application.vala:21 -msgid "Visit the Yorba web site" -msgstr "De Yorba-website bezoeken" +#: ../src/client/application/geary-application.vala:464 +#, c-format +msgid "About %s" +msgstr "Over %s" + +#. Translators: add your name and email address to receive +#. credit in the About dialog For example: Yamada Taro +#. +#: ../src/client/application/geary-application.vala:468 +msgid "translator-credits" +msgstr "" +"Bas Duineveld \n" +"Nathan Follens \n" +"Justin van Steijn \n" +"\n" +"Meer info over Gnome-NL http://nl.gnome.org" #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" @@ -188,7 +307,7 @@ #: ../src/client/application/geary-args.vala:12 msgid "Log conversation monitoring" -msgstr "Conversatiecontrole loggen" +msgstr "Gesprekscontrole loggen" #: ../src/client/application/geary-args.vala:13 msgid "Log network deserialization" @@ -228,206 +347,195 @@ msgstr "Inspectie van WebView toestaan" #: ../src/client/application/geary-args.vala:26 +msgid "Revoke all server certificates with TLS warnings" +msgstr "Alle servercertificaten met TLS-waarschuwingen intrekken" + +#: ../src/client/application/geary-args.vala:27 +msgid "Perform a graceful quit" +msgstr "Sierlijk afsluiten" + +#: ../src/client/application/geary-args.vala:28 msgid "Display program version" msgstr "Programmaversie weergeven" #. This gives a command-line hint on how to open new composer windows with mailto: -#: ../src/client/application/geary-args.vala:49 +#: ../src/client/application/geary-args.vala:53 #, c-format msgid "Use %s to open a new composer window" -msgstr "%s gebruiken om een nieuw \"Nieuw bericht\"-venster te openen" +msgstr "Gebruik %s om een nieuw opstelvenster te openen" -#: ../src/client/application/geary-args.vala:50 +#: ../src/client/application/geary-args.vala:54 msgid "Please report comments, suggestions and bugs to:" msgstr "Stuur opmerkingen, suggesties en bugs naar:" #. i18n: Command line arguments are invalid -#: ../src/client/application/geary-args.vala:57 +#: ../src/client/application/geary-args.vala:61 #, c-format msgid "Failed to parse command line options: %s\n" msgstr "Interpreteren van opdrachtregelopties mislukt: %s\n" -#: ../src/client/application/geary-args.vala:68 +#: ../src/client/application/geary-args.vala:72 #, c-format -msgid "Unrecognized command line option \"%s\"\n" +msgid "Unrecognized command line option “%s”\n" msgstr "Onbekende opdrachtregeloptie ‘%s’\n" -#: ../src/client/application/geary-controller.vala:46 -msgid "_Delete" -msgstr "_Verwijderen" +#: ../src/client/application/geary-controller.vala:57 +msgid "Delete conversation" +msgstr "Gesprek verwijderen" -#: ../src/client/application/geary-controller.vala:47 -#| msgid "Delete conversation (Delete, Backspace, A)" +#: ../src/client/application/geary-controller.vala:58 msgid "Delete conversation (Shift+Delete)" -msgstr "Conversatie verwijderen (Shift+Delete)" +msgstr "Gesprek verwijderen (Shift+Delete)" -#: ../src/client/application/geary-controller.vala:48 -#| msgid "Delete conversations (Delete, Backspace, A)" +#: ../src/client/application/geary-controller.vala:59 msgid "Delete conversations (Shift+Delete)" -msgstr "Conversaties verwijderen (Shift+Delete)" +msgstr "Gesprekken verwijderen (Shift+Delete)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:52 -#| msgid "Trash" -msgid "_Trash" -msgstr "_Prullenbak" - -#: ../src/client/application/geary-controller.vala:53 -#| msgid "Archive conversations (Delete, Backspace, A)" -msgid "Move conversation to trash (Delete, Backspace)" -msgstr "Conversatie naar prullenbak verplaatsen (Delete, Backspace)" - -#: ../src/client/application/geary-controller.vala:54 -#| msgid "Archive conversations (Delete, Backspace, A)" -msgid "Move conversations to trash (Delete, Backspace)" -msgstr "Conversatie naar prullenbak verplaatsen (Delete, Backspace)" +#: ../src/client/application/geary-controller.vala:63 +msgid "Move conversation to Trash (Delete, Backspace)" +msgstr "Gesprek naar prullenbak verplaatsen (Delete, Backspace)" + +#: ../src/client/application/geary-controller.vala:64 +msgid "Move conversations to Trash (Delete, Backspace)" +msgstr "Gesprekken naar prullenbak verplaatsen (Delete, Backspace)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:58 +#: ../src/client/application/geary-controller.vala:68 msgid "_Archive" msgstr "_Archiveren" -#: ../src/client/application/geary-controller.vala:59 -#| msgid "Move conversation" +#: ../src/client/application/geary-controller.vala:69 msgid "Archive conversation (A)" -msgstr "Conversatie archiveren (A)" +msgstr "Gesprek archiveren (A)" -#: ../src/client/application/geary-controller.vala:60 -#| msgid "Move conversations" +#: ../src/client/application/geary-controller.vala:70 msgid "Archive conversations (A)" -msgstr "Conversaties archiveren (A)" +msgstr "Gesprekken archiveren (A)" -#: ../src/client/application/geary-controller.vala:63 +#: ../src/client/application/geary-controller.vala:73 msgid "Mark as S_pam" -msgstr "Als S_pam markeren" +msgstr "Markeren als s_pam" -#: ../src/client/application/geary-controller.vala:64 +#: ../src/client/application/geary-controller.vala:74 msgid "Mark as not S_pam" msgstr "S_pammarkering opheffen" -#: ../src/client/application/geary-controller.vala:66 -#: ../src/client/application/geary-controller.vala:282 +#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:448 msgid "Mark conversation" -msgstr "Conversatie markeren" +msgstr "Gesprek markeren" -#: ../src/client/application/geary-controller.vala:67 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark conversations" -msgstr "Conversaties markeren" +msgstr "Gesprekken markeren" -#: ../src/client/application/geary-controller.vala:68 +#: ../src/client/application/geary-controller.vala:78 msgid "Add label to conversation" -msgstr "Label aan conversatie toevoegen" +msgstr "Label aan gesprek toevoegen" -#: ../src/client/application/geary-controller.vala:69 +#: ../src/client/application/geary-controller.vala:79 msgid "Add label to conversations" -msgstr "Label aan conversaties toevoegen" +msgstr "Label aan gesprekken toevoegen" -#: ../src/client/application/geary-controller.vala:70 -#: ../src/client/application/geary-controller.vala:321 +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:487 msgid "Move conversation" -msgstr "Conversatie verplaatsen" +msgstr "Gesprek verplaatsen" -#: ../src/client/application/geary-controller.vala:71 +#: ../src/client/application/geary-controller.vala:81 msgid "Move conversations" -msgstr "Conversaties verplaatsen" - -#: ../src/client/application/geary-controller.vala:258 -msgid "A_ccounts" -msgstr "A_ccounts" - -#: ../src/client/application/geary-controller.vala:263 -#: ../src/client/components/stock.vala:27 -msgid "_Preferences" -msgstr "_Voorkeuren" - -#: ../src/client/application/geary-controller.vala:267 -#: ../src/client/components/stock.vala:25 -msgid "_Help" -msgstr "_Help" +msgstr "Gesprekken verplaatsen" -#: ../src/client/application/geary-controller.vala:271 -#: ../src/client/components/stock.vala:21 -msgid "_About" -msgstr "_Over" - -#: ../src/client/application/geary-controller.vala:275 -msgid "_Donate" -msgstr "_Doneren" - -#: ../src/client/application/geary-controller.vala:279 -#: ../src/client/components/stock.vala:29 -msgid "_Quit" -msgstr "_Afsluiten" - -#: ../src/client/application/geary-controller.vala:284 -msgid "_Mark as..." +#: ../src/client/application/geary-controller.vala:450 +msgid "_Mark as…" msgstr "_Markeren als…" -#: ../src/client/application/geary-controller.vala:290 +#: ../src/client/application/geary-controller.vala:456 msgid "Mark as _Read" -msgstr "Markeren als _Gelezen" +msgstr "Markeren als _gelezen" -#: ../src/client/application/geary-controller.vala:296 +#: ../src/client/application/geary-controller.vala:462 msgid "Mark as _Unread" -msgstr "Markeren als _Ongelezen" +msgstr "Markeren als _ongelezen" -#: ../src/client/application/geary-controller.vala:302 +#: ../src/client/application/geary-controller.vala:468 msgid "_Star" msgstr "_Ster toevoegen" -#: ../src/client/application/geary-controller.vala:307 +#: ../src/client/application/geary-controller.vala:473 msgid "U_nstar" msgstr "Ster _verwijderen" -#: ../src/client/application/geary-controller.vala:317 +#: ../src/client/application/geary-controller.vala:483 msgid "Add label" msgstr "Label toevoegen" -#: ../src/client/application/geary-controller.vala:318 +#: ../src/client/application/geary-controller.vala:484 msgid "_Label" msgstr "_Labelen" -#: ../src/client/application/geary-controller.vala:322 +#: ../src/client/application/geary-controller.vala:488 msgid "_Move" msgstr "_Verplaatsen" -#: ../src/client/application/geary-controller.vala:326 +#: ../src/client/application/geary-controller.vala:492 msgid "Compose new message (Ctrl+N, N)" msgstr "Nieuw bericht opstellen (Ctrl+N, N)" -#. Reply to a message. -#: ../src/client/application/geary-controller.vala:330 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1574 +#: ../src/client/application/geary-controller.vala:496 +#: ../ui/conversation-email-menus.ui.h:1 msgid "_Reply" msgstr "_Beantwoorden" -#: ../src/client/application/geary-controller.vala:331 +#: ../src/client/application/geary-controller.vala:497 msgid "Reply (Ctrl+R, R)" msgstr "Beantwoorden (Ctrl+R, R)" -#: ../src/client/application/geary-controller.vala:335 +#: ../src/client/application/geary-controller.vala:501 msgid "R_eply All" msgstr "_Allen beantwoorden" -#: ../src/client/application/geary-controller.vala:336 +#: ../src/client/application/geary-controller.vala:502 msgid "Reply all (Ctrl+Shift+R, Shift+R)" msgstr "Allen beantwoorden (Ctrl+Shift+R, Shift+R)" -#. Forward a message. -#: ../src/client/application/geary-controller.vala:341 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1584 +#: ../src/client/application/geary-controller.vala:507 +#: ../ui/conversation-email-menus.ui.h:3 msgid "_Forward" msgstr "_Doorsturen" -#: ../src/client/application/geary-controller.vala:342 +#: ../src/client/application/geary-controller.vala:508 msgid "Forward (Ctrl+L, F)" msgstr "Doorsturen (Ctrl+L, F)" -#: ../src/client/application/geary-controller.vala:625 +#: ../src/client/application/geary-controller.vala:538 +msgid "Empty _Spam…" +msgstr "_Spam legen…" + +#: ../src/client/application/geary-controller.vala:542 +msgid "Empty _Trash…" +msgstr "Prullen_bak legen…" + +#. No callback is connected, since we bind the toggle button to the search bar visibility +#: ../src/client/application/geary-controller.vala:574 +msgid "Toggle search bar" +msgstr "Zoekbalk in-/uitschakelen" + +#. No callback is connected, since we bind the toggle button to the find bar visibility +#: ../src/client/application/geary-controller.vala:579 +msgid "Toggle find bar" +msgstr "Zoekbalk in-/uitschakelen" + +#: ../src/client/application/geary-controller.vala:757 +msgid "Unable to store server trust exception" +msgstr "Kan serververtrouwenuitzondering niet opslaan" + +#: ../src/client/application/geary-controller.vala:992 msgid "Your settings are insecure" msgstr "Uw instellingen zijn onveilig" -#: ../src/client/application/geary-controller.vala:626 +#: ../src/client/application/geary-controller.vala:993 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -437,17 +545,29 @@ "betekent dat uw gebruikersnaam en wachtwoord zichtbaar zijn voor anderen op " "uw netwerk. Weet u zeker dat u dit wilt doen?" -#: ../src/client/application/geary-controller.vala:627 +#: ../src/client/application/geary-controller.vala:994 msgid "Co_ntinue" -msgstr "_Doorgaan" +msgstr "Doorgaa_n" + +#: ../src/client/application/geary-controller.vala:1041 +msgid "Error connecting to the server" +msgstr "Fout bij verbinden met de server" + +#: ../src/client/application/geary-controller.vala:1042 +msgid "" +"Geary encountered an error while connecting to the server. Please try again " +"in a few moments." +msgstr "" +"Er trad een fout op bij het verbinden met de server. Probeer het opnieuw " +"binnen enkele ogenblikken." #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:705 +#: ../src/client/application/geary-controller.vala:1079 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "E-mail verzenden mislukt" -#: ../src/client/application/geary-controller.vala:706 +#: ../src/client/application/geary-controller.vala:1080 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." @@ -457,37 +577,32 @@ #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:710 +#: ../src/client/application/geary-controller.vala:1084 #: ../src/client/components/status-bar.vala:33 -#| msgid "Error sending email" msgid "Error saving sent mail" msgstr "Verzonden e-mail opslaan mislukt" -#: ../src/client/application/geary-controller.vala:711 -#| msgid "" -#| "Geary encountered an error sending an email. If the problem persists, " -#| "please manually delete the email from your Outbox folder." +#: ../src/client/application/geary-controller.vala:1085 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." msgstr "" "Er is een fout opgetreden bij het opslaan van een verzonden e-mailbericht. " -"Het bericht " -"zal in het Postvak Uit blijven staan totdat u het verwijdert." +"Het bericht zal in het Postvak Uit blijven staan totdat u het verwijdert." -#: ../src/client/application/geary-controller.vala:780 +#: ../src/client/application/geary-controller.vala:1154 msgid "Labels" msgstr "Labels" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:792 +#: ../src/client/application/geary-controller.vala:1166 #, c-format msgid "Unable to open the database for %s" msgstr "De lokale database van %s kan niet geopend worden" -#: ../src/client/application/geary-controller.vala:793 +#: ../src/client/application/geary-controller.vala:1167 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -500,9 +615,9 @@ "Rebuilding the database will destroy all local email and its attachments. " "The mail on the your server will not be affected." msgstr "" -"Er is een fout opgetreden bij het openen van de lokale mail-database van dit " -"account. Waarschijnlijk wordt dit veroorzaakt door een beschadiging van het " -"databasebestand in deze map: ⏎\n" +"Er is een fout opgetreden bij het openen van de lokale mail-database van " +"deze account. Waarschijnlijk wordt dit veroorzaakt door een beschadiging van " +"het databasebestand in deze map: ⏎\n" "⏎\n" "%s⏎\n" "⏎\n" @@ -510,23 +625,22 @@ "afsluiten.⏎\n" "⏎\n" "Het opnieuw bouwen van de database verwijdert alle lokale e-mailberichten en " -"bijlagen. " -"Mail op de server zal niet worden aangetast." +"bijlagen. Mail op de server zal niet worden aangetast." -#: ../src/client/application/geary-controller.vala:795 +#: ../src/client/application/geary-controller.vala:1169 msgid "_Rebuild" msgstr "_Opnieuw bouwen" -#: ../src/client/application/geary-controller.vala:795 +#: ../src/client/application/geary-controller.vala:1169 msgid "E_xit" msgstr "_Afsluiten" -#: ../src/client/application/geary-controller.vala:804 +#: ../src/client/application/geary-controller.vala:1178 #, c-format -msgid "Unable to rebuild database for \"%s\"" +msgid "Unable to rebuild database for “%s”" msgstr "De lokale database van ‘%s’ kan niet opnieuw gebouwd worden" -#: ../src/client/application/geary-controller.vala:805 +#: ../src/client/application/geary-controller.vala:1179 #, c-format msgid "" "Error during rebuild:\n" @@ -539,14 +653,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:827 -#: ../src/client/application/geary-controller.vala:837 -#: ../src/client/application/geary-controller.vala:848 +#: ../src/client/application/geary-controller.vala:1201 +#: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:1222 #, c-format msgid "Unable to open local mailbox for %s" msgstr "De lokale postbus van %s kan niet geopend worden" -#: ../src/client/application/geary-controller.vala:828 +#: ../src/client/application/geary-controller.vala:1202 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -557,8 +671,8 @@ "\n" "%s" msgstr "" -"Er is een fout opgetreden bij het openen van de lokale e-maildatabase van dit " -"account. Dit wordt waarschijnlijk veroorzaakt door een probleem met de " +"Er is een fout opgetreden bij het openen van de lokale e-maildatabase van " +"deze account. Dit wordt waarschijnlijk veroorzaakt door een probleem met de " "bestandsrechten. ⏎\n" "⏎\n" "Controleer of u voldoende lees/schrijfrechten hebt voor alle bestanden in " @@ -566,49 +680,41 @@ "⏎\n" "%s" -#: ../src/client/application/geary-controller.vala:838 +#: ../src/client/application/geary-controller.vala:1212 msgid "" "The version number of the local mail database is formatted for a newer " -"version of Geary. Unfortunately, the database cannot be \"rolled back\" to " +"version of Geary. Unfortunately, the database cannot be “rolled back” to " "work with this version of Geary.\n" "\n" "Please install the latest version of Geary and try again." msgstr "" "Het versienummer van de lokale e-maildatabase is opgemaakt voor een nieuwere " -"versie van Geary. Het is helaas niet mogelijk de database \"terug te zetten\" " +"versie van Geary. Het is helaas niet mogelijk de database 'terug te zetten' " "zodat hij met deze versie van Geary werkt.\n" "\n" "Installeer de nieuwste versie van Geary en probeer het opnieuw." -#: ../src/client/application/geary-controller.vala:849 +#: ../src/client/application/geary-controller.vala:1223 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" "\n" "Please check your network connection and restart Geary." msgstr "" -"Er is een fout opgetreden bij het openen van het lokale account. Dit wordt " -"waarschijnlijk veroorzaakt door verbindingsproblemen. ⏎\n" -"⏎\n" +"Er is een fout opgetreden bij het openen van de lokale account. Dit wordt " +"waarschijnlijk veroorzaakt door verbindingsproblemen.\n" +"\n" "Controleer uw netwerkverbinding en herstart Geary." -#: ../src/client/application/geary-controller.vala:1356 -#, c-format -msgid "About %s" -msgstr "Over %s" - -#. / Translators: add your name and email address to receive credit in the About dialog -#. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1359 -msgid "translator-credits" -msgstr "Bas Duineveld " +#: ../src/client/application/geary-controller.vala:1999 +msgid "Undo move (Ctrl+Z)" +msgstr "Verplaatsen ongedaan maken (Ctrl+Z)" + +#: ../src/client/application/geary-controller.vala:2009 +msgid "Are you sure you want to open these attachments?" +msgstr "Weet u zeker dat u deze bijlagen wilt openen?" -#: ../src/client/application/geary-controller.vala:1623 -#, c-format -msgid "Are you sure you want to open \"%s\"?" -msgstr "Weet u zeker dat u ‘%s’ wilt openen?" - -#: ../src/client/application/geary-controller.vala:1624 +#: ../src/client/application/geary-controller.vala:2010 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -616,107 +722,126 @@ "Bijlagen kunnen uw systeem schade toebrengen wanneer deze worden geopend. " "Open alleen bestanden van vertrouwde bronnen." -#: ../src/client/application/geary-controller.vala:1625 -msgid "Don't _ask me again" +#: ../src/client/application/geary-controller.vala:2011 +msgid "Don’t _ask me again" msgstr "_Niet opnieuw vragen" -#: ../src/client/application/geary-controller.vala:1643 +#: ../src/client/application/geary-controller.vala:2121 #, c-format -msgid "A file named \"%s\" already exists. Do you want to replace it?" +msgid "A file named “%s” already exists. Do you want to replace it?" msgstr "Het bestand ‘%s’ bestaat al. Wilt u het vervangen?" -#: ../src/client/application/geary-controller.vala:1645 +#: ../src/client/application/geary-controller.vala:2123 #, c-format msgid "" -"The file already exists in \"%s\". Replacing it will overwrite its contents." +"The file already exists in “%s”. Replacing it will overwrite its contents." msgstr "Het bestand bestaat al in ‘%s’. Vervangen overschrijft de inhoud." -#: ../src/client/application/geary-controller.vala:1648 +#: ../src/client/application/geary-controller.vala:2126 msgid "_Replace" msgstr "_Vervangen" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:1915 +#: ../src/client/application/geary-controller.vala:2374 msgid "Close open draft messages?" msgstr "Geopende conceptberichten sluiten?" -#: ../src/client/application/geary-controller.vala:2024 -#| msgid "Do you want to discard this message?" +#: ../src/client/application/geary-controller.vala:2496 +#, c-format +msgid "Empty all email from your %s folder?" +msgstr "Alle e-mails van uw %s-map legen?" + +#: ../src/client/application/geary-controller.vala:2497 +msgid "This removes the email from Geary and your email server." +msgstr "Dit verwijdert de e-mail van Geary en uw e-mailserver." + +#: ../src/client/application/geary-controller.vala:2498 +msgid "This cannot be undone." +msgstr "Dit kan niet ongedaan gemaakt worden." + +#: ../src/client/application/geary-controller.vala:2499 +#, c-format +msgid "Empty %s" +msgstr "Lege %s" + +#: ../src/client/application/geary-controller.vala:2516 +#, c-format +msgid "Error emptying %s" +msgstr "Fout bij legen van %s" + +#: ../src/client/application/geary-controller.vala:2546 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "Wilt u dit bericht definitief verwijderen?" msgstr[1] "Wilt u deze berichten definitief verwijderen?" -#: ../src/client/application/geary-controller.vala:2026 -#| msgid "_Delete" +#: ../src/client/application/geary-controller.vala:2548 msgid "Delete" msgstr "Verwijderen" -#: ../src/client/components/conversation-find-bar.vala:214 +#: ../src/client/application/geary-controller.vala:2580 +msgid "Undo archive (Ctrl+Z)" +msgstr "Archivering ongedaan maken (Ctrl+Z)" + +#: ../src/client/application/geary-controller.vala:2595 +msgid "Undo trash (Ctrl+Z)" +msgstr "Verwijderen ongedaan maken (Ctrl+Z)" + +#: ../src/client/application/geary-controller.vala:2649 +msgid "Undo (Ctrl+Z)" +msgstr "Ongedaan maken (Ctrl+Z)" + +#: ../src/client/application/geary-controller.vala:2780 +msgid "Failed to open default text editor." +msgstr "Openen van standaard tekstverwerker mislukt." + +#: ../src/client/components/main-window.vala:389 #, c-format -#| msgid "%i matches" -msgid "%i match" -msgid_plural "%i matches" -msgstr[0] "%i overeenkomst" -msgstr[1] "%i overeenkomsten" - -#: ../src/client/components/conversation-find-bar.vala:216 -#, c-format -#| msgid "%i matches (wrapped)" -msgid "%i match (wrapped)" -msgid_plural "%i matches (wrapped)" -msgstr[0] "%i overeenkomst (voortgezet vanaf begin)" -msgstr[1] "%i overeenkomsten (voortgezet vanaf begin)" - -#: ../src/client/components/conversation-find-bar.vala:218 -msgid "not found" -msgstr "niet gevonden" +msgid "%s (%d)" +msgstr "%s (%d)" -#: ../src/client/components/main-toolbar.vala:11 +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "Zoeken" -#. Search bar. -#: ../src/client/components/main-toolbar.vala:78 +#. Search entry. +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" msgstr "Trefwoorden zoeken in alle berichten van account (Ctrl+S)" -#: ../src/client/components/main-toolbar.vala:212 +#: ../src/client/components/search-bar.vala:100 #, c-format msgid "Indexing %s account" msgstr "Bezig met indexeren van %s-account" -#: ../src/client/components/main-toolbar.vala:223 +#: ../src/client/components/search-bar.vala:111 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" msgstr "%s-account doorzoeken" -#: ../src/client/components/main-window.vala:320 -#, c-format -#| msgid "%s (%s)" -msgid "%s (%d)" -msgstr "%s (%d)" - #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 -msgid "Sending..." +msgid "Sending…" msgstr "Verzenden…" -#: ../src/client/components/stock.vala:18 -#: ../ui/account_cannot_remove.glade.h:3 +#: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 msgid "_OK" -msgstr "_OK" +msgstr "_Oké" -#: ../src/client/components/stock.vala:19 ../ui/remove_confirm.glade.h:5 +#: ../src/client/components/stock.vala:19 ../ui/edit_alternate_emails.glade.h:3 +#: ../ui/password-dialog.glade.h:5 ../ui/remove_confirm.glade.h:5 msgid "_Cancel" msgstr "_Annuleren" -#: ../src/client/components/stock.vala:23 ../ui/account_list.glade.h:4 -#: ../ui/preferences.glade.h:2 +#: ../src/client/components/stock.vala:21 ../ui/gtk/menus.ui.h:6 +msgid "_About" +msgstr "_Info" + +#: ../src/client/components/stock.vala:23 msgid "_Close" msgstr "_Sluiten" @@ -724,336 +849,353 @@ msgid "_Discard" msgstr "_Verwerpen" -#: ../src/client/components/stock.vala:26 +#: ../src/client/components/stock.vala:25 ../ui/gtk/menus.ui.h:5 +msgid "_Help" +msgstr "_Hulp" + +#: ../src/client/components/stock.vala:26 ../ui/conversation-email-menus.ui.h:9 msgid "_Open" msgstr "_Openen" -#: ../src/client/components/stock.vala:28 -msgid "_Print..." +#: ../src/client/components/stock.vala:27 ../ui/gtk/menus.ui.h:3 +msgid "_Preferences" +msgstr "_Voorkeuren" + +#: ../src/client/components/stock.vala:28 ../ui/conversation-email-menus.ui.h:7 +msgid "_Print…" msgstr "_Afdrukken…" +#: ../src/client/components/stock.vala:29 ../ui/gtk/menus.ui.h:7 +msgid "_Quit" +msgstr "_Afsluiten" + #: ../src/client/components/stock.vala:30 ../ui/remove_confirm.glade.h:6 msgid "_Remove" msgstr "_Verwijderen" -#. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1042 -msgid "Select _All" -msgstr "_Alles selecteren" - -#: ../src/client/components/stock.vala:33 msgid "_Keep" msgstr "_Behouden" -#: ../src/client/composer/composer-widget.vala:57 +#: ../src/client/composer/composer-link-popover.vala:150 +msgid "Link URL is not correctly formatted, e.g. http://example.com" +msgstr "" +"Verwijzings-URL is niet correct geformatteerd, bv. https://voorbeeld.be" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid link URL" +msgstr "Ongeldige verwijzings-URL" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid email address" +msgstr "Ongeldig e-mailadres" + +#: ../src/client/composer/composer-widget.vala:154 msgid "Saved" msgstr "Opgeslagen" -#: ../src/client/composer/composer-widget.vala:58 +#: ../src/client/composer/composer-widget.vala:155 msgid "Saving" msgstr "Bezig met opslaan" -#: ../src/client/composer/composer-widget.vala:59 +#: ../src/client/composer/composer-widget.vala:156 msgid "Error saving" msgstr "Opslaan mislukt" -#. / A list of keywords, separated by pipe ("|") characters, that suggest an attachment -#: ../src/client/composer/composer-widget.vala:106 -msgid "attach|enclosed|enclosing|cover letter" -msgstr "toevoegen | toegevoegd | bijlage | bijgevoegd" - -#: ../src/client/composer/composer-widget.vala:823 -msgid "Do you want to discard the unsaved message?" -msgstr "Wilt u het niet-opgeslagen bericht verwerpen?" +#: ../src/client/composer/composer-widget.vala:157 +msgid "Press Backspace to delete quote" +msgstr "Druk op Backspace om citaat te verwijderen" -#: ../src/client/composer/composer-widget.vala:826 -#: ../src/client/composer/composer-widget.vala:830 +#: ../src/client/composer/composer-widget.vala:158 +msgid "New Message" +msgstr "Nieuw bericht" + +#. Translators: This is list of keywords, separated by pipe ("|") +#. characters, that suggest an attachment; since this is full-word +#. checking, include all variants of each word. No spaces are +#. allowed. +#: ../src/client/composer/composer-widget.vala:167 +msgid "" +"attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" +"enclosing|encloses|enclosure|enclosures" +msgstr "" +"attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" +"enclosing|encloses|enclosure|enclosures|bijlage|bijlagen|bijlages|bijvoegen|" +"bijgevoegd|bijgevoegde" + +#: ../src/client/composer/composer-widget.vala:1122 +#: ../src/client/composer/composer-widget.vala:1141 msgid "Do you want to discard this message?" msgstr "Wilt u dit bericht verwerpen?" -#: ../src/client/composer/composer-widget.vala:911 +#: ../src/client/composer/composer-widget.vala:1245 msgid "Send message with an empty subject and body?" msgstr "Bericht zonder onderwerp en inhoud verzenden?" -#: ../src/client/composer/composer-widget.vala:913 +#: ../src/client/composer/composer-widget.vala:1247 msgid "Send message with an empty subject?" msgstr "Bericht zonder onderwerp verzenden?" -#: ../src/client/composer/composer-widget.vala:915 +#: ../src/client/composer/composer-widget.vala:1249 msgid "Send message with an empty body?" msgstr "Bericht zonder inhoud verzenden?" -#: ../src/client/composer/composer-widget.vala:917 +#: ../src/client/composer/composer-widget.vala:1253 msgid "Send message without an attachment?" msgstr "Bericht zonder bijlage verzenden?" -#: ../src/client/composer/composer-widget.vala:1100 -msgid "Cannot add attachment" -msgstr "Toevoegen van bijlage mislukt" +#: ../src/client/composer/composer-widget.vala:1515 +#, c-format +msgid "“%s” already attached for delivery." +msgstr "‘%s’ is al toegevoegd voor verzending." -#: ../src/client/composer/composer-widget.vala:1111 +#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" +#. Translators: The first argument will be a +#. description of the document type, the second will +#. be a human-friendly size string. For example: +#. Document (100.9MB) +#: ../src/client/composer/composer-widget.vala:1523 +#: ../src/client/conversation-viewer/conversation-email.vala:138 #, c-format -msgid "\"%s\" could not be found." +msgid "%s (%s)" +msgstr "%s (%s)" + +#: ../src/client/composer/composer-widget.vala:1560 +#, c-format +msgid "“%s” could not be found." msgstr "‘%s’ kon niet worden gevonden." -#: ../src/client/composer/composer-widget.vala:1118 +#: ../src/client/composer/composer-widget.vala:1566 #, c-format -msgid "\"%s\" is a folder." +msgid "“%s” is a folder." msgstr "‘%s’ is een map." -#: ../src/client/composer/composer-widget.vala:1125 +#: ../src/client/composer/composer-widget.vala:1572 #, c-format -msgid "\"%s\" is an empty file." +msgid "“%s” is an empty file." msgstr "‘%s’ is een leeg bestand." -#: ../src/client/composer/composer-widget.vala:1139 +#: ../src/client/composer/composer-widget.vala:1585 #, c-format -msgid "\"%s\" could not be opened for reading." +msgid "“%s” could not be opened for reading." msgstr "Leesfout bij openen van ‘%s’." -#: ../src/client/composer/composer-widget.vala:1146 -#, c-format -msgid "\"%s\" already attached for delivery." -msgstr "‘%s’ is al toegevoegd voor verzending." - -#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-widget.vala:1155 -#, c-format -msgid "%s (%s)" -msgstr "%s (%s)" +#: ../src/client/composer/composer-widget.vala:1593 +msgid "Cannot add attachment" +msgstr "Toevoegen van bijlage mislukt" -#: ../src/client/composer/composer-widget.vala:1215 -#| msgid "To: %s\n" +#: ../src/client/composer/composer-widget.vala:1645 msgid "To: " msgstr "Aan: " -#: ../src/client/composer/composer-widget.vala:1218 -#| msgid "Cc: %s\n" +#: ../src/client/composer/composer-widget.vala:1648 msgid "Cc: " msgstr "Cc: " -#: ../src/client/composer/composer-widget.vala:1221 -#| msgid "Bcc:" +#: ../src/client/composer/composer-widget.vala:1651 msgid "Bcc: " msgstr "Bcc: " -#: ../src/client/composer/composer-widget.vala:1438 +#: ../src/client/composer/composer-widget.vala:1654 +msgid "Reply-To: " +msgstr "Beantwoord: " + +#: ../src/client/composer/composer-widget.vala:1786 msgid "Select Color" msgstr "Kleur selecteren" +#. Displayed in the From dropdown to indicate an "alternate email address" +#. for an account. The first printf argument will be the alternate email +#. address, and the second will be the account's primary email address. +#: ../src/client/composer/composer-widget.vala:1986 +#, c-format +msgid "%1$s via %2$s" +msgstr "%1$s via %2$s" + #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:1884 -#| msgid "From:" +#: ../src/client/composer/composer-widget.vala:2028 msgid "_From:" msgstr "_Van:" -#. For other types of messages, just show the from account. -#. Composer label (without mnemonic underscore) for the account selector -#. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:1900 -#: ../src/client/conversation-viewer/conversation-viewer.vala:635 -msgid "From:" -msgstr "Van:" - -#. Copyright 2011-2014 Yorba Foundation -#. * -#. * This software is licensed under the GNU Lesser General Public License -#. * (version 2.1 or later). See the COPYING file in this distribution. -#. -#. Window for sending messages. -#: ../src/client/composer/composer-window.vala:10 -msgid "New Message" -msgstr "Nieuw bericht" +#. Translators: This is the name of the file chooser filter +#. when inserting an image in the composer. +#: ../src/client/composer/composer-widget.vala:2252 +msgid "Images" +msgstr "Afbeeldingen" + +#: ../src/client/composer/spell-check-popover.vala:117 +msgid "Remove this language from the preferred list" +msgstr "Deze taal verwijderen uit de voorkeurslijst" + +#: ../src/client/composer/spell-check-popover.vala:121 +msgid "Add this language to the preferred list" +msgstr "Deze taal toevoegen aan de voorkeurslijst" + +#: ../src/client/composer/spell-check-popover.vala:217 +msgid "Search for more languages" +msgstr "Zoeken naar meer talen" #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Ik" -#: ../src/client/conversation-viewer/conversation-viewer.vala:260 -msgid "No conversations selected." -msgstr "Geen conversaties geselecteerd." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:262 -#, c-format -#| msgid "%u conversations selected." -msgid "%u conversation selected." -msgid_plural "%u conversations selected." -msgstr[0] "%u conversatie geselecteerd." -msgstr[1] "%u conversaties geselecteerd." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:291 -msgid "No search results found." -msgstr "Geen zoekresultaten gevonden." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:293 -msgid "No conversations in folder." -msgstr "Geen conversaties in map." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:534 -msgid "This message contains remote images." -msgstr "Dit bericht bevat externe afbeeldingen." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:534 -msgid "Show Images" -msgstr "Afbeeldingen tonen" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:535 -msgid "Always Show From Sender" -msgstr "Laat altijd \"Van verzender\" zien" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:559 -msgid "Edit Draft" -msgstr "Concept bewerken" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:638 -msgid "To:" -msgstr "Aan:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:641 -msgid "Cc:" -msgstr "Cc:" +#. Translators: This is the file type displayed for +#. attachments with unknown file types. +#: ../src/client/conversation-viewer/conversation-email.vala:124 +msgid "Unknown" +msgstr "Onbekend" + +#. Preview headers +#. Translators: This is displayed in place of the from address +#. when the message has no from address. +#: ../src/client/conversation-viewer/conversation-message.vala:331 +msgid "No sender" +msgstr "Geen afzender" + +#. Translators: This separates multiple 'from' +#. addresses in the header preview for a message. +#: ../src/client/conversation-viewer/conversation-message.vala:586 +msgid ", " +msgstr ", " + +#. Translators: This string is used as the HTML IMG ALT +#. attribute value when displaying an inline image in an email +#. that did not specify a file name. E.g. Image" +msgstr "Van " + +#: ../ui/conversation-message.ui.h:2 +msgid "1/1/1970\t" +msgstr "1/1/1970\t" + +#: ../ui/conversation-message.ui.h:3 +msgid "Preview body text." +msgstr "Hoofdtekst voor berichtvoorbeeld." + +#: ../ui/conversation-message.ui.h:4 +msgid "Sent by:" +msgstr "Verzonden door:" + +#: ../ui/conversation-message.ui.h:5 +msgid "Reply to:" +msgstr "Antwoorden aan:" -#: ../ui/composer.glade.h:34 -msgid "Fixed Width" -msgstr "Vaste breedte" - -#: ../ui/composer.glade.h:35 -#| msgid "_Attach" -msgid "Detach" -msgstr "Ontkoppelen" +#: ../ui/conversation-message.ui.h:6 +msgid "Subject" +msgstr "Onderwerp" -#: ../ui/composer.glade.h:36 -msgid "_Send" -msgstr "_Verzenden" +#: ../ui/conversation-message.ui.h:7 +msgid "To:" +msgstr "Aan:" -#: ../ui/composer.glade.h:37 -#| msgid "_Send" -msgid "Send" -msgstr "Verzenden" +#: ../ui/conversation-message.ui.h:8 +msgid "Cc:" +msgstr "Cc:" -#: ../ui/composer.glade.h:38 -msgid "_Attach File" -msgstr "_Bestand toevoegen" - -#: ../ui/composer.glade.h:39 -#| msgid "_Attach File" -msgid "Attach File" -msgstr "_Bestand toevoegen" - -#: ../ui/composer.glade.h:40 -msgid "_Include Original Attachments" -msgstr "_Originele bijlagen toevoegen" +#: ../ui/conversation-message.ui.h:9 +msgid "Bcc:" +msgstr "Bcc:" -#: ../ui/composer.glade.h:41 -#| msgid "_Include Original Attachments" -msgid "Include Original Attachments" -msgstr "Originele bijlagen toevoegen" +#: ../ui/conversation-message.ui.h:10 +msgid "Show Images" +msgstr "Afbeeldingen tonen" -#. Address(es) e-mail is to be sent to -#: ../ui/composer.glade.h:43 -#| msgid "To:" -msgid "_To" -msgstr "_Aan" +#: ../ui/conversation-message.ui.h:11 +msgid "Always Show From Sender" +msgstr "Afbeeldingen van deze afzender altijd tonen" -#: ../ui/composer.glade.h:44 -#| msgid "Cc:" -msgid "_Cc" -msgstr "_Cc" +#: ../ui/conversation-message.ui.h:12 +msgid "Remote images not shown" +msgstr "Externe afbeeldingen worden niet getoond" + +#: ../ui/conversation-message.ui.h:13 +msgid "Only show remote images from senders you trust." +msgstr "Toon enkel externe afbeeldingen van afzenders die u vertrouwt." + +#: ../ui/conversation-message.ui.h:14 +msgid "But actually goes to:" +msgstr "Maar gaat eigenlijk naar:" + +#: ../ui/conversation-message.ui.h:15 +msgid "The link appears to go to:" +msgstr "De verwijzing lijkt te leiden naar:" + +#: ../ui/conversation-message.ui.h:16 +msgid "Deceptive link found" +msgstr "Misleidende verwijzing gevonden" -#: ../ui/composer.glade.h:45 -#| msgid "Subject:" -msgid "_Subject" -msgstr "_Onderwerp" +#: ../ui/conversation-message.ui.h:17 +msgid "The email sender may be leading you to the wrong web site." +msgstr "" +"De afzender van deze e-mail leidt u misschien naar de verkeerde website." -#: ../ui/composer.glade.h:46 -msgid "_Bcc" -msgstr "_Bcc" +#: ../ui/conversation-message.ui.h:18 +msgid "If unsure, contact the sender and ask before continuing." +msgstr "" +"Neem bij twijfel eerst contact op met de afzender vooraleer verder te gaan." -#. Geary account mail will be sent from -#: ../ui/composer.glade.h:48 -#| msgid "From:" -msgid "From" -msgstr "Van" +#: ../ui/conversation-viewer.ui.h:1 +msgid "Find in conversation" +msgstr "Zoeken in gesprek" -#: ../ui/composer.glade.h:49 -msgid "Drop files here" -msgstr "Bestanden hierheen neerzetten" +#: ../ui/conversation-viewer.ui.h:2 +msgid "Find the previous occurrence of the search string." +msgstr "Zoek het vorige voorkomen van de zoekopdracht." -#: ../ui/composer.glade.h:50 -msgid "To add them as attachments" -msgstr "Om ze als bijlage toe te voegen" +#: ../ui/conversation-viewer.ui.h:3 +msgid "Find the next occurrence of the search string." +msgstr "Zoek het volgende voorkomen van de zoekopdracht." + +#: ../ui/edit_alternate_emails.glade.h:1 +msgid "Remove email address" +msgstr "E-mailadres verwijderen" + +#: ../ui/edit_alternate_emails.glade.h:2 +msgid "" +"Some email services require additional addresses be configured on the " +"server. Contact your email provider for more information." +msgstr "" +"Sommige e-maildiensten vereisen dat bijkomstige adressen geconfigureerd " +"worden op de server. Neem contact op met uw e-mailprovider voor meer " +"informatie." + +#: ../ui/edit_alternate_emails.glade.h:4 +msgid "_Update" +msgstr "B_ijwerken" #: ../ui/find_bar.glade.h:1 msgid "Find:" @@ -1683,222 +2196,468 @@ #: ../ui/find_bar.glade.h:3 msgid "_Next" -msgstr "_volgende" +msgstr "_Volgende" #: ../ui/find_bar.glade.h:4 msgid "_Case sensitive" msgstr "_Hoofdlettergevoelig" #: ../ui/find_bar.glade.h:5 -#| msgid "Labels" msgid "label" msgstr "Label" +#: ../ui/gtk/help-overlay.ui.h:1 +msgid "Conversation Shortcuts" +msgstr "Gesprekssneltoetsen" + +#: ../ui/gtk/help-overlay.ui.h:2 +msgctxt "shortcut window" +msgid "General" +msgstr "Algemeen" + +#: ../ui/gtk/help-overlay.ui.h:3 +msgctxt "shortcut window" +msgid "Move focus to the next/previous pane" +msgstr "Verplaats focus naar volgend/vorig paneel" + +#: ../ui/gtk/help-overlay.ui.h:4 +msgctxt "shortcut window" +msgid "Move focus to conversation list" +msgstr "Verplaats focus naar gesprekslijst" + +#: ../ui/gtk/help-overlay.ui.h:5 +msgctxt "shortcut window" +msgid "Detach composer window" +msgstr "Opstelvenster losmaken" + +#: ../ui/gtk/help-overlay.ui.h:6 +msgctxt "shortcut window" +msgid "Close composer window" +msgstr "Opstelvenster sluiten" + +#: ../ui/gtk/help-overlay.ui.h:7 +msgctxt "shortcut window" +msgid "Show keyboard shortcuts" +msgstr "Sneltoetsen tonen" + +#: ../ui/gtk/help-overlay.ui.h:8 +msgctxt "shortcut window" +msgid "Show help" +msgstr "Hulp tonen" + +#: ../ui/gtk/help-overlay.ui.h:9 +msgctxt "shortcut window" +msgid "Quit the application" +msgstr "De toepassing afsluiten" + +#: ../ui/gtk/help-overlay.ui.h:10 +msgctxt "shortcut window" +msgid "Search" +msgstr "Zoeken" + +#: ../ui/gtk/help-overlay.ui.h:11 +msgctxt "shortcut window" +msgid "Jump to search box" +msgstr "Spring naar zoekbalk" + +#: ../ui/gtk/help-overlay.ui.h:12 +msgctxt "shortcut window" +msgid "Find in current conversation" +msgstr "Zoeken in huidig gesprek" + +#: ../ui/gtk/help-overlay.ui.h:13 +msgctxt "shortcut window" +msgid "Find next/previous in current conversation" +msgstr "Zoek volgende/vorige in huidig gesprek" + +#: ../ui/gtk/help-overlay.ui.h:14 +msgctxt "shortcut window" +msgid "Actions" +msgstr "Acties" + +#: ../ui/gtk/help-overlay.ui.h:15 +msgctxt "shortcut window" +msgid "Compose a new message" +msgstr "Een nieuw bericht opstellen" + +#: ../ui/gtk/help-overlay.ui.h:16 +msgctxt "shortcut window" +msgid "Reply to sender " +msgstr "Afzender beantwoorden " + +#: ../ui/gtk/help-overlay.ui.h:17 +msgctxt "shortcut window" +msgid "Reply to all" +msgstr "Allen beantwoorden" + +#: ../ui/gtk/help-overlay.ui.h:18 +msgctxt "shortcut window" +msgid "Forward" +msgstr "Doorsturen" + +#: ../ui/gtk/help-overlay.ui.h:19 +msgctxt "shortcut window" +msgid "Archive" +msgstr "Archiveren" + +#: ../ui/gtk/help-overlay.ui.h:20 +msgctxt "shortcut window" +msgid "Move to trash" +msgstr "Verplaatsen naar prullenbak" + +#: ../ui/gtk/help-overlay.ui.h:21 +msgctxt "shortcut window" +msgid "Toggle spam" +msgstr "Spam in-/uitschakelen" + +#: ../ui/gtk/help-overlay.ui.h:22 +msgctxt "shortcut window" +msgid "Move the conversation" +msgstr "Het gesprek verplaatsen" + +#: ../ui/gtk/help-overlay.ui.h:23 +msgctxt "shortcut window" +msgid "Label the conversation" +msgstr "Label aan gesprek toevoegen" + +#: ../ui/gtk/help-overlay.ui.h:24 +msgctxt "shortcut window" +msgid "Mark read" +msgstr "Markeren als gelezen" + +#: ../ui/gtk/help-overlay.ui.h:25 +msgctxt "shortcut window" +msgid "Mark unread" +msgstr "Markeren als ongelezen" + +#: ../ui/gtk/help-overlay.ui.h:26 +msgctxt "shortcut window" +msgid "View" +msgstr "Weergeven" + +#: ../ui/gtk/help-overlay.ui.h:27 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Inzoomen" + +#: ../ui/gtk/help-overlay.ui.h:28 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Uitzoomen" + +#: ../ui/gtk/help-overlay.ui.h:29 +msgctxt "shortcut window" +msgid "Reset zoom" +msgstr "Zoomniveau terugzetten" + +#: ../ui/gtk/help-overlay.ui.h:30 +msgctxt "shortcut window" +msgid "Additional Shortcuts" +msgstr "Extra sneltoetsen" + +#: ../ui/gtk/help-overlay.ui.h:31 +msgctxt "shortcut window" +msgid "Star" +msgstr "Ster toevoegen" + +#: ../ui/gtk/help-overlay.ui.h:32 +msgctxt "shortcut window" +msgid "Unstar" +msgstr "Ster verwijderen" + +#: ../ui/gtk/help-overlay.ui.h:33 +msgctxt "shortcut window" +msgid "Delete" +msgstr "Verwijderen" + +#: ../ui/gtk/help-overlay.ui.h:34 +msgctxt "shortcut window" +msgid "Jump to next (older) conversation" +msgstr "Spring naar volgend (ouder) gesprek" + +#: ../ui/gtk/help-overlay.ui.h:35 +msgctxt "shortcut window" +msgid "Jump to previous (newer) conversation" +msgstr "Spring naar vorig (recenter) gesprek" + +#: ../ui/gtk/help-overlay.ui.h:36 +msgid "Composer Shortcuts" +msgstr "Opstelvenstersneltoetsen" + +#: ../ui/gtk/help-overlay.ui.h:37 +msgctxt "shortcut window" +msgid "Quote text" +msgstr "Citaat" + +#: ../ui/gtk/help-overlay.ui.h:38 +msgctxt "shortcut window" +msgid "Unquote text" +msgstr "Einde citaat" + +#: ../ui/gtk/help-overlay.ui.h:39 +msgctxt "shortcut window" +msgid "Send" +msgstr "Verzenden" + +#: ../ui/gtk/help-overlay.ui.h:40 +msgctxt "shortcut window" +msgid "Add attachment" +msgstr "Bijlage toevoegen" + +#: ../ui/gtk/help-overlay.ui.h:41 +msgctxt "shortcut window" +msgid "Rich text mode" +msgstr "Opgemaaktetekstmodus" + +#: ../ui/gtk/help-overlay.ui.h:42 +msgctxt "shortcut window" +msgid "Bold text" +msgstr "Vette tekst" + +#: ../ui/gtk/help-overlay.ui.h:43 +msgctxt "shortcut window" +msgid "Italicize text" +msgstr "Cursieve tekst" + +#: ../ui/gtk/help-overlay.ui.h:44 +msgctxt "shortcut window" +msgid "Underline text" +msgstr "Tekst onderstrepen" + +#: ../ui/gtk/help-overlay.ui.h:45 +msgctxt "shortcut window" +msgid "Strike text" +msgstr "Tekst doorstrepen" + +#: ../ui/gtk/help-overlay.ui.h:46 +msgctxt "shortcut window" +msgid "Insert a link" +msgstr "Een verwijzing invoegen" + +#: ../ui/gtk/help-overlay.ui.h:47 +msgctxt "shortcut window" +msgid "Remove formatting" +msgstr "Opmaak verwijderen" + +#: ../ui/gtk/menus.ui.h:2 +msgid "A_ccounts" +msgstr "A_ccounts" + +#: ../ui/gtk/menus.ui.h:4 +msgid "_Keyboard Shortcuts" +msgstr "_Sneltoetsen" + #: ../ui/login.glade.h:1 +msgid "email@example.com" +msgstr "email@voorbeeld.be" + +#: ../ui/login.glade.h:2 ../ui/password-dialog.glade.h:3 msgid "Password" msgstr "Wachtwoord" -#: ../ui/login.glade.h:2 -#| msgid "E_mail address:" +#: ../ui/login.glade.h:3 msgid "E_mail address" -msgstr "_E-mailadres" +msgstr "E-_mailadres" -#: ../ui/login.glade.h:3 -#| msgid "_Password:" +#: ../ui/login.glade.h:4 msgid "_Password" msgstr "_Wachtwoord" -#: ../ui/login.glade.h:4 -#| msgid "S_ervice:" +#: ../ui/login.glade.h:5 msgid "S_ervice" -msgstr "_Service" +msgstr "Di_enst" -#: ../ui/login.glade.h:5 -#| msgid "N_ame:" +#: ../ui/login.glade.h:6 msgid "N_ame" -msgstr "_Naam" +msgstr "N_aam" -#: ../ui/login.glade.h:7 -#| msgid "N_ickname:" +#: ../ui/login.glade.h:8 msgid "N_ickname" msgstr "B_ijnaam" -#: ../ui/login.glade.h:8 +#: ../ui/login.glade.h:9 msgid "Work, Home, etc." msgstr "Werk, Thuis, etc." -#: ../ui/login.glade.h:9 -#| msgid "Sent Mail" +#: ../ui/login.glade.h:10 msgid "_Save sent mail" -msgstr "Verzonden berichten _opslaan" +msgstr "Verzonden berichten op_slaan" -#: ../ui/login.glade.h:10 +#: ../ui/login.glade.h:11 +msgid "Addi_tional email addresses…" +msgstr "Bijkoms_tige e-mailadressen…" + +#: ../ui/login.glade.h:12 msgid "IMAP settings" msgstr "IMAP-instellingen" -#: ../ui/login.glade.h:11 -#| msgid "Se_rver:" +#: ../ui/login.glade.h:13 msgid "Se_rver" -msgstr "_Server" +msgstr "Se_rver" -#: ../ui/login.glade.h:12 -#| msgid "P_ort:" +#: ../ui/login.glade.h:14 +msgid "imap.example.com" +msgstr "imap.voorbeeld.be" + +#: ../ui/login.glade.h:15 msgid "P_ort" -msgstr "_Poort" +msgstr "P_oort" -#: ../ui/login.glade.h:13 -#| msgid "Ser_ver:" +#: ../ui/login.glade.h:16 +msgid "smtp.example.com" +msgstr "smtp.voorbeeld.be" + +#: ../ui/login.glade.h:17 msgid "Ser_ver" -msgstr "Se_rver" +msgstr "Ser_ver" -#: ../ui/login.glade.h:14 -#| msgid "Por_t:" +#: ../ui/login.glade.h:18 msgid "Por_t" msgstr "Poor_t" -#: ../ui/login.glade.h:15 +#: ../ui/login.glade.h:19 msgid "SMTP settings" msgstr "SMTP-instellingen" -#: ../ui/login.glade.h:16 -#| msgid "User_name:" +#: ../ui/login.glade.h:20 msgid "User_name" -msgstr "Ge_bruikersnaam" +msgstr "Gebruikers_naam" -#: ../ui/login.glade.h:17 -#| msgid "Pass_word:" +#: ../ui/login.glade.h:21 msgid "Pass_word" -msgstr "Wa_chtwoord" +msgstr "_Wachtwoord" -#: ../ui/login.glade.h:18 +#: ../ui/login.glade.h:22 msgid "SMTP username" msgstr "SMTP-gebruikersnaam" -#: ../ui/login.glade.h:19 +#: ../ui/login.glade.h:23 msgid "SMTP password" msgstr "SMTP-wachtwoord" -#: ../ui/login.glade.h:20 -#| msgid "_Username:" +#: ../ui/login.glade.h:24 msgid "_Username" -msgstr "_Gebruikersnaam" +msgstr "Gebr_uikersnaam" -#: ../ui/login.glade.h:21 +#: ../ui/login.glade.h:25 msgid "IMAP username" msgstr "IMAP-gebruikersnaam" -#: ../ui/login.glade.h:22 +#: ../ui/login.glade.h:26 msgid "IMAP password" msgstr "IMAP-wachtwoord" -#: ../ui/login.glade.h:23 -#| msgid "Encr_yption:" +#: ../ui/login.glade.h:27 msgid "Encr_yption" msgstr "_Versleuteling" -#: ../ui/login.glade.h:24 -#| msgid "Encrypt_ion:" +#: ../ui/login.glade.h:28 msgid "Encrypt_ion" -msgstr "Ver_sleuteling" +msgstr "Versleutel_ing" -#: ../ui/login.glade.h:26 +#: ../ui/login.glade.h:30 msgid "SSL/TLS" msgstr "SSL/TLS" -#: ../ui/login.glade.h:27 +#: ../ui/login.glade.h:31 msgid "STARTTLS" msgstr "STARTTLS" -#: ../ui/login.glade.h:28 +#: ../ui/login.glade.h:32 msgid "No authentication re_quired" msgstr "Geen authenticatie ve_reist" -#: ../ui/login.glade.h:29 -#| msgid "IMAP Credentials" +#: ../ui/login.glade.h:33 msgid "Use IMAP cre_dentials" msgstr "IMAP-inlog_gegevens gebruiken" -#: ../ui/login.glade.h:30 +#: ../ui/login.glade.h:34 +msgid "Composer" +msgstr "Opstelvenster" + +#: ../ui/login.glade.h:35 +msgid "Save dra_fts on server" +msgstr "Concep_ten opslaan op server" + +#: ../ui/login.glade.h:36 +msgid "Si_gn emails (HTML allowed):" +msgstr "Berichten ondertekenen (HTML toe_gestaan):" + +#: ../ui/login.glade.h:37 msgid "Storage" msgstr "Opslag" -#: ../ui/login.glade.h:31 -#| msgid "_Download mail:" +#: ../ui/login.glade.h:38 msgid "_Download mail" msgstr "Berichten _downloaden" -#: ../ui/login.glade.h:32 ../ui/preferences.glade.h:6 -msgid "Composer" -msgstr "Opstelvenster" - -#: ../ui/login.glade.h:33 -msgid "Save dra_fts on server" -msgstr "Concepten opslaan op server" - -#: ../ui/login.glade.h:34 -msgid "Si_gn emails:" -msgstr "Berichten o_ndertekenen:" +#: ../ui/main-toolbar.ui.h:1 +msgid "Empty Spam or Trash folders" +msgstr "Spam- of prullenbakmappen legen" #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" msgstr "SMTP-inloggegevens" #: ../ui/password-dialog.glade.h:2 -msgid "Username:" -msgstr "Gebruikersnaam:" - -#: ../ui/password-dialog.glade.h:3 -msgid "Password:" -msgstr "Wachtwoord:" +msgid "Username" +msgstr "Gebruikersnaam" #: ../ui/password-dialog.glade.h:4 -#| msgid "_Remember passwords" msgid "_Remember password" msgstr "_Wachtwoord onthouden" -#: ../ui/preferences.glade.h:1 -#| msgid "_Preferences" -msgid "Preferences" -msgstr "Voorkeuren" +#: ../ui/password-dialog.glade.h:6 +msgid "_Authenticate" +msgstr "_Authenticeren" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences-dialog.ui.h:1 msgid "Reading" msgstr "Leesvenster" -#: ../ui/preferences.glade.h:4 +#: ../ui/preferences-dialog.ui.h:2 msgid "_Automatically select next message" -msgstr "_Automatisch volgende bericht selecteren" +msgstr "Volgend bericht _automatisch selecteren" -#: ../ui/preferences.glade.h:5 +#: ../ui/preferences-dialog.ui.h:3 msgid "_Display conversation preview" msgstr "_Berichtvoorbeeld weergeven" -#: ../ui/preferences.glade.h:7 -msgid "Enable _spell checking" -msgstr "Spellings_controle inschakelen" +#: ../ui/preferences-dialog.ui.h:4 +msgid "Use _three pane view" +msgstr "Overzich_t met drie panelen gebruiken" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences-dialog.ui.h:5 msgid "Notifications" msgstr "Meldingen" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences-dialog.ui.h:6 msgid "_Play notification sounds" msgstr "_Geluid afspelen bij melding" -#: ../ui/preferences.glade.h:10 +#: ../ui/preferences-dialog.ui.h:7 msgid "Show _notifications for new mail" msgstr "_Melding weergeven voor nieuwe e-mail" -#: ../ui/preferences.glade.h:11 -msgid "Notify of new mail at start_up" -msgstr "Melden van nieuwe berichten bij _opstarten" +#: ../ui/preferences-dialog.ui.h:8 +msgid "Always _watch for new mail" +msgstr "Altijd controleren op nieu_we mail" + +#: ../ui/preferences-dialog.ui.h:9 +msgid "Geary will run in the background and notify of new mail" +msgstr "" +"Geary zal in de achtergrond draaien en meldingen geven over nieuwe mail" + +#: ../ui/preferences-dialog.ui.h:10 +msgid "Preferences" +msgstr "Voorkeuren" #: ../ui/remove_confirm.glade.h:1 msgid "" "Are you sure you want to remove this " "account? " msgstr "" -"Weet u zeker dat u dit account wilt " +"Weet u zeker dat u deze account wilt " "verwijderen? " #: ../ui/remove_confirm.glade.h:2 @@ -1906,7 +2665,7 @@ "All email associated with this account will be removed from your computer. " "This will not affect email on the server." msgstr "" -"Dit account wordt met alle bijbehorende berichten van uw computer " +"Deze account wordt met alle bijbehorende berichten van uw computer " "verwijderd. Dit heeft geen invloed op berichten op de server." #: ../ui/remove_confirm.glade.h:3 @@ -1918,35 +2677,35 @@ msgstr "E-mailadres:" #: ../ui/upgrade_dialog.glade.h:1 -msgid "Geary upgrade in progress." -msgstr "Geary wordt opgewaardeerd." +msgid "Geary update in progress…" +msgstr "Geary wordt bijgewerkt…" -#~ msgid "Archive conversation (Delete, Backspace, A)" -#~ msgstr "Conversatie archiveren (Delete, Backspace, A)" +#~ msgid "_Inspect" +#~ msgstr "_Inspecteren" -#~ msgid "General" -#~ msgstr "Algemeen" +#~ msgid "%s — Composer Inspector" +#~ msgstr "%s — Opstelvenstercontroleur" -#~ msgid "Port:" -#~ msgstr "Poort:" +#~ msgid " (Invalid?)" +#~ msgstr " (Ongeldig?)" -#~ msgid "Real name:" -#~ msgstr "Volledige naam:" +#~ msgid "%s — Conversation Inspector" +#~ msgstr "%s — Gesprekscontroleur" -#~ msgid "SSL" -#~ msgstr "SSL" +#~ msgid "none" +#~ msgstr "geen" -#~ msgid "SSL/TLS encryption:" -#~ msgstr "SSL/TLS-versleuteling:" +#~ msgid "Copy _Link" +#~ msgstr "_Koppeling kopiëren" -#~ msgid "Server:" -#~ msgstr "Server:" +#~ msgid "Link (Ctrl+L)" +#~ msgstr "Koppeling (Ctrl+L)" -#~ msgid "Service:" -#~ msgstr "Dienst:" +#~ msgid "Enable _spell checking" +#~ msgstr "Spellings_controle inschakelen" -#~ msgid "Unable to login to email server" -#~ msgstr "Inloggen op e-mailserver mislukt" +#~ msgid "Empty" +#~ msgstr "Leeg" -#~ msgid "_Details" -#~ msgstr "_Details" +#~ msgid "_Inspect..." +#~ msgstr "_Inspecteren..." diff -Nru geary-0.11.4/po/pl.po geary-0.12.0/po/pl.po --- geary-0.11.4/po/pl.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/pl.po 2017-10-02 11:25:21.000000000 +0000 @@ -1,5 +1,5 @@ # Polish translation for geary. -# Copyright © 2012-2016 the geary authors. +# Copyright © 2012-2017 the geary authors. # This file is distributed under the same license as the geary package. # scrx , 2012. # Piotrek290 , 2012-2013. @@ -9,15 +9,15 @@ # wmq , 2012. # yorbajim , 2013. # zacol , 2012. -# Piotr Drąg , 2014-2016. -# Aviary.pl , 2014-2016. +# Piotr Drąg , 2014-2017. +# Aviary.pl , 2014-2017. # msgid "" msgstr "" "Project-Id-Version: geary\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-12-15 16:25+0100\n" -"PO-Revision-Date: 2016-12-15 16:27+0100\n" +"POT-Creation-Date: 2017-09-26 16:43+0200\n" +"PO-Revision-Date: 2017-09-26 16:48+0200\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" "Language: pl\n" @@ -27,41 +27,125 @@ "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -#: ../desktop/geary.desktop.in.h:1 ../desktop/geary-autostart.desktop.in.h:1 +#. Translators: The application name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:2 +#: ../desktop/org.gnome.Geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" msgstr "Geary" -#: ../desktop/geary.desktop.in.h:2 ../desktop/geary-autostart.desktop.in.h:2 -#: ../src/client/application/geary-application.vala:18 +#. Translators: The development team's name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:4 +msgid "Geary Development Team" +msgstr "Zespół programistów Geary" + +#. Translators: The application's summary / tagline +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:6 +#: ../desktop/org.gnome.Geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 +msgid "Send and receive email" +msgstr "Wysyłanie i odbieranie poczty" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:7 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"Geary to nowoczesny klient poczty dla środowiska GNOME 3 zbudowany wokół " +"wątków. Umożliwia czytanie, wyszukiwanie i wysyłanie wiadomości za pomocą " +"prostego, nowoczesnego interfejsu." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:8 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"Wątki umożliwiają czytanie pełnych dyskusji bez potrzeby wyszukiwania " +"i klikania poszczególnych wiadomości." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:9 +msgid "Geary’s features include:" +msgstr "Funkcje programu Geary:" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:10 +msgid "Quick email account setup" +msgstr "Szybkie ustawianie konta poczty" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:11 +msgid "Shows related messages together in conversations" +msgstr "Wyświetlanie powiązanych wiadomości w jednym wątku" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:12 +msgid "Fast, full text and keyword search" +msgstr "Szybkie wyszukiwanie w wiadomościach i słowach kluczowych" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:13 +msgid "Full-featured HTML and plain text message composer" +msgstr "Wiele funkcji tworzenia wiadomości HTML i w zwykłym tekście" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:14 +msgid "Desktop notification of new mail" +msgstr "Powiadomienia o nowych wiadomościach na pulpicie" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:15 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" +msgstr "" +"Zgodność z serwisami Gmail, Yahoo! Mail, Outlook.com i innymi serwerami IMAP" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:17 +msgid "Geary displaying a conversation" +msgstr "Widok wątku" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:19 +msgid "Geary showing the rich text composer" +msgstr "Okno tworzenia wiadomości z formatowaniem" + +#: ../desktop/org.gnome.Geary.desktop.in.h:2 +msgid "Email" +msgstr "Poczta" + +#: ../desktop/org.gnome.Geary.desktop.in.h:3 +msgid "Geary Email" +msgstr "Klient poczty Geary" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/org.gnome.Geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "" +"Poczta;Mail;E-mail;Email;Emajl;Emejl;Imail;Imejl;Imajl;Mejl;Majl;Wiadomości;" +"IMAP;Gmail;Dżimejl;Dżimajl;Yahoo;Jahu;Hotmail;Hotmejl;Outlook;Ałtluk;" + +#: ../desktop/org.gnome.Geary.desktop.in.h:7 ../ui/gtk/menus.ui.h:1 +msgid "Compose Message" +msgstr "Utwórz wiadomość" + +#: ../desktop/geary-autostart.desktop.in.h:2 +#: ../src/client/application/geary-application.vala:21 msgid "Mail Client" msgstr "Klient poczty" -#: ../desktop/geary.desktop.in.h:3 ../desktop/geary-autostart.desktop.in.h:3 +#: ../desktop/geary-autostart.desktop.in.h:3 msgid "Geary Mail" msgstr "Klient poczty Geary" -#: ../desktop/geary.desktop.in.h:4 ../desktop/geary-autostart.desktop.in.h:4 -msgid "Send and receive email" -msgstr "Wysyłanie i odbieranie wiadomości e-mail" - -#: ../desktop/geary.desktop.in.h:5 ../desktop/geary-autostart.desktop.in.h:5 +#: ../desktop/geary-autostart.desktop.in.h:5 msgid "Email;E-mail;Mail;" msgstr "Email;E-mail;Mail;Poczta;Skrzynka;Wiadomość;Wiadomości;mejl;majl;" -#: ../desktop/geary.desktop.in.h:6 -msgid "Compose Message" -msgstr "Utwórz wiadomość" - #: ../desktop/geary-attach.contract.in.h:1 msgid "Send by email" msgstr "Wyślij jako e-mail" #: ../desktop/geary-attach.contract.in.h:2 msgid "Send files using Geary" -msgstr "Wysyłanie plików używając programu Geary" +msgstr "Wysyłanie plików za pomocą programu Geary" #: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:31 +#: ../ui/conversation-email-menus.ui.h:10 msgid "_Save" msgstr "_Zapisz" @@ -71,7 +155,7 @@ msgstr "_Dodaj" #. reset/clear widgets -#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 #, c-format msgid "Additional addresses for %s" msgstr "Dodatkowe adresy dla %s" @@ -92,108 +176,130 @@ msgid "First Last" msgstr "Imię Nazwisko" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." msgstr "Witamy w programie Geary." -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." msgstr "Proszę wprowadzić informacje o koncie, aby rozpocząć." -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "ostatnie 2 tygodnie" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:254 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "ostatni miesiąc" -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "ostatnie 3 miesiące" -#: ../src/client/accounts/add-edit-page.vala:256 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "ostatnie 6 miesięcy" -#: ../src/client/accounts/add-edit-page.vala:257 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "ostatni rok" -#: ../src/client/accounts/add-edit-page.vala:258 +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" msgstr "ostatnie 2 lata" -#: ../src/client/accounts/add-edit-page.vala:259 +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" msgstr "ostatnie 4 lata" #. Separator -#: ../src/client/accounts/add-edit-page.vala:261 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "Wszystko" -#: ../src/client/accounts/add-edit-page.vala:280 +#: ../src/client/accounts/add-edit-page.vala:283 msgid "Edit" msgstr "Modyfikuj" -#: ../src/client/accounts/add-edit-page.vala:282 +#: ../src/client/accounts/add-edit-page.vala:285 msgid "Preview" msgstr "Podgląd" -#: ../src/client/accounts/add-edit-page.vala:723 +#: ../src/client/accounts/add-edit-page.vala:751 msgid "Remem_ber passwords" msgstr "_Zapamiętywanie haseł" -#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:7 +#: ../src/client/accounts/add-edit-page.vala:758 ../ui/login.glade.h:7 msgid "Remem_ber password" msgstr "_Zapamiętanie hasła" -#: ../src/client/accounts/add-edit-page.vala:764 +#: ../src/client/accounts/add-edit-page.vala:792 msgid "Unable to validate:\n" msgstr "Nie można sprawdzić:\n" -#: ../src/client/accounts/add-edit-page.vala:766 -msgid " • Invalid account nickname.\n" -msgstr " • Nieprawidłowa etykieta konta.\n" - -#: ../src/client/accounts/add-edit-page.vala:769 -msgid " • Email address already added to Geary.\n" -msgstr " • Już dodano podany adres e-mail.\n" - -#: ../src/client/accounts/add-edit-page.vala:773 -msgid " • IMAP connection error.\n" -msgstr " • Błąd połączenia IMAP.\n" - -#: ../src/client/accounts/add-edit-page.vala:776 -msgid " • IMAP username or password incorrect.\n" -msgstr " • Niepoprawna nazwa użytkownika lub hasło IMAP.\n" - -#: ../src/client/accounts/add-edit-page.vala:779 -msgid " • SMTP connection error.\n" -msgstr " • Błąd połączenia SMTP.\n" - -#: ../src/client/accounts/add-edit-page.vala:782 -msgid " • SMTP username or password incorrect.\n" -msgstr " • Niepoprawna nazwa użytkownika lub hasło SMTP.\n" - -#: ../src/client/accounts/add-edit-page.vala:786 -msgid " • Connection error.\n" -msgstr " • Błąd połączenia.\n" - -#: ../src/client/accounts/add-edit-page.vala:790 -msgid " • Username or password incorrect.\n" -msgstr " • Niepoprawna nazwa użytkownika lub hasło.\n" +#: ../src/client/accounts/add-edit-page.vala:794 +msgid " • Invalid account nickname.\n" +msgstr " • Nieprawidłowa etykieta konta.\n" + +#: ../src/client/accounts/add-edit-page.vala:797 +msgid " • Email address already added to Geary.\n" +msgstr " • Już dodano podany adres e-mail.\n" + +#: ../src/client/accounts/add-edit-page.vala:801 +msgid " • IMAP connection error.\n" +msgstr " • Błąd połączenia IMAP.\n" + +#: ../src/client/accounts/add-edit-page.vala:804 +msgid " • IMAP username or password incorrect.\n" +msgstr " • Niepoprawna nazwa użytkownika lub hasło IMAP.\n" + +#: ../src/client/accounts/add-edit-page.vala:807 +msgid " • SMTP connection error.\n" +msgstr " • Błąd połączenia SMTP.\n" + +#: ../src/client/accounts/add-edit-page.vala:810 +msgid " • SMTP username or password incorrect.\n" +msgstr " • Niepoprawna nazwa użytkownika lub hasło SMTP.\n" + +#: ../src/client/accounts/add-edit-page.vala:814 +msgid " • Connection error.\n" +msgstr " • Błąd połączenia.\n" + +#: ../src/client/accounts/add-edit-page.vala:818 +msgid " • Username or password incorrect.\n" +msgstr " • Niepoprawna nazwa użytkownika lub hasło.\n" -#: ../src/client/application/geary-application.vala:19 +#: ../src/client/application/geary-application.vala:22 msgid "Copyright 2016 Software Freedom Conservancy Inc." msgstr "Copyright 2016 Software Freedom Conservancy Inc." -#: ../src/client/application/geary-application.vala:21 +#: ../src/client/application/geary-application.vala:24 msgid "Visit the Geary web site" msgstr "Witryna programu Geary" +#: ../src/client/application/geary-application.vala:464 +#, c-format +msgid "About %s" +msgstr "O programie %s" + +#. Translators: add your name and email address to receive +#. credit in the About dialog For example: Yamada Taro +#. +#: ../src/client/application/geary-application.vala:468 +msgid "translator-credits" +msgstr "" +"scrx , 2012\n" +"Piotrek290 , 2012-2013\n" +"Piotrek Dąbrowski , 2013\n" +"Piotr Sokół , 2012-2013\n" +"PriArd , 2012\n" +"wmq , 2012\n" +"yorbajim , 2013\n" +"zacol , 2012\n" +"Piotr Drąg , 2014-2017\n" +"Aviary.pl , 2014-2017" + #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" msgstr "Uruchamia program Geary z ukrytym głównym oknem" @@ -249,236 +355,210 @@ msgstr "Unieważnia wszystkie certyfikaty serwerów zawierające ostrzeżenia TLS" #: ../src/client/application/geary-args.vala:27 +msgid "Perform a graceful quit" +msgstr "Poprawnie kończy działanie" + +#: ../src/client/application/geary-args.vala:28 msgid "Display program version" msgstr "Wyświetla wersję programu" #. This gives a command-line hint on how to open new composer windows with mailto: -#: ../src/client/application/geary-args.vala:51 +#: ../src/client/application/geary-args.vala:53 #, c-format msgid "Use %s to open a new composer window" msgstr "Należy użyć %s, aby otworzyć nowe okno tworzenia wiadomości" -#: ../src/client/application/geary-args.vala:52 +#: ../src/client/application/geary-args.vala:54 msgid "Please report comments, suggestions and bugs to:" msgstr "" -"Komentarze, sugestie i błędy prosimy zgłaszać do (w języku angielskim):" +"Komentarze, sugestie i błędy prosimy zgłaszać do (w języku angielskim):" #. i18n: Command line arguments are invalid -#: ../src/client/application/geary-args.vala:59 +#: ../src/client/application/geary-args.vala:61 #, c-format msgid "Failed to parse command line options: %s\n" msgstr "Przetworzenie opcji wiersza poleceń się nie powiodło: %s\n" -#: ../src/client/application/geary-args.vala:70 +#: ../src/client/application/geary-args.vala:72 #, c-format -msgid "Unrecognized command line option \"%s\"\n" +msgid "Unrecognized command line option “%s”\n" msgstr "Nieznana opcja wiersza poleceń „%s”\n" -#: ../src/client/application/geary-controller.vala:61 +#: ../src/client/application/geary-controller.vala:57 msgid "Delete conversation" msgstr "Usuń wątek" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:58 msgid "Delete conversation (Shift+Delete)" msgstr "Usuń wątek (Shift+Delete)" -#: ../src/client/application/geary-controller.vala:63 +#: ../src/client/application/geary-controller.vala:59 msgid "Delete conversations (Shift+Delete)" msgstr "Usuń wątki (Shift+Delete)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:67 +#: ../src/client/application/geary-controller.vala:63 msgid "Move conversation to Trash (Delete, Backspace)" msgstr "Przenieś wątek do kosza (Delete, Backspace)" -#: ../src/client/application/geary-controller.vala:68 +#: ../src/client/application/geary-controller.vala:64 msgid "Move conversations to Trash (Delete, Backspace)" msgstr "Przenieś wątki do kosza (Delete, Backspace)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:72 +#: ../src/client/application/geary-controller.vala:68 msgid "_Archive" msgstr "_Archiwizuj" -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:69 msgid "Archive conversation (A)" msgstr "Archiwizuj wątek (A)" -#: ../src/client/application/geary-controller.vala:74 +#: ../src/client/application/geary-controller.vala:70 msgid "Archive conversations (A)" msgstr "Archiwizuj wątki (A)" -#: ../src/client/application/geary-controller.vala:77 +#: ../src/client/application/geary-controller.vala:73 msgid "Mark as S_pam" msgstr "Oznacz jako _niechciana" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:74 msgid "Mark as not S_pam" -msgstr "Odznacz jako _niechciana" +msgstr "Oznacz jako p_ożądana" -#: ../src/client/application/geary-controller.vala:80 -#: ../src/client/application/geary-controller.vala:396 +#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:448 msgid "Mark conversation" msgstr "Oznacz wątek" -#: ../src/client/application/geary-controller.vala:81 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark conversations" msgstr "Oznacz wątek" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:78 msgid "Add label to conversation" msgstr "Nadaj etykietę wątkowi" -#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:79 msgid "Add label to conversations" msgstr "Nadaj etykietę wątkom" -#: ../src/client/application/geary-controller.vala:84 -#: ../src/client/application/geary-controller.vala:435 +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:487 msgid "Move conversation" msgstr "Przenieś wątek" -#: ../src/client/application/geary-controller.vala:85 +#: ../src/client/application/geary-controller.vala:81 msgid "Move conversations" msgstr "Przenieś wątki" -#: ../src/client/application/geary-controller.vala:376 -#: ../ui/app_menu.interface.h:1 -msgid "A_ccounts" -msgstr "_Konta" - -#: ../src/client/application/geary-controller.vala:381 -#: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 -msgid "_Preferences" -msgstr "P_referencje" - -#: ../src/client/application/geary-controller.vala:385 -#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:3 -msgid "_Help" -msgstr "Pomo_c" - -#: ../src/client/application/geary-controller.vala:389 -#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:4 -msgid "_About" -msgstr "_O programie" - -#: ../src/client/application/geary-controller.vala:393 -#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:5 -msgid "_Quit" -msgstr "Za_kończ" - -#: ../src/client/application/geary-controller.vala:398 -msgid "_Mark as..." +#: ../src/client/application/geary-controller.vala:450 +msgid "_Mark as…" msgstr "_Oznacz jako…" -#: ../src/client/application/geary-controller.vala:404 +#: ../src/client/application/geary-controller.vala:456 msgid "Mark as _Read" msgstr "Oznacz jako p_rzeczytane" -#: ../src/client/application/geary-controller.vala:410 +#: ../src/client/application/geary-controller.vala:462 msgid "Mark as _Unread" msgstr "Oznacz jako _nieprzeczytane" -#: ../src/client/application/geary-controller.vala:416 +#: ../src/client/application/geary-controller.vala:468 msgid "_Star" msgstr "_Wyróżnij" -#: ../src/client/application/geary-controller.vala:421 +#: ../src/client/application/geary-controller.vala:473 msgid "U_nstar" msgstr "Usuń wy_różnienie" -#: ../src/client/application/geary-controller.vala:431 +#: ../src/client/application/geary-controller.vala:483 msgid "Add label" msgstr "Dodaj etykietę" -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:484 msgid "_Label" msgstr "_Etykieta" -#: ../src/client/application/geary-controller.vala:436 +#: ../src/client/application/geary-controller.vala:488 msgid "_Move" msgstr "_Przenieś" -#: ../src/client/application/geary-controller.vala:440 +#: ../src/client/application/geary-controller.vala:492 msgid "Compose new message (Ctrl+N, N)" msgstr "Utwórz nową wiadomość (Ctrl+N, N)" -#. Reply to a message. -#: ../src/client/application/geary-controller.vala:444 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1873 +#: ../src/client/application/geary-controller.vala:496 +#: ../ui/conversation-email-menus.ui.h:1 msgid "_Reply" msgstr "_Odpowiedz" -#: ../src/client/application/geary-controller.vala:445 +#: ../src/client/application/geary-controller.vala:497 msgid "Reply (Ctrl+R, R)" msgstr "Odpowiedz (Ctrl+R, R)" -#: ../src/client/application/geary-controller.vala:449 +#: ../src/client/application/geary-controller.vala:501 msgid "R_eply All" msgstr "O_dpowiedz wszystkim" -#: ../src/client/application/geary-controller.vala:450 +#: ../src/client/application/geary-controller.vala:502 msgid "Reply all (Ctrl+Shift+R, Shift+R)" msgstr "Odpowiedz wszystkim (Ctrl+Shift+R, Shift+R)" -#. Forward a message. -#: ../src/client/application/geary-controller.vala:455 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1883 +#: ../src/client/application/geary-controller.vala:507 +#: ../ui/conversation-email-menus.ui.h:3 msgid "_Forward" msgstr "_Przekaż" -#: ../src/client/application/geary-controller.vala:456 +#: ../src/client/application/geary-controller.vala:508 msgid "Forward (Ctrl+L, F)" msgstr "Przekaż (Ctrl+L, F)" -#: ../src/client/application/geary-controller.vala:495 -msgid "Empty" -msgstr "Opróżnij" - -#: ../src/client/application/geary-controller.vala:496 -msgid "Empty Spam or Trash folders" -msgstr "Opróżnij katalog niechcianych wiadomości lub kosz" - -#: ../src/client/application/geary-controller.vala:500 +#: ../src/client/application/geary-controller.vala:538 msgid "Empty _Spam…" msgstr "Opróżnij katalog _niechcianych wiadomości…" -#: ../src/client/application/geary-controller.vala:504 +#: ../src/client/application/geary-controller.vala:542 msgid "Empty _Trash…" msgstr "Opróżnij _kosz…" #. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:537 +#: ../src/client/application/geary-controller.vala:574 msgid "Toggle search bar" msgstr "Przełącz pasek wyszukiwania" -#: ../src/client/application/geary-controller.vala:744 +#. No callback is connected, since we bind the toggle button to the find bar visibility +#: ../src/client/application/geary-controller.vala:579 +msgid "Toggle find bar" +msgstr "Przełącz pasek wyszukiwania" + +#: ../src/client/application/geary-controller.vala:757 msgid "Unable to store server trust exception" msgstr "Nie można przechować wyjątku zaufania serwera" -#: ../src/client/application/geary-controller.vala:981 +#: ../src/client/application/geary-controller.vala:992 msgid "Your settings are insecure" msgstr "Ustawienia konta nie są bezpieczne" -#: ../src/client/application/geary-controller.vala:982 +#: ../src/client/application/geary-controller.vala:993 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " "you sure you want to do this?" msgstr "" -"Ustawienia IMAP i/lub SMTP nie uwzględniają szyfrowania SSL lub TLS. Oznacza " +"Ustawienia IMAP lub SMTP nie uwzględniają szyfrowania SSL lub TLS. Oznacza " "to, że nazwa użytkownika i hasło mogą być widoczne dla innych użytkowników " "sieci. Wprowadzić ustawienia?" -#: ../src/client/application/geary-controller.vala:983 +#: ../src/client/application/geary-controller.vala:994 msgid "Co_ntinue" msgstr "_Kontynuuj" -#: ../src/client/application/geary-controller.vala:1030 +#: ../src/client/application/geary-controller.vala:1041 msgid "Error connecting to the server" msgstr "Błąd podczas łączenia z serwerem" -#: ../src/client/application/geary-controller.vala:1031 +#: ../src/client/application/geary-controller.vala:1042 msgid "" "Geary encountered an error while connecting to the server. Please try again " "in a few moments." @@ -487,12 +567,12 @@ "chwilę." #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:1068 +#: ../src/client/application/geary-controller.vala:1079 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "Błąd podczas wysyłania wiadomości" -#: ../src/client/application/geary-controller.vala:1069 +#: ../src/client/application/geary-controller.vala:1080 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." @@ -502,12 +582,12 @@ #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1073 +#: ../src/client/application/geary-controller.vala:1084 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "Błąd podczas zapisywania wysłanej wiadomości" -#: ../src/client/application/geary-controller.vala:1074 +#: ../src/client/application/geary-controller.vala:1085 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." @@ -515,19 +595,19 @@ "Wystąpił błąd podczas zapisywania wysłanej wiadomości e-mail. Wiadomość " "pozostanie w katalogu Wychodzące do jej usunięcia." -#: ../src/client/application/geary-controller.vala:1143 +#: ../src/client/application/geary-controller.vala:1154 msgid "Labels" msgstr "Etykiety" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1155 +#: ../src/client/application/geary-controller.vala:1166 #, c-format msgid "Unable to open the database for %s" msgstr "Nie można otworzyć bazy danych dla %s" -#: ../src/client/application/geary-controller.vala:1156 +#: ../src/client/application/geary-controller.vala:1167 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -552,20 +632,20 @@ "Przebudowanie bazy danych usunie wszystkie lokalne wiadomości e-mail i ich " "załączniki. Poczta na serwerze nie zostanie usunięta." -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "_Rebuild" msgstr "P_rzebuduj" -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "E_xit" msgstr "Za_kończ" -#: ../src/client/application/geary-controller.vala:1167 +#: ../src/client/application/geary-controller.vala:1178 #, c-format -msgid "Unable to rebuild database for \"%s\"" +msgid "Unable to rebuild database for “%s”" msgstr "Nie można przebudować bazy danych dla „%s”" -#: ../src/client/application/geary-controller.vala:1168 +#: ../src/client/application/geary-controller.vala:1179 #, c-format msgid "" "Error during rebuild:\n" @@ -578,14 +658,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1190 -#: ../src/client/application/geary-controller.vala:1200 +#: ../src/client/application/geary-controller.vala:1201 #: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:1222 #, c-format msgid "Unable to open local mailbox for %s" msgstr "Nie można otworzyć lokalnej skrzynki pocztowej dla %s" -#: ../src/client/application/geary-controller.vala:1191 +#: ../src/client/application/geary-controller.vala:1202 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -604,10 +684,10 @@ "\n" "%s" -#: ../src/client/application/geary-controller.vala:1201 +#: ../src/client/application/geary-controller.vala:1212 msgid "" "The version number of the local mail database is formatted for a newer " -"version of Geary. Unfortunately, the database cannot be \"rolled back\" to " +"version of Geary. Unfortunately, the database cannot be “rolled back” to " "work with this version of Geary.\n" "\n" "Please install the latest version of Geary and try again." @@ -616,7 +696,7 @@ "programu Geary. Baza danych nie może zostać przywrócona do działania z tą " "wersją programu Geary." -#: ../src/client/application/geary-controller.vala:1212 +#: ../src/client/application/geary-controller.vala:1223 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" @@ -628,37 +708,15 @@ "\n" "Proszę sprawdzić połączenie internetowe i uruchomić ponownie program Geary." -#: ../src/client/application/geary-controller.vala:1723 -#, c-format -msgid "About %s" -msgstr "O programie %s" - -#. / Translators: add your name and email address to receive credit in the About dialog -#. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1726 -msgid "translator-credits" -msgstr "" -"scrx , 2012\n" -"Piotrek290 , 2012-2013\n" -"Piotrek Dąbrowski , 2013\n" -"Piotr Sokół , 2012-2013\n" -"PriArd , 2012\n" -"wmq , 2012\n" -"yorbajim , 2013\n" -"zacol , 2012\n" -"Piotr Drąg , 2014-2016\n" -"Aviary.pl , 2014-2016" - -#: ../src/client/application/geary-controller.vala:1984 +#: ../src/client/application/geary-controller.vala:1999 msgid "Undo move (Ctrl+Z)" msgstr "Cofnij przeniesienie (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:1994 -#, c-format -msgid "Are you sure you want to open \"%s\"?" -msgstr "Na pewno otworzyć „%s”?" +#: ../src/client/application/geary-controller.vala:2009 +msgid "Are you sure you want to open these attachments?" +msgstr "Na pewno otworzyć te załączniki?" -#: ../src/client/application/geary-controller.vala:1995 +#: ../src/client/application/geary-controller.vala:2010 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -666,120 +724,104 @@ "Załączniki po otwarciu mogą uszkodzić system. Należy otwierać załączniki " "pochodzące tylko z zaufanych źródeł." -#: ../src/client/application/geary-controller.vala:1996 -msgid "Don't _ask me again" +#: ../src/client/application/geary-controller.vala:2011 +msgid "Don’t _ask me again" msgstr "_Bez pytania ponownie" -#: ../src/client/application/geary-controller.vala:2014 +#: ../src/client/application/geary-controller.vala:2121 #, c-format -msgid "A file named \"%s\" already exists. Do you want to replace it?" +msgid "A file named “%s” already exists. Do you want to replace it?" msgstr "Plik o nazwie „%s” już istnieje. Zastąpić go?" -#: ../src/client/application/geary-controller.vala:2016 +#: ../src/client/application/geary-controller.vala:2123 #, c-format msgid "" -"The file already exists in \"%s\". Replacing it will overwrite its contents." +"The file already exists in “%s”. Replacing it will overwrite its contents." msgstr "Plik w „%s” już istnieje. Zastąpienie go nadpisze jego zawartość." -#: ../src/client/application/geary-controller.vala:2019 +#: ../src/client/application/geary-controller.vala:2126 msgid "_Replace" msgstr "_Zastąp" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2317 +#: ../src/client/application/geary-controller.vala:2374 msgid "Close open draft messages?" msgstr "Zamknąć otwarte szkice?" -#: ../src/client/application/geary-controller.vala:2447 +#: ../src/client/application/geary-controller.vala:2496 #, c-format msgid "Empty all email from your %s folder?" msgstr "Usunąć wszystkie wiadomości z katalogu %s?" -#: ../src/client/application/geary-controller.vala:2448 +#: ../src/client/application/geary-controller.vala:2497 msgid "This removes the email from Geary and your email server." msgstr "Spowoduje to usunięcie wiadomości z programu Geary i serwera poczty." -#: ../src/client/application/geary-controller.vala:2449 +#: ../src/client/application/geary-controller.vala:2498 msgid "This cannot be undone." msgstr "Tego nie można cofnąć." -#: ../src/client/application/geary-controller.vala:2450 +#: ../src/client/application/geary-controller.vala:2499 #, c-format msgid "Empty %s" msgstr "Opróżnij %s" -#: ../src/client/application/geary-controller.vala:2467 +#: ../src/client/application/geary-controller.vala:2516 #, c-format msgid "Error emptying %s" msgstr "Błąd podczas opróżniania %s" -#: ../src/client/application/geary-controller.vala:2497 +#: ../src/client/application/geary-controller.vala:2546 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" -msgstr[0] "Trwale usunąć tą wiadomość?" +msgstr[0] "Trwale usunąć tę wiadomość?" msgstr[1] "Trwale usunąć te wiadomości?" msgstr[2] "Trwale usunąć te wiadomości?" -#: ../src/client/application/geary-controller.vala:2499 +#: ../src/client/application/geary-controller.vala:2548 msgid "Delete" msgstr "Usuń" -#: ../src/client/application/geary-controller.vala:2530 +#: ../src/client/application/geary-controller.vala:2580 msgid "Undo archive (Ctrl+Z)" msgstr "Cofnij archiwizację (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2545 +#: ../src/client/application/geary-controller.vala:2595 msgid "Undo trash (Ctrl+Z)" msgstr "Cofnij przeniesienie do kosza (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2598 +#: ../src/client/application/geary-controller.vala:2649 msgid "Undo (Ctrl+Z)" msgstr "Cofnij (Ctrl+Z)" -#: ../src/client/components/conversation-find-bar.vala:214 -#, c-format -msgid "%i match" -msgid_plural "%i matches" -msgstr[0] "%i dopasowanie" -msgstr[1] "%i dopasowania" -msgstr[2] "%i dopasowań" - -#: ../src/client/components/conversation-find-bar.vala:216 -#, c-format -msgid "%i match (wrapped)" -msgid_plural "%i matches (wrapped)" -msgstr[0] "%i dopasowanie (od początku)" -msgstr[1] "%i dopasowania (od początku)" -msgstr[2] "%i dopasowań (od początku)" - -#: ../src/client/components/conversation-find-bar.vala:218 -msgid "not found" -msgstr "nie odnaleziono" +#: ../src/client/application/geary-controller.vala:2780 +msgid "Failed to open default text editor." +msgstr "Otwarcie domyślnego edytora tekstu się nie powiodło." -#: ../src/client/components/main-window.vala:436 +#: ../src/client/components/main-window.vala:389 #, c-format msgid "%s (%d)" msgstr "%s (%d)" -#: ../src/client/components/search-bar.vala:10 +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "Wyszukaj" #. Search entry. -#: ../src/client/components/search-bar.vala:25 +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" msgstr "" "Przeszukaj wszystkie wiadomości z konta pod kątem słów kluczowych (Ctrl+S)" -#: ../src/client/components/search-bar.vala:118 +#: ../src/client/components/search-bar.vala:100 #, c-format msgid "Indexing %s account" msgstr "Indeksowanie konta %s" -#: ../src/client/components/search-bar.vala:129 +#: ../src/client/components/search-bar.vala:111 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" @@ -787,7 +829,7 @@ #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 -msgid "Sending..." +msgid "Sending…" msgstr "Wysyłanie…" #: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 @@ -799,6 +841,10 @@ msgid "_Cancel" msgstr "_Anuluj" +#: ../src/client/components/stock.vala:21 ../ui/gtk/menus.ui.h:6 +msgid "_About" +msgstr "_O programie" + #: ../src/client/components/stock.vala:23 msgid "_Close" msgstr "Za_mknij" @@ -807,51 +853,72 @@ msgid "_Discard" msgstr "Od_rzuć" -#: ../src/client/components/stock.vala:26 +#: ../src/client/components/stock.vala:25 ../ui/gtk/menus.ui.h:5 +msgid "_Help" +msgstr "Pomo_c" + +#: ../src/client/components/stock.vala:26 ../ui/conversation-email-menus.ui.h:9 msgid "_Open" msgstr "_Otwórz" -#: ../src/client/components/stock.vala:28 -msgid "_Print..." +#: ../src/client/components/stock.vala:27 ../ui/gtk/menus.ui.h:3 +msgid "_Preferences" +msgstr "P_referencje" + +#: ../src/client/components/stock.vala:28 ../ui/conversation-email-menus.ui.h:7 +msgid "_Print…" msgstr "Wy_drukuj…" +#: ../src/client/components/stock.vala:29 ../ui/gtk/menus.ui.h:7 +msgid "_Quit" +msgstr "Za_kończ" + #: ../src/client/components/stock.vala:30 ../ui/remove_confirm.glade.h:6 msgid "_Remove" msgstr "_Usuń" -#. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1335 -msgid "Select _All" -msgstr "Zaznacz _wszystko" - -#: ../src/client/components/stock.vala:33 msgid "_Keep" msgstr "_Zachowaj" -#: ../src/client/composer/composer-widget.vala:73 +#: ../src/client/composer/composer-link-popover.vala:150 +msgid "Link URL is not correctly formatted, e.g. http://example.com" +msgstr "" +"Adres URL odnośnika nie jest poprawnie sformatowany, np. http://example.com" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid link URL" +msgstr "Nieprawidłowy adres URL odnośnika" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid email address" +msgstr "Nieprawidłowy adres e-mail" + +#: ../src/client/composer/composer-widget.vala:154 msgid "Saved" msgstr "Zapisano" -#: ../src/client/composer/composer-widget.vala:74 +#: ../src/client/composer/composer-widget.vala:155 msgid "Saving" msgstr "Zapisywanie" -#: ../src/client/composer/composer-widget.vala:75 +#: ../src/client/composer/composer-widget.vala:156 msgid "Error saving" msgstr "Błąd podczas zapisywania" -#: ../src/client/composer/composer-widget.vala:76 +#: ../src/client/composer/composer-widget.vala:157 msgid "Press Backspace to delete quote" msgstr "Naciśnięcie klawisza Backspace usunie cytat" -#: ../src/client/composer/composer-widget.vala:77 +#: ../src/client/composer/composer-widget.vala:158 msgid "New Message" msgstr "Nowa wiadomość" -#. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since -#. this is full-word checking, include all variants of each word. No spaces are allowed. -#: ../src/client/composer/composer-widget.vala:138 +#. Translators: This is list of keywords, separated by pipe ("|") +#. characters, that suggest an attachment; since this is full-word +#. checking, include all variants of each word. No spaces are +#. allowed. +#: ../src/client/composer/composer-widget.vala:167 msgid "" "attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" "enclosing|encloses|enclosure|enclosures" @@ -860,277 +927,187 @@ "załączyłam|załączono|dołączyłem|dołączyłam|dołączono|zalacznik|zalaczam|" "zalaczylem|zalaczylam|zalaczono|dolaczylem|dolaczylam|dolaczono" -#: ../src/client/composer/composer-widget.vala:1121 -#: ../src/client/composer/composer-widget.vala:1125 +#: ../src/client/composer/composer-widget.vala:1122 +#: ../src/client/composer/composer-widget.vala:1141 msgid "Do you want to discard this message?" msgstr "Odrzucić tę wiadomość?" -#: ../src/client/composer/composer-widget.vala:1281 +#: ../src/client/composer/composer-widget.vala:1245 msgid "Send message with an empty subject and body?" msgstr "Wysłać wiadomość niezawierającą tematu i treści?" -#: ../src/client/composer/composer-widget.vala:1283 +#: ../src/client/composer/composer-widget.vala:1247 msgid "Send message with an empty subject?" msgstr "Wysłać wiadomość niezawierającą tematu?" -#: ../src/client/composer/composer-widget.vala:1285 +#: ../src/client/composer/composer-widget.vala:1249 msgid "Send message with an empty body?" msgstr "Wysłać wiadomość niezawierającą treści?" -#: ../src/client/composer/composer-widget.vala:1287 +#: ../src/client/composer/composer-widget.vala:1253 msgid "Send message without an attachment?" msgstr "Wysłać wiadomość niezawierającą załączników?" -#: ../src/client/composer/composer-widget.vala:1553 -msgid "Cannot add attachment" -msgstr "Nie można dodać załącznika" +#: ../src/client/composer/composer-widget.vala:1515 +#, c-format +msgid "“%s” already attached for delivery." +msgstr "Do wiadomości już załączono „%s”." -#: ../src/client/composer/composer-widget.vala:1564 +#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" +#. Translators: The first argument will be a +#. description of the document type, the second will +#. be a human-friendly size string. For example: +#. Document (100.9MB) +#: ../src/client/composer/composer-widget.vala:1523 +#: ../src/client/conversation-viewer/conversation-email.vala:138 +#, c-format +msgid "%s (%s)" +msgstr "%s (%s)" + +#: ../src/client/composer/composer-widget.vala:1560 #, c-format -msgid "\"%s\" could not be found." +msgid "“%s” could not be found." msgstr "Nie można odnaleźć „%s”." -#: ../src/client/composer/composer-widget.vala:1571 +#: ../src/client/composer/composer-widget.vala:1566 #, c-format -msgid "\"%s\" is a folder." +msgid "“%s” is a folder." msgstr "„%s” jest katalogiem." -#: ../src/client/composer/composer-widget.vala:1578 +#: ../src/client/composer/composer-widget.vala:1572 #, c-format -msgid "\"%s\" is an empty file." +msgid "“%s” is an empty file." msgstr "„%s” jest pustym plikiem." -#: ../src/client/composer/composer-widget.vala:1592 +#: ../src/client/composer/composer-widget.vala:1585 #, c-format -msgid "\"%s\" could not be opened for reading." +msgid "“%s” could not be opened for reading." msgstr "Nie można otworzyć „%s” do odczytania." -#: ../src/client/composer/composer-widget.vala:1599 -#, c-format -msgid "\"%s\" already attached for delivery." -msgstr "Do wiadomości już załączono „%s”." - -#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-widget.vala:1608 -#, c-format -msgid "%s (%s)" -msgstr "%s (%s)" +#: ../src/client/composer/composer-widget.vala:1593 +msgid "Cannot add attachment" +msgstr "Nie można dodać załącznika" -#: ../src/client/composer/composer-widget.vala:1668 +#: ../src/client/composer/composer-widget.vala:1645 msgid "To: " msgstr "Do: " -#: ../src/client/composer/composer-widget.vala:1671 +#: ../src/client/composer/composer-widget.vala:1648 msgid "Cc: " -msgstr "Dw: " +msgstr "DW: " -#: ../src/client/composer/composer-widget.vala:1674 +#: ../src/client/composer/composer-widget.vala:1651 msgid "Bcc: " -msgstr "Udw: " +msgstr "UDW: " -#: ../src/client/composer/composer-widget.vala:1677 +#: ../src/client/composer/composer-widget.vala:1654 msgid "Reply-To: " msgstr "Odpowiedź do: " -#: ../src/client/composer/composer-widget.vala:1910 +#: ../src/client/composer/composer-widget.vala:1786 msgid "Select Color" msgstr "Wybór koloru" #. Displayed in the From dropdown to indicate an "alternate email address" #. for an account. The first printf argument will be the alternate email #. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2345 +#: ../src/client/composer/composer-widget.vala:1986 #, c-format msgid "%1$s via %2$s" msgstr "%1$s przez %2$s" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2389 +#: ../src/client/composer/composer-widget.vala:2028 msgid "_From:" msgstr "_Od:" +#. Translators: This is the name of the file chooser filter +#. when inserting an image in the composer. +#: ../src/client/composer/composer-widget.vala:2252 +msgid "Images" +msgstr "Obrazy" + +#: ../src/client/composer/spell-check-popover.vala:117 +msgid "Remove this language from the preferred list" +msgstr "Usuwa ten język z listy preferowanych" + +#: ../src/client/composer/spell-check-popover.vala:121 +msgid "Add this language to the preferred list" +msgstr "Dodaje ten język do listy preferowanych" + +#: ../src/client/composer/spell-check-popover.vala:217 +msgid "Search for more languages" +msgstr "Więcej języków" + #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Ja" -#: ../src/client/conversation-viewer/conversation-viewer.vala:414 -msgid "No conversations selected." -msgstr "Brak zaznaczonych wątków." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:416 -#, c-format -msgid "%u conversation selected." -msgid_plural "%u conversations selected." -msgstr[0] "%u zaznaczony wątek." -msgstr[1] "%u zaznaczone wątki." -msgstr[2] "%u zaznaczonych wątków." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:446 -msgid "No search results found." -msgstr "Nie odnaleziono wyników." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:448 -msgid "No conversations in folder." -msgstr "Brak wątków w katalogu." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "This message contains remote images." -msgstr "Ta wiadomość zawiera zewnętrzne obrazy." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "Show Images" -msgstr "Wyświetl obrazy" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:715 -msgid "Always Show From Sender" -msgstr "Zawsze wyświetlaj od nadawcy" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:739 -msgid "Edit Draft" -msgstr "Modyfikuj szkic" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:815 -msgid "From:" -msgstr "Od:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:818 -msgid "To:" -msgstr "Do:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:821 -msgid "Cc:" -msgstr "Dw:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:824 -msgid "Bcc:" -msgstr "Udw:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:827 -msgid "Subject:" -msgstr "Temat:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:830 -msgid "Date:" -msgstr "Data:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1150 -#, c-format -msgid "%u read message" -msgid_plural "%u read messages" -msgstr[0] "%u przeczytana wiadomość" -msgstr[1] "%u przeczytane wiadomości" -msgstr[2] "%u przeczytanych wiadomości" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1282 -#, c-format -msgid "This message was sent successfully, but could not be saved to %s." -msgstr "Pomyślnie wysłano tę wiadomość, ale nie można jej zapisać w %s." - -#. Add a menu item for copying the current selection. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1308 -#: ../ui/composer.glade.h:4 -msgid "_Copy" -msgstr "S_kopiuj" - -#. Add a menu item for copying the address. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1316 -msgid "Copy _Email Address" -msgstr "Skopiuj adres _e-mail" - -#. Add a menu item for copying the link. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1321 -#: ../ui/composer.glade.h:17 -msgid "Copy _Link" -msgstr "Skopiuj _odnośnik" - -#. Select message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1329 -msgid "Select _Message" -msgstr "Zaznacz _wiadomość" - -#. Inspect. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1341 -msgid "_Inspect" -msgstr "Z_badaj" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1572 -msgid "This link appears to go to" -msgstr "Ten odnośnik wydaje się prowadzić do" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1573 -msgid "but actually goes to" -msgstr ", ale tak naprawdę prowadzi do" - -#. If href doesn't look like a URL, something is fishy, so warn the user -#: ../src/client/conversation-viewer/conversation-viewer.vala:1628 -msgid " (Invalid?)" -msgstr " (Nieprawidłowy?)" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1734 -msgid "_Save Image As..." -msgstr "Zapisz _obraz jako…" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1838 -msgid "_Save As..." -msgstr "Zapisz j_ako…" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1843 -msgid "Save All A_ttachments..." -msgstr "Zapisz wszystkie _załączniki…" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1863 -msgid "Save A_ttachment..." -msgid_plural "Save All A_ttachments..." -msgstr[0] "Zapisz _załącznik…" -msgstr[1] "Zapisz wszystkie _załączniki…" -msgstr[2] "Zapisz wszystkie _załączniki…" - -#. Reply to all on a message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1878 -msgid "Reply to _All" -msgstr "Odpowiedz _wszystkim" - -#. Mark as read/unread. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1895 -msgid "_Mark as Read" -msgstr "Oznacz jako p_rzeczytane" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1899 -msgid "_Mark as Unread" -msgstr "Oznacz jako _nieprzeczytane" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1905 -msgid "Mark Unread From _Here" -msgstr "Oznacz jako nieprzeczytane od tego _miejsca" - -#. Separator. -#. View original message source. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1920 -msgid "_View Source" -msgstr "_Wyświetl źródło" - -#. Generate the attachment table. -#. / Placeholder filename for attachments with no filename. -#: ../src/client/conversation-viewer/conversation-viewer.vala:2245 -#: ../src/engine/rfc822/rfc822-utils.vala:392 -msgid "none" -msgstr "brak" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:2380 -msgid "Failed to open default text editor." -msgstr "Otwarcie domyślnego edytora tekstu się nie powiodło." - -#: ../src/client/conversation-viewer/conversation-web-view.vala:319 -#, c-format -msgid "%s - Conversation Inspector" -msgstr "%s — inspektor wątków" +#. Translators: This is the file type displayed for +#. attachments with unknown file types. +#: ../src/client/conversation-viewer/conversation-email.vala:124 +msgid "Unknown" +msgstr "Nieznany" + +#. Preview headers +#. Translators: This is displayed in place of the from address +#. when the message has no from address. +#: ../src/client/conversation-viewer/conversation-message.vala:331 +msgid "No sender" +msgstr "Brak nadawcy" + +#. Translators: This separates multiple 'from' +#. addresses in the header preview for a message. +#: ../src/client/conversation-viewer/conversation-message.vala:586 +msgid ", " +msgstr ", " + +#. Translators: This string is used as the HTML IMG ALT +#. attribute value when displaying an inline image in an email +#. that did not specify a file name. E.g. ImageCannot remove account " @@ -1770,7 +1747,7 @@ "A composer window associated with this account is currently open. Send or " "discard the message and try again." msgstr "" -"Otwarto okno modyfikacji wiadomości powiązane z tym kontem. Proszę wysłać " +"Otwarto okno tworzenia wiadomości powiązane z tym kontem. Proszę wysłać " "wiadomość lub przerwać jej tworzenie i spróbować ponownie." #: ../ui/account_list.glade.h:1 @@ -1802,246 +1779,401 @@ msgstr "Z_aufaj temu serwerowi" #: ../ui/certificate_warning_dialog.glade.h:4 -msgid "_Don't Trust This Server" +msgid "_Don’t Trust This Server" msgstr "_Nie ufaj temu serwerowi" -#: ../ui/composer.glade.h:1 -msgid "_Undo" -msgstr "Cof_nij" - -#: ../ui/composer.glade.h:2 -msgid "_Redo" -msgstr "P_onów" - -#: ../ui/composer.glade.h:3 -msgid "Cu_t" -msgstr "_Wytnij" +#: ../ui/composer-headerbar.ui.h:1 +msgid "Detach (Ctrl+D)" +msgstr "Odłącza (Ctrl+D)" -#: ../ui/composer.glade.h:5 -msgid "_Paste" -msgstr "Wk_lej" +#: ../ui/composer-headerbar.ui.h:2 +msgid "Attach File (Ctrl+T)" +msgstr "Załącza plik (Ctrl+T)" -#: ../ui/composer.glade.h:6 -msgid "_Left" -msgstr "Wyrównanie w _lewo" - -#: ../ui/composer.glade.h:7 -msgid "_Right" -msgstr "Wy_równanie w prawo" - -#: ../ui/composer.glade.h:8 -msgid "_Center" -msgstr "Wyśro_dkowanie" - -#: ../ui/composer.glade.h:9 -msgid "_Justify" -msgstr "Wyrów_nanie w prawo i lewo" - -#: ../ui/composer.glade.h:10 -msgid "Link (Ctrl+L)" -msgstr "Odnośnik (Ctrl+L)" +#: ../ui/composer-headerbar.ui.h:3 +msgid "Include Original Attachments" +msgstr "Załącza oryginalne załączniki" -#: ../ui/composer.glade.h:11 -msgid "C_olor" -msgstr "K_olor" +#: ../ui/composer-headerbar.ui.h:4 +msgid "Send (Ctrl+Enter)" +msgstr "Wysyła (Ctrl+Enter)" -#: ../ui/composer.glade.h:12 -msgid "More options" -msgstr "Więcej opcji" +#: ../ui/composer-headerbar.ui.h:5 +msgid "_Send" +msgstr "_Wyślij" -#: ../ui/composer.glade.h:13 -msgid "Quote text (Ctrl+])" -msgstr "Cytuj tekst (Ctrl+])" +#: ../ui/composer-headerbar.ui.h:6 +msgid "Discard and Close" +msgstr "Odrzuca i zamyka" + +#: ../ui/composer-headerbar.ui.h:7 +msgid "Save and Close" +msgstr "Zapisuje i zamyka" + +#. Note that this button and the Update button will never be shown at the same time to the user. +#: ../ui/composer-link-popover.ui.h:2 +msgid "Insert the new link with this URL" +msgstr "Wstawia nowy odnośnik o tym adresie URL" + +#: ../ui/composer-link-popover.ui.h:3 +msgid "Link URL" +msgstr "Adres URL odnośnika" + +#. Note that this button and the Insert button will never be shown at the same time to the user. +#: ../ui/composer-link-popover.ui.h:5 +msgid "Update this link’s URL" +msgstr "Aktualizuje adres URL tego odnośnika" + +#: ../ui/composer-link-popover.ui.h:6 +msgid "Delete this link" +msgstr "Usuwa ten odnośnik" + +#: ../ui/composer-link-popover.ui.h:7 +msgid "Open this link" +msgstr "Otwiera ten odnośnik" -#: ../ui/composer.glade.h:14 -msgid "Unquote text (Ctrl+[)" -msgstr "Usuń cytat (Ctrl+[)" +#: ../ui/composer-menus.ui.h:1 +msgid "S_ans Serif" +msgstr "_Bezszeryfowa" -#: ../ui/composer.glade.h:15 -msgid "Remove formatting (Ctrl+Space)" -msgstr "Usuń formatowanie (Ctrl+Space)" +#: ../ui/composer-menus.ui.h:2 +msgid "S_erif" +msgstr "Sz_eryfowa" -#: ../ui/composer.glade.h:16 -msgctxt "Clipboard paste with rich text" -msgid "Paste _With Formatting" -msgstr "Wstaw _z formatowaniem" +#: ../ui/composer-menus.ui.h:3 +msgid "_Fixed Width" +msgstr "S_tała szerokość" -#: ../ui/composer.glade.h:18 -msgid "Bold (Ctrl+B)" -msgstr "Pogrub tekst (Ctrl+B)" +#: ../ui/composer-menus.ui.h:4 +msgid "_Small" +msgstr "_Mały" -#: ../ui/composer.glade.h:19 -msgid "Italic (Ctrl+I)" -msgstr "Pochyl tekst (Ctrl+I)" +#: ../ui/composer-menus.ui.h:5 +msgid "_Medium" +msgstr "Ś_redni" -#: ../ui/composer.glade.h:20 -msgid "Underline (Ctrl+U)" -msgstr "Podkreśl tekst (Ctrl+U)" +#: ../ui/composer-menus.ui.h:6 +msgid "Lar_ge" +msgstr "_Duży" -#: ../ui/composer.glade.h:21 -msgid "Strikethrough (Ctrl+K)" -msgstr "Przekreśl tekst (Ctrl+K)" +#: ../ui/composer-menus.ui.h:7 +msgid "C_olor" +msgstr "K_olor" -#: ../ui/composer.glade.h:22 +#: ../ui/composer-menus.ui.h:8 msgid "_Rich Text" msgstr "Tekst _sformatowany" -#: ../ui/composer.glade.h:23 +#: ../ui/composer-menus.ui.h:9 msgid "Show Extended Fields" msgstr "Rozszerzone pola" -#: ../ui/composer.glade.h:24 -msgctxt "Label" -msgid "Close and Save" -msgstr "Zamknij i zapisz" - -#: ../ui/composer.glade.h:25 -msgctxt "Short Label" -msgid "Close and Save" -msgstr "Zamknij i zapisz" - -#: ../ui/composer.glade.h:26 -msgctxt "Tooltip" -msgid "Close and Save" -msgstr "Zamyka i zapisuje" - -#: ../ui/composer.glade.h:27 -msgctxt "Label" -msgid "Close and Discard" -msgstr "Zamknij i odrzuć" - -#: ../ui/composer.glade.h:28 -msgctxt "Short Label" -msgid "Close and Discard" -msgstr "Zamknij i odrzuć" - -#: ../ui/composer.glade.h:29 -msgctxt "Tooltip" -msgid "Close and Discard" -msgstr "Zamyka i odrzuca" - -#: ../ui/composer.glade.h:30 -msgid "Lar_ge" -msgstr "_Duży" - -#: ../ui/composer.glade.h:31 -msgid "Large" -msgstr "Duży" - -#: ../ui/composer.glade.h:32 -msgid "_Medium" -msgstr "Ś_redni" - -#: ../ui/composer.glade.h:33 -msgid "Medium" -msgstr "Średni" - -#: ../ui/composer.glade.h:34 -msgid "_Small" -msgstr "_Mały" - -#: ../ui/composer.glade.h:35 -msgid "Small" -msgstr "Mały" - -#: ../ui/composer.glade.h:36 -msgid "S_ans Serif" -msgstr "_Bezszeryfowa" - -#: ../ui/composer.glade.h:37 -msgid "Sans Serif" -msgstr "Bezszeryfowa" - -#: ../ui/composer.glade.h:38 -msgid "S_erif" -msgstr "Sz_eryfowa" - -#: ../ui/composer.glade.h:39 -msgid "Serif" -msgstr "Szeryfowa" - -#: ../ui/composer.glade.h:40 -msgid "_Fixed Width" -msgstr "S_tała szerokość" - -#: ../ui/composer.glade.h:41 -msgid "Fixed Width" -msgstr "Stała szerokość" - -#: ../ui/composer.glade.h:42 -msgid "Detach" -msgstr "Odłącz" - -#: ../ui/composer.glade.h:43 -msgid "Detach (Ctrl+D)" -msgstr "Odłącz (Ctrl+D)" - -#: ../ui/composer.glade.h:44 -msgid "_Send" -msgstr "_Wyślij" +#: ../ui/composer-menus.ui.h:10 +msgid "_Undo" +msgstr "Cof_nij" -#: ../ui/composer.glade.h:45 -msgid "Send" -msgstr "Wyślij" +#: ../ui/composer-menus.ui.h:11 +msgid "_Redo" +msgstr "P_onów" -#: ../ui/composer.glade.h:46 -msgid "Send (Ctrl+Enter)" -msgstr "Wyślij (Ctrl+Enter)" +#: ../ui/composer-menus.ui.h:12 +msgid "Cu_t" +msgstr "_Wytnij" -#: ../ui/composer.glade.h:47 -msgid "_Attach File" -msgstr "Z_ałącz plik" +#: ../ui/composer-menus.ui.h:13 ../ui/conversation-message-menus.ui.h:7 +msgid "_Copy" +msgstr "S_kopiuj" -#: ../ui/composer.glade.h:48 -msgid "Attach File" -msgstr "Załącz plik" +#: ../ui/composer-menus.ui.h:14 +msgid "_Paste" +msgstr "Wk_lej" -#: ../ui/composer.glade.h:49 -msgid "_Include Original Attachments" -msgstr "Załącz _oryginalne załączniki" +#: ../ui/composer-menus.ui.h:15 +msgctxt "Clipboard paste with rich text" +msgid "Paste _With Formatting" +msgstr "Wstaw _z formatowaniem" -#: ../ui/composer.glade.h:50 -msgid "Include Original Attachments" -msgstr "Załącz oryginalne załączniki" +#: ../ui/composer-menus.ui.h:16 +msgid "Select _All" +msgstr "Zaznacz _wszystko" -#: ../ui/composer.glade.h:51 -msgid "Application Menu" -msgstr "Menu programu" +#: ../ui/composer-menus.ui.h:17 ../ui/conversation-message-menus.ui.h:9 +msgid "_Inspect…" +msgstr "Z_badaj…" #. Address(es) e-mail is to be sent to -#: ../ui/composer.glade.h:53 +#: ../ui/composer-widget.ui.h:2 msgid "_To" msgstr "_Do" -#: ../ui/composer.glade.h:54 +#: ../ui/composer-widget.ui.h:3 msgid "_Cc" msgstr "Do _wiadomości" -#: ../ui/composer.glade.h:55 +#: ../ui/composer-widget.ui.h:4 msgid "_Subject" msgstr "_Temat" -#: ../ui/composer.glade.h:56 +#: ../ui/composer-widget.ui.h:5 msgid "_Bcc" msgstr "_Ukryty do wiadomości" -#: ../ui/composer.glade.h:57 +#: ../ui/composer-widget.ui.h:6 msgid "_Reply-To" msgstr "_Odpowiedź do" #. Geary account mail will be sent from -#: ../ui/composer.glade.h:59 +#: ../ui/composer-widget.ui.h:8 msgid "From" msgstr "Od" -#: ../ui/composer.glade.h:60 +#: ../ui/composer-widget.ui.h:9 msgid "Drop files here" msgstr "Tutaj można upuścić pliki," -#: ../ui/composer.glade.h:61 +#: ../ui/composer-widget.ui.h:10 msgid "To add them as attachments" msgstr "aby dodać je jako załączniki." +#: ../ui/composer-widget.ui.h:11 +msgid "Undo last edit (Ctrl+Z)" +msgstr "Cofa ostatnią modyfikację (Ctrl+Z)" + +#: ../ui/composer-widget.ui.h:12 +msgid "Redo last edit (Ctrl+Shift+Z)" +msgstr "Ponawia ostatnią modyfikację (Ctrl+Shift+Z)" + +#: ../ui/composer-widget.ui.h:13 +msgid "Bold (Ctrl+B)" +msgstr "Pogrubia tekst (Ctrl+B)" + +#: ../ui/composer-widget.ui.h:14 +msgid "Italic (Ctrl+I)" +msgstr "Pochyla tekst (Ctrl+I)" + +#: ../ui/composer-widget.ui.h:15 +msgid "Underline (Ctrl+U)" +msgstr "Podkreśla tekst (Ctrl+U)" + +#: ../ui/composer-widget.ui.h:16 +msgid "Strikethrough (Ctrl+K)" +msgstr "Przekreśla tekst (Ctrl+K)" + +#: ../ui/composer-widget.ui.h:17 +msgid "Quote text (Ctrl+])" +msgstr "Cytuje tekst (Ctrl+])" + +#: ../ui/composer-widget.ui.h:18 +msgid "Unquote text (Ctrl+[)" +msgstr "Usuwa cytat (Ctrl+[)" + +#: ../ui/composer-widget.ui.h:19 +msgid "Insert or update selection link (Ctrl+L)" +msgstr "Wstawia lub aktualizuje zaznaczony odnośnik (Ctrl+L)" + +#: ../ui/composer-widget.ui.h:20 +msgid "Insert an image (Ctrl+G)" +msgstr "Wstawia obraz (Ctrl+G)" + +#: ../ui/composer-widget.ui.h:21 +msgid "Remove selection formatting (Ctrl+Space)" +msgstr "Usuwa formatowanie zaznaczonego tekstu (Ctrl+Spacja)" + +#: ../ui/composer-widget.ui.h:22 +msgid "Select spell checking languages" +msgstr "Wybiera język sprawdzania pisowni" + +#: ../ui/conversation-email.ui.h:1 +msgid "Save all attachments" +msgstr "Zapisuje wszystkie załączniki" + +#. Note: The application will never show this button at the same time as unstar_button, one will always be hidden. +#: ../ui/conversation-email.ui.h:3 +msgid "Mark this message as starred" +msgstr "Oznacza tę wiadomość jako wyróżnioną" + +#. Note: The application will never show this button at the same time as star_button, one will always be hidden. +#: ../ui/conversation-email.ui.h:5 +msgid "Mark this message as not starred" +msgstr "Usuwa wyróżnienie tej wiadomości" + +#: ../ui/conversation-email.ui.h:6 +msgid "Display the message menu" +msgstr "Wyświetla menu wiadomości" + +#: ../ui/conversation-email.ui.h:7 +msgid "Open selected attachments" +msgstr "Otwiera zaznaczone załączniki" + +#: ../ui/conversation-email.ui.h:8 +msgid "Save selected attachments" +msgstr "Zapisuje zaznaczone załączniki" + +#: ../ui/conversation-email.ui.h:9 +msgid "Select all attachments" +msgstr "Zaznacza wszystkie załączniki" + +#: ../ui/conversation-email.ui.h:10 +msgid "Edit Draft" +msgstr "Modyfikuj szkic" + +#: ../ui/conversation-email.ui.h:11 +msgid "Draft message" +msgstr "Szkic wiadomości" + +#: ../ui/conversation-email.ui.h:12 +msgid "This message has not yet been sent." +msgstr "Ta wiadomość nie została jeszcze wysłana." + +#: ../ui/conversation-email.ui.h:13 +msgid "Try Again" +msgstr "Spróbuj ponownie" + +#: ../ui/conversation-email.ui.h:14 +msgid "Message not saved" +msgstr "Niezapisana wiadomość" + +#: ../ui/conversation-email.ui.h:15 +msgid "This message was sent, but has not been saved to your account." +msgstr "Wysłano tę wiadomość, ale nie zapisano jej na koncie." + +#: ../ui/conversation-email-menus.ui.h:2 +msgid "Reply to _All" +msgstr "Odpowiedz _wszystkim" + +#: ../ui/conversation-email-menus.ui.h:4 +msgid "_Mark Read" +msgstr "Oznacz jako p_rzeczytane" + +#: ../ui/conversation-email-menus.ui.h:5 +msgid "_Mark Unread" +msgstr "Oznacz jako _nieprzeczytane" + +#: ../ui/conversation-email-menus.ui.h:6 +msgid "Mark Unread From _Here" +msgstr "Oznacz jako nieprzeczytane od tego _miejsca" + +#: ../ui/conversation-email-menus.ui.h:8 +msgid "_View Source" +msgstr "_Wyświetl źródło" + +#: ../ui/conversation-email-menus.ui.h:11 +msgid "_Save All" +msgstr "_Zapisz wszystko" + +#: ../ui/conversation-message-menus.ui.h:1 +msgid "_Open Link" +msgstr "_Otwórz odnośnik" + +#: ../ui/conversation-message-menus.ui.h:2 +msgid "Copy Link _Address" +msgstr "Skopiuj _adres odnośnika" + +#: ../ui/conversation-message-menus.ui.h:3 +msgid "Send New _Message…" +msgstr "_Wyślij nową wiadomość…" + +#: ../ui/conversation-message-menus.ui.h:4 +msgid "Copy Email _Address" +msgstr "Skopiuj adres _e-mail" + +#: ../ui/conversation-message-menus.ui.h:5 +msgid "Save _Image As…" +msgstr "Zapisz _obraz jako…" + +#: ../ui/conversation-message-menus.ui.h:6 +msgid "_Select All" +msgstr "Zaznacz _wszystko" + +#: ../ui/conversation-message-menus.ui.h:8 +msgid "Search for messages from" +msgstr "Wyszukaj wiadomości od" + +#: ../ui/conversation-message.ui.h:1 +msgid "From " +msgstr "Od " + +#: ../ui/conversation-message.ui.h:2 +msgid "1/1/1970\t" +msgstr "1/1/1970\t" + +#: ../ui/conversation-message.ui.h:3 +msgid "Preview body text." +msgstr "Podgląd treści." + +#: ../ui/conversation-message.ui.h:4 +msgid "Sent by:" +msgstr "Wysłane przez:" + +#: ../ui/conversation-message.ui.h:5 +msgid "Reply to:" +msgstr "Odpowiedź do:" + +#: ../ui/conversation-message.ui.h:6 +msgid "Subject" +msgstr "Temat" + +#: ../ui/conversation-message.ui.h:7 +msgid "To:" +msgstr "Do:" + +#: ../ui/conversation-message.ui.h:8 +msgid "Cc:" +msgstr "DW:" + +#: ../ui/conversation-message.ui.h:9 +msgid "Bcc:" +msgstr "UDW:" + +#: ../ui/conversation-message.ui.h:10 +msgid "Show Images" +msgstr "Wyświetl obrazy" + +#: ../ui/conversation-message.ui.h:11 +msgid "Always Show From Sender" +msgstr "Zawsze wyświetlaj od nadawcy" + +#: ../ui/conversation-message.ui.h:12 +msgid "Remote images not shown" +msgstr "Zdalne obrazy nie są wyświetlane" + +#: ../ui/conversation-message.ui.h:13 +msgid "Only show remote images from senders you trust." +msgstr "Wyświetlanie zdalnych obrazów tylko od zaufanych nadawców." + +#: ../ui/conversation-message.ui.h:14 +msgid "But actually goes to:" +msgstr "Ale tak naprawdę prowadzi do:" + +#: ../ui/conversation-message.ui.h:15 +msgid "The link appears to go to:" +msgstr "Odnośnik wydaje się prowadzić do:" + +#: ../ui/conversation-message.ui.h:16 +msgid "Deceptive link found" +msgstr "Odnaleziono odnośnik wprowadzający w błąd" + +#: ../ui/conversation-message.ui.h:17 +msgid "The email sender may be leading you to the wrong web site." +msgstr "Nadawca wiadomości może prowadzić do złej strony." + +#: ../ui/conversation-message.ui.h:18 +msgid "If unsure, contact the sender and ask before continuing." +msgstr "" +"W razie niepewności, należy skontaktować się z nadawcą przed kontynuowaniem." + +#: ../ui/conversation-viewer.ui.h:1 +msgid "Find in conversation" +msgstr "Wyszukiwanie w wątku" + +#: ../ui/conversation-viewer.ui.h:2 +msgid "Find the previous occurrence of the search string." +msgstr "Wyszukuje poprzednie wystąpienie tekstu." + +#: ../ui/conversation-viewer.ui.h:3 +msgid "Find the next occurrence of the search string." +msgstr "Wyszukuje następne wystąpienie tekstu." + #: ../ui/edit_alternate_emails.glade.h:1 msgid "Remove email address" msgstr "Usuwa adres e-mail" @@ -2079,6 +2211,247 @@ msgid "label" msgstr "etykieta" +#: ../ui/gtk/help-overlay.ui.h:1 +msgid "Conversation Shortcuts" +msgstr "Skróty wątków" + +#: ../ui/gtk/help-overlay.ui.h:2 +msgctxt "shortcut window" +msgid "General" +msgstr "Ogólne" + +#: ../ui/gtk/help-overlay.ui.h:3 +msgctxt "shortcut window" +msgid "Move focus to the next/previous pane" +msgstr "Przejście do następnego/poprzedniego panelu" + +#: ../ui/gtk/help-overlay.ui.h:4 +msgctxt "shortcut window" +msgid "Move focus to conversation list" +msgstr "Przejście do listy wątków" + +#: ../ui/gtk/help-overlay.ui.h:5 +msgctxt "shortcut window" +msgid "Detach composer window" +msgstr "Odłączenie okna tworzenia wiadomości" + +#: ../ui/gtk/help-overlay.ui.h:6 +msgctxt "shortcut window" +msgid "Close composer window" +msgstr "Zamknięcie okna tworzenia wiadomości" + +#: ../ui/gtk/help-overlay.ui.h:7 +msgctxt "shortcut window" +msgid "Show keyboard shortcuts" +msgstr "Wyświetlenie skrótów klawiszowych" + +#: ../ui/gtk/help-overlay.ui.h:8 +msgctxt "shortcut window" +msgid "Show help" +msgstr "Wyświetlenie pomocy" + +#: ../ui/gtk/help-overlay.ui.h:9 +msgctxt "shortcut window" +msgid "Quit the application" +msgstr "Zakończenie działania programu" + +#: ../ui/gtk/help-overlay.ui.h:10 +msgctxt "shortcut window" +msgid "Search" +msgstr "Wyszukiwanie" + +#: ../ui/gtk/help-overlay.ui.h:11 +msgctxt "shortcut window" +msgid "Jump to search box" +msgstr "Przejście do pola wyszukiwania" + +#: ../ui/gtk/help-overlay.ui.h:12 +msgctxt "shortcut window" +msgid "Find in current conversation" +msgstr "Wyszukiwanie w bieżącym wątku" + +#: ../ui/gtk/help-overlay.ui.h:13 +msgctxt "shortcut window" +msgid "Find next/previous in current conversation" +msgstr "Wyszukanie następnego/poprzedniego w bieżącym wątku" + +#: ../ui/gtk/help-overlay.ui.h:14 +msgctxt "shortcut window" +msgid "Actions" +msgstr "Działania" + +#: ../ui/gtk/help-overlay.ui.h:15 +msgctxt "shortcut window" +msgid "Compose a new message" +msgstr "Utworzenie nowej wiadomości" + +#: ../ui/gtk/help-overlay.ui.h:16 +msgctxt "shortcut window" +msgid "Reply to sender " +msgstr "Odpowiedź do nadawcy" + +#: ../ui/gtk/help-overlay.ui.h:17 +msgctxt "shortcut window" +msgid "Reply to all" +msgstr "Odpowiedź do wszystkich" + +#: ../ui/gtk/help-overlay.ui.h:18 +msgctxt "shortcut window" +msgid "Forward" +msgstr "Przekazanie" + +#: ../ui/gtk/help-overlay.ui.h:19 +msgctxt "shortcut window" +msgid "Archive" +msgstr "Przeniesie do archiwum" + +#: ../ui/gtk/help-overlay.ui.h:20 +msgctxt "shortcut window" +msgid "Move to trash" +msgstr "Przeniesienie do kosza" + +#: ../ui/gtk/help-overlay.ui.h:21 +msgctxt "shortcut window" +msgid "Toggle spam" +msgstr "Przełączenie niechcianej wiadomości" + +#: ../ui/gtk/help-overlay.ui.h:22 +msgctxt "shortcut window" +msgid "Move the conversation" +msgstr "Przeniesienie wątku" + +#: ../ui/gtk/help-overlay.ui.h:23 +msgctxt "shortcut window" +msgid "Label the conversation" +msgstr "Nadanie wątkowi etykiety" + +#: ../ui/gtk/help-overlay.ui.h:24 +msgctxt "shortcut window" +msgid "Mark read" +msgstr "Oznaczenie jako przeczytane" + +#: ../ui/gtk/help-overlay.ui.h:25 +msgctxt "shortcut window" +msgid "Mark unread" +msgstr "Oznaczenie jako nieprzeczytane" + +#: ../ui/gtk/help-overlay.ui.h:26 +msgctxt "shortcut window" +msgid "View" +msgstr "Widok" + +#: ../ui/gtk/help-overlay.ui.h:27 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Powiększenie" + +#: ../ui/gtk/help-overlay.ui.h:28 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Pomniejszenie" + +#: ../ui/gtk/help-overlay.ui.h:29 +msgctxt "shortcut window" +msgid "Reset zoom" +msgstr "Przywrócenie powiększenia" + +#: ../ui/gtk/help-overlay.ui.h:30 +msgctxt "shortcut window" +msgid "Additional Shortcuts" +msgstr "Dodatkowe skróty" + +#: ../ui/gtk/help-overlay.ui.h:31 +msgctxt "shortcut window" +msgid "Star" +msgstr "Wyróżnienie" + +#: ../ui/gtk/help-overlay.ui.h:32 +msgctxt "shortcut window" +msgid "Unstar" +msgstr "Usunięcie wyróżnienia" + +#: ../ui/gtk/help-overlay.ui.h:33 +msgctxt "shortcut window" +msgid "Delete" +msgstr "Usunięcie" + +#: ../ui/gtk/help-overlay.ui.h:34 +msgctxt "shortcut window" +msgid "Jump to next (older) conversation" +msgstr "Przejście do następnego (starszego) wątku" + +#: ../ui/gtk/help-overlay.ui.h:35 +msgctxt "shortcut window" +msgid "Jump to previous (newer) conversation" +msgstr "Przejście do poprzedniego (nowszego) wątku" + +#: ../ui/gtk/help-overlay.ui.h:36 +msgid "Composer Shortcuts" +msgstr "Skróty okna tworzenia wiadomości" + +#: ../ui/gtk/help-overlay.ui.h:37 +msgctxt "shortcut window" +msgid "Quote text" +msgstr "Cytowanie tekstu" + +#: ../ui/gtk/help-overlay.ui.h:38 +msgctxt "shortcut window" +msgid "Unquote text" +msgstr "Usunięcie cytatu" + +#: ../ui/gtk/help-overlay.ui.h:39 +msgctxt "shortcut window" +msgid "Send" +msgstr "Wysłanie" + +#: ../ui/gtk/help-overlay.ui.h:40 +msgctxt "shortcut window" +msgid "Add attachment" +msgstr "Dodanie załącznika" + +#: ../ui/gtk/help-overlay.ui.h:41 +msgctxt "shortcut window" +msgid "Rich text mode" +msgstr "Tryb tekstu sformatowanego" + +#: ../ui/gtk/help-overlay.ui.h:42 +msgctxt "shortcut window" +msgid "Bold text" +msgstr "Pogrubienie tekstu" + +#: ../ui/gtk/help-overlay.ui.h:43 +msgctxt "shortcut window" +msgid "Italicize text" +msgstr "Pochylenie tekstu" + +#: ../ui/gtk/help-overlay.ui.h:44 +msgctxt "shortcut window" +msgid "Underline text" +msgstr "Podkreślenie tekstu" + +#: ../ui/gtk/help-overlay.ui.h:45 +msgctxt "shortcut window" +msgid "Strike text" +msgstr "Przekreślenie tekstu" + +#: ../ui/gtk/help-overlay.ui.h:46 +msgctxt "shortcut window" +msgid "Insert a link" +msgstr "Wstawienie odnośnika" + +#: ../ui/gtk/help-overlay.ui.h:47 +msgctxt "shortcut window" +msgid "Remove formatting" +msgstr "Usunięcie formatowania" + +#: ../ui/gtk/menus.ui.h:2 +msgid "A_ccounts" +msgstr "_Konta" + +#: ../ui/gtk/menus.ui.h:4 +msgid "_Keyboard Shortcuts" +msgstr "_Skróty klawiszowe" + #: ../ui/login.glade.h:1 msgid "email@example.com" msgstr "e-mail@example.com" @@ -2203,7 +2576,7 @@ msgid "Use IMAP cre_dentials" msgstr "Używanie _danych logowania IMAP" -#: ../ui/login.glade.h:34 ../ui/preferences.glade.h:5 +#: ../ui/login.glade.h:34 msgid "Composer" msgstr "Tworzenie" @@ -2223,6 +2596,10 @@ msgid "_Download mail" msgstr "_Pobieranie wiadomości" +#: ../ui/main-toolbar.ui.h:1 +msgid "Empty Spam or Trash folders" +msgstr "Opróżnij katalog niechcianych wiadomości lub kosz" + #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" msgstr "Dane logowania SMTP" @@ -2239,48 +2616,44 @@ msgid "_Authenticate" msgstr "_Uwierzytelnij" -#: ../ui/preferences.glade.h:1 +#: ../ui/preferences-dialog.ui.h:1 msgid "Reading" msgstr "Czytanie" -#: ../ui/preferences.glade.h:2 +#: ../ui/preferences-dialog.ui.h:2 msgid "_Automatically select next message" msgstr "_Automatyczne wybieranie następnej wiadomości" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences-dialog.ui.h:3 msgid "_Display conversation preview" msgstr "P_odgląd wątku" -#: ../ui/preferences.glade.h:4 +#: ../ui/preferences-dialog.ui.h:4 msgid "Use _three pane view" msgstr "Widok _trzech paneli" -#: ../ui/preferences.glade.h:6 -msgid "Enable _spell checking" -msgstr "Sprawdzanie p_isowni" - -#: ../ui/preferences.glade.h:7 +#: ../ui/preferences-dialog.ui.h:5 msgid "Notifications" msgstr "Powiadomienia" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences-dialog.ui.h:6 msgid "_Play notification sounds" msgstr "_Dźwięki powiadomień" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences-dialog.ui.h:7 msgid "Show _notifications for new mail" msgstr "_Powiadomienia o nowych wiadomościach" -#: ../ui/preferences.glade.h:10 +#: ../ui/preferences-dialog.ui.h:8 msgid "Always _watch for new mail" msgstr "_Monitorowanie nowych wiadomości" -#: ../ui/preferences.glade.h:11 +#: ../ui/preferences-dialog.ui.h:9 msgid "Geary will run in the background and notify of new mail" msgstr "" "Program Geary będzie działał w tle i powiadamiał o nowych wiadomościach" -#: ../ui/preferences.glade.h:12 +#: ../ui/preferences-dialog.ui.h:10 msgid "Preferences" msgstr "Preferencje" diff -Nru geary-0.11.4/po/POTFILES.in geary-0.12.0/po/POTFILES.in --- geary-0.11.4/po/POTFILES.in 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/POTFILES.in 2017-10-02 11:25:21.000000000 +0000 @@ -1,7 +1,9 @@ [encoding: UTF-8] -desktop/geary.desktop.in +desktop/org.gnome.Geary.appdata.xml.in +desktop/org.gnome.Geary.desktop.in desktop/geary-autostart.desktop.in [type: gettext/ini]desktop/geary-attach.contract.in +src/geary-version.vala.in src/client/accounts/account-dialog-account-list-pane.vala src/client/accounts/account-dialog-add-edit-pane.vala src/client/accounts/account-dialog-edit-alternate-emails-pane.vala @@ -14,42 +16,43 @@ src/client/accounts/add-edit-page.vala src/client/accounts/login-dialog.vala src/client/application/autostart-manager.vala -src/client/application/geary-action-adapter.vala src/client/application/geary-application.vala src/client/application/geary-args.vala src/client/application/geary-config.vala src/client/application/geary-controller.vala src/client/application/main.vala src/client/application/secret-mediator.vala -src/client/components/conversation-find-bar.vala +src/client/components/client-web-view.vala src/client/components/count-badge.vala -src/client/components/folder-menu.vala +src/client/components/empty-placeholder.vala +src/client/components/folder-popover.vala src/client/components/icon-factory.vala src/client/components/main-toolbar.vala src/client/components/main-window.vala src/client/components/monitored-progress-bar.vala src/client/components/monitored-spinner.vala -src/client/components/pill-toolbar.vala src/client/components/search-bar.vala src/client/components/status-bar.vala src/client/components/stock.vala -src/client/components/stylish-webview.vala src/client/composer/composer-box.vala src/client/composer/composer-container.vala src/client/composer/composer-embed.vala src/client/composer/composer-headerbar.vala -src/client/composer/composer-toolbar.vala +src/client/composer/composer-link-popover.vala +src/client/composer/composer-web-view.vala src/client/composer/composer-widget.vala src/client/composer/composer-window.vala src/client/composer/contact-entry-completion.vala src/client/composer/contact-list-store.vala src/client/composer/email-entry.vala -src/client/composer/scrollable-overlay.vala -src/client/composer/webview-edit-fixer.vala +src/client/composer/spell-check-popover.vala src/client/conversation-list/conversation-list-cell-renderer.vala src/client/conversation-list/conversation-list-store.vala src/client/conversation-list/conversation-list-view.vala src/client/conversation-list/formatted-conversation-data.vala +src/client/conversation-viewer/conversation-email.vala +src/client/conversation-viewer/conversation-list-box.vala +src/client/conversation-viewer/conversation-message.vala src/client/conversation-viewer/conversation-viewer.vala src/client/conversation-viewer/conversation-web-view.vala src/client/dialogs/alert-dialog.vala @@ -61,8 +64,8 @@ src/client/folder-list/folder-list-abstract-folder-entry.vala src/client/folder-list/folder-list-account-branch.vala src/client/folder-list/folder-list-folder-entry.vala -src/client/folder-list/folder-list-inboxes-branch.vala src/client/folder-list/folder-list-inbox-folder-entry.vala +src/client/folder-list/folder-list-inboxes-branch.vala src/client/folder-list/folder-list-search-branch.vala src/client/folder-list/folder-list-special-grouping.vala src/client/folder-list/folder-list-tree.vala @@ -80,12 +83,15 @@ src/client/util/util-date.vala src/client/util/util-email.vala src/client/util/util-files.vala +src/client/util/util-gio.vala src/client/util/util-gravatar.vala src/client/util/util-gtk.vala src/client/util/util-international.vala -src/client/util/util-random.vala +src/client/util/util-migrate.vala src/client/util/util-webkit.vala +src/client/web-process/web-process-extension.vala src/console/main.vala +src/engine/api/geary.vala src/engine/api/geary-abstract-local-folder.vala src/engine/api/geary-account-information.vala src/engine/api/geary-account.vala @@ -117,8 +123,8 @@ src/engine/api/geary-folder-supports-remove.vala src/engine/api/geary-folder.vala src/engine/api/geary-logging.vala -src/engine/api/geary-named-flags.vala src/engine/api/geary-named-flag.vala +src/engine/api/geary-named-flags.vala src/engine/api/geary-progress-monitor.vala src/engine/api/geary-revokable.vala src/engine/api/geary-search-folder.vala @@ -157,8 +163,10 @@ src/engine/db/db-transaction-async-job.vala src/engine/db/db-transaction-outcome.vala src/engine/db/db-transaction-type.vala -src/engine/db/db.vala src/engine/db/db-versioned-database.vala +src/engine/db/db.vala +src/engine/imap/imap.vala +src/engine/imap/imap-error.vala src/engine/imap/api/imap-account.vala src/engine/imap/api/imap-email-flags.vala src/engine/imap/api/imap-email-properties.vala @@ -254,25 +262,23 @@ src/engine/imap-engine/replay-ops/imap-engine-user-close.vala src/engine/imap-engine/yahoo/imap-engine-yahoo-account.vala src/engine/imap-engine/yahoo/imap-engine-yahoo-folder.vala -src/engine/imap/imap-error.vala -src/engine/imap/imap.vala src/engine/imap/message/imap-data-format.vala src/engine/imap/message/imap-envelope.vala src/engine/imap/message/imap-fetch-body-data-specifier.vala src/engine/imap/message/imap-fetch-data-specifier.vala -src/engine/imap/message/imap-flags.vala src/engine/imap/message/imap-flag.vala +src/engine/imap/message/imap-flags.vala src/engine/imap/message/imap-internal-date.vala src/engine/imap/message/imap-mailbox-parameter.vala src/engine/imap/message/imap-mailbox-specifier.vala src/engine/imap/message/imap-message-data.vala -src/engine/imap/message/imap-message-flags.vala src/engine/imap/message/imap-message-flag.vala +src/engine/imap/message/imap-message-flags.vala src/engine/imap/message/imap-sequence-number.vala src/engine/imap/message/imap-status-data-type.vala src/engine/imap/message/imap-tag.vala -src/engine/imap/message/imap-uid.vala src/engine/imap/message/imap-uid-validity.vala +src/engine/imap/message/imap-uid.vala src/engine/imap/parameter/imap-atom-parameter.vala src/engine/imap/parameter/imap-list-parameter.vala src/engine/imap/parameter/imap-literal-parameter.vala @@ -287,8 +293,8 @@ src/engine/imap/response/imap-continuation-response.vala src/engine/imap/response/imap-fetch-data-decoder.vala src/engine/imap/response/imap-fetched-data.vala -src/engine/imap/response/imap-mailbox-attributes.vala src/engine/imap/response/imap-mailbox-attribute.vala +src/engine/imap/response/imap-mailbox-attributes.vala src/engine/imap/response/imap-mailbox-information.vala src/engine/imap/response/imap-response-code-type.vala src/engine/imap/response/imap-response-code.vala @@ -333,8 +339,8 @@ src/engine/rfc822/rfc822-gmime-filter-blockquotes.vala src/engine/rfc822/rfc822-gmime-filter-flowed.vala src/engine/rfc822/rfc822-gmime-filter-plain.vala -src/engine/rfc822/rfc822-mailbox-addresses.vala src/engine/rfc822/rfc822-mailbox-address.vala +src/engine/rfc822/rfc822-mailbox-addresses.vala src/engine/rfc822/rfc822-message-data.vala src/engine/rfc822/rfc822-message.vala src/engine/rfc822/rfc822-utils.vala @@ -362,9 +368,11 @@ src/engine/util/util-files.vala src/engine/util/util-generic-capabilities.vala src/engine/util/util-html.vala +src/engine/util/util-idle-manager.vala src/engine/util/util-imap-utf7.vala src/engine/util/util-inet.vala src/engine/util/util-iterable.vala +src/engine/util/util-js.vala src/engine/util/util-numeric.vala src/engine/util/util-object.vala src/engine/util/util-reference-semantics.vala @@ -373,21 +381,36 @@ src/engine/util/util-string.vala src/engine/util/util-synchronization.vala src/engine/util/util-time.vala +src/engine/util/util-timeout-manager.vala src/engine/util/util-trillian.vala src/mailer/main.vala [type: gettext/glade]ui/accelerators.ui [type: gettext/glade]ui/account_cannot_remove.glade [type: gettext/glade]ui/account_list.glade [type: gettext/glade]ui/account_spinner.glade -[type: gettext/glade]ui/app_menu.interface [type: gettext/glade]ui/certificate_warning_dialog.glade -[type: gettext/glade]ui/composer_accelerators.ui -[type: gettext/glade]ui/composer.glade +[type: gettext/glade]ui/composer-headerbar.ui +[type: gettext/glade]ui/composer-link-popover.ui +[type: gettext/glade]ui/composer-menus.ui +[type: gettext/glade]ui/composer-widget.ui +[type: gettext/glade]ui/conversation-email.ui +[type: gettext/glade]ui/conversation-email-attachment-view.ui +[type: gettext/glade]ui/conversation-email-menus.ui +[type: gettext/glade]ui/conversation-message-menus.ui +[type: gettext/glade]ui/conversation-message.ui +[type: gettext/glade]ui/conversation-viewer.ui [type: gettext/glade]ui/edit_alternate_emails.glade +[type: gettext/glade]ui/empty-placeholder.ui [type: gettext/glade]ui/find_bar.glade +[type: gettext/glade]ui/folder-popover.ui +[type: gettext/glade]ui/gtk/help-overlay.ui +[type: gettext/glade]ui/gtk/menus.ui [type: gettext/glade]ui/login.glade +[type: gettext/glade]ui/main-toolbar.ui +[type: gettext/glade]ui/main-window.ui [type: gettext/glade]ui/password-dialog.glade -[type: gettext/glade]ui/preferences.glade +[type: gettext/glade]ui/preferences-dialog.ui [type: gettext/glade]ui/remove_confirm.glade +[type: gettext/glade]ui/toolbar_empty_menu.ui [type: gettext/glade]ui/toolbar_mark_menu.ui [type: gettext/glade]ui/upgrade_dialog.glade diff -Nru geary-0.11.4/po/pt_BR.po geary-0.12.0/po/pt_BR.po --- geary-0.11.4/po/pt_BR.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/pt_BR.po 2017-10-02 11:25:21.000000000 +0000 @@ -1,6 +1,6 @@ -# Brazilian Portuguese translation for Geary email client -# Copyright 2016 Software Freedom Conservancy Inc. -# This file is distributed under the GNU LGPL, version 2.1. +# Brazilian Portuguese translation for geary. +# Copyright 2017 Software Freedom Conservancy Inc. +# This file is distributed under the same license as the geary package. # Translators (Transifex): # leonardolemos , 2012 # Fábio Nogueira , 2012 @@ -10,16 +10,17 @@ # Guilherme Gondim , 2013 # José Agnaldo Jr. , 2013 # Translators (GNOME): -# Enrico Nicoletto , 2014. -# Rafael Fontenelle , 2014, 2015, 2016. +# Enrico Nicoletto , 2014, 2016. +# Rafael Fontenelle , 2014, 2015, 2016, 2017. # Freire de Almeida , 2016. +# Ronan Arraes Jardim Chagas , 2016. msgid "" msgstr "" "Project-Id-Version: geary\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=geary&k" -"eywords=I18N+L10N&component=internationalization\n" -"POT-Creation-Date: 2016-12-19 21:09+0000\n" -"PO-Revision-Date: 2016-12-20 11:46-0200\n" +"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=geary&" +"keywords=I18N+L10N&component=internationalization\n" +"POT-Creation-Date: 2017-09-26 12:56+0000\n" +"PO-Revision-Date: 2017-09-26 18:46-0200\n" "Last-Translator: Rafael Fontenelle \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" @@ -30,31 +31,113 @@ "X-Generator: Virtaal 1.0.0-beta1\n" "X-Project-Style: gnome\n" -#: ../desktop/geary.desktop.in.h:1 ../desktop/geary-autostart.desktop.in.h:1 +#. Translators: The application name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:2 +#: ../desktop/org.gnome.Geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" msgstr "Geary" -#: ../desktop/geary.desktop.in.h:2 ../desktop/geary-autostart.desktop.in.h:2 -#: ../src/client/application/geary-application.vala:18 +#. Translators: The development team's name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:4 +msgid "Geary Development Team" +msgstr "Equipe de Desenvolvimento do Geary" + +#. Translators: The application's summary / tagline +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:6 +#: ../desktop/org.gnome.Geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 +msgid "Send and receive email" +msgstr "Envie e receba e-mail" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:7 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"Geary é um aplicativo de e-mail construído em conversas, para o ambiente do " +"GNOME 3. Ele permite que você leia, localize e envie e-mail com uma " +"interface simples e moderna." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:8 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"As conversas permitem que você leia uma discussão completa sem ter que " +"procurar e clicar de mensagem em mensagem." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:9 +msgid "Geary’s features include:" +msgstr "Os recursos do Geary incluem:" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:10 +msgid "Quick email account setup" +msgstr "Configuração rápida de conta de e-mail" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:11 +msgid "Shows related messages together in conversations" +msgstr "Mostrar mensagens relacionadas juntas, nas conversas" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:12 +msgid "Fast, full text and keyword search" +msgstr "Pesquisa rápida, de texto completo e de palavra-chave" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:13 +msgid "Full-featured HTML and plain text message composer" +msgstr "Compositor repleto de recursos para mensagens em HTML e texto simples" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:14 +msgid "Desktop notification of new mail" +msgstr "Notificação na área de trabalho de novo e-mail" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:15 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" +msgstr "" +"Compatível com GMail, Yahoo! Mail, Outlook.com e outros servidores IMAP" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:17 +#| msgid "_Display conversation preview" +msgid "Geary displaying a conversation" +msgstr "Geary exibindo uma conversa" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:19 +msgid "Geary showing the rich text composer" +msgstr "Geary mostrando um compositor de texto rico" + +#: ../desktop/org.gnome.Geary.desktop.in.h:2 +msgid "Email" +msgstr "E-mail" + +#: ../desktop/org.gnome.Geary.desktop.in.h:3 +msgid "Geary Email" +msgstr "E-mail Geary" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/org.gnome.Geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "Correio;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" + +#: ../desktop/org.gnome.Geary.desktop.in.h:7 ../ui/gtk/menus.ui.h:1 +msgid "Compose Message" +msgstr "Escrever mensagem" + +#: ../desktop/geary-autostart.desktop.in.h:2 +#: ../src/client/application/geary-application.vala:21 msgid "Mail Client" msgstr "Cliente de e-mail" -#: ../desktop/geary.desktop.in.h:3 ../desktop/geary-autostart.desktop.in.h:3 +#: ../desktop/geary-autostart.desktop.in.h:3 msgid "Geary Mail" msgstr "Correio eletrônico - Geary" -#: ../desktop/geary.desktop.in.h:4 ../desktop/geary-autostart.desktop.in.h:4 -msgid "Send and receive email" -msgstr "Enviar e receber e-mail" - -#: ../desktop/geary.desktop.in.h:5 ../desktop/geary-autostart.desktop.in.h:5 +#: ../desktop/geary-autostart.desktop.in.h:5 msgid "Email;E-mail;Mail;" msgstr "Email;E-mail;Mail;Correio eletrônico;e-mails;mensagens;" -#: ../desktop/geary.desktop.in.h:6 -msgid "Compose Message" -msgstr "Escrever mensagem" - #: ../desktop/geary-attach.contract.in.h:1 msgid "Send by email" msgstr "Enviar por e-mail" @@ -65,6 +148,7 @@ #: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:31 +#: ../ui/conversation-email-menus.ui.h:10 msgid "_Save" msgstr "_Salvar" @@ -74,7 +158,7 @@ msgstr "_Adicionar" #. reset/clear widgets -#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 #, c-format msgid "Additional addresses for %s" msgstr "Endereço adicional para %s" @@ -95,373 +179,364 @@ msgid "First Last" msgstr "Nome Sobrenome" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." msgstr "Bem-vindo ao Geary." -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." msgstr "Entre com as informações de sua conta para iniciar." -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "2 semanas atrás" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:254 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "1 mês atrás" -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "3 meses atrás" -#: ../src/client/accounts/add-edit-page.vala:256 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "6 meses atrás" -#: ../src/client/accounts/add-edit-page.vala:257 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "1 ano atrás" -#: ../src/client/accounts/add-edit-page.vala:258 +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" msgstr "2 anos atrás" -#: ../src/client/accounts/add-edit-page.vala:259 +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" msgstr "4 anos atrás" #. Separator -#: ../src/client/accounts/add-edit-page.vala:261 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "Tudo" -#: ../src/client/accounts/add-edit-page.vala:280 +#: ../src/client/accounts/add-edit-page.vala:283 msgid "Edit" msgstr "Editar" -#: ../src/client/accounts/add-edit-page.vala:282 +#: ../src/client/accounts/add-edit-page.vala:285 msgid "Preview" msgstr "Visualizar" -#: ../src/client/accounts/add-edit-page.vala:723 +#: ../src/client/accounts/add-edit-page.vala:751 msgid "Remem_ber passwords" msgstr "Lem_brar senhas" -#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:7 +#: ../src/client/accounts/add-edit-page.vala:758 ../ui/login.glade.h:7 msgid "Remem_ber password" msgstr "Lem_brar senha" -#: ../src/client/accounts/add-edit-page.vala:764 +#: ../src/client/accounts/add-edit-page.vala:792 msgid "Unable to validate:\n" msgstr "Incapaz de validar:\n" -#: ../src/client/accounts/add-edit-page.vala:766 -msgid " • Invalid account nickname.\n" -msgstr " • Apelido de conta inválido.\n" - -#: ../src/client/accounts/add-edit-page.vala:769 -msgid " • Email address already added to Geary.\n" -msgstr " • Endereço de e-mail já adicionado ao Geary.\n" - -#: ../src/client/accounts/add-edit-page.vala:773 -msgid " • IMAP connection error.\n" -msgstr " • Erro de conexão ao IMAP.\n" - -#: ../src/client/accounts/add-edit-page.vala:776 -msgid " • IMAP username or password incorrect.\n" -msgstr " • Nome de usuário ou senha de IMAP incorretos.\n" - -#: ../src/client/accounts/add-edit-page.vala:779 -msgid " • SMTP connection error.\n" -msgstr " • Erro de conexão ao SMTP.\n" - -#: ../src/client/accounts/add-edit-page.vala:782 -msgid " • SMTP username or password incorrect.\n" -msgstr " • Nome de usuário ou senha SMTP incorretos.\n" - -#: ../src/client/accounts/add-edit-page.vala:786 -msgid " • Connection error.\n" -msgstr " • Erro de conexão.\n" - -#: ../src/client/accounts/add-edit-page.vala:790 -msgid " • Username or password incorrect.\n" -msgstr " • Nome de usuário ou senha incorretos.\n" +#: ../src/client/accounts/add-edit-page.vala:794 +msgid " • Invalid account nickname.\n" +msgstr " • Apelido de conta inválido.\n" + +#: ../src/client/accounts/add-edit-page.vala:797 +msgid " • Email address already added to Geary.\n" +msgstr " • Endereço de e-mail já adicionado ao Geary.\n" + +#: ../src/client/accounts/add-edit-page.vala:801 +msgid " • IMAP connection error.\n" +msgstr " • Erro de conexão ao IMAP.\n" + +#: ../src/client/accounts/add-edit-page.vala:804 +msgid " • IMAP username or password incorrect.\n" +msgstr " • Nome de usuário ou senha de IMAP incorretos.\n" + +#: ../src/client/accounts/add-edit-page.vala:807 +msgid " • SMTP connection error.\n" +msgstr " • Erro de conexão ao SMTP.\n" + +#: ../src/client/accounts/add-edit-page.vala:810 +msgid " • SMTP username or password incorrect.\n" +msgstr " • Nome de usuário ou senha SMTP incorretos.\n" + +#: ../src/client/accounts/add-edit-page.vala:814 +msgid " • Connection error.\n" +msgstr " • Erro de conexão.\n" + +#: ../src/client/accounts/add-edit-page.vala:818 +msgid " • Username or password incorrect.\n" +msgstr " • Nome de usuário ou senha incorretos.\n" -#: ../src/client/application/geary-application.vala:19 +#: ../src/client/application/geary-application.vala:22 msgid "Copyright 2016 Software Freedom Conservancy Inc." msgstr "Copyright 2016 Software Freedom Conservancy Inc." -#: ../src/client/application/geary-application.vala:21 +#: ../src/client/application/geary-application.vala:24 msgid "Visit the Geary web site" msgstr "Visite o website do Geary" +#: ../src/client/application/geary-application.vala:464 +#, c-format +msgid "About %s" +msgstr "Sobre %s" + +#. Translators: add your name and email address to receive +#. credit in the About dialog For example: Yamada Taro +#. +#: ../src/client/application/geary-application.vala:468 +msgid "translator-credits" +msgstr "" +"Leonardo Lemos \n" +"Fábio Nogueira \n" +"Enrico Nicoletto \n" +"Rafael Fontenelle \n" +"Ronan Arraes Jardim Chagas " + #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" -msgstr "Iniciar Geary com a janela prinicipal oculta" +msgstr "Inicia o Geary com a janela principal oculta" #: ../src/client/application/geary-args.vala:11 msgid "Output debugging information" -msgstr "Informações de depuração de saída" +msgstr "Emite informações de depuração" #: ../src/client/application/geary-args.vala:12 msgid "Log conversation monitoring" -msgstr "Gravar monitoramento de conversação" +msgstr "Registra monitoramento de conversa" #: ../src/client/application/geary-args.vala:13 msgid "Log network deserialization" -msgstr "Desserialização do log de rede" +msgstr "Registra desserialização de rede" #: ../src/client/application/geary-args.vala:14 msgid "Log network activity" -msgstr "Registrar atividade de rede" +msgstr "Registra atividade de rede" #. / The IMAP replay queue is how changes on the server are replicated on the client. #. / It could also be called the IMAP events queue. #: ../src/client/application/geary-args.vala:17 msgid "Log IMAP replay queue" -msgstr "Registrar lista de repetição do IMAP" +msgstr "Registra lista de repetição do IMAP" #. / Serialization is how commands and responses are converted into a stream of bytes for #. / network transmission #: ../src/client/application/geary-args.vala:20 msgid "Log network serialization" -msgstr "Registrar serialização de rede" +msgstr "Registra serialização de rede" #: ../src/client/application/geary-args.vala:21 msgid "Log periodic activity" -msgstr "Registrar atividade periódica" +msgstr "Registra atividade periódica" #: ../src/client/application/geary-args.vala:22 msgid "Log database queries (generates lots of messages)" -msgstr "Registrar consultas ao banco de dados (gera muitas mensagens)" +msgstr "Registra consultas ao banco de dados (gera muitas mensagens)" #. / "Normalization" can also be called "synchronization" #: ../src/client/application/geary-args.vala:24 msgid "Log folder normalization" -msgstr "Registrar normalização de pasta" +msgstr "Registra normalização de pasta" #: ../src/client/application/geary-args.vala:25 msgid "Allow inspection of WebView" -msgstr "Permitir inspeção do WebView" +msgstr "Permite inspeção do WebView" #: ../src/client/application/geary-args.vala:26 msgid "Revoke all server certificates with TLS warnings" -msgstr "Revogar todos os certificados de servidor com avisos de TLS" +msgstr "Revoga todos os certificados de servidor com avisos de TLS" #: ../src/client/application/geary-args.vala:27 +msgid "Perform a graceful quit" +msgstr "Realiza uma saída graciosa" + +#: ../src/client/application/geary-args.vala:28 msgid "Display program version" -msgstr "Mostrar versão do programa" +msgstr "Mostra versão do programa" #. This gives a command-line hint on how to open new composer windows with mailto: -#: ../src/client/application/geary-args.vala:51 +#: ../src/client/application/geary-args.vala:53 #, c-format msgid "Use %s to open a new composer window" -msgstr "Usar %s para abrir uma nova janela de redator" +msgstr "Use %s para abrir uma nova janela do compositor" -#: ../src/client/application/geary-args.vala:52 +#: ../src/client/application/geary-args.vala:54 msgid "Please report comments, suggestions and bugs to:" msgstr "Por favor, envie sugestões, comentários ou erros para:" #. i18n: Command line arguments are invalid -#: ../src/client/application/geary-args.vala:59 +#: ../src/client/application/geary-args.vala:61 #, c-format msgid "Failed to parse command line options: %s\n" msgstr "Falha ao analisar as opções de linha de comando: %s\n" -#: ../src/client/application/geary-args.vala:70 +#: ../src/client/application/geary-args.vala:72 #, c-format -msgid "Unrecognized command line option \"%s\"\n" -msgstr "Opção de linha de comando não reconhecida \"%s\"\n" +msgid "Unrecognized command line option “%s”\n" +msgstr "Opção de linha de comando não reconhecida “%s”\n" -#: ../src/client/application/geary-controller.vala:61 +#: ../src/client/application/geary-controller.vala:57 msgid "Delete conversation" msgstr "Excluir conversa" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:58 msgid "Delete conversation (Shift+Delete)" msgstr "Excluir a conversa (Shift+Delete)" -#: ../src/client/application/geary-controller.vala:63 +#: ../src/client/application/geary-controller.vala:59 msgid "Delete conversations (Shift+Delete)" msgstr "Excluir as conversas (Shift+Delete)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:67 +#: ../src/client/application/geary-controller.vala:63 msgid "Move conversation to Trash (Delete, Backspace)" msgstr "Mover conversa para a lixeira (Delete, Backspace)" -#: ../src/client/application/geary-controller.vala:68 +#: ../src/client/application/geary-controller.vala:64 msgid "Move conversations to Trash (Delete, Backspace)" msgstr "Mover conversas para a lixeira (Delete, Backspace)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:72 +#: ../src/client/application/geary-controller.vala:68 msgid "_Archive" msgstr "_Arquivar" -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:69 msgid "Archive conversation (A)" msgstr "Arquivar conversa (A)" -#: ../src/client/application/geary-controller.vala:74 +#: ../src/client/application/geary-controller.vala:70 msgid "Archive conversations (A)" msgstr "Arquivar conversas (A)" -#: ../src/client/application/geary-controller.vala:77 +#: ../src/client/application/geary-controller.vala:73 msgid "Mark as S_pam" msgstr "Marcar como S_pam" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:74 msgid "Mark as not S_pam" msgstr "Marcar como não S_pam" -#: ../src/client/application/geary-controller.vala:80 -#: ../src/client/application/geary-controller.vala:396 +#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:448 msgid "Mark conversation" msgstr "Marcar conversação" -#: ../src/client/application/geary-controller.vala:81 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark conversations" msgstr "Marcar conversas" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:78 msgid "Add label to conversation" msgstr "Adicionar marcador à conversa" -#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:79 msgid "Add label to conversations" msgstr "Adicionar marcador às conversas" -#: ../src/client/application/geary-controller.vala:84 -#: ../src/client/application/geary-controller.vala:435 +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:487 msgid "Move conversation" msgstr "Mover conversa" -#: ../src/client/application/geary-controller.vala:85 +#: ../src/client/application/geary-controller.vala:81 msgid "Move conversations" msgstr "Mover conversas" -#: ../src/client/application/geary-controller.vala:376 -#: ../ui/app_menu.interface.h:1 -msgid "A_ccounts" -msgstr "_Contas" - -#: ../src/client/application/geary-controller.vala:381 -#: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 -msgid "_Preferences" -msgstr "_Preferências" - -#: ../src/client/application/geary-controller.vala:385 -#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:3 -msgid "_Help" -msgstr "_Ajuda" - -#: ../src/client/application/geary-controller.vala:389 -#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:4 -msgid "_About" -msgstr "_Sobre" - -#: ../src/client/application/geary-controller.vala:393 -#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:5 -msgid "_Quit" -msgstr "_Fechar" - -#: ../src/client/application/geary-controller.vala:398 -msgid "_Mark as..." -msgstr "_Marcar como..." +#: ../src/client/application/geary-controller.vala:450 +msgid "_Mark as…" +msgstr "_Marcar como…" -#: ../src/client/application/geary-controller.vala:404 +#: ../src/client/application/geary-controller.vala:456 msgid "Mark as _Read" msgstr "Marcar como l_ida" -#: ../src/client/application/geary-controller.vala:410 +#: ../src/client/application/geary-controller.vala:462 msgid "Mark as _Unread" msgstr "Marcar como _não lida" -#: ../src/client/application/geary-controller.vala:416 +#: ../src/client/application/geary-controller.vala:468 msgid "_Star" msgstr "_Marcar estrela" -#: ../src/client/application/geary-controller.vala:421 +#: ../src/client/application/geary-controller.vala:473 msgid "U_nstar" msgstr "_Tirar estrela" -#: ../src/client/application/geary-controller.vala:431 +#: ../src/client/application/geary-controller.vala:483 msgid "Add label" -msgstr "Adicionar etiqueta" +msgstr "Adicionar marcador" -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:484 msgid "_Label" -msgstr "_Selo" +msgstr "Ma_rcador" -#: ../src/client/application/geary-controller.vala:436 +#: ../src/client/application/geary-controller.vala:488 msgid "_Move" msgstr "_Mover" -#: ../src/client/application/geary-controller.vala:440 +#: ../src/client/application/geary-controller.vala:492 msgid "Compose new message (Ctrl+N, N)" msgstr "Compor nova mensagem (Ctrl+N, N)" -#. Reply to a message. -#: ../src/client/application/geary-controller.vala:444 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1873 +#: ../src/client/application/geary-controller.vala:496 +#: ../ui/conversation-email-menus.ui.h:1 msgid "_Reply" msgstr "_Responder" -#: ../src/client/application/geary-controller.vala:445 +#: ../src/client/application/geary-controller.vala:497 msgid "Reply (Ctrl+R, R)" msgstr "Responder (Ctrl+R, R)" -#: ../src/client/application/geary-controller.vala:449 +#: ../src/client/application/geary-controller.vala:501 msgid "R_eply All" msgstr "R_esponder todos" -#: ../src/client/application/geary-controller.vala:450 +#: ../src/client/application/geary-controller.vala:502 msgid "Reply all (Ctrl+Shift+R, Shift+R)" msgstr "Responder tudo (Ctrl+Shift+R, Shift+R)" -#. Forward a message. -#: ../src/client/application/geary-controller.vala:455 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1883 +#: ../src/client/application/geary-controller.vala:507 +#: ../ui/conversation-email-menus.ui.h:3 msgid "_Forward" msgstr "_Encaminhar" -#: ../src/client/application/geary-controller.vala:456 +#: ../src/client/application/geary-controller.vala:508 msgid "Forward (Ctrl+L, F)" msgstr "Encaminhar (Ctrl+L, F)" -#: ../src/client/application/geary-controller.vala:495 -msgid "Empty" -msgstr "Esvaziar" - -#: ../src/client/application/geary-controller.vala:496 -msgid "Empty Spam or Trash folders" -msgstr "Esvazia as pastas de spam e lixeira" - -#: ../src/client/application/geary-controller.vala:500 +#: ../src/client/application/geary-controller.vala:538 msgid "Empty _Spam…" msgstr "Esvaziar _spam…" -#: ../src/client/application/geary-controller.vala:504 +#: ../src/client/application/geary-controller.vala:542 msgid "Empty _Trash…" msgstr "Esvaziar _lixeira…" #. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:537 +#: ../src/client/application/geary-controller.vala:574 msgid "Toggle search bar" -msgstr "Ativa barra de pesquisa" +msgstr "Ativar/desativar barra de pesquisa" + +#. No callback is connected, since we bind the toggle button to the find bar visibility +#: ../src/client/application/geary-controller.vala:579 +msgid "Toggle find bar" +msgstr "Ativar/desativar barra de busca" -#: ../src/client/application/geary-controller.vala:744 +#: ../src/client/application/geary-controller.vala:757 msgid "Unable to store server trust exception" msgstr "Não foi possível armazenar exceção de confiança de servidor" -#: ../src/client/application/geary-controller.vala:981 +#: ../src/client/application/geary-controller.vala:992 msgid "Your settings are insecure" msgstr "Suas configurações são inseguras" -#: ../src/client/application/geary-controller.vala:982 +#: ../src/client/application/geary-controller.vala:993 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -471,29 +546,29 @@ "significa que seu usuário e senha poderão ser lidos por outra pessoa na " "rede. Você tem certeza que deseja fazer isso?" -#: ../src/client/application/geary-controller.vala:983 +#: ../src/client/application/geary-controller.vala:994 msgid "Co_ntinue" msgstr "Co_ntinuar" -#: ../src/client/application/geary-controller.vala:1030 +#: ../src/client/application/geary-controller.vala:1041 msgid "Error connecting to the server" -msgstr "Erro de conexão ao servidor" +msgstr "Erro ao conectar com o servidor" -#: ../src/client/application/geary-controller.vala:1031 +#: ../src/client/application/geary-controller.vala:1042 msgid "" "Geary encountered an error while connecting to the server. Please try again " "in a few moments." msgstr "" -"Geary encontrou um erro ao conectar ao servidor. Por favor tente novamente " -"em alguns momentos." +"Geary encontrou um erro enquanto tentava conectar com o servidor. Por favor, " +"tente novamente em alguns instantes." #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:1068 +#: ../src/client/application/geary-controller.vala:1079 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "Erro ao enviar e-mail" -#: ../src/client/application/geary-controller.vala:1069 +#: ../src/client/application/geary-controller.vala:1080 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." @@ -503,12 +578,12 @@ #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1073 +#: ../src/client/application/geary-controller.vala:1084 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "Erro ao salvar e-mail enviado" -#: ../src/client/application/geary-controller.vala:1074 +#: ../src/client/application/geary-controller.vala:1085 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." @@ -516,19 +591,19 @@ "O Geary encontrou um erro ao salvar um e-mail na pasta de Correios enviados. " "A mensagem vai permanecer em sua pasta Caixa de saída até você excluí-la." -#: ../src/client/application/geary-controller.vala:1143 +#: ../src/client/application/geary-controller.vala:1154 msgid "Labels" -msgstr "Rótulos" +msgstr "Marcadores" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1155 +#: ../src/client/application/geary-controller.vala:1166 #, c-format msgid "Unable to open the database for %s" msgstr "Incapaz de abrir o banco de dados para %s" -#: ../src/client/application/geary-controller.vala:1156 +#: ../src/client/application/geary-controller.vala:1167 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -553,20 +628,20 @@ "Reconstruir o banco de dados irá destruir todos e-mails locais e seus " "anexos. Os e-mails no seu servidor não serão afetados." -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "_Rebuild" msgstr "_Reconstruir" -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "E_xit" msgstr "S_air" -#: ../src/client/application/geary-controller.vala:1167 +#: ../src/client/application/geary-controller.vala:1178 #, c-format -msgid "Unable to rebuild database for \"%s\"" -msgstr "Incapaz de reconstruir o banco de dados para \"%s\"" +msgid "Unable to rebuild database for “%s”" +msgstr "Incapaz de reconstruir o banco de dados para “%s”" -#: ../src/client/application/geary-controller.vala:1168 +#: ../src/client/application/geary-controller.vala:1179 #, c-format msgid "" "Error during rebuild:\n" @@ -579,14 +654,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1190 -#: ../src/client/application/geary-controller.vala:1200 +#: ../src/client/application/geary-controller.vala:1201 #: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:1222 #, c-format msgid "Unable to open local mailbox for %s" msgstr "Incapaz de abrir a caixa de e-mail local para %s" -#: ../src/client/application/geary-controller.vala:1191 +#: ../src/client/application/geary-controller.vala:1202 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -605,21 +680,21 @@ "\n" "%s" -#: ../src/client/application/geary-controller.vala:1201 +#: ../src/client/application/geary-controller.vala:1212 msgid "" "The version number of the local mail database is formatted for a newer " -"version of Geary. Unfortunately, the database cannot be \"rolled back\" to " +"version of Geary. Unfortunately, the database cannot be “rolled back” to " "work with this version of Geary.\n" "\n" "Please install the latest version of Geary and try again." msgstr "" "O número da versão do banco de dados do correio local está formatado para " "uma versão mais recente do Geary. Infelizmente, o banco de dados não pode " -"ser \"revertido \" para trabalhar com esta versão do Geary.\n" +"ser “revertido” para trabalhar com esta versão do Geary.\n" "\n" "Por favor, instale a última versão do Geary e tente outra vez." -#: ../src/client/application/geary-controller.vala:1212 +#: ../src/client/application/geary-controller.vala:1223 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" @@ -631,30 +706,15 @@ "\n" "Por favor, verifique sua conexão de rede e reinicie o Geary." -#: ../src/client/application/geary-controller.vala:1723 -#, c-format -msgid "About %s" -msgstr "Sobre %s" - -#. / Translators: add your name and email address to receive credit in the About dialog -#. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1726 -msgid "translator-credits" -msgstr "" -"Leonardo Lemos \n" -"Fábio Nogueira \n" -"Enrico Nicoletto ." - -#: ../src/client/application/geary-controller.vala:1984 +#: ../src/client/application/geary-controller.vala:1999 msgid "Undo move (Ctrl+Z)" msgstr "Desfazer movimento (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:1994 -#, c-format -msgid "Are you sure you want to open \"%s\"?" -msgstr "Você tem certeza de que deseja abrir \"%s\"?" +#: ../src/client/application/geary-controller.vala:2009 +msgid "Are you sure you want to open these attachments?" +msgstr "Você tem certeza de que deseja abrir esses anexos?" -#: ../src/client/application/geary-controller.vala:1995 +#: ../src/client/application/geary-controller.vala:2010 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -662,117 +722,103 @@ "Anexos podem causar danos ao seu sistema se abertos. Apenas abra arquivos de " "fontes confiáveis." -#: ../src/client/application/geary-controller.vala:1996 -msgid "Don't _ask me again" +#: ../src/client/application/geary-controller.vala:2011 +msgid "Don’t _ask me again" msgstr "Não me _pergunte novamente" -#: ../src/client/application/geary-controller.vala:2014 +#: ../src/client/application/geary-controller.vala:2121 #, c-format -msgid "A file named \"%s\" already exists. Do you want to replace it?" -msgstr "Um arquivo chamado \"%s\" já existe. Você deseja substituí-lo?" +msgid "A file named “%s” already exists. Do you want to replace it?" +msgstr "Um arquivo chamado “%s” já existe. Você deseja substituí-lo?" -#: ../src/client/application/geary-controller.vala:2016 +#: ../src/client/application/geary-controller.vala:2123 #, c-format msgid "" -"The file already exists in \"%s\". Replacing it will overwrite its contents." +"The file already exists in “%s”. Replacing it will overwrite its contents." msgstr "" -"O arquivo já existe em \"%s\". Substituí-lo irá sobrescrever o seu conteúdo." +"O arquivo já existe em “%s”. Substituí-lo irá sobrescrever o seu conteúdo." -#: ../src/client/application/geary-controller.vala:2019 +#: ../src/client/application/geary-controller.vala:2126 msgid "_Replace" msgstr "_Substituir" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2324 +#: ../src/client/application/geary-controller.vala:2374 msgid "Close open draft messages?" msgstr "Fechar mensagens de rascunhos abertas?" -#: ../src/client/application/geary-controller.vala:2454 +#: ../src/client/application/geary-controller.vala:2496 #, c-format msgid "Empty all email from your %s folder?" msgstr "Esvaziar todos os e-mails de sua pasta %s?" -#: ../src/client/application/geary-controller.vala:2455 +#: ../src/client/application/geary-controller.vala:2497 msgid "This removes the email from Geary and your email server." msgstr "Isto remove o e-mail do Geary e do seu servidor de e-mail." -#: ../src/client/application/geary-controller.vala:2456 +#: ../src/client/application/geary-controller.vala:2498 msgid "This cannot be undone." msgstr "Isso não pode ser desfeito." -#: ../src/client/application/geary-controller.vala:2457 +#: ../src/client/application/geary-controller.vala:2499 #, c-format msgid "Empty %s" msgstr "Esvaziar %s" -#: ../src/client/application/geary-controller.vala:2474 +#: ../src/client/application/geary-controller.vala:2516 #, c-format msgid "Error emptying %s" msgstr "Erro ao esvaziar %s" -#: ../src/client/application/geary-controller.vala:2504 +#: ../src/client/application/geary-controller.vala:2546 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "Você deseja descartar permanentemente essa mensagem?" msgstr[1] "Você deseja descartar permanentemente essas mensagens?" -#: ../src/client/application/geary-controller.vala:2506 +#: ../src/client/application/geary-controller.vala:2548 msgid "Delete" msgstr "Excluir" -#: ../src/client/application/geary-controller.vala:2537 +#: ../src/client/application/geary-controller.vala:2580 msgid "Undo archive (Ctrl+Z)" msgstr "Desfazer arquivamento (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2552 +#: ../src/client/application/geary-controller.vala:2595 msgid "Undo trash (Ctrl+Z)" msgstr "Desfazer exclusão (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2605 +#: ../src/client/application/geary-controller.vala:2649 msgid "Undo (Ctrl+Z)" msgstr "Desfazer (Ctrl+Z)" -#: ../src/client/components/conversation-find-bar.vala:214 -#, c-format -msgid "%i match" -msgid_plural "%i matches" -msgstr[0] "%i ocorrência" -msgstr[1] "%i ocorrências" - -#: ../src/client/components/conversation-find-bar.vala:216 -#, c-format -msgid "%i match (wrapped)" -msgid_plural "%i matches (wrapped)" -msgstr[0] "%i ocorrência (quebrada)" -msgstr[1] "%i ocorrências (quebradas)" - -#: ../src/client/components/conversation-find-bar.vala:218 -msgid "not found" -msgstr "não encontrado" +#: ../src/client/application/geary-controller.vala:2780 +msgid "Failed to open default text editor." +msgstr "Falha ao abrir o editor de texto padrão." -#: ../src/client/components/main-window.vala:438 +#: ../src/client/components/main-window.vala:389 #, c-format msgid "%s (%d)" msgstr "%s (%d)" -#: ../src/client/components/search-bar.vala:10 +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "Pesquisar" #. Search entry. -#: ../src/client/components/search-bar.vala:25 +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" msgstr "Pesquisar todos os e-mails na conta por palavras-chave (Ctrl+S)" -#: ../src/client/components/search-bar.vala:118 +#: ../src/client/components/search-bar.vala:100 #, c-format msgid "Indexing %s account" msgstr "Indexando a conta %s" -#: ../src/client/components/search-bar.vala:129 +#: ../src/client/components/search-bar.vala:111 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" @@ -780,8 +826,8 @@ #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 -msgid "Sending..." -msgstr "Enviando..." +msgid "Sending…" +msgstr "Enviando…" #: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 msgid "_OK" @@ -792,6 +838,10 @@ msgid "_Cancel" msgstr "_Cancelar" +#: ../src/client/components/stock.vala:21 ../ui/gtk/menus.ui.h:6 +msgid "_About" +msgstr "_Sobre" + #: ../src/client/components/stock.vala:23 msgid "_Close" msgstr "_Fechar" @@ -800,51 +850,71 @@ msgid "_Discard" msgstr "_Descartar" -#: ../src/client/components/stock.vala:26 +#: ../src/client/components/stock.vala:25 ../ui/gtk/menus.ui.h:5 +msgid "_Help" +msgstr "_Ajuda" + +#: ../src/client/components/stock.vala:26 ../ui/conversation-email-menus.ui.h:9 msgid "_Open" msgstr "_Abrir" -#: ../src/client/components/stock.vala:28 -msgid "_Print..." -msgstr "_Imprimir..." +#: ../src/client/components/stock.vala:27 ../ui/gtk/menus.ui.h:3 +msgid "_Preferences" +msgstr "_Preferências" + +#: ../src/client/components/stock.vala:28 ../ui/conversation-email-menus.ui.h:7 +msgid "_Print…" +msgstr "_Imprimir…" + +#: ../src/client/components/stock.vala:29 ../ui/gtk/menus.ui.h:7 +msgid "_Quit" +msgstr "_Fechar" #: ../src/client/components/stock.vala:30 ../ui/remove_confirm.glade.h:6 msgid "_Remove" msgstr "_Remover" -#. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1335 -msgid "Select _All" -msgstr "Selecionar _tudo" - -#: ../src/client/components/stock.vala:33 msgid "_Keep" msgstr "_Manter" -#: ../src/client/composer/composer-widget.vala:73 +#: ../src/client/composer/composer-link-popover.vala:150 +msgid "Link URL is not correctly formatted, e.g. http://example.com" +msgstr "URL de link não está corretamente formatado, ex.: http://example.com" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid link URL" +msgstr "URL de link inválido" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid email address" +msgstr "Endereço de e-mail inválido" + +#: ../src/client/composer/composer-widget.vala:154 msgid "Saved" msgstr "Salvo" -#: ../src/client/composer/composer-widget.vala:74 +#: ../src/client/composer/composer-widget.vala:155 msgid "Saving" msgstr "Salvando" -#: ../src/client/composer/composer-widget.vala:75 +#: ../src/client/composer/composer-widget.vala:156 msgid "Error saving" msgstr "Erro ao salvar" -#: ../src/client/composer/composer-widget.vala:76 +#: ../src/client/composer/composer-widget.vala:157 msgid "Press Backspace to delete quote" msgstr "Pressione Backspace para excluir citação" -#: ../src/client/composer/composer-widget.vala:77 +#: ../src/client/composer/composer-widget.vala:158 msgid "New Message" msgstr "Nova mensagem" -#. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since -#. this is full-word checking, include all variants of each word. No spaces are allowed. -#: ../src/client/composer/composer-widget.vala:138 +#. Translators: This is list of keywords, separated by pipe ("|") +#. characters, that suggest an attachment; since this is full-word +#. checking, include all variants of each word. No spaces are +#. allowed. +#: ../src/client/composer/composer-widget.vala:167 msgid "" "attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" "enclosing|encloses|enclosure|enclosures" @@ -852,274 +922,185 @@ "anexar|anexando|anexa|anexo|anexos|anexado|anexada|inserir|inserido|" "inserindo|insere|inserido|inserida|inseridos|inseridas" -#: ../src/client/composer/composer-widget.vala:1121 -#: ../src/client/composer/composer-widget.vala:1125 +#: ../src/client/composer/composer-widget.vala:1122 +#: ../src/client/composer/composer-widget.vala:1141 msgid "Do you want to discard this message?" msgstr "Você deseja descartar esta mensagem?" -#: ../src/client/composer/composer-widget.vala:1281 +#: ../src/client/composer/composer-widget.vala:1245 msgid "Send message with an empty subject and body?" msgstr "Enviar mensagem com o assunto e corpo vazio?" -#: ../src/client/composer/composer-widget.vala:1283 +#: ../src/client/composer/composer-widget.vala:1247 msgid "Send message with an empty subject?" msgstr "Enviar mensagem com o assunto vazio?" -#: ../src/client/composer/composer-widget.vala:1285 +#: ../src/client/composer/composer-widget.vala:1249 msgid "Send message with an empty body?" msgstr "Enviar mensagem com o corpo vazio?" -#: ../src/client/composer/composer-widget.vala:1287 +#: ../src/client/composer/composer-widget.vala:1253 msgid "Send message without an attachment?" msgstr "Enviar mensagem sem anexo?" -#: ../src/client/composer/composer-widget.vala:1553 -msgid "Cannot add attachment" -msgstr "Não é possível adicionar anexo" - -#: ../src/client/composer/composer-widget.vala:1564 +#: ../src/client/composer/composer-widget.vala:1515 #, c-format -msgid "\"%s\" could not be found." -msgstr "\"%s\" não foi encontrado." +msgid "“%s” already attached for delivery." +msgstr "“%s” já foi anexado para envio." -#: ../src/client/composer/composer-widget.vala:1571 +#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" +#. Translators: The first argument will be a +#. description of the document type, the second will +#. be a human-friendly size string. For example: +#. Document (100.9MB) +#: ../src/client/composer/composer-widget.vala:1523 +#: ../src/client/conversation-viewer/conversation-email.vala:138 #, c-format -msgid "\"%s\" is a folder." -msgstr "\"%s\" é uma pasta." +msgid "%s (%s)" +msgstr "%s (%s)" -#: ../src/client/composer/composer-widget.vala:1578 +#: ../src/client/composer/composer-widget.vala:1560 #, c-format -msgid "\"%s\" is an empty file." -msgstr "\"%s\" é um arquivo vazio." +msgid "“%s” could not be found." +msgstr "“%s” não foi encontrado." -#: ../src/client/composer/composer-widget.vala:1592 +#: ../src/client/composer/composer-widget.vala:1566 #, c-format -msgid "\"%s\" could not be opened for reading." -msgstr "\"%s\" não pôde ser aberto para leitura." +msgid "“%s” is a folder." +msgstr "“%s” é uma pasta." -#: ../src/client/composer/composer-widget.vala:1599 +#: ../src/client/composer/composer-widget.vala:1572 #, c-format -msgid "\"%s\" already attached for delivery." -msgstr "\"%s\" já foi anexado para envio." +msgid "“%s” is an empty file." +msgstr "“%s” é um arquivo vazio." -#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-widget.vala:1608 +#: ../src/client/composer/composer-widget.vala:1585 #, c-format -msgid "%s (%s)" -msgstr "%s (%s)" +msgid "“%s” could not be opened for reading." +msgstr "“%s” não pôde ser aberto para leitura." + +#: ../src/client/composer/composer-widget.vala:1593 +msgid "Cannot add attachment" +msgstr "Não é possível adicionar anexo" -#: ../src/client/composer/composer-widget.vala:1668 +#: ../src/client/composer/composer-widget.vala:1645 msgid "To: " msgstr "Para: " -#: ../src/client/composer/composer-widget.vala:1671 +#: ../src/client/composer/composer-widget.vala:1648 msgid "Cc: " msgstr "Cc: " -#: ../src/client/composer/composer-widget.vala:1674 +#: ../src/client/composer/composer-widget.vala:1651 msgid "Bcc: " msgstr "Cco: " -#: ../src/client/composer/composer-widget.vala:1677 +#: ../src/client/composer/composer-widget.vala:1654 msgid "Reply-To: " msgstr "Responder-a: " -#: ../src/client/composer/composer-widget.vala:1910 +#: ../src/client/composer/composer-widget.vala:1786 msgid "Select Color" msgstr "Selecione a cor" #. Displayed in the From dropdown to indicate an "alternate email address" #. for an account. The first printf argument will be the alternate email #. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2345 +#: ../src/client/composer/composer-widget.vala:1986 #, c-format msgid "%1$s via %2$s" msgstr "%1$s via %2$s" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2389 +#: ../src/client/composer/composer-widget.vala:2028 msgid "_From:" msgstr "_De:" +#. Translators: This is the name of the file chooser filter +#. when inserting an image in the composer. +#: ../src/client/composer/composer-widget.vala:2252 +msgid "Images" +msgstr "Imagens" + +#: ../src/client/composer/spell-check-popover.vala:117 +msgid "Remove this language from the preferred list" +msgstr "Remover esse idioma da lista de preferência" + +#: ../src/client/composer/spell-check-popover.vala:121 +msgid "Add this language to the preferred list" +msgstr "Adicionar esse idioma à lista de preferência" + +#: ../src/client/composer/spell-check-popover.vala:217 +msgid "Search for more languages" +msgstr "Procurar por mais idiomas" + #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Mim" -#: ../src/client/conversation-viewer/conversation-viewer.vala:414 -msgid "No conversations selected." -msgstr "Não há conversas selecionadas." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:416 -#, c-format -msgid "%u conversation selected." -msgid_plural "%u conversations selected." -msgstr[0] "%u conversa selecionada." -msgstr[1] "%u conversas selecionadas." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:446 -msgid "No search results found." -msgstr "Nenhum resultado encontrado." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:448 -msgid "No conversations in folder." -msgstr "Não há conversas na pasta." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "This message contains remote images." -msgstr "Esta mensagem contém imagens remotas." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "Show Images" -msgstr "Mostrar imagens" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:715 -msgid "Always Show From Sender" -msgstr "Mostrar sempre do remetente" +#. Translators: This is the file type displayed for +#. attachments with unknown file types. +#: ../src/client/conversation-viewer/conversation-email.vala:124 +msgid "Unknown" +msgstr "Desconhecido" + +#. Preview headers +#. Translators: This is displayed in place of the from address +#. when the message has no from address. +#: ../src/client/conversation-viewer/conversation-message.vala:331 +msgid "No sender" +msgstr "Sem remetente" + +#. Translators: This separates multiple 'from' +#. addresses in the header preview for a message. +#: ../src/client/conversation-viewer/conversation-message.vala:586 +msgid ", " +msgstr ", " + +#. Translators: This string is used as the HTML IMG ALT +#. attribute value when displaying an inline image in an email +#. that did not specify a file name. E.g. Image" +msgstr "De " + +#: ../ui/conversation-message.ui.h:2 +msgid "1/1/1970\t" +msgstr "1/1/1970\t" + +#: ../ui/conversation-message.ui.h:3 +msgid "Preview body text." +msgstr "Visualização do corpo do texto." + +#: ../ui/conversation-message.ui.h:4 +msgid "Sent by:" +msgstr "Enviado por:" + +#: ../ui/conversation-message.ui.h:5 +msgid "Reply to:" +msgstr "Responder para:" + +#: ../ui/conversation-message.ui.h:6 +msgid "Subject" +msgstr "Assunto" -#: ../ui/composer.glade.h:55 -msgid "_Subject" -msgstr "A_ssunto" +#: ../ui/conversation-message.ui.h:7 +msgid "To:" +msgstr "Para:" -#: ../ui/composer.glade.h:56 -msgid "_Bcc" -msgstr "Cc_o" +#: ../ui/conversation-message.ui.h:8 +msgid "Cc:" +msgstr "Cc:" -#: ../ui/composer.glade.h:57 -msgid "_Reply-To" -msgstr "_Responder-a" +#: ../ui/conversation-message.ui.h:9 +msgid "Bcc:" +msgstr "Cco:" -#. Geary account mail will be sent from -#: ../ui/composer.glade.h:59 -msgid "From" -msgstr "De" +#: ../ui/conversation-message.ui.h:10 +msgid "Show Images" +msgstr "Mostrar imagens" -#: ../ui/composer.glade.h:60 -msgid "Drop files here" -msgstr "Solte arquivos aqui" +#: ../ui/conversation-message.ui.h:11 +msgid "Always Show From Sender" +msgstr "Mostrar sempre do remetente" -#: ../ui/composer.glade.h:61 -msgid "To add them as attachments" -msgstr "Para adicionar eles como anexos" +#: ../ui/conversation-message.ui.h:12 +msgid "Remote images not shown" +msgstr "Imagens remotas não mostradas" + +# Traduzido como se fosse uma ação do sistema, porém se possível verificar se isto se trata de uma descrição de tela para o usuário (hint) --Enrico +#: ../ui/conversation-message.ui.h:13 +msgid "Only show remote images from senders you trust." +msgstr "Mostrar somente imagens remotas de remetentes que você confia." + +#: ../ui/conversation-message.ui.h:14 +msgid "But actually goes to:" +msgstr "Mas na verdade vai para:" + +#: ../ui/conversation-message.ui.h:15 +msgid "The link appears to go to:" +msgstr "O link parece ir para:" + +#: ../ui/conversation-message.ui.h:16 +msgid "Deceptive link found" +msgstr "Link suspeito localizado" + +#: ../ui/conversation-message.ui.h:17 +msgid "The email sender may be leading you to the wrong web site." +msgstr "O remetente de e-mail pode estar levando você ao site errado." + +#: ../ui/conversation-message.ui.h:18 +msgid "If unsure, contact the sender and ask before continuing." +msgstr "" +"Se estiver incerto, contate o remetente e pergunte-o antes de continuar." + +#: ../ui/conversation-viewer.ui.h:1 +msgid "Find in conversation" +msgstr "Pesquisar na conversa" + +#: ../ui/conversation-viewer.ui.h:2 +msgid "Find the previous occurrence of the search string." +msgstr "Pesquisar a ocorrência anterior do texto de pesquisa." + +#: ../ui/conversation-viewer.ui.h:3 +msgid "Find the next occurrence of the search string." +msgstr "Pesquisar a próxima ocorrência do texto de pesquisa." #: ../ui/edit_alternate_emails.glade.h:1 msgid "Remove email address" @@ -2041,11 +2178,11 @@ #: ../ui/edit_alternate_emails.glade.h:4 msgid "_Update" -msgstr "_Atualizar" +msgstr "Atuali_zar" #: ../ui/find_bar.glade.h:1 msgid "Find:" -msgstr "Localizar:" +msgstr "Pesquisar:" #: ../ui/find_bar.glade.h:2 msgid "_Previous" @@ -2057,11 +2194,252 @@ #: ../ui/find_bar.glade.h:4 msgid "_Case sensitive" -msgstr "_Sensível à maiúsculas" +msgstr "_Dif. maiúsculas" #: ../ui/find_bar.glade.h:5 msgid "label" -msgstr "rótulo" +msgstr "marcador" + +#: ../ui/gtk/help-overlay.ui.h:1 +msgid "Conversation Shortcuts" +msgstr "Atalhos da conversa" + +#: ../ui/gtk/help-overlay.ui.h:2 +msgctxt "shortcut window" +msgid "General" +msgstr "Geral" + +#: ../ui/gtk/help-overlay.ui.h:3 +msgctxt "shortcut window" +msgid "Move focus to the next/previous pane" +msgstr "Move o foco para o painel próximo/anterior" + +#: ../ui/gtk/help-overlay.ui.h:4 +msgctxt "shortcut window" +msgid "Move focus to conversation list" +msgstr "Move o foco para a lista de conversas" + +#: ../ui/gtk/help-overlay.ui.h:5 +msgctxt "shortcut window" +msgid "Detach composer window" +msgstr "Destaca a janela do compositor" + +#: ../ui/gtk/help-overlay.ui.h:6 +msgctxt "shortcut window" +msgid "Close composer window" +msgstr "Fecha a janela do compositor" + +#: ../ui/gtk/help-overlay.ui.h:7 +msgctxt "shortcut window" +msgid "Show keyboard shortcuts" +msgstr "Mostra os atalhos do teclado" + +#: ../ui/gtk/help-overlay.ui.h:8 +msgctxt "shortcut window" +msgid "Show help" +msgstr "Mostra ajuda" + +#: ../ui/gtk/help-overlay.ui.h:9 +msgctxt "shortcut window" +msgid "Quit the application" +msgstr "Sai do aplicativo" + +#: ../ui/gtk/help-overlay.ui.h:10 +msgctxt "shortcut window" +msgid "Search" +msgstr "Pesquisa" + +#: ../ui/gtk/help-overlay.ui.h:11 +msgctxt "shortcut window" +msgid "Jump to search box" +msgstr "Vai para o campo de pesquisa" + +#: ../ui/gtk/help-overlay.ui.h:12 +msgctxt "shortcut window" +msgid "Find in current conversation" +msgstr "Pesquisa na conversa atual" + +#: ../ui/gtk/help-overlay.ui.h:13 +msgctxt "shortcut window" +msgid "Find next/previous in current conversation" +msgstr "Pesquisa próximo/anterior na conversa atual" + +#: ../ui/gtk/help-overlay.ui.h:14 +msgctxt "shortcut window" +msgid "Actions" +msgstr "Ações" + +#: ../ui/gtk/help-overlay.ui.h:15 +msgctxt "shortcut window" +msgid "Compose a new message" +msgstr "Escreve uma nova mensagem" + +#: ../ui/gtk/help-overlay.ui.h:16 +msgctxt "shortcut window" +msgid "Reply to sender " +msgstr "Responde para o remetente " + +#: ../ui/gtk/help-overlay.ui.h:17 +msgctxt "shortcut window" +msgid "Reply to all" +msgstr "Responde para todos" + +#: ../ui/gtk/help-overlay.ui.h:18 +msgctxt "shortcut window" +msgid "Forward" +msgstr "Encaminha" + +#: ../ui/gtk/help-overlay.ui.h:19 +msgctxt "shortcut window" +msgid "Archive" +msgstr "Arquiva" + +#: ../ui/gtk/help-overlay.ui.h:20 +msgctxt "shortcut window" +msgid "Move to trash" +msgstr "Move para a lixeira" + +#: ../ui/gtk/help-overlay.ui.h:21 +msgctxt "shortcut window" +msgid "Toggle spam" +msgstr "Marca/desmarca como spam" + +#: ../ui/gtk/help-overlay.ui.h:22 +msgctxt "shortcut window" +msgid "Move the conversation" +msgstr "Move a conversa" + +#: ../ui/gtk/help-overlay.ui.h:23 +msgctxt "shortcut window" +msgid "Label the conversation" +msgstr "Rotula a conversa" + +#: ../ui/gtk/help-overlay.ui.h:24 +msgctxt "shortcut window" +msgid "Mark read" +msgstr "Marca como lida" + +#: ../ui/gtk/help-overlay.ui.h:25 +msgctxt "shortcut window" +msgid "Mark unread" +msgstr "Marca como não lida" + +#: ../ui/gtk/help-overlay.ui.h:26 +msgctxt "shortcut window" +msgid "View" +msgstr "Visão" + +#: ../ui/gtk/help-overlay.ui.h:27 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Amplia" + +#: ../ui/gtk/help-overlay.ui.h:28 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Reduz" + +#: ../ui/gtk/help-overlay.ui.h:29 +msgctxt "shortcut window" +msgid "Reset zoom" +msgstr "Redefine ampliação" + +#: ../ui/gtk/help-overlay.ui.h:30 +msgctxt "shortcut window" +msgid "Additional Shortcuts" +msgstr "Atalhos adicionais" + +#: ../ui/gtk/help-overlay.ui.h:31 +msgctxt "shortcut window" +msgid "Star" +msgstr "Marca estrela" + +#: ../ui/gtk/help-overlay.ui.h:32 +msgctxt "shortcut window" +msgid "Unstar" +msgstr "Remove estrela" + +#: ../ui/gtk/help-overlay.ui.h:33 +msgctxt "shortcut window" +msgid "Delete" +msgstr "Exclui" + +#: ../ui/gtk/help-overlay.ui.h:34 +msgctxt "shortcut window" +msgid "Jump to next (older) conversation" +msgstr "Vai para a próxima conversa (mais antiga)" + +#: ../ui/gtk/help-overlay.ui.h:35 +msgctxt "shortcut window" +msgid "Jump to previous (newer) conversation" +msgstr "Vai para a conversa anterior (mais nova)" + +#: ../ui/gtk/help-overlay.ui.h:36 +msgid "Composer Shortcuts" +msgstr "Atalhos do redator" + +#: ../ui/gtk/help-overlay.ui.h:37 +msgctxt "shortcut window" +msgid "Quote text" +msgstr "Texto citado" + +#: ../ui/gtk/help-overlay.ui.h:38 +msgctxt "shortcut window" +msgid "Unquote text" +msgstr "Texto não-citado" + +#: ../ui/gtk/help-overlay.ui.h:39 +msgctxt "shortcut window" +msgid "Send" +msgstr "Envia" + +#: ../ui/gtk/help-overlay.ui.h:40 +msgctxt "shortcut window" +msgid "Add attachment" +msgstr "Adiciona anexo" + +#: ../ui/gtk/help-overlay.ui.h:41 +msgctxt "shortcut window" +msgid "Rich text mode" +msgstr "Modo de texto rico" + +#: ../ui/gtk/help-overlay.ui.h:42 +msgctxt "shortcut window" +msgid "Bold text" +msgstr "Negrito" + +#: ../ui/gtk/help-overlay.ui.h:43 +msgctxt "shortcut window" +msgid "Italicize text" +msgstr "Itálico" + +#: ../ui/gtk/help-overlay.ui.h:44 +msgctxt "shortcut window" +msgid "Underline text" +msgstr "Sublinhado" + +#: ../ui/gtk/help-overlay.ui.h:45 +msgctxt "shortcut window" +msgid "Strike text" +msgstr "Tachado" + +#: ../ui/gtk/help-overlay.ui.h:46 +msgctxt "shortcut window" +msgid "Insert a link" +msgstr "Insere um link" + +#: ../ui/gtk/help-overlay.ui.h:47 +msgctxt "shortcut window" +msgid "Remove formatting" +msgstr "Remove formatação" + +#: ../ui/gtk/menus.ui.h:2 +msgid "A_ccounts" +msgstr "_Contas" + +#: ../ui/gtk/menus.ui.h:4 +msgid "_Keyboard Shortcuts" +msgstr "Atalhos de _teclado" #: ../ui/login.glade.h:1 msgid "email@example.com" @@ -2187,9 +2565,9 @@ msgid "Use IMAP cre_dentials" msgstr "Usar cre_denciais de IMAP" -#: ../ui/login.glade.h:34 ../ui/preferences.glade.h:5 +#: ../ui/login.glade.h:34 msgid "Composer" -msgstr "Compositor" +msgstr "Redator" #: ../ui/login.glade.h:35 msgid "Save dra_fts on server" @@ -2207,6 +2585,10 @@ msgid "_Download mail" msgstr "Bai_xar e-mail" +#: ../ui/main-toolbar.ui.h:1 +msgid "Empty Spam or Trash folders" +msgstr "Esvazia as pastas de spam e lixeira" + #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" msgstr "Credenciais de SMTP" @@ -2223,48 +2605,44 @@ msgid "_Authenticate" msgstr "_Autenticar" -#: ../ui/preferences.glade.h:1 +#: ../ui/preferences-dialog.ui.h:1 msgid "Reading" msgstr "Lendo" -#: ../ui/preferences.glade.h:2 +#: ../ui/preferences-dialog.ui.h:2 msgid "_Automatically select next message" msgstr "Selecionar _automaticamente a próxima mensagem" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences-dialog.ui.h:3 msgid "_Display conversation preview" msgstr "_Exibir visualização de conversa" -#: ../ui/preferences.glade.h:4 +#: ../ui/preferences-dialog.ui.h:4 msgid "Use _three pane view" msgstr "Usar visão de _três painéis" -#: ../ui/preferences.glade.h:6 -msgid "Enable _spell checking" -msgstr "Habilitar a _verificação ortográfica" - -#: ../ui/preferences.glade.h:7 +#: ../ui/preferences-dialog.ui.h:5 msgid "Notifications" msgstr "Notificações" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences-dialog.ui.h:6 msgid "_Play notification sounds" msgstr "_Tocar sons de notificação" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences-dialog.ui.h:7 msgid "Show _notifications for new mail" msgstr "Exibir _notificações para novo e-mail" -#: ../ui/preferences.glade.h:10 +#: ../ui/preferences-dialog.ui.h:8 msgid "Always _watch for new mail" msgstr "Sempre _monitorar por novo e-mail" -#: ../ui/preferences.glade.h:11 +#: ../ui/preferences-dialog.ui.h:9 msgid "Geary will run in the background and notify of new mail" msgstr "" "Geary será executado em segundo plano e notificará recebimento de novo e-mail" -#: ../ui/preferences.glade.h:12 +#: ../ui/preferences-dialog.ui.h:10 msgid "Preferences" msgstr "Preferências" @@ -2296,18 +2674,148 @@ msgid "Geary update in progress…" msgstr "Atualização do Geary em progresso…" -#~ msgid "Search for more languages" -#~ msgstr "Procurar por mais idiomas" +#~ msgid "none" +#~ msgstr "nenhum" + +#~ msgid "_Inspect" +#~ msgstr "_Inspecionar" + +#~| msgid "%s - Composer Inspector" +#~ msgid "%s — Composer Inspector" +#~ msgstr "%s — Inspetor do redator" + +#~ msgid " (Invalid?)" +#~ msgstr " (Inválido?)" + +#~| msgid "%s - Conversation Inspector" +#~ msgid "%s — Conversation Inspector" +#~ msgstr "%s — Inspetor de conversa" + +#~ msgid "Copy _Link" +#~ msgstr "Copiar _Link" + +#~ msgid "Link (Ctrl+L)" +#~ msgstr "Link (Ctrl+L)" + +#~ msgid "Enable _spell checking" +#~ msgstr "Habilitar a _verificação ortográfica" + +#~ msgid "_Inspect..." +#~ msgstr "_Inspecionar..." + +#~ msgid "Empty" +#~ msgstr "Esvaziar" + +#~ msgid "%i match" +#~ msgid_plural "%i matches" +#~ msgstr[0] "%i ocorrência" +#~ msgstr[1] "%i ocorrências" + +#~ msgid "%i match (wrapped)" +#~ msgid_plural "%i matches (wrapped)" +#~ msgstr[0] "%i ocorrência (quebrada)" +#~ msgstr[1] "%i ocorrências (quebradas)" + +#~ msgid "not found" +#~ msgstr "não encontrado" + +#~ msgid "No search results found." +#~ msgstr "Nenhum resultado encontrado." + +#~ msgid "From:" +#~ msgstr "De:" -#~ msgid "Attach File (Ctrl+T)" -#~ msgstr "Anexar um arquivo (Ctrl+T)" +#~ msgid "Date:" +#~ msgstr "Data:" -#~ msgid "Select spell checking language" -#~ msgstr "Selecione o idioma da verificação ortográfica" +#~ msgid "Select _Message" +#~ msgstr "Selecionar _Mensagem" + +#~ msgid "_Save As..." +#~ msgstr "_Salvar como..." + +#~ msgid "Save A_ttachment..." +#~ msgid_plural "Save All A_ttachments..." +#~ msgstr[0] "Salvar a_nexo..." +#~ msgstr[1] "Salvar todos os a_nexos..." + +#~| msgctxt "Label" +#~| msgid "Close and Discard" +#~ msgid "Close and Discard" +#~ msgstr "Fechar e descartar" + +#~| msgctxt "Label" +#~| msgid "Close and Save" +#~ msgid "Close and Save" +#~ msgstr "Fechar e salvar" + +#~ msgid "_Left" +#~ msgstr "_Esquerda" + +#~ msgid "_Right" +#~ msgstr "_Direita" + +#~ msgid "_Center" +#~ msgstr "_Centro" + +#~ msgid "_Justify" +#~ msgstr "_Justificar" + +#~ msgid "More options" +#~ msgstr "Mais opções" + +#~ msgctxt "Short Label" +#~ msgid "Close and Save" +#~ msgstr "Fechar e salvar" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Save" +#~ msgstr "Fecha e salva" + +#~ msgctxt "Short Label" +#~ msgid "Close and Discard" +#~ msgstr "Fechar e descartar" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Discard" +#~ msgstr "Fecha e descarta" + +#~ msgid "Large" +#~ msgstr "Grande" + +#~ msgid "Medium" +#~ msgstr "Médio" + +#~ msgid "Small" +#~ msgstr "Pequeno" + +#~ msgid "Sans Serif" +#~ msgstr "Sans Serif" + +#~ msgid "Serif" +#~ msgstr "Serif" + +#~ msgid "Fixed Width" +#~ msgstr "Largura fixa" + +#~ msgid "Detach" +#~ msgstr "Desanexar" + +#~ msgid "_Attach File" +#~ msgstr "_Anexar arquivo" + +#~ msgid "Attach File" +#~ msgstr "Anexar arquivo" + +#~ msgid "_Include Original Attachments" +#~ msgstr "_Inclui anexos originais" #~ msgid "Spelling language" #~ msgstr "Idioma para verificação" +#~ msgid "Application Menu" +#~ msgstr "Menu de aplicativo" + #~| msgid "Copyright 2011-2014 Yorba Foundation" #~ msgid "Copyright 2011-2015 Yorba Foundation" #~ msgstr "Copyright 2011-2015 Yorba Foundation" @@ -2357,9 +2865,6 @@ #~ msgid "Real name:" #~ msgstr "Nome real:" -#~ msgid "General" -#~ msgstr "Geral" - #~ msgid "Server:" #~ msgstr "Servidor:" diff -Nru geary-0.11.4/po/ro.po geary-0.12.0/po/ro.po --- geary-0.11.4/po/ro.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/ro.po 2017-10-02 11:25:21.000000000 +0000 @@ -12,8 +12,8 @@ "Project-Id-Version: geary-0.4.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=geary&k" "eywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2016-05-13 05:57+0000\n" -"PO-Revision-Date: 2016-05-14 21:33+0200\n" +"POT-Creation-Date: 2016-06-19 12:29+0000\n" +"PO-Revision-Date: 2016-06-20 19:30+0200\n" "Last-Translator: Daniel Șerbănescu \n" "Language-Team: Gnome Romanian Translation Team\n" "Language: ro\n" @@ -270,193 +270,193 @@ msgid "Unrecognized command line option \"%s\"\n" msgstr "Opțiune de linie de comandă nerecunoscută \"%s\"\n" -#: ../src/client/application/geary-controller.vala:61 +#: ../src/client/application/geary-controller.vala:60 msgid "Delete conversation" msgstr "Șterge conversația" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:61 msgid "Delete conversation (Shift+Delete)" msgstr "Șterge conversația (Shift+Delete)" -#: ../src/client/application/geary-controller.vala:63 +#: ../src/client/application/geary-controller.vala:62 msgid "Delete conversations (Shift+Delete)" msgstr "Șterge conversațiile (Shift+Delete)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:67 +#: ../src/client/application/geary-controller.vala:66 msgid "Move conversation to Trash (Delete, Backspace)" msgstr "Mută conversația la Gunoi (Delete, Backspace)" -#: ../src/client/application/geary-controller.vala:68 +#: ../src/client/application/geary-controller.vala:67 msgid "Move conversations to Trash (Delete, Backspace)" msgstr "Mută conversațiile la Gunoi (Delete, Backspace)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:72 +#: ../src/client/application/geary-controller.vala:71 msgid "_Archive" msgstr "_Arhivează" -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:72 msgid "Archive conversation (A)" msgstr "Arhivează conversația (A)" -#: ../src/client/application/geary-controller.vala:74 +#: ../src/client/application/geary-controller.vala:73 msgid "Archive conversations (A)" msgstr "Arhivează conversațiile (A)" -#: ../src/client/application/geary-controller.vala:77 +#: ../src/client/application/geary-controller.vala:76 msgid "Mark as S_pam" msgstr "Marchează ca s_pam" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark as not S_pam" msgstr "Marchează ca non-s_pam" -#: ../src/client/application/geary-controller.vala:80 -#: ../src/client/application/geary-controller.vala:396 +#: ../src/client/application/geary-controller.vala:79 +#: ../src/client/application/geary-controller.vala:393 msgid "Mark conversation" msgstr "Marchează conversația" -#: ../src/client/application/geary-controller.vala:81 +#: ../src/client/application/geary-controller.vala:80 msgid "Mark conversations" msgstr "Marchează conversațiile" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:81 msgid "Add label to conversation" msgstr "Adaugă etichetă conversației" -#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:82 msgid "Add label to conversations" msgstr "Adaugă etichetă conversațiilor" -#: ../src/client/application/geary-controller.vala:84 -#: ../src/client/application/geary-controller.vala:435 +#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:432 msgid "Move conversation" msgstr "Mută conversația" -#: ../src/client/application/geary-controller.vala:85 +#: ../src/client/application/geary-controller.vala:84 msgid "Move conversations" msgstr "Mută conversațiile" -#: ../src/client/application/geary-controller.vala:376 +#: ../src/client/application/geary-controller.vala:373 #: ../ui/app_menu.interface.h:1 msgid "A_ccounts" msgstr "_Conturi" -#: ../src/client/application/geary-controller.vala:381 +#: ../src/client/application/geary-controller.vala:378 #: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 msgid "_Preferences" msgstr "_Preferințe" -#: ../src/client/application/geary-controller.vala:385 +#: ../src/client/application/geary-controller.vala:382 #: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:3 msgid "_Help" msgstr "_Ajutor" -#: ../src/client/application/geary-controller.vala:389 +#: ../src/client/application/geary-controller.vala:386 #: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:4 msgid "_About" msgstr "_Despre" -#: ../src/client/application/geary-controller.vala:393 +#: ../src/client/application/geary-controller.vala:390 #: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:5 msgid "_Quit" msgstr "_Ieșire" -#: ../src/client/application/geary-controller.vala:398 +#: ../src/client/application/geary-controller.vala:395 msgid "_Mark as..." msgstr "_Marchează ca..." -#: ../src/client/application/geary-controller.vala:404 +#: ../src/client/application/geary-controller.vala:401 msgid "Mark as _Read" msgstr "Ma_rchează ca citit" -#: ../src/client/application/geary-controller.vala:410 +#: ../src/client/application/geary-controller.vala:407 msgid "Mark as _Unread" msgstr "Marchează ca _necitit" -#: ../src/client/application/geary-controller.vala:416 +#: ../src/client/application/geary-controller.vala:413 msgid "_Star" msgstr "Marchează cu o _stea" -#: ../src/client/application/geary-controller.vala:421 +#: ../src/client/application/geary-controller.vala:418 msgid "U_nstar" msgstr "Eliminați _steaua" -#: ../src/client/application/geary-controller.vala:431 +#: ../src/client/application/geary-controller.vala:428 msgid "Add label" msgstr "Adaugă etichetă" -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:429 msgid "_Label" msgstr "_Etichetă" -#: ../src/client/application/geary-controller.vala:436 +#: ../src/client/application/geary-controller.vala:433 msgid "_Move" msgstr "_Mută" -#: ../src/client/application/geary-controller.vala:440 +#: ../src/client/application/geary-controller.vala:437 msgid "Compose new message (Ctrl+N, N)" msgstr "Compune un mesaj nou (Ctrl+N, N)" #. Reply to a message. -#: ../src/client/application/geary-controller.vala:444 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1858 +#: ../src/client/application/geary-controller.vala:441 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1884 msgid "_Reply" msgstr "_Răspunde" -#: ../src/client/application/geary-controller.vala:445 +#: ../src/client/application/geary-controller.vala:442 msgid "Reply (Ctrl+R, R)" msgstr "Răspunde (Ctrl+R, R)" -#: ../src/client/application/geary-controller.vala:449 +#: ../src/client/application/geary-controller.vala:446 msgid "R_eply All" msgstr "Răspund_e tuturor" -#: ../src/client/application/geary-controller.vala:450 +#: ../src/client/application/geary-controller.vala:447 msgid "Reply all (Ctrl+Shift+R, Shift+R)" msgstr "Răspunde tuturor (Ctrl+Shift+R, Shift+R)" #. Forward a message. -#: ../src/client/application/geary-controller.vala:455 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1868 +#: ../src/client/application/geary-controller.vala:452 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1894 msgid "_Forward" msgstr "Î_naintează" -#: ../src/client/application/geary-controller.vala:456 +#: ../src/client/application/geary-controller.vala:453 msgid "Forward (Ctrl+L, F)" msgstr "Înaintează (Ctrl+L, F)" -#: ../src/client/application/geary-controller.vala:495 +#: ../src/client/application/geary-controller.vala:492 msgid "Empty" msgstr "Golește" -#: ../src/client/application/geary-controller.vala:496 +#: ../src/client/application/geary-controller.vala:493 msgid "Empty Spam or Trash folders" msgstr "Golește dosarele Spam sau Gunoi" -#: ../src/client/application/geary-controller.vala:500 +#: ../src/client/application/geary-controller.vala:497 msgid "Empty _Spam…" msgstr "Golește _Spam…" -#: ../src/client/application/geary-controller.vala:504 +#: ../src/client/application/geary-controller.vala:501 msgid "Empty _Trash…" msgstr "Golește _Gunoi…" #. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:537 +#: ../src/client/application/geary-controller.vala:530 msgid "Toggle search bar" msgstr "Comută bara de căutare" -#: ../src/client/application/geary-controller.vala:744 +#: ../src/client/application/geary-controller.vala:725 msgid "Unable to store server trust exception" msgstr "Nu s-a putut stoca excepția la servere de încredere" -#: ../src/client/application/geary-controller.vala:981 +#: ../src/client/application/geary-controller.vala:962 msgid "Your settings are insecure" msgstr "Configurările tale sunt nesigure" -#: ../src/client/application/geary-controller.vala:982 +#: ../src/client/application/geary-controller.vala:963 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -466,17 +466,17 @@ "unei alte persoane de pe rețea să îți citească utilizatorul și parola. " "Sunteți sigur că vreți să faceți asta?" -#: ../src/client/application/geary-controller.vala:983 +#: ../src/client/application/geary-controller.vala:964 msgid "Co_ntinue" msgstr "Co_ntinuă" #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:1061 +#: ../src/client/application/geary-controller.vala:1042 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "Eroare la trimiterea emailului" -#: ../src/client/application/geary-controller.vala:1062 +#: ../src/client/application/geary-controller.vala:1043 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." @@ -486,12 +486,12 @@ #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1066 +#: ../src/client/application/geary-controller.vala:1047 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "Eroare la salvarea emailului trimis" -#: ../src/client/application/geary-controller.vala:1067 +#: ../src/client/application/geary-controller.vala:1048 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." @@ -499,19 +499,19 @@ "Geary a întâmpinat o eroare la salvarea unui mesaj trimis în dosarul „Mesaje " "trimise”. Mesajul va rămâne în dosarul Outbox până îl veți șterge." -#: ../src/client/application/geary-controller.vala:1136 +#: ../src/client/application/geary-controller.vala:1117 msgid "Labels" msgstr "Etichete" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1148 +#: ../src/client/application/geary-controller.vala:1129 #, c-format msgid "Unable to open the database for %s" msgstr "Nu s-a reușit deschiderea bazei de date pentru %s" -#: ../src/client/application/geary-controller.vala:1149 +#: ../src/client/application/geary-controller.vala:1130 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -536,20 +536,20 @@ "Reconstrucția bazei de date va șterge toate emailurile locale și fișierele " "lor atașate. Emailurile de pe server nu vor fi afectate." -#: ../src/client/application/geary-controller.vala:1151 +#: ../src/client/application/geary-controller.vala:1132 msgid "_Rebuild" msgstr "_Reconstruiește" -#: ../src/client/application/geary-controller.vala:1151 +#: ../src/client/application/geary-controller.vala:1132 msgid "E_xit" msgstr "_Ieșire" -#: ../src/client/application/geary-controller.vala:1160 +#: ../src/client/application/geary-controller.vala:1141 #, c-format msgid "Unable to rebuild database for \"%s\"" msgstr "Nu s-a reușit reconstrucția bazei de date pentru „%s”" -#: ../src/client/application/geary-controller.vala:1161 +#: ../src/client/application/geary-controller.vala:1142 #, c-format msgid "" "Error during rebuild:\n" @@ -562,14 +562,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1183 -#: ../src/client/application/geary-controller.vala:1193 -#: ../src/client/application/geary-controller.vala:1204 +#: ../src/client/application/geary-controller.vala:1164 +#: ../src/client/application/geary-controller.vala:1174 +#: ../src/client/application/geary-controller.vala:1185 #, c-format msgid "Unable to open local mailbox for %s" msgstr "Nu s-a reușit deschiderea cutiei poștale locale pentru %s" -#: ../src/client/application/geary-controller.vala:1184 +#: ../src/client/application/geary-controller.vala:1165 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -588,7 +588,7 @@ "\n" "%s" -#: ../src/client/application/geary-controller.vala:1194 +#: ../src/client/application/geary-controller.vala:1175 msgid "" "The version number of the local mail database is formatted for a newer " "version of Geary. Unfortunately, the database cannot be \"rolled back\" to " @@ -602,7 +602,7 @@ "\n" "Instalați ultima versiune de Geary și încercați din nou." -#: ../src/client/application/geary-controller.vala:1205 +#: ../src/client/application/geary-controller.vala:1186 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" @@ -614,14 +614,14 @@ "\n" "Te rog verifică-ți conexiunea la internet și repornește Geary." -#: ../src/client/application/geary-controller.vala:1716 +#: ../src/client/application/geary-controller.vala:1698 #, c-format msgid "About %s" msgstr "Despre %s" #. / Translators: add your name and email address to receive credit in the About dialog #. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1719 +#: ../src/client/application/geary-controller.vala:1701 msgid "translator-credits" msgstr "" "CoolGoose \n" @@ -629,16 +629,16 @@ "Viorel-Cătălin Răpițeanu \n" "Daniel Șerbănescu " -#: ../src/client/application/geary-controller.vala:1977 +#: ../src/client/application/geary-controller.vala:1958 msgid "Undo move (Ctrl+Z)" msgstr "Refă mutarea (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:1987 +#: ../src/client/application/geary-controller.vala:1968 #, c-format msgid "Are you sure you want to open \"%s\"?" msgstr "Sigur doriți să deschideți „%s”?" -#: ../src/client/application/geary-controller.vala:1988 +#: ../src/client/application/geary-controller.vala:1969 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -646,75 +646,75 @@ "Fișierele atașate pot cauza probleme sistemului dumneavoastră dacă sunt " "deschise. Deschideți doar fișierele atașate din surse sigure." -#: ../src/client/application/geary-controller.vala:1989 +#: ../src/client/application/geary-controller.vala:1970 msgid "Don't _ask me again" msgstr "Nu întreb_a din nou" -#: ../src/client/application/geary-controller.vala:2007 +#: ../src/client/application/geary-controller.vala:1988 #, c-format msgid "A file named \"%s\" already exists. Do you want to replace it?" msgstr "Un fișier numit „%s” există deja. Doriți să-l înlocuiți?" -#: ../src/client/application/geary-controller.vala:2009 +#: ../src/client/application/geary-controller.vala:1990 #, c-format msgid "" "The file already exists in \"%s\". Replacing it will overwrite its contents." msgstr "" "Fișierul deja există în „%s”. Înlocuirea va suprascrie conținutul lui." -#: ../src/client/application/geary-controller.vala:2012 +#: ../src/client/application/geary-controller.vala:1993 msgid "_Replace" msgstr "Î_nlocuiește" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2310 +#: ../src/client/application/geary-controller.vala:2291 msgid "Close open draft messages?" msgstr "Închideți mesajele deschise de tip ciornă?" -#: ../src/client/application/geary-controller.vala:2440 +#: ../src/client/application/geary-controller.vala:2421 #, c-format msgid "Empty all email from your %s folder?" msgstr "Goliți toate emailurile din dosarul %s?" -#: ../src/client/application/geary-controller.vala:2441 +#: ../src/client/application/geary-controller.vala:2422 msgid "This removes the email from Geary and your email server." msgstr "Aceasta elimină emailul din Geary și de pe serverul de email." -#: ../src/client/application/geary-controller.vala:2442 +#: ../src/client/application/geary-controller.vala:2423 msgid "This cannot be undone." msgstr "Aceasta nu poate fi anulată." -#: ../src/client/application/geary-controller.vala:2443 +#: ../src/client/application/geary-controller.vala:2424 #, c-format msgid "Empty %s" msgstr "Golește %s" -#: ../src/client/application/geary-controller.vala:2460 +#: ../src/client/application/geary-controller.vala:2441 #, c-format msgid "Error emptying %s" msgstr "Eroare la golirea %s" -#: ../src/client/application/geary-controller.vala:2490 +#: ../src/client/application/geary-controller.vala:2471 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "Doriți să ștergeți permanent acest mesaj?" msgstr[1] "Doriți să ștergeți permanent aceste mesaje?" msgstr[2] "Doriți să ștergeți permanent aceste mesaje?" -#: ../src/client/application/geary-controller.vala:2492 +#: ../src/client/application/geary-controller.vala:2473 msgid "Delete" msgstr "Șterge" -#: ../src/client/application/geary-controller.vala:2523 +#: ../src/client/application/geary-controller.vala:2504 msgid "Undo archive (Ctrl+Z)" msgstr "Refă arhiva (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2538 +#: ../src/client/application/geary-controller.vala:2519 msgid "Undo trash (Ctrl+Z)" msgstr "Refă gunoiul (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2591 +#: ../src/client/application/geary-controller.vala:2572 msgid "Undo (Ctrl+Z)" msgstr "Refă (Ctrl+Z)" @@ -738,7 +738,7 @@ msgid "not found" msgstr "nu a fost găsit" -#: ../src/client/components/main-window.vala:423 +#: ../src/client/components/main-window.vala:359 #, c-format msgid "%s (%d)" msgstr "%s (%d)" @@ -801,7 +801,7 @@ #. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1324 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1350 msgid "Select _All" msgstr "Selectează t_ot" @@ -836,100 +836,104 @@ "attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" "enclosing|encloses|enclosure|enclosures" msgstr "" -"attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|en" -"closing|encloses|enclosure|enclosures|atașament|atașamente|atașamentele|fișie" -"r|fișiere|fișierele" +"attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" +"enclosing|encloses|enclosure|enclosures|atașament|atașamente|atașamentele|" +"fișier|fișiere|fișierele" -#: ../src/client/composer/composer-widget.vala:1102 -#: ../src/client/composer/composer-widget.vala:1106 +#: ../src/client/composer/composer-widget.vala:1114 +#: ../src/client/composer/composer-widget.vala:1118 msgid "Do you want to discard this message?" msgstr "Renunțați la acest mesaj?" -#: ../src/client/composer/composer-widget.vala:1262 +#: ../src/client/composer/composer-widget.vala:1274 msgid "Send message with an empty subject and body?" msgstr "Trimiteți mesajul fără subiect și conținut?" -#: ../src/client/composer/composer-widget.vala:1264 +#: ../src/client/composer/composer-widget.vala:1276 msgid "Send message with an empty subject?" msgstr "Trimiteți mesajul fără subiect?" -#: ../src/client/composer/composer-widget.vala:1266 +#: ../src/client/composer/composer-widget.vala:1278 msgid "Send message with an empty body?" msgstr "Trimiteți mesajul fără conținut?" -#: ../src/client/composer/composer-widget.vala:1268 +#: ../src/client/composer/composer-widget.vala:1280 msgid "Send message without an attachment?" msgstr "Trimiteți mesajul fără niciun fișier atașat?" -#: ../src/client/composer/composer-widget.vala:1530 +#: ../src/client/composer/composer-widget.vala:1542 msgid "Cannot add attachment" msgstr "Nu se poate atașa fișierul" -#: ../src/client/composer/composer-widget.vala:1541 +#: ../src/client/composer/composer-widget.vala:1553 #, c-format msgid "\"%s\" could not be found." msgstr "„%s” nu a putut fi găsit." -#: ../src/client/composer/composer-widget.vala:1548 +#: ../src/client/composer/composer-widget.vala:1560 #, c-format msgid "\"%s\" is a folder." msgstr "„%s” este un dosar." -#: ../src/client/composer/composer-widget.vala:1555 +#: ../src/client/composer/composer-widget.vala:1567 #, c-format msgid "\"%s\" is an empty file." msgstr "„%s” este un fișier gol." -#: ../src/client/composer/composer-widget.vala:1569 +#: ../src/client/composer/composer-widget.vala:1581 #, c-format msgid "\"%s\" could not be opened for reading." msgstr "„%s” nu a putut fi deschis pentru citire." -#: ../src/client/composer/composer-widget.vala:1576 +#: ../src/client/composer/composer-widget.vala:1588 #, c-format msgid "\"%s\" already attached for delivery." msgstr "„%s” este deja atașat pentru trimitere." #. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-widget.vala:1585 +#: ../src/client/composer/composer-widget.vala:1597 #, c-format msgid "%s (%s)" msgstr "%s (%s)" -#: ../src/client/composer/composer-widget.vala:1645 +#: ../src/client/composer/composer-widget.vala:1658 msgid "To: " msgstr "Către: " -#: ../src/client/composer/composer-widget.vala:1648 +#: ../src/client/composer/composer-widget.vala:1661 msgid "Cc: " msgstr "Cc: " -#: ../src/client/composer/composer-widget.vala:1651 +#: ../src/client/composer/composer-widget.vala:1664 msgid "Bcc: " msgstr "Bcc: " -#: ../src/client/composer/composer-widget.vala:1654 +#: ../src/client/composer/composer-widget.vala:1667 msgid "Reply-To: " msgstr "Răspunde la:" -#: ../src/client/composer/composer-widget.vala:1887 +#: ../src/client/composer/composer-widget.vala:1900 msgid "Select Color" msgstr "Selectează culoarea" #. Displayed in the From dropdown to indicate an "alternate email address" #. for an account. The first printf argument will be the alternate email #. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2322 +#: ../src/client/composer/composer-widget.vala:2347 #, c-format msgid "%1$s via %2$s" msgstr "%1$s via %2$s" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2364 +#: ../src/client/composer/composer-widget.vala:2389 msgid "_From:" msgstr "_De la:" +#: ../src/client/composer/spell-check-popover.vala:210 +msgid "Search for more languages" +msgstr "Caută după mai multe limbi" + #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Eu" @@ -954,47 +958,47 @@ msgid "No conversations in folder." msgstr "Nicio conversație în dosar." -#: ../src/client/conversation-viewer/conversation-viewer.vala:708 +#: ../src/client/conversation-viewer/conversation-viewer.vala:713 msgid "This message contains remote images." msgstr "Acest mesaj conține imagini de pe un alt server." -#: ../src/client/conversation-viewer/conversation-viewer.vala:708 +#: ../src/client/conversation-viewer/conversation-viewer.vala:713 msgid "Show Images" msgstr "Arată imagini" -#: ../src/client/conversation-viewer/conversation-viewer.vala:709 +#: ../src/client/conversation-viewer/conversation-viewer.vala:714 msgid "Always Show From Sender" msgstr "Afișează întotdeauna de la acest expeditor" -#: ../src/client/conversation-viewer/conversation-viewer.vala:733 +#: ../src/client/conversation-viewer/conversation-viewer.vala:738 msgid "Edit Draft" msgstr "Editează ciorna" -#: ../src/client/conversation-viewer/conversation-viewer.vala:809 +#: ../src/client/conversation-viewer/conversation-viewer.vala:831 msgid "From:" msgstr "De la:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:812 +#: ../src/client/conversation-viewer/conversation-viewer.vala:834 msgid "To:" msgstr "Către:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:815 +#: ../src/client/conversation-viewer/conversation-viewer.vala:837 msgid "Cc:" msgstr "Cc:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:818 +#: ../src/client/conversation-viewer/conversation-viewer.vala:840 msgid "Bcc:" msgstr "Bcc:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:821 +#: ../src/client/conversation-viewer/conversation-viewer.vala:843 msgid "Subject:" msgstr "Subiect:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:824 +#: ../src/client/conversation-viewer/conversation-viewer.vala:846 msgid "Date:" msgstr "Data:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1139 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1165 #, c-format msgid "%u read message" msgid_plural "%u read messages" @@ -1002,64 +1006,64 @@ msgstr[1] "%u mesaje citite" msgstr[2] "%u de mesaje citite" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1271 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1297 #, c-format msgid "This message was sent successfully, but could not be saved to %s." msgstr "Acest mesaj a fost trimis cu succes, dar nu a putut fi salvat în %s." #. Add a menu item for copying the current selection. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1297 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1323 #: ../ui/composer.glade.h:4 msgid "_Copy" msgstr "_Copiază" #. Add a menu item for copying the address. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1305 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1331 msgid "Copy _Email Address" msgstr "Copiază adresa de _email" #. Add a menu item for copying the link. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1310 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1336 #: ../ui/composer.glade.h:17 msgid "Copy _Link" msgstr "Copiază _legătura" #. Select message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1318 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1344 msgid "Select _Message" msgstr "Selectează _mesajul" #. Inspect. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1330 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1356 msgid "_Inspect" msgstr "_Inspectează" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1557 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1583 msgid "This link appears to go to" msgstr "Acestă legătură pare să indice spre" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1558 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1584 msgid "but actually goes to" msgstr "dar de fapt trimite la" #. If href doesn't look like a URL, something is fishy, so warn the user -#: ../src/client/conversation-viewer/conversation-viewer.vala:1613 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1639 msgid " (Invalid?)" msgstr " (Nevalid?)" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1719 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1745 msgid "_Save Image As..." msgstr "_Salvează imaginea ca..." -#: ../src/client/conversation-viewer/conversation-viewer.vala:1823 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1849 msgid "_Save As..." msgstr "_Salvează ca..." -#: ../src/client/conversation-viewer/conversation-viewer.vala:1828 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1854 msgid "Save All A_ttachments..." msgstr "Salvează toate fișierele a_tașate..." -#: ../src/client/conversation-viewer/conversation-viewer.vala:1848 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1874 msgid "Save A_ttachment..." msgid_plural "Save All A_ttachments..." msgstr[0] "Salvează fișierul a_tașat..." @@ -1067,37 +1071,37 @@ msgstr[2] "Salvează toate fișierele a_tașate..." #. Reply to all on a message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1863 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1889 msgid "Reply to _All" msgstr "Răspunde _tuturor" #. Mark as read/unread. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1880 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1906 msgid "_Mark as Read" msgstr "_Marchează ca citit" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1884 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1910 msgid "_Mark as Unread" msgstr "_Marchează ca necitit" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1890 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1916 msgid "Mark Unread From _Here" msgstr "Marc_hează ca necitit de aici" #. Separator. #. View original message source. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1905 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1931 msgid "_View Source" msgstr "_Vizualizare sursă" #. Generate the attachment table. #. / Placeholder filename for attachments with no filename. -#: ../src/client/conversation-viewer/conversation-viewer.vala:2229 -#: ../src/engine/rfc822/rfc822-utils.vala:378 +#: ../src/client/conversation-viewer/conversation-viewer.vala:2255 +#: ../src/engine/rfc822/rfc822-utils.vala:392 msgid "none" msgstr "fără" -#: ../src/client/conversation-viewer/conversation-viewer.vala:2364 +#: ../src/client/conversation-viewer/conversation-viewer.vala:2390 msgid "Failed to open default text editor." msgstr "Eroare la deschiderea editorului de text implicit." @@ -1365,7 +1369,7 @@ msgstr "%A" #: ../src/client/util/util-email.vala:30 -#: ../src/engine/rfc822/rfc822-message.vala:781 +#: ../src/engine/rfc822/rfc822-message.vala:796 msgid "(no subject)" msgstr "(fără titlu)" @@ -1461,106 +1465,216 @@ msgid "None" msgstr "Niciuna" -#. Map of user-supplied search field names to column names. -#. / Can be typed in the search box like attachment:file.txt to find -#. / messages with attachments with a particular name. The translated -#. / string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:705 +#. Map of possibly translated search operator names and values +#. to English/internal names and values. We include the +#. English version anyway so that when translations provide a +#. localised version of the operator names but have not also +#. translated the user manual, the English version in the +#. manual still works. +#. Can be typed in the search box like "attachment:file.txt" +#. to find messages with attachments with a particular name. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:99 +#| msgid "attachment" +msgctxt "Search operator" msgid "attachment" msgstr "atașament" -#. / Can be typed in the search box like bcc:johndoe@example.com to find -#. / messages bcc'd to a particular person. The translated -#. / string must match the string in Geary's help documentation. -#. Fields we allow the token to be "me" as in from:me. -#: ../src/engine/imap-db/imap-db-account.vala:709 -#: ../src/engine/imap-db/imap-db-account.vala:737 +#. Can be typed in the search box like +#. "bcc:johndoe@example.com" to find messages bcc'd to a +#. particular person. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:108 +#| msgid "bcc" +msgctxt "Search operator" msgid "bcc" msgstr "bcc" -#. / Can be typed in the search box like body:word to find the word only -#. / if it occurs in the body of a message. The translated -#. / string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:713 +#. Can be typed in the search box like "body:word" to find +#. "word" only if it occurs in the body of a message. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:116 +#| msgid "body" +msgctxt "Search operator" msgid "body" msgstr "conținut" -#. / Can be typed in the search box like cc:johndoe@example.com to find -#. / messages cc'd to a particular person. The translated -#. / string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:717 -#: ../src/engine/imap-db/imap-db-account.vala:737 +#. Can be typed in the search box like +#. "cc:johndoe@example.com" to find messages cc'd to a +#. particular person. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:125 +#| msgid "cc" +msgctxt "Search operator" msgid "cc" msgstr "cc" -#. / Can be typed in the search box like from:johndoe@example.com to -#. / find messages from a particular sender. The translated -#. / string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:721 -#: ../src/engine/imap-db/imap-db-account.vala:737 +#. Can be typed in the search box like +#. "from:johndoe@example.com" to find messages from a +#. particular sender. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:134 +#| msgid "from" +msgctxt "Search operator" msgid "from" -msgstr "de la" +msgstr "de-la" + +#. Can be typed in the search box like "is:unread" to find +#. messages that are read, unread, or starred. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:142 +#| msgid "is" +msgctxt "Search operator" +msgid "is" +msgstr "este" -#. / Can be typed in the search box like subject:word to find the word -#. / only if it occurs in the subject of a message. The translated -#. / string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:725 +#. Can be typed in the search box like "subject:word" to find +#. "word" only if it occurs in the subject of a message. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary +#. User Guide. +#: ../src/engine/imap-db/imap-db-account.vala:150 +#| msgid "subject" +msgctxt "Search operator" msgid "subject" msgstr "subiect" -#. / Can be typed in the search box like to:johndoe@example.com to find -#. / messages received by a particular person. The translated -#. / string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:729 -#: ../src/engine/imap-db/imap-db-account.vala:737 +#. Can be typed in the search box like +#. "to:johndoe@example.com" to find messages received by a +#. particular person. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:159 +#| msgid "to" +msgctxt "Search operator" msgid "to" -msgstr "la" +msgstr "către" -#. / Can be typed in the search box like is:read, is:unread or is:starred -#. / to find messages that are read, unread, or starred. The translated -#. / string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:733 -msgid "is" -msgstr "este" +#. Can be typed in the search box after "to:", "cc:" and +#. "bcc:" e.g.: "to:me". Matches conversations that are +#. addressed to the user. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:180 +#| msgid "me" +msgctxt "Search operator value - mail addressed to the user" +msgid "me" +msgstr "mine" -#. "me" can be typed like from:me or cc:me, etc. as a shorthand -#. to find mail to or from yourself in search. The translated -#. string must match the string in Geary's help documentation. -#: ../src/engine/imap-db/imap-db-account.vala:753 +#. Can be typed in the search box after "from:" i.e.: +#. "from:me". Matches conversations were sent by the user. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:192 +#| msgid "me" +msgctxt "Search operator value - mail sent by the user" msgid "me" msgstr "mine" -#: ../src/engine/imap-db/imap-db-account.vala:1207 +#. Can be typed in the search box after "is:" i.e.: +#. "is:read". Matches conversations that are flagged as read. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:204 +#| msgid "read" +msgctxt "'is:' search operator value" msgid "read" msgstr "citit" -#: ../src/engine/imap-db/imap-db-account.vala:1209 +#. Can be typed in the search box after "is:" i.e.: +#. "is:starred". Matches conversations that are flagged as +#. starred. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:215 +#| msgid "starred" +msgctxt "'is:' search operator value" +msgid "starred" +msgstr "cu-stea" + +#. Can be typed in the search box after "is:" i.e.: +#. "is:unread". Matches conversations that are flagged unread. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:225 +#| msgid "unread" +msgctxt "'is:' search operator value" msgid "unread" msgstr "necitit" -#: ../src/engine/imap-db/imap-db-account.vala:1211 -msgid "starred" -msgstr "cu stea" - -#. List of folder names to match for Drafts, separated by |. Please add localized common -#. names for the Drafts folder, leaving in the English names as well. The first in the list -#. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:575 +#. List of general possible folder names to match for the +#. Draft mailbox. Separate names using a vertical bar and +#. put the most common localized name to the front for the +#. default. English names do not need to be included. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:626 msgid "Drafts | Draft" msgstr "Drafts | Draft | Ciorne | Ciornă" -#. List of folder names to match for Sent Mail, separated by |. Please add localized common -#. names for the Sent Mail folder, leaving in the English names as well. The first in the list -#. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:580 +#. List of general possible folder names to match for the +#. Sent mailbox. Separate names using a vertical bar and +#. put the most common localized name to the front for the +#. default. English names do not need to be included. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:635 msgid "Sent | Sent Mail | Sent Email | Sent E-Mail" msgstr "" "Sent | Sent Mail | Sent Email | Sent E-Mail | Trimise | Emailuri Trimise" -#. List of folder names to match for Spam, separated by |. Please add localized common -#. names for the Spam folder, leaving in the English names as well. The first in the list -#. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:585 +#. The localised name(s) of the Sent folder name as used +#. by MS Outlook/Exchange. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:640 +msgctxt "Outlook localised name" +msgid "Sent Items" +msgstr "Elemente trimise" + +#. List of general possible folder names to match for the +#. Spam mailbox. Separate names using a vertical bar and +#. put the most common localized name to the front for the +#. default. English names do not need to be included. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:650 msgid "" "Junk | Spam | Junk Mail | Junk Email | Junk E-Mail | Bulk Mail | Bulk Email " "| Bulk E-Mail" @@ -1568,17 +1682,27 @@ "Junk | Spam | Junk Mail | Junk Email | Junk E-Mail | Bulk Mail | Bulk Email " "| Bulk E-Mail | Mesaje nedorite" -#. List of folder names to match for Trash, separated by |. Please add localized common -#. names for the Trash folder, leaving in the English names as well. The first in the list -#. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:590 +#. List of general possible folder names to match for the +#. Trash mailbox. Separate names using a vertical bar and +#. put the most common localized name to the front for the +#. default. English names do not need to be included. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:660 msgid "Trash | Rubbish | Rubbish Bin" msgstr "Trash | Rubbish | Rubbish Bin | Gunoi | Coșul de guni" -#. List of folder names to match for Archive, separated by |. Please add localized common -#. names for the Trash folder, leaving in the English names as well. The first in the list -#. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:595 +#. The localised name(s) of the Trash folder name as used +#. by MS Outlook/Exchange. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:665 +#| msgid "Delete" +msgctxt "Outlook localised name" +msgid "Deleted Items" +msgstr "Elemente șterse" + +#. List of general possible folder names to match for the +#. Archive mailbox. Separate names using a vertical bar +#. and put the most common localized name to the front for +#. the default. English names do not need to be included. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:675 msgid "Archive | Archives" msgstr "Archive | Archives | Arhivă | Arhive" @@ -1876,48 +2000,58 @@ msgstr "Atașează fișier" #: ../ui/composer.glade.h:49 +#| msgid "Attach File" +msgid "Attach File (Ctrl+T)" +msgstr "Atașează fișier (Ctrl+T)" + +#: ../ui/composer.glade.h:50 msgid "_Include Original Attachments" msgstr "_Include fișierele atașate originale" -#: ../ui/composer.glade.h:50 +#: ../ui/composer.glade.h:51 msgid "Include Original Attachments" msgstr "Include atașamentele originale" -#: ../ui/composer.glade.h:51 -msgid "Application Menu" -msgstr "Meniul aplicației" +#: ../ui/composer.glade.h:52 +#| msgid "Enable _spell checking" +msgid "Select spell checking language" +msgstr "Selectează limba pentru corectarea ortografică" -#. Address(es) e-mail is to be sent to #: ../ui/composer.glade.h:53 +msgid "Spelling language" +msgstr "Limba pentru corectarea ortografică" + +#. Address(es) e-mail is to be sent to +#: ../ui/composer.glade.h:55 msgid "_To" msgstr "Că_tre" -#: ../ui/composer.glade.h:54 +#: ../ui/composer.glade.h:56 msgid "_Cc" msgstr "_Cc" -#: ../ui/composer.glade.h:55 +#: ../ui/composer.glade.h:57 msgid "_Subject" msgstr "_Subiect" -#: ../ui/composer.glade.h:56 +#: ../ui/composer.glade.h:58 msgid "_Bcc" msgstr "_Bcc" -#: ../ui/composer.glade.h:57 +#: ../ui/composer.glade.h:59 msgid "_Reply-To" msgstr "_Răspunde la" #. Geary account mail will be sent from -#: ../ui/composer.glade.h:59 +#: ../ui/composer.glade.h:61 msgid "From" msgstr "De la" -#: ../ui/composer.glade.h:60 +#: ../ui/composer.glade.h:62 msgid "Drop files here" msgstr "Trage fișiere aici" -#: ../ui/composer.glade.h:61 +#: ../ui/composer.glade.h:63 msgid "To add them as attachments" msgstr "Pentru a le atașa" @@ -2177,6 +2311,9 @@ msgid "Geary update in progress…" msgstr "În curs de actualizare Geary…" +#~ msgid "Application Menu" +#~ msgstr "Meniul aplicației" + #~ msgid "Copyright 2011-2014 Yorba Foundation" #~ msgstr "Drepturi de autor 2011-2014 Fundația Yorba" diff -Nru geary-0.11.4/po/ru.po geary-0.12.0/po/ru.po --- geary-0.11.4/po/ru.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/ru.po 2017-10-02 11:25:21.000000000 +0000 @@ -16,8 +16,8 @@ "Project-Id-Version: geary-0.4.1\n" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "product=geary&keywords=I18N+L10N&component=internationalization\n" -"POT-Creation-Date: 2017-03-05 11:05+0000\n" -"PO-Revision-Date: 2017-04-22 01:39+0300\n" +"POT-Creation-Date: 2017-04-21 22:33+0000\n" +"PO-Revision-Date: 2017-04-22 01:42+0300\n" "Last-Translator: Stas Solovey \n" "Language-Team: Русский \n" "Language: ru\n" @@ -28,31 +28,96 @@ "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Poedit 2.0.1\n" -#: ../desktop/geary.desktop.in.h:1 ../desktop/geary-autostart.desktop.in.h:1 +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:1 +#: ../desktop/org.gnome.Geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" msgstr "Geary" -#: ../desktop/geary.desktop.in.h:2 ../desktop/geary-autostart.desktop.in.h:2 -#: ../src/client/application/geary-application.vala:18 +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:2 +#: ../desktop/org.gnome.Geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 +msgid "Send and receive email" +msgstr "Отправка и получение электронной почты" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:3 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"Geary — приложение электронной почты для рабочего стола GNOME 3, построенное " +"по принципу обмена сообщениями — беседами. Позволяет читать, находить и " +"отправлять электронную почту с простым, современным интерфейсом." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:4 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"Беседы позволяют читать переписку целиком без необходимости искать и " +"переходить от сообщения к сообщению." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:5 +msgid "Geary’s features include:" +msgstr "К функциям Geary относятся:" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:6 +msgid "Quick email account setup" +msgstr "Быстрая настройка учётной записи электронной почты" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:7 +msgid "Shows related messages together in conversations" +msgstr "Отображение связанных сообщений в режиме беседы" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:8 +msgid "Fast, full text and keyword search" +msgstr "Быстрый полнотекстовый поиск и поиск по ключевым словам" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:9 +msgid "Full-featured HTML and plain text message composer" +msgstr "" +"Полнофункциональный режим составления писем в виде простого текста, а также " +"с HTML разметкой" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:10 +msgid "Desktop notification of new mail" +msgstr "Уведомления о новых сообщениях" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:11 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" +msgstr "Совместим с GMail, Yahoo! Mail, Outlook.com и другими IMAP серверами" + +#: ../desktop/org.gnome.Geary.desktop.in.h:2 +msgid "Email" +msgstr "Электронная почта" + +#: ../desktop/org.gnome.Geary.desktop.in.h:3 +msgid "Geary Email" +msgstr "Электронная почта Geary" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/org.gnome.Geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" + +#: ../desktop/org.gnome.Geary.desktop.in.h:7 ../ui/gtk/menus.ui.h:1 +msgid "Compose Message" +msgstr "Новое сообщение" + +#: ../desktop/geary-autostart.desktop.in.h:2 +#: ../src/client/application/geary-application.vala:21 msgid "Mail Client" msgstr "Почтовый клиент" -#: ../desktop/geary.desktop.in.h:3 ../desktop/geary-autostart.desktop.in.h:3 +#: ../desktop/geary-autostart.desktop.in.h:3 msgid "Geary Mail" msgstr "Почтовый клиент Geary" -#: ../desktop/geary.desktop.in.h:4 ../desktop/geary-autostart.desktop.in.h:4 -msgid "Send and receive email" -msgstr "Отправка и получение электронной почты" - -#: ../desktop/geary.desktop.in.h:5 ../desktop/geary-autostart.desktop.in.h:5 +#: ../desktop/geary-autostart.desktop.in.h:5 msgid "Email;E-mail;Mail;" msgstr "Электронная;Почта;Email;E-mail;Mail;" -#: ../desktop/geary.desktop.in.h:6 -msgid "Compose Message" -msgstr "Новое сообщение" - #: ../desktop/geary-attach.contract.in.h:1 msgid "Send by email" msgstr "Отправить по эл. почте" @@ -63,6 +128,7 @@ #: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:31 +#: ../ui/conversation-email-menus.ui.h:10 msgid "_Save" msgstr "_Сохранить" @@ -72,7 +138,7 @@ msgstr "_Добавить" #. reset/clear widgets -#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 #, c-format msgid "Additional addresses for %s" msgstr "Дополнительные адреса для %s" @@ -93,110 +159,120 @@ msgid "First Last" msgstr "Имя Фамилия" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." msgstr "Добро пожаловать в Geary." -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." msgstr "Чтобы приступить к работе, введите информацию об учётной записи." -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "За последние 2 недели" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:254 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "За последний месяц" -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "За последние 3 месяца" -#: ../src/client/accounts/add-edit-page.vala:256 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "За последние 6 месяцев" -#: ../src/client/accounts/add-edit-page.vala:257 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "За последний год" -#: ../src/client/accounts/add-edit-page.vala:258 +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" msgstr "За последние 2 года" -#: ../src/client/accounts/add-edit-page.vala:259 +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" msgstr "За последние 4 года" #. Separator -#: ../src/client/accounts/add-edit-page.vala:261 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "За всё время" -#: ../src/client/accounts/add-edit-page.vala:280 +#: ../src/client/accounts/add-edit-page.vala:283 msgid "Edit" msgstr "Правка" -#: ../src/client/accounts/add-edit-page.vala:282 +#: ../src/client/accounts/add-edit-page.vala:285 msgid "Preview" msgstr "Предварительный просмотр" -#: ../src/client/accounts/add-edit-page.vala:723 +#: ../src/client/accounts/add-edit-page.vala:751 msgid "Remem_ber passwords" msgstr "Зап_омнить пароли" -#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:7 +#: ../src/client/accounts/add-edit-page.vala:758 ../ui/login.glade.h:7 msgid "Remem_ber password" msgstr "За_помнить пароль" -#: ../src/client/accounts/add-edit-page.vala:764 +#: ../src/client/accounts/add-edit-page.vala:792 msgid "Unable to validate:\n" msgstr "Не удалось подтвердить:\n" -#: ../src/client/accounts/add-edit-page.vala:766 -msgid " • Invalid account nickname.\n" -msgstr " • Неверный псевдоним учётной записи.\n" - -#: ../src/client/accounts/add-edit-page.vala:769 -msgid " • Email address already added to Geary.\n" -msgstr " • Адрес электронной почты уже добавлен в Geary.\n" - -#: ../src/client/accounts/add-edit-page.vala:773 -msgid " • IMAP connection error.\n" -msgstr " • Ошибка подключения к IMAP.\n" - -#: ../src/client/accounts/add-edit-page.vala:776 -msgid " • IMAP username or password incorrect.\n" -msgstr " • Неверные имя пользователя или пароль IMAP.\n" - -#: ../src/client/accounts/add-edit-page.vala:779 -msgid " • SMTP connection error.\n" -msgstr " • Ошибка подключения к SMTP.\n" - -#: ../src/client/accounts/add-edit-page.vala:782 -msgid " • SMTP username or password incorrect.\n" -msgstr " • Неверные имя пользователя или пароль SMTP.\n" +#: ../src/client/accounts/add-edit-page.vala:794 +msgid " • Invalid account nickname.\n" +msgstr " • Неверный псевдоним учётной записи.\n" + +#: ../src/client/accounts/add-edit-page.vala:797 +msgid " • Email address already added to Geary.\n" +msgstr " • Адрес электронной почты уже добавлен в Geary.\n" + +#: ../src/client/accounts/add-edit-page.vala:801 +msgid " • IMAP connection error.\n" +msgstr " • Ошибка подключения к IMAP.\n" + +#: ../src/client/accounts/add-edit-page.vala:804 +msgid " • IMAP username or password incorrect.\n" +msgstr " • Неверные имя пользователя или пароль IMAP.\n" + +#: ../src/client/accounts/add-edit-page.vala:807 +msgid " • SMTP connection error.\n" +msgstr " • Ошибка подключения к SMTP.\n" + +#: ../src/client/accounts/add-edit-page.vala:810 +msgid " • SMTP username or password incorrect.\n" +msgstr " • Неверные имя пользователя или пароль SMTP.\n" + +#: ../src/client/accounts/add-edit-page.vala:814 +msgid " • Connection error.\n" +msgstr " • Ошибка подключения.\n" + +#: ../src/client/accounts/add-edit-page.vala:818 +msgid " • Username or password incorrect.\n" +msgstr " • Неверные имя пользователя или пароль.\n" -#: ../src/client/accounts/add-edit-page.vala:786 -msgid " • Connection error.\n" -msgstr "" -" • Ошибка подключения.\n" -"\n" - -#: ../src/client/accounts/add-edit-page.vala:790 -msgid " • Username or password incorrect.\n" -msgstr " • Неверные имя пользователя или пароль.\n" - -#: ../src/client/application/geary-application.vala:19 +#: ../src/client/application/geary-application.vala:22 msgid "Copyright 2016 Software Freedom Conservancy Inc." -msgstr "Авторское право 2016 Software Freedom Conservancy Inc." +msgstr "Авторское право © 2016 Software Freedom Conservancy Inc." -#: ../src/client/application/geary-application.vala:21 +#: ../src/client/application/geary-application.vala:24 msgid "Visit the Geary web site" msgstr "Посетить веб-сайт Geary" +#: ../src/client/application/geary-application.vala:464 +#, c-format +msgid "About %s" +msgstr "О %s" + +#. Translators: add your name and email address to receive +#. credit in the About dialog For example: Yamada Taro +#. +#: ../src/client/application/geary-application.vala:468 +msgid "translator-credits" +msgstr "Stas Solovey , 2015-2017" + #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" msgstr "Запускать Geary свёрнутым" @@ -252,217 +328,191 @@ msgstr "Отозвать все сертификаты серверов с предупреждениями TLS" #: ../src/client/application/geary-args.vala:27 +msgid "Perform a graceful quit" +msgstr "Выполнить правильный выход" + +#: ../src/client/application/geary-args.vala:28 msgid "Display program version" msgstr "Показать версию приложения" #. This gives a command-line hint on how to open new composer windows with mailto: -#: ../src/client/application/geary-args.vala:51 +#: ../src/client/application/geary-args.vala:53 #, c-format msgid "Use %s to open a new composer window" msgstr "Используйте %s для открытия нового окна редактора" -#: ../src/client/application/geary-args.vala:52 +#: ../src/client/application/geary-args.vala:54 msgid "Please report comments, suggestions and bugs to:" msgstr "Комментарии, пожелания и найденные ошибки отправляйте:" #. i18n: Command line arguments are invalid -#: ../src/client/application/geary-args.vala:59 +#: ../src/client/application/geary-args.vala:61 #, c-format msgid "Failed to parse command line options: %s\n" msgstr "Не удалось разобрать параметры командной строки: %s\n" -#: ../src/client/application/geary-args.vala:70 +#: ../src/client/application/geary-args.vala:72 #, c-format -msgid "Unrecognized command line option \"%s\"\n" +msgid "Unrecognized command line option “%s”\n" msgstr "Неизвестный параметр командной строки «%s»\n" -#: ../src/client/application/geary-controller.vala:61 +#: ../src/client/application/geary-controller.vala:57 msgid "Delete conversation" msgstr "Удалить беседу" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:58 msgid "Delete conversation (Shift+Delete)" msgstr "Удалить беседу (Shift+Delete)" -#: ../src/client/application/geary-controller.vala:63 +#: ../src/client/application/geary-controller.vala:59 msgid "Delete conversations (Shift+Delete)" msgstr "Удалить беседы (Shift+Delete)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:67 +#: ../src/client/application/geary-controller.vala:63 msgid "Move conversation to Trash (Delete, Backspace)" msgstr "Переместить беседу в корзину (Delete, Backspace)" -#: ../src/client/application/geary-controller.vala:68 +#: ../src/client/application/geary-controller.vala:64 msgid "Move conversations to Trash (Delete, Backspace)" msgstr "Переместить беседы в корзину (Delete, Backspace)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:72 +#: ../src/client/application/geary-controller.vala:68 msgid "_Archive" msgstr "_Архивировать" -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:69 msgid "Archive conversation (A)" msgstr "Архивировать беседу (A)" -#: ../src/client/application/geary-controller.vala:74 +#: ../src/client/application/geary-controller.vala:70 msgid "Archive conversations (A)" msgstr "Архивировать беседы (A)" -#: ../src/client/application/geary-controller.vala:77 +#: ../src/client/application/geary-controller.vala:73 msgid "Mark as S_pam" msgstr "Отметить как С_пам" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:74 msgid "Mark as not S_pam" msgstr "Отметить как _не Спам" -#: ../src/client/application/geary-controller.vala:80 -#: ../src/client/application/geary-controller.vala:396 +#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:448 msgid "Mark conversation" msgstr "Отметить беседу" -#: ../src/client/application/geary-controller.vala:81 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark conversations" msgstr "Отметить беседы" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:78 msgid "Add label to conversation" msgstr "Добавить метку беседе" -#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:79 msgid "Add label to conversations" msgstr "Добавить метку беседам" -#: ../src/client/application/geary-controller.vala:84 -#: ../src/client/application/geary-controller.vala:435 +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:487 msgid "Move conversation" msgstr "Переместить беседу" -#: ../src/client/application/geary-controller.vala:85 +#: ../src/client/application/geary-controller.vala:81 msgid "Move conversations" msgstr "Переместить беседы" -#: ../src/client/application/geary-controller.vala:376 -#: ../ui/app_menu.interface.h:1 -msgid "A_ccounts" -msgstr "_Учётные записи" - -#: ../src/client/application/geary-controller.vala:381 -#: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 -msgid "_Preferences" -msgstr "_Параметры" - -#: ../src/client/application/geary-controller.vala:385 -#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:3 -msgid "_Help" -msgstr "_Справка" - -#: ../src/client/application/geary-controller.vala:389 -#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:4 -msgid "_About" -msgstr "_О приложении" - -#: ../src/client/application/geary-controller.vala:393 -#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:5 -msgid "_Quit" -msgstr "_Завершить" - -#: ../src/client/application/geary-controller.vala:398 -msgid "_Mark as..." +#: ../src/client/application/geary-controller.vala:450 +msgid "_Mark as…" msgstr "_Отметить как…" -#: ../src/client/application/geary-controller.vala:404 +#: ../src/client/application/geary-controller.vala:456 msgid "Mark as _Read" msgstr "Отметить как _Прочитанное" -#: ../src/client/application/geary-controller.vala:410 +#: ../src/client/application/geary-controller.vala:462 msgid "Mark as _Unread" msgstr "Отметить как _Непрочитанное" -#: ../src/client/application/geary-controller.vala:416 +#: ../src/client/application/geary-controller.vala:468 msgid "_Star" msgstr "_Добавить в избранное" -#: ../src/client/application/geary-controller.vala:421 +#: ../src/client/application/geary-controller.vala:473 msgid "U_nstar" msgstr "_Убрать из избранных" -#: ../src/client/application/geary-controller.vala:431 +#: ../src/client/application/geary-controller.vala:483 msgid "Add label" msgstr "Добавить метку" -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:484 msgid "_Label" msgstr "_Метка" -#: ../src/client/application/geary-controller.vala:436 +#: ../src/client/application/geary-controller.vala:488 msgid "_Move" msgstr "_Переместить" -#: ../src/client/application/geary-controller.vala:440 +#: ../src/client/application/geary-controller.vala:492 msgid "Compose new message (Ctrl+N, N)" msgstr "Создать новую беседу (Ctrl+N, N)" -#. Reply to a message. -#: ../src/client/application/geary-controller.vala:444 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1873 +#: ../src/client/application/geary-controller.vala:496 +#: ../ui/conversation-email-menus.ui.h:1 msgid "_Reply" msgstr "_Ответить" -#: ../src/client/application/geary-controller.vala:445 +#: ../src/client/application/geary-controller.vala:497 msgid "Reply (Ctrl+R, R)" msgstr "Ответить (Ctrl+R, R)" -#: ../src/client/application/geary-controller.vala:449 +#: ../src/client/application/geary-controller.vala:501 msgid "R_eply All" msgstr "О_тветить всем" -#: ../src/client/application/geary-controller.vala:450 +#: ../src/client/application/geary-controller.vala:502 msgid "Reply all (Ctrl+Shift+R, Shift+R)" msgstr "Ответить всем (Ctrl+Shift+R, Shift+R)" -#. Forward a message. -#: ../src/client/application/geary-controller.vala:455 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1883 +#: ../src/client/application/geary-controller.vala:507 +#: ../ui/conversation-email-menus.ui.h:3 msgid "_Forward" msgstr "_Переслать" -#: ../src/client/application/geary-controller.vala:456 +#: ../src/client/application/geary-controller.vala:508 msgid "Forward (Ctrl+L, F)" msgstr "Переслать (Ctrl+L, F)" -#: ../src/client/application/geary-controller.vala:495 -msgid "Empty" -msgstr "Очистить" - -#: ../src/client/application/geary-controller.vala:496 -msgid "Empty Spam or Trash folders" -msgstr "Очистить Корзину или Спам" - -#: ../src/client/application/geary-controller.vala:500 +#: ../src/client/application/geary-controller.vala:538 msgid "Empty _Spam…" msgstr "Очистить _Спам…" -#: ../src/client/application/geary-controller.vala:504 +#: ../src/client/application/geary-controller.vala:542 msgid "Empty _Trash…" msgstr "Очистить _Корзину…" #. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:537 +#: ../src/client/application/geary-controller.vala:574 msgid "Toggle search bar" msgstr "Включить панель поиска" -#: ../src/client/application/geary-controller.vala:744 +#. No callback is connected, since we bind the toggle button to the find bar visibility +#: ../src/client/application/geary-controller.vala:579 +msgid "Toggle find bar" +msgstr "Переключить панель поиска" + +#: ../src/client/application/geary-controller.vala:757 msgid "Unable to store server trust exception" msgstr "Не удалось добавить исключение безопасности сервера" -#: ../src/client/application/geary-controller.vala:981 +#: ../src/client/application/geary-controller.vala:992 msgid "Your settings are insecure" msgstr "Параметры небезопасны" -#: ../src/client/application/geary-controller.vala:982 +#: ../src/client/application/geary-controller.vala:993 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -472,15 +522,15 @@ "что ваши имя пользователя и пароль могут быть перехвачены сторонними лицами. " "Уверены, что хотите продолжить?" -#: ../src/client/application/geary-controller.vala:983 +#: ../src/client/application/geary-controller.vala:994 msgid "Co_ntinue" msgstr "_Продолжить" -#: ../src/client/application/geary-controller.vala:1030 +#: ../src/client/application/geary-controller.vala:1041 msgid "Error connecting to the server" msgstr "Ошибка соединения с сервером" -#: ../src/client/application/geary-controller.vala:1031 +#: ../src/client/application/geary-controller.vala:1042 msgid "" "Geary encountered an error while connecting to the server. Please try again " "in a few moments." @@ -488,12 +538,12 @@ "Geary получил ошибку при соединении с сервером. Повторите попытку позже." #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:1068 +#: ../src/client/application/geary-controller.vala:1079 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "Ошибка отправки эл. почты" -#: ../src/client/application/geary-controller.vala:1069 +#: ../src/client/application/geary-controller.vala:1080 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." @@ -503,12 +553,12 @@ #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1073 +#: ../src/client/application/geary-controller.vala:1084 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "Ошибка сохранения отправленной почты" -#: ../src/client/application/geary-controller.vala:1074 +#: ../src/client/application/geary-controller.vala:1085 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." @@ -516,19 +566,19 @@ "В Geary произошла ошибка при сохранении отправленного сообщения в папку " "«Отправленные». Сообщение будет в папке «Исходящие» пока вы не удалите его." -#: ../src/client/application/geary-controller.vala:1143 +#: ../src/client/application/geary-controller.vala:1154 msgid "Labels" msgstr "Метки" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1155 +#: ../src/client/application/geary-controller.vala:1166 #, c-format msgid "Unable to open the database for %s" msgstr "Не удалось открыть базу данных для %s" -#: ../src/client/application/geary-controller.vala:1156 +#: ../src/client/application/geary-controller.vala:1167 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -553,20 +603,20 @@ "Пересоздание базы данных уничтожит все локальные письма и их вложения. " "Операция не затронет почту, хранящуюся на сервере." -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "_Rebuild" msgstr "Пересоздать" -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "E_xit" msgstr "_Завершить" -#: ../src/client/application/geary-controller.vala:1167 +#: ../src/client/application/geary-controller.vala:1178 #, c-format -msgid "Unable to rebuild database for \"%s\"" +msgid "Unable to rebuild database for “%s”" msgstr "Не удалось пересоздать базу данных для «%s»" -#: ../src/client/application/geary-controller.vala:1168 +#: ../src/client/application/geary-controller.vala:1179 #, c-format msgid "" "Error during rebuild:\n" @@ -579,14 +629,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1190 -#: ../src/client/application/geary-controller.vala:1200 +#: ../src/client/application/geary-controller.vala:1201 #: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:1222 #, c-format msgid "Unable to open local mailbox for %s" msgstr "Не удалось открыть локальный почтовый ящик для %s" -#: ../src/client/application/geary-controller.vala:1191 +#: ../src/client/application/geary-controller.vala:1202 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -604,10 +654,10 @@ "\n" "%s" -#: ../src/client/application/geary-controller.vala:1201 +#: ../src/client/application/geary-controller.vala:1212 msgid "" "The version number of the local mail database is formatted for a newer " -"version of Geary. Unfortunately, the database cannot be \"rolled back\" to " +"version of Geary. Unfortunately, the database cannot be “rolled back” to " "work with this version of Geary.\n" "\n" "Please install the latest version of Geary and try again." @@ -616,9 +666,9 @@ "сожалению, невозможно произвести изменение базы данных для работы с этой " "версией Geary.\n" "\n" -"Установите последнюю версию Geary и попробуйте снова. " +"Установите последнюю версию Geary и попробуйте снова." -#: ../src/client/application/geary-controller.vala:1212 +#: ../src/client/application/geary-controller.vala:1223 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" @@ -630,27 +680,15 @@ "\n" "Проверьте подключение к сети и перезапустите Geary." -#: ../src/client/application/geary-controller.vala:1723 -#, c-format -msgid "About %s" -msgstr "О %s" - -#. / Translators: add your name and email address to receive credit in the About dialog -#. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1726 -msgid "translator-credits" -msgstr "Stas Solovey , 2015-2017" - -#: ../src/client/application/geary-controller.vala:1984 +#: ../src/client/application/geary-controller.vala:1999 msgid "Undo move (Ctrl+Z)" msgstr "Отменить перемещение (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:1994 -#, c-format -msgid "Are you sure you want to open \"%s\"?" -msgstr "Действительно открыть «%s»?" +#: ../src/client/application/geary-controller.vala:2009 +msgid "Are you sure you want to open these attachments?" +msgstr "Действительно хотите открыть эти вложения?" -#: ../src/client/application/geary-controller.vala:1995 +#: ../src/client/application/geary-controller.vala:2010 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -658,121 +696,105 @@ "Вложения при открытии могут нанести ущерб системе. Открывайте вложения " "только от надёжных источников." -#: ../src/client/application/geary-controller.vala:1996 -msgid "Don't _ask me again" +#: ../src/client/application/geary-controller.vala:2011 +msgid "Don’t _ask me again" msgstr "Не _спрашивать снова" -#: ../src/client/application/geary-controller.vala:2014 +#: ../src/client/application/geary-controller.vala:2121 #, c-format -msgid "A file named \"%s\" already exists. Do you want to replace it?" +msgid "A file named “%s” already exists. Do you want to replace it?" msgstr "Файл с именем «%s» уже существует. Заменить его?" -#: ../src/client/application/geary-controller.vala:2016 +#: ../src/client/application/geary-controller.vala:2123 #, c-format msgid "" -"The file already exists in \"%s\". Replacing it will overwrite its contents." +"The file already exists in “%s”. Replacing it will overwrite its contents." msgstr "" "Файл уже существует в «%s». Его замена приведёт к полной перезаписи его " "содержимого." -#: ../src/client/application/geary-controller.vala:2019 +#: ../src/client/application/geary-controller.vala:2126 msgid "_Replace" msgstr "_Заменить" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2324 +#: ../src/client/application/geary-controller.vala:2374 msgid "Close open draft messages?" msgstr "Закрыть черновик?" -#: ../src/client/application/geary-controller.vala:2454 +#: ../src/client/application/geary-controller.vala:2496 #, c-format msgid "Empty all email from your %s folder?" msgstr "Очистить все письма папки %s?" -#: ../src/client/application/geary-controller.vala:2455 +#: ../src/client/application/geary-controller.vala:2497 msgid "This removes the email from Geary and your email server." msgstr "Удаляет все письма из Geary и почтового сервера." -#: ../src/client/application/geary-controller.vala:2456 +#: ../src/client/application/geary-controller.vala:2498 msgid "This cannot be undone." msgstr "Это не может быть отменено." -#: ../src/client/application/geary-controller.vala:2457 +#: ../src/client/application/geary-controller.vala:2499 #, c-format msgid "Empty %s" msgstr "Очистить %s" -#: ../src/client/application/geary-controller.vala:2474 +#: ../src/client/application/geary-controller.vala:2516 #, c-format msgid "Error emptying %s" msgstr "Ошибка очистки %s" -#: ../src/client/application/geary-controller.vala:2504 +#: ../src/client/application/geary-controller.vala:2546 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "Безвозвратно удалить это сообщение?" msgstr[1] "Безвозвратно удалить эти сообщения?" msgstr[2] "Безвозвратно удалить эти сообщения?" -#: ../src/client/application/geary-controller.vala:2506 +#: ../src/client/application/geary-controller.vala:2548 msgid "Delete" msgstr "_Удалить" -#: ../src/client/application/geary-controller.vala:2537 +#: ../src/client/application/geary-controller.vala:2580 msgid "Undo archive (Ctrl+Z)" msgstr "Отменить архивирование (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2552 +#: ../src/client/application/geary-controller.vala:2595 msgid "Undo trash (Ctrl+Z)" msgstr "Отменить перемещение в корзину (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2605 +#: ../src/client/application/geary-controller.vala:2649 msgid "Undo (Ctrl+Z)" msgstr "Отменить (Ctrl+Z)" -#: ../src/client/components/conversation-find-bar.vala:214 -#, c-format -msgid "%i match" -msgid_plural "%i matches" -msgstr[0] "%i совпадение" -msgstr[1] "%i совпадения" -msgstr[2] "%i совпадений" - -#: ../src/client/components/conversation-find-bar.vala:216 -#, c-format -msgid "%i match (wrapped)" -msgid_plural "%i matches (wrapped)" -msgstr[0] "%i совпадение (от начала)" -msgstr[1] "%i совпадения (от начала)" -msgstr[2] "%i совпадений (от начала)" - -#: ../src/client/components/conversation-find-bar.vala:218 -msgid "not found" -msgstr "не найдено" +#: ../src/client/application/geary-controller.vala:2780 +msgid "Failed to open default text editor." +msgstr "Не удалось запустить текстовый редактор по-умолчанию." -#: ../src/client/components/main-window.vala:438 +#: ../src/client/components/main-window.vala:389 #, c-format msgid "%s (%d)" msgstr "%s (%d)" -#: ../src/client/components/search-bar.vala:10 +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "Поиск" #. Search entry. -#: ../src/client/components/search-bar.vala:25 +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" msgstr "Поиск по всей почте учётной записи по ключевым словам (Ctrl+S)" -#: ../src/client/components/search-bar.vala:118 +#: ../src/client/components/search-bar.vala:100 #, c-format msgid "Indexing %s account" msgstr "Индексируется учётная запись %s" -#: ../src/client/components/search-bar.vala:129 +#: ../src/client/components/search-bar.vala:111 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" @@ -780,7 +802,7 @@ #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 -msgid "Sending..." +msgid "Sending…" msgstr "Отправка…" #: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 @@ -792,6 +814,10 @@ msgid "_Cancel" msgstr "О_тмена" +#: ../src/client/components/stock.vala:21 ../ui/gtk/menus.ui.h:6 +msgid "_About" +msgstr "_О приложении" + #: ../src/client/components/stock.vala:23 msgid "_Close" msgstr "_Закрыть" @@ -800,51 +826,73 @@ msgid "_Discard" msgstr "От_казаться" -#: ../src/client/components/stock.vala:26 +#: ../src/client/components/stock.vala:25 ../ui/gtk/menus.ui.h:5 +msgid "_Help" +msgstr "_Справка" + +#: ../src/client/components/stock.vala:26 ../ui/conversation-email-menus.ui.h:9 msgid "_Open" msgstr "Отк_рыть" -#: ../src/client/components/stock.vala:28 -msgid "_Print..." +#: ../src/client/components/stock.vala:27 ../ui/gtk/menus.ui.h:3 +msgid "_Preferences" +msgstr "_Параметры" + +#: ../src/client/components/stock.vala:28 ../ui/conversation-email-menus.ui.h:7 +msgid "_Print…" msgstr "_Печать…" +#: ../src/client/components/stock.vala:29 ../ui/gtk/menus.ui.h:7 +msgid "_Quit" +msgstr "_Завершить" + #: ../src/client/components/stock.vala:30 ../ui/remove_confirm.glade.h:6 msgid "_Remove" msgstr "_Удалить" -#. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1335 -msgid "Select _All" -msgstr "Выбрать _все" - -#: ../src/client/components/stock.vala:33 msgid "_Keep" msgstr "О_ставить" -#: ../src/client/composer/composer-widget.vala:73 +#: ../src/client/composer/composer-link-popover.vala:150 +msgid "Link URL is not correctly formatted, e.g. http://example.com" +msgstr "" +"Ссылка URL неверно отформатирована, пример правильно оформленной ссылки " +"http://example.com" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid link URL" +msgstr "Некорректная ссылка URL" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid email address" +msgstr "Некорректный адрес эл. почты" + +#: ../src/client/composer/composer-widget.vala:154 msgid "Saved" msgstr "Сохранён" -#: ../src/client/composer/composer-widget.vala:74 +#: ../src/client/composer/composer-widget.vala:155 msgid "Saving" msgstr "Сохраняется" -#: ../src/client/composer/composer-widget.vala:75 +#: ../src/client/composer/composer-widget.vala:156 msgid "Error saving" msgstr "Ошибка сохранения" -#: ../src/client/composer/composer-widget.vala:76 +#: ../src/client/composer/composer-widget.vala:157 msgid "Press Backspace to delete quote" msgstr "Нажмите клавишу Backspace для удаления цитаты" -#: ../src/client/composer/composer-widget.vala:77 +#: ../src/client/composer/composer-widget.vala:158 msgid "New Message" msgstr "Новое сообщение" -#. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since -#. this is full-word checking, include all variants of each word. No spaces are allowed. -#: ../src/client/composer/composer-widget.vala:138 +#. Translators: This is list of keywords, separated by pipe ("|") +#. characters, that suggest an attachment; since this is full-word +#. checking, include all variants of each word. No spaces are +#. allowed. +#: ../src/client/composer/composer-widget.vala:167 msgid "" "attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" "enclosing|encloses|enclosure|enclosures" @@ -852,277 +900,185 @@ "прикрепить|прикрепление|прикрепления|прикреплён|прикреплены|вложение|" "вложенные|вложения" -#: ../src/client/composer/composer-widget.vala:1121 -#: ../src/client/composer/composer-widget.vala:1125 +#: ../src/client/composer/composer-widget.vala:1122 +#: ../src/client/composer/composer-widget.vala:1141 msgid "Do you want to discard this message?" msgstr "Отказаться от этого сообщения?" -#: ../src/client/composer/composer-widget.vala:1281 +#: ../src/client/composer/composer-widget.vala:1245 msgid "Send message with an empty subject and body?" msgstr "Отправить сообщение с пустой темой и без текста?" -#: ../src/client/composer/composer-widget.vala:1283 +#: ../src/client/composer/composer-widget.vala:1247 msgid "Send message with an empty subject?" msgstr "Отправить сообщение с пустой темой?" -#: ../src/client/composer/composer-widget.vala:1285 +#: ../src/client/composer/composer-widget.vala:1249 msgid "Send message with an empty body?" msgstr "Отправить сообщение без текста?" -#: ../src/client/composer/composer-widget.vala:1287 +#: ../src/client/composer/composer-widget.vala:1253 msgid "Send message without an attachment?" msgstr "Отправить сообщение без прикреплённых файлов?" -#: ../src/client/composer/composer-widget.vala:1553 -msgid "Cannot add attachment" -msgstr "Невозможно добавить вложение" +#: ../src/client/composer/composer-widget.vala:1515 +#, c-format +msgid "“%s” already attached for delivery." +msgstr "«%s» уже вложено в письмо." -#: ../src/client/composer/composer-widget.vala:1564 +#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" +#. Translators: The first argument will be a +#. description of the document type, the second will +#. be a human-friendly size string. For example: +#. Document (100.9MB) +#: ../src/client/composer/composer-widget.vala:1523 +#: ../src/client/conversation-viewer/conversation-email.vala:138 #, c-format -msgid "\"%s\" could not be found." +msgid "%s (%s)" +msgstr "%s (%s)" + +#: ../src/client/composer/composer-widget.vala:1560 +#, c-format +msgid "“%s” could not be found." msgstr "Невозможно найти «%s»." -#: ../src/client/composer/composer-widget.vala:1571 +#: ../src/client/composer/composer-widget.vala:1566 #, c-format -msgid "\"%s\" is a folder." +msgid "“%s” is a folder." msgstr "«%s» является каталогом." -#: ../src/client/composer/composer-widget.vala:1578 +#: ../src/client/composer/composer-widget.vala:1572 #, c-format -msgid "\"%s\" is an empty file." +msgid "“%s” is an empty file." msgstr "«%s» — пустой файл." -#: ../src/client/composer/composer-widget.vala:1592 +#: ../src/client/composer/composer-widget.vala:1585 #, c-format -msgid "\"%s\" could not be opened for reading." +msgid "“%s” could not be opened for reading." msgstr "Невозможно открыть для чтения «%s»." -#: ../src/client/composer/composer-widget.vala:1599 -#, c-format -msgid "\"%s\" already attached for delivery." -msgstr "«%s» уже вложено в письмо." - -#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-widget.vala:1608 -#, c-format -msgid "%s (%s)" -msgstr "%s (%s)" +#: ../src/client/composer/composer-widget.vala:1593 +msgid "Cannot add attachment" +msgstr "Невозможно добавить вложение" -#: ../src/client/composer/composer-widget.vala:1668 +#: ../src/client/composer/composer-widget.vala:1645 msgid "To: " msgstr "Кому: " -#: ../src/client/composer/composer-widget.vala:1671 +#: ../src/client/composer/composer-widget.vala:1648 msgid "Cc: " msgstr "Копия: " -#: ../src/client/composer/composer-widget.vala:1674 +#: ../src/client/composer/composer-widget.vala:1651 msgid "Bcc: " -msgstr "Скрытая копия:" +msgstr "Скрытая копия: " -#: ../src/client/composer/composer-widget.vala:1677 +#: ../src/client/composer/composer-widget.vala:1654 msgid "Reply-To: " msgstr "Ответить: " -#: ../src/client/composer/composer-widget.vala:1910 +#: ../src/client/composer/composer-widget.vala:1786 msgid "Select Color" msgstr "Выбрать цвет" #. Displayed in the From dropdown to indicate an "alternate email address" #. for an account. The first printf argument will be the alternate email #. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2345 +#: ../src/client/composer/composer-widget.vala:1986 #, c-format msgid "%1$s via %2$s" msgstr "%1$s через %2$s" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2389 +#: ../src/client/composer/composer-widget.vala:2028 msgid "_From:" msgstr "_От:" +#. Translators: This is the name of the file chooser filter +#. when inserting an image in the composer. +#: ../src/client/composer/composer-widget.vala:2252 +msgid "Images" +msgstr "Изображения" + +#: ../src/client/composer/spell-check-popover.vala:117 +msgid "Remove this language from the preferred list" +msgstr "Удалить этот язык из списка предпочтений" + +#: ../src/client/composer/spell-check-popover.vala:121 +msgid "Add this language to the preferred list" +msgstr "Добавить этот язык в список предпочтений" + +#: ../src/client/composer/spell-check-popover.vala:217 +msgid "Search for more languages" +msgstr "Поиск дополнительных языков" + #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Я" -#: ../src/client/conversation-viewer/conversation-viewer.vala:414 -msgid "No conversations selected." -msgstr "Беседы не выбраны." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:416 -#, c-format -msgid "%u conversation selected." -msgid_plural "%u conversations selected." -msgstr[0] "%u беседа выбрана." -msgstr[1] "%u беседы выбрано." -msgstr[2] "%u бесед выбрано." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:446 -msgid "No search results found." -msgstr "Нет результатов поиска." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:448 -msgid "No conversations in folder." -msgstr "В папке нет сообщений." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "This message contains remote images." -msgstr "Данное сообщение содержит изображения." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "Show Images" -msgstr "Показать изображения" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:715 -msgid "Always Show From Sender" -msgstr "Всегда показывать изображения от отправителя" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:739 -msgid "Edit Draft" -msgstr "Редактировать черновик" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:815 -msgid "From:" -msgstr "От:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:818 -msgid "To:" -msgstr "Кому:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:821 -msgid "Cc:" -msgstr "Копия:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:824 -msgid "Bcc:" -msgstr "Скрытая копия:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:827 -msgid "Subject:" -msgstr "Тема:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:830 -msgid "Date:" -msgstr "Дата:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1150 -#, c-format -msgid "%u read message" -msgid_plural "%u read messages" -msgstr[0] "%u сообщение прочитано" -msgstr[1] "%u сообщения прочитаны" -msgstr[2] "%u сообщений прочитано" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1282 -#, c-format -msgid "This message was sent successfully, but could not be saved to %s." -msgstr "Сообщение успешно отправлено, но не может быть сохранено в %s." - -#. Add a menu item for copying the current selection. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1308 -#: ../ui/composer.glade.h:4 -msgid "_Copy" -msgstr "_Копировать" - -#. Add a menu item for copying the address. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1316 -msgid "Copy _Email Address" -msgstr "Копировать эл. _адрес" - -#. Add a menu item for copying the link. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1321 -#: ../ui/composer.glade.h:17 -msgid "Copy _Link" -msgstr "Копировать _ссылку" - -#. Select message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1329 -msgid "Select _Message" -msgstr "Выбрать сообщение" - -#. Inspect. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1341 -msgid "_Inspect" -msgstr "_Проверить" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1572 -msgid "This link appears to go to" -msgstr "Кажется что эта ссылка ведёт на" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1573 -msgid "but actually goes to" -msgstr ", но на самом деле указывает на" - -#. If href doesn't look like a URL, something is fishy, so warn the user -#: ../src/client/conversation-viewer/conversation-viewer.vala:1628 -msgid " (Invalid?)" -msgstr " (Небезопасная?)" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1734 -msgid "_Save Image As..." -msgstr "_Сохранить изображение как…" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1838 -msgid "_Save As..." -msgstr "_Сохранить как…" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1843 -msgid "Save All A_ttachments..." -msgstr "Сохранить все в_ложения…" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1863 -msgid "Save A_ttachment..." -msgid_plural "Save All A_ttachments..." -msgstr[0] "Сохранить вложение…" -msgstr[1] "Сохранить вложения…" -msgstr[2] "Сохранить вложения…" - -#. Reply to all on a message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1878 -msgid "Reply to _All" -msgstr "Ответить _всем" - -#. Mark as read/unread. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1895 -msgid "_Mark as Read" -msgstr "Отметить как _прочитанное" +#. Translators: This is the file type displayed for +#. attachments with unknown file types. +#: ../src/client/conversation-viewer/conversation-email.vala:124 +msgid "Unknown" +msgstr "Неизвестный" + +#. Preview headers +#. Translators: This is displayed in place of the from address +#. when the message has no from address. +#: ../src/client/conversation-viewer/conversation-message.vala:331 +msgid "No sender" +msgstr "Отправитель не указан" + +#. Translators: This separates multiple 'from' +#. addresses in the header preview for a message. +#: ../src/client/conversation-viewer/conversation-message.vala:586 +msgid ", " +msgstr ", " + +#. Translators: This string is used as the HTML IMG ALT +#. attribute value when displaying an inline image in an email +#. that did not specify a file name. E.g. Image" +msgstr "От " + +#: ../ui/conversation-message.ui.h:2 +msgid "1/1/1970\t" +msgstr "1/1/1970\t" + +#: ../ui/conversation-message.ui.h:3 +msgid "Preview body text." +msgstr "Предварительный просмотр основного текста." + +#: ../ui/conversation-message.ui.h:4 +msgid "Sent by:" +msgstr "Отправлено:" + +#: ../ui/conversation-message.ui.h:5 +msgid "Reply to:" +msgstr "Ответить:" + +#: ../ui/conversation-message.ui.h:6 +msgid "Subject" msgstr "Тема" -#: ../ui/composer.glade.h:56 -msgid "_Bcc" -msgstr "Скрытая копия" +#: ../ui/conversation-message.ui.h:7 +msgid "To:" +msgstr "Кому:" -#: ../ui/composer.glade.h:57 -msgid "_Reply-To" -msgstr "_Ответить" +#: ../ui/conversation-message.ui.h:8 +msgid "Cc:" +msgstr "Копия:" -#. Geary account mail will be sent from -#: ../ui/composer.glade.h:59 -msgid "From" -msgstr "От" +#: ../ui/conversation-message.ui.h:9 +msgid "Bcc:" +msgstr "Скрытая копия:" -#: ../ui/composer.glade.h:60 -msgid "Drop files here" -msgstr "Перетащите файлы сюда" +#: ../ui/conversation-message.ui.h:10 +msgid "Show Images" +msgstr "Показать изображения" -#: ../ui/composer.glade.h:61 -msgid "To add them as attachments" -msgstr "чтобы добавить их как вложения" +#: ../ui/conversation-message.ui.h:11 +msgid "Always Show From Sender" +msgstr "Всегда показывать изображения от отправителя" + +#: ../ui/conversation-message.ui.h:12 +msgid "Remote images not shown" +msgstr "Удалённые изображения не показаны" + +#: ../ui/conversation-message.ui.h:13 +msgid "Only show remote images from senders you trust." +msgstr "Отображать удалённые изображения только от доверенных отправителей." + +#: ../ui/conversation-message.ui.h:14 +msgid "But actually goes to:" +msgstr "Но на самом деле ведёт на:" + +#: ../ui/conversation-message.ui.h:15 +msgid "The link appears to go to:" +msgstr "Кажется что эта ссылка ведёт на:" + +#: ../ui/conversation-message.ui.h:16 +msgid "Deceptive link found" +msgstr "Найдена ссылка с перенаправлением" + +#: ../ui/conversation-message.ui.h:17 +msgid "The email sender may be leading you to the wrong web site." +msgstr "Отправитель письма возможно ведёт вас на ложный веб-сайт." + +#: ../ui/conversation-message.ui.h:18 +msgid "If unsure, contact the sender and ask before continuing." +msgstr "" +"Если вы не уверены, обратитесь к отправителю и спросите, прежде чем " +"продолжить." + +#: ../ui/conversation-viewer.ui.h:1 +msgid "Find in conversation" +msgstr "Найти в беседе" + +#: ../ui/conversation-viewer.ui.h:2 +msgid "Find the previous occurrence of the search string." +msgstr "Найти предыдущее совпадение строки поиска." + +#: ../ui/conversation-viewer.ui.h:3 +msgid "Find the next occurrence of the search string." +msgstr "Найти следующее совпадение строки поиска." #: ../ui/edit_alternate_emails.glade.h:1 msgid "Remove email address" @@ -2073,6 +2185,247 @@ msgid "label" msgstr "метка" +#: ../ui/gtk/help-overlay.ui.h:1 +msgid "Conversation Shortcuts" +msgstr "Комбинации бесед" + +#: ../ui/gtk/help-overlay.ui.h:2 +msgctxt "shortcut window" +msgid "General" +msgstr "Основное" + +#: ../ui/gtk/help-overlay.ui.h:3 +msgctxt "shortcut window" +msgid "Move focus to the next/previous pane" +msgstr "Переместить фокус на следующую/предыдущую панель" + +#: ../ui/gtk/help-overlay.ui.h:4 +msgctxt "shortcut window" +msgid "Move focus to conversation list" +msgstr "Переместить фокус в список бесед" + +#: ../ui/gtk/help-overlay.ui.h:5 +msgctxt "shortcut window" +msgid "Detach composer window" +msgstr "Отсоединить окно редактора" + +#: ../ui/gtk/help-overlay.ui.h:6 +msgctxt "shortcut window" +msgid "Close composer window" +msgstr "Закрыть окно редактора" + +#: ../ui/gtk/help-overlay.ui.h:7 +msgctxt "shortcut window" +msgid "Show keyboard shortcuts" +msgstr "Показать комбинации клавиш" + +#: ../ui/gtk/help-overlay.ui.h:8 +msgctxt "shortcut window" +msgid "Show help" +msgstr "Показать справку" + +#: ../ui/gtk/help-overlay.ui.h:9 +msgctxt "shortcut window" +msgid "Quit the application" +msgstr "Завершить приложение" + +#: ../ui/gtk/help-overlay.ui.h:10 +msgctxt "shortcut window" +msgid "Search" +msgstr "Поиск" + +#: ../ui/gtk/help-overlay.ui.h:11 +msgctxt "shortcut window" +msgid "Jump to search box" +msgstr "Перейти в строку поиска" + +#: ../ui/gtk/help-overlay.ui.h:12 +msgctxt "shortcut window" +msgid "Find in current conversation" +msgstr "Найти в текущей беседе" + +#: ../ui/gtk/help-overlay.ui.h:13 +msgctxt "shortcut window" +msgid "Find next/previous in current conversation" +msgstr "Найти следующее/предыдущее в текущей беседе" + +#: ../ui/gtk/help-overlay.ui.h:14 +msgctxt "shortcut window" +msgid "Actions" +msgstr "Действия" + +#: ../ui/gtk/help-overlay.ui.h:15 +msgctxt "shortcut window" +msgid "Compose a new message" +msgstr "Написать новое сообщение" + +#: ../ui/gtk/help-overlay.ui.h:16 +msgctxt "shortcut window" +msgid "Reply to sender " +msgstr "Ответить отправителю " + +#: ../ui/gtk/help-overlay.ui.h:17 +msgctxt "shortcut window" +msgid "Reply to all" +msgstr "Ответить всем" + +#: ../ui/gtk/help-overlay.ui.h:18 +msgctxt "shortcut window" +msgid "Forward" +msgstr "Вперёд" + +#: ../ui/gtk/help-overlay.ui.h:19 +msgctxt "shortcut window" +msgid "Archive" +msgstr "Архив" + +#: ../ui/gtk/help-overlay.ui.h:20 +msgctxt "shortcut window" +msgid "Move to trash" +msgstr "Переместить в корзину" + +#: ../ui/gtk/help-overlay.ui.h:21 +msgctxt "shortcut window" +msgid "Toggle spam" +msgstr "Переключить метку спам/не спам" + +#: ../ui/gtk/help-overlay.ui.h:22 +msgctxt "shortcut window" +msgid "Move the conversation" +msgstr "Переместить беседу" + +#: ../ui/gtk/help-overlay.ui.h:23 +msgctxt "shortcut window" +msgid "Label the conversation" +msgstr "Добавить метку беседе" + +#: ../ui/gtk/help-overlay.ui.h:24 +msgctxt "shortcut window" +msgid "Mark read" +msgstr "Отметить как прочитанное" + +#: ../ui/gtk/help-overlay.ui.h:25 +msgctxt "shortcut window" +msgid "Mark unread" +msgstr "Отметить как непрочитанное" + +#: ../ui/gtk/help-overlay.ui.h:26 +msgctxt "shortcut window" +msgid "View" +msgstr "Вид" + +#: ../ui/gtk/help-overlay.ui.h:27 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Приблизить" + +#: ../ui/gtk/help-overlay.ui.h:28 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Отдалить" + +#: ../ui/gtk/help-overlay.ui.h:29 +msgctxt "shortcut window" +msgid "Reset zoom" +msgstr "Сбросить масштаб" + +#: ../ui/gtk/help-overlay.ui.h:30 +msgctxt "shortcut window" +msgid "Additional Shortcuts" +msgstr "Дополнительные комбинации" + +#: ../ui/gtk/help-overlay.ui.h:31 +msgctxt "shortcut window" +msgid "Star" +msgstr "Добавить в избранное" + +#: ../ui/gtk/help-overlay.ui.h:32 +msgctxt "shortcut window" +msgid "Unstar" +msgstr "Убрать из избранных" + +#: ../ui/gtk/help-overlay.ui.h:33 +msgctxt "shortcut window" +msgid "Delete" +msgstr "Удалить" + +#: ../ui/gtk/help-overlay.ui.h:34 +msgctxt "shortcut window" +msgid "Jump to next (older) conversation" +msgstr "Перейти к следующей (ранней) беседе" + +#: ../ui/gtk/help-overlay.ui.h:35 +msgctxt "shortcut window" +msgid "Jump to previous (newer) conversation" +msgstr "Перейти к предыдущей (поздней) беседе" + +#: ../ui/gtk/help-overlay.ui.h:36 +msgid "Composer Shortcuts" +msgstr "Комбинации редактора" + +#: ../ui/gtk/help-overlay.ui.h:37 +msgctxt "shortcut window" +msgid "Quote text" +msgstr "Цитировать текст" + +#: ../ui/gtk/help-overlay.ui.h:38 +msgctxt "shortcut window" +msgid "Unquote text" +msgstr "Убрать цитирование текста" + +#: ../ui/gtk/help-overlay.ui.h:39 +msgctxt "shortcut window" +msgid "Send" +msgstr "Отправить" + +#: ../ui/gtk/help-overlay.ui.h:40 +msgctxt "shortcut window" +msgid "Add attachment" +msgstr "Добавить вложение" + +#: ../ui/gtk/help-overlay.ui.h:41 +msgctxt "shortcut window" +msgid "Rich text mode" +msgstr "Режим форматированного текста" + +#: ../ui/gtk/help-overlay.ui.h:42 +msgctxt "shortcut window" +msgid "Bold text" +msgstr "Жирный текст" + +#: ../ui/gtk/help-overlay.ui.h:43 +msgctxt "shortcut window" +msgid "Italicize text" +msgstr "Курсивный текст" + +#: ../ui/gtk/help-overlay.ui.h:44 +msgctxt "shortcut window" +msgid "Underline text" +msgstr "Подчёркнутый текст" + +#: ../ui/gtk/help-overlay.ui.h:45 +msgctxt "shortcut window" +msgid "Strike text" +msgstr "Зачёркнутый текст" + +#: ../ui/gtk/help-overlay.ui.h:46 +msgctxt "shortcut window" +msgid "Insert a link" +msgstr "Вставить ссылку" + +#: ../ui/gtk/help-overlay.ui.h:47 +msgctxt "shortcut window" +msgid "Remove formatting" +msgstr "Убрать форматирование" + +#: ../ui/gtk/menus.ui.h:2 +msgid "A_ccounts" +msgstr "_Учётные записи" + +#: ../ui/gtk/menus.ui.h:4 +msgid "_Keyboard Shortcuts" +msgstr "_Комбинации клавиш" + #: ../ui/login.glade.h:1 msgid "email@example.com" msgstr "email@example.com" @@ -2197,7 +2550,7 @@ msgid "Use IMAP cre_dentials" msgstr "Использовать _учётные данные IMAP" -#: ../ui/login.glade.h:34 ../ui/preferences.glade.h:5 +#: ../ui/login.glade.h:34 msgid "Composer" msgstr "Редактирование" @@ -2217,6 +2570,10 @@ msgid "_Download mail" msgstr "_Загружать почту" +#: ../ui/main-toolbar.ui.h:1 +msgid "Empty Spam or Trash folders" +msgstr "Очистить Корзину или Спам" + #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" msgstr "Учётные данные SMTP" @@ -2233,48 +2590,44 @@ msgid "_Authenticate" msgstr "_Авторизоваться" -#: ../ui/preferences.glade.h:1 +#: ../ui/preferences-dialog.ui.h:1 msgid "Reading" msgstr "Просмотр" -#: ../ui/preferences.glade.h:2 +#: ../ui/preferences-dialog.ui.h:2 msgid "_Automatically select next message" msgstr "_Автоматически переходить к следующему сообщению" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences-dialog.ui.h:3 msgid "_Display conversation preview" msgstr "_Показывать предварительный просмотр сообщений" -#: ../ui/preferences.glade.h:4 +#: ../ui/preferences-dialog.ui.h:4 msgid "Use _three pane view" msgstr "Использовать _трёхпанельный интерфейс" -#: ../ui/preferences.glade.h:6 -msgid "Enable _spell checking" -msgstr "Проверять _орфографию" - -#: ../ui/preferences.glade.h:7 +#: ../ui/preferences-dialog.ui.h:5 msgid "Notifications" msgstr "Уведомления" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences-dialog.ui.h:6 msgid "_Play notification sounds" msgstr "_Проигрывать звуковые уведомления" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences-dialog.ui.h:7 msgid "Show _notifications for new mail" msgstr "_Показывать уведомления о новых сообщениях" -#: ../ui/preferences.glade.h:10 +#: ../ui/preferences-dialog.ui.h:8 msgid "Always _watch for new mail" msgstr "Всегда следить за поступлением новых писем" -#: ../ui/preferences.glade.h:11 +#: ../ui/preferences-dialog.ui.h:9 msgid "Geary will run in the background and notify of new mail" msgstr "" "Geary будет работать в фоновом режиме и сообщать о поступлении новых писем" -#: ../ui/preferences.glade.h:12 +#: ../ui/preferences-dialog.ui.h:10 msgid "Preferences" msgstr "Параметры" @@ -2306,6 +2659,126 @@ msgid "Geary update in progress…" msgstr "Идёт обновление Geary…" +#~ msgid "Empty" +#~ msgstr "Очистить" + +#~ msgid "%i match" +#~ msgid_plural "%i matches" +#~ msgstr[0] "%i совпадение" +#~ msgstr[1] "%i совпадения" +#~ msgstr[2] "%i совпадений" + +#~ msgid "%i match (wrapped)" +#~ msgid_plural "%i matches (wrapped)" +#~ msgstr[0] "%i совпадение (от начала)" +#~ msgstr[1] "%i совпадения (от начала)" +#~ msgstr[2] "%i совпадений (от начала)" + +#~ msgid "not found" +#~ msgstr "не найдено" + +#~ msgid "No search results found." +#~ msgstr "Нет результатов поиска." + +#~ msgid "From:" +#~ msgstr "От:" + +#~ msgid "Date:" +#~ msgstr "Дата:" + +#~ msgid "Copy _Link" +#~ msgstr "Копировать _ссылку" + +#~ msgid "Select _Message" +#~ msgstr "Выбрать сообщение" + +#~ msgid " (Invalid?)" +#~ msgstr " (Небезопасная?)" + +#~ msgid "_Save As..." +#~ msgstr "_Сохранить как…" + +#~ msgid "Save A_ttachment..." +#~ msgid_plural "Save All A_ttachments..." +#~ msgstr[0] "Сохранить вложение…" +#~ msgstr[1] "Сохранить вложения…" +#~ msgstr[2] "Сохранить вложения…" + +#~ msgid "none" +#~ msgstr "нет" + +#~ msgid "_Left" +#~ msgstr "По _левому краю" + +#~ msgid "_Right" +#~ msgstr "По _правому краю" + +#~ msgid "_Center" +#~ msgstr "По _центру" + +#~ msgid "_Justify" +#~ msgstr "_Выравнивание" + +#~ msgid "Link (Ctrl+L)" +#~ msgstr "Ссылка (Ctrl+L)" + +#~ msgid "More options" +#~ msgstr "Дополнительные параметры" + +#~ msgctxt "Label" +#~ msgid "Close and Save" +#~ msgstr "Сохранить и закрыть" + +#~ msgctxt "Short Label" +#~ msgid "Close and Save" +#~ msgstr "Сохранить и закрыть" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Save" +#~ msgstr "Сохранить и закрыть" + +#~ msgctxt "Label" +#~ msgid "Close and Discard" +#~ msgstr "Отказаться и закрыть" + +#~ msgctxt "Short Label" +#~ msgid "Close and Discard" +#~ msgstr "Отказаться и закрыть" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Discard" +#~ msgstr "Отказаться и закрыть" + +#~ msgid "Large" +#~ msgstr "Крупный" + +#~ msgid "Medium" +#~ msgstr "Средний" + +#~ msgid "Small" +#~ msgstr "Мелкий" + +#~ msgid "Sans Serif" +#~ msgstr "Без засечек" + +#~ msgid "Serif" +#~ msgstr "С засечками" + +#~ msgid "Fixed Width" +#~ msgstr "Моноширинный" + +#~ msgid "Detach" +#~ msgstr "Открепить" + +#~ msgid "_Attach File" +#~ msgstr "_Вложить файл" + +#~ msgid "_Include Original Attachments" +#~ msgstr "_Включить исходные вложения" + +#~ msgid "Application Menu" +#~ msgstr "Меню приложения" + #~ msgid "Copyright 2011-2015 Yorba Foundation" #~ msgstr "Авторское право © 2011-2015 Yorba Foundation" diff -Nru geary-0.11.4/po/sk.po geary-0.12.0/po/sk.po --- geary-0.11.4/po/sk.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/sk.po 2017-10-02 11:25:21.000000000 +0000 @@ -8,10 +8,10 @@ msgid "" msgstr "" "Project-Id-Version: geary-0.4.1\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" +"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "product=geary&keywords=I18N+L10N&component=internationalization\n" -"POT-Creation-Date: 2016-12-15 00:05+0000\n" -"PO-Revision-Date: 2016-12-16 16:43+0100\n" +"POT-Creation-Date: 2017-09-29 08:56+0000\n" +"PO-Revision-Date: 2017-09-30 11:09+0200\n" "Last-Translator: Dušan Kazik \n" "Language-Team: Slovak (http://www.transifex.com/projects/p/geary/language/" "sk/)\n" @@ -20,33 +20,112 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Poedit 1.8.11\n" +"X-Generator: Poedit 2.0.3\n" -#: ../desktop/geary.desktop.in.h:1 ../desktop/geary-autostart.desktop.in.h:1 +#. Translators: The application name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:2 +#: ../desktop/org.gnome.Geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" msgstr "Geary" -#: ../desktop/geary.desktop.in.h:2 ../desktop/geary-autostart.desktop.in.h:2 -#: ../src/client/application/geary-application.vala:18 -msgid "Mail Client" -msgstr "Poštový klient" - -#: ../desktop/geary.desktop.in.h:3 ../desktop/geary-autostart.desktop.in.h:3 -msgid "Geary Mail" -msgstr "Geary Mail" - -#: ../desktop/geary.desktop.in.h:4 ../desktop/geary-autostart.desktop.in.h:4 +#. Translators: The development team's name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:4 +msgid "Geary Development Team" +msgstr "Tím vývojárov aplikácie Geary" + +#. Translators: The application's summary / tagline +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:6 +#: ../desktop/org.gnome.Geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 +#: ../src/client/application/geary-application.vala:22 msgid "Send and receive email" msgstr "Odosiela a prijíma emaily" -#: ../desktop/geary.desktop.in.h:5 ../desktop/geary-autostart.desktop.in.h:5 -msgid "Email;E-mail;Mail;" -msgstr "email;e-mail;pošta;" +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:7 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"Geary je emailová aplikácia postavená na rozhovoroch pre prostredie GNOME 3. " +"Umožňuje vám prečítať, hľadať a odosielať emaily s jasným a moderným " +"rozhraním." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:8 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"Rozhovory vám umožňujú prečítať kompletnú diskusiu bez nutnosti vyhľadania a " +"klikania zo správy na správu." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:9 +msgid "Geary’s features include:" +msgstr "Funkcie aplikácie Geary zahŕňajú:" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:10 +msgid "Quick email account setup" +msgstr "Rýchle nastavenie emailového účtu" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:11 +msgid "Shows related messages together in conversations" +msgstr "Zobrazenie spolu súvisiacich správ v rozhovoroch" -#: ../desktop/geary.desktop.in.h:6 +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:12 +msgid "Fast, full text and keyword search" +msgstr "Rýchle, fulltextové vyhľadávanie a hľadanie podľa kľúčového slova" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:13 +msgid "Full-featured HTML and plain text message composer" +msgstr "Plnohodnotný nástroj na tvorbu správ vo formáte HTML a v čistom texte" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:14 +msgid "Desktop notification of new mail" +msgstr "Upozornenie pracovného prostredia na novú poštu" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:15 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" +msgstr "" +"Kompatibilita so servermi GMail, Yahoo! Mail, Outlook.com a inými servermi " +"typu IMAP" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:17 +msgid "Geary displaying a conversation" +msgstr "Aplikácia Geary zobrazujúca rozhovor" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:19 +msgid "Geary showing the rich text composer" +msgstr "Aplikácia Geary zobrazujúca tvorcu správ s formátovaným textom" + +#: ../desktop/org.gnome.Geary.desktop.in.h:2 +#: ../desktop/geary-autostart.desktop.in.h:2 +msgid "Email" +msgstr "Email" + +#: ../desktop/org.gnome.Geary.desktop.in.h:3 +msgid "Geary Email" +msgstr "Geary Email" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/org.gnome.Geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "Mail;pošta;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" + +#: ../desktop/org.gnome.Geary.desktop.in.h:7 ../ui/gtk/menus.ui.h:1 msgid "Compose Message" msgstr "Napísať správu" +#: ../desktop/geary-autostart.desktop.in.h:3 +msgid "Geary Mail" +msgstr "Geary Mail" + +#: ../desktop/geary-autostart.desktop.in.h:5 +msgid "Email;E-mail;Mail;" +msgstr "email;e-mail;pošta;" + #: ../desktop/geary-attach.contract.in.h:1 msgid "Send by email" msgstr "Odoslať emailom" @@ -57,6 +136,7 @@ #: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:31 +#: ../ui/conversation-email-menus.ui.h:10 msgid "_Save" msgstr "_Uložiť" @@ -66,7 +146,7 @@ msgstr "_Pridať" #. reset/clear widgets -#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 #, c-format msgid "Additional addresses for %s" msgstr "Dodatočné adresy pre %s" @@ -87,110 +167,120 @@ msgid "First Last" msgstr "Meno a priezvisko" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." msgstr "Vitajte v aplikácii Geary." -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." msgstr "Zadajte informácie o vašom účte a môžete začať." -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "starú 2 týždne" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:254 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "starú 1 mesiac" -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "starú 3 mesiace" -#: ../src/client/accounts/add-edit-page.vala:256 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "starú 6 mesiacov" -#: ../src/client/accounts/add-edit-page.vala:257 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "starú 1 rok" -#: ../src/client/accounts/add-edit-page.vala:258 +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" msgstr "starú 2 roky" -#: ../src/client/accounts/add-edit-page.vala:259 +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" msgstr "starú 4 roky" #. Separator -#: ../src/client/accounts/add-edit-page.vala:261 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "Všetku" -#: ../src/client/accounts/add-edit-page.vala:280 +#: ../src/client/accounts/add-edit-page.vala:283 msgid "Edit" msgstr "Upraví" -#: ../src/client/accounts/add-edit-page.vala:282 +#: ../src/client/accounts/add-edit-page.vala:285 msgid "Preview" msgstr "Zobrazí náhľad" -#: ../src/client/accounts/add-edit-page.vala:723 +#: ../src/client/accounts/add-edit-page.vala:751 msgid "Remem_ber passwords" msgstr "Zapa_mätať heslá" -#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:7 +#: ../src/client/accounts/add-edit-page.vala:758 ../ui/login.glade.h:7 msgid "Remem_ber password" msgstr "Zapa_mätať heslo" -#: ../src/client/accounts/add-edit-page.vala:764 +#: ../src/client/accounts/add-edit-page.vala:792 msgid "Unable to validate:\n" msgstr "Nie je možné overiť:\n" -#: ../src/client/accounts/add-edit-page.vala:766 -msgid " • Invalid account nickname.\n" -msgstr " • Neplatná prezývka účtu.\n" - -#: ../src/client/accounts/add-edit-page.vala:769 -msgid " • Email address already added to Geary.\n" -msgstr " • Emailová adresa už je pridaná v aplikácii Geary.\n" +#: ../src/client/accounts/add-edit-page.vala:794 +msgid " • Invalid account nickname.\n" +msgstr " • Neplatná prezývka účtu.\n" + +#: ../src/client/accounts/add-edit-page.vala:797 +msgid " • Email address already added to Geary.\n" +msgstr " • Emailová adresa už je pridaná v aplikácii Geary.\n" + +#: ../src/client/accounts/add-edit-page.vala:801 +msgid " • IMAP connection error.\n" +msgstr " • Chyba pripojenia k serveru IMAP.\n" + +#: ../src/client/accounts/add-edit-page.vala:804 +msgid " • IMAP username or password incorrect.\n" +msgstr " • Používateľské meno alebo heslo servera IMAP je nesprávne.\n" + +#: ../src/client/accounts/add-edit-page.vala:807 +msgid " • SMTP connection error.\n" +msgstr " • Chyba pripojenia k serveru SMTP.\n" + +#: ../src/client/accounts/add-edit-page.vala:810 +msgid " • SMTP username or password incorrect.\n" +msgstr " • Používateľské meno alebo heslo servera SMTP je nesprávne.\n" + +#: ../src/client/accounts/add-edit-page.vala:814 +msgid " • Connection error.\n" +msgstr " • Chyba pripojenia.\n" + +#: ../src/client/accounts/add-edit-page.vala:818 +msgid " • Username or password incorrect.\n" +msgstr " • Používateľské meno alebo heslo je nesprávne.\n" -#: ../src/client/accounts/add-edit-page.vala:773 -msgid " • IMAP connection error.\n" -msgstr " • Chyba pripojenia k serveru IMAP.\n" - -#: ../src/client/accounts/add-edit-page.vala:776 -msgid " • IMAP username or password incorrect.\n" -msgstr "" -" • Používateľské meno alebo heslo servera IMAP je nesprávne.\n" - -#: ../src/client/accounts/add-edit-page.vala:779 -msgid " • SMTP connection error.\n" -msgstr " • Chyba pripojenia k serveru SMTP.\n" - -#: ../src/client/accounts/add-edit-page.vala:782 -msgid " • SMTP username or password incorrect.\n" -msgstr "" -" • Používateľské meno alebo heslo servera SMTP je nesprávne.\n" - -#: ../src/client/accounts/add-edit-page.vala:786 -msgid " • Connection error.\n" -msgstr " • Chyba pripojenia.\n" - -#: ../src/client/accounts/add-edit-page.vala:790 -msgid " • Username or password incorrect.\n" -msgstr " • Používateľské meno alebo heslo je nesprávne.\n" - -#: ../src/client/application/geary-application.vala:19 +#: ../src/client/application/geary-application.vala:21 msgid "Copyright 2016 Software Freedom Conservancy Inc." msgstr "Autorské práva 2016 Software Freedom Conservancy Inc." -#: ../src/client/application/geary-application.vala:21 +#: ../src/client/application/geary-application.vala:24 msgid "Visit the Geary web site" msgstr "Navštívte webovú stránku aplikácie Geary" +#: ../src/client/application/geary-application.vala:464 +#, c-format +msgid "About %s" +msgstr "O %s" + +#. Translators: add your name and email address to receive +#. credit in the About dialog For example: Yamada Taro +#. +#: ../src/client/application/geary-application.vala:468 +msgid "translator-credits" +msgstr "Dušan Kazik " + # cmd line desc #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" @@ -248,217 +338,191 @@ msgstr "Odvolá všetky certifikáty serverov s upozorneniami TLS" #: ../src/client/application/geary-args.vala:27 +msgid "Perform a graceful quit" +msgstr "Vykoná ukončenie podľa správnosti" + +#: ../src/client/application/geary-args.vala:28 msgid "Display program version" -msgstr "Zobrazí verziu programu" +msgstr "Zobrazí verziu aplikácie" #. This gives a command-line hint on how to open new composer windows with mailto: -#: ../src/client/application/geary-args.vala:51 +#: ../src/client/application/geary-args.vala:53 #, c-format msgid "Use %s to open a new composer window" msgstr "Použite %s na otvorenie nového okna tvorcu správy" -#: ../src/client/application/geary-args.vala:52 +#: ../src/client/application/geary-args.vala:54 msgid "Please report comments, suggestions and bugs to:" msgstr "Prosím, pridajte komentáre, nápady a chyby na:" #. i18n: Command line arguments are invalid -#: ../src/client/application/geary-args.vala:59 +#: ../src/client/application/geary-args.vala:61 #, c-format msgid "Failed to parse command line options: %s\n" msgstr "Zlyhalo analyzovanie volieb príkazového riadka: %s\n" -#: ../src/client/application/geary-args.vala:70 +#: ../src/client/application/geary-args.vala:72 #, c-format -msgid "Unrecognized command line option \"%s\"\n" +msgid "Unrecognized command line option “%s”\n" msgstr "Nerozpoznaná voľba príkazového riadku „%s“\n" -#: ../src/client/application/geary-controller.vala:61 +#: ../src/client/application/geary-controller.vala:57 msgid "Delete conversation" msgstr "Odstrániť rozhovor" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:58 msgid "Delete conversation (Shift+Delete)" msgstr "Odstráni rozhovor (Shift+Delete)" -#: ../src/client/application/geary-controller.vala:63 +#: ../src/client/application/geary-controller.vala:59 msgid "Delete conversations (Shift+Delete)" msgstr "Odstráni rozhovory (Shift+Delete)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:67 +#: ../src/client/application/geary-controller.vala:63 msgid "Move conversation to Trash (Delete, Backspace)" msgstr "Presunie rozhovory do Koša (Delete, Backspace)" -#: ../src/client/application/geary-controller.vala:68 +#: ../src/client/application/geary-controller.vala:64 msgid "Move conversations to Trash (Delete, Backspace)" msgstr "Presunie rozhovory do Koša (Delete, Backspace)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:72 +#: ../src/client/application/geary-controller.vala:68 msgid "_Archive" msgstr "_Archivovať" -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:69 msgid "Archive conversation (A)" msgstr "Archivuje rozhovor (A)" -#: ../src/client/application/geary-controller.vala:74 +#: ../src/client/application/geary-controller.vala:70 msgid "Archive conversations (A)" msgstr "Archivuje rozhovory (A)" -#: ../src/client/application/geary-controller.vala:77 +#: ../src/client/application/geary-controller.vala:73 msgid "Mark as S_pam" msgstr "Označiť ako nev_yžiadanú poštu" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:74 msgid "Mark as not S_pam" msgstr "Označiť ako _vyžiadanú poštu" -#: ../src/client/application/geary-controller.vala:80 -#: ../src/client/application/geary-controller.vala:396 +#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:448 msgid "Mark conversation" msgstr "Označí rozhovor" -#: ../src/client/application/geary-controller.vala:81 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark conversations" msgstr "Označí rozhovory" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:78 msgid "Add label to conversation" msgstr "Pridá menovku rozhovoru" -#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:79 msgid "Add label to conversations" msgstr "Pridá menovku rozhovorom" -#: ../src/client/application/geary-controller.vala:84 -#: ../src/client/application/geary-controller.vala:435 +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:487 msgid "Move conversation" msgstr "Presunie rozhovor" -#: ../src/client/application/geary-controller.vala:85 +#: ../src/client/application/geary-controller.vala:81 msgid "Move conversations" msgstr "Presunie rozhovory" -#: ../src/client/application/geary-controller.vala:376 -#: ../ui/app_menu.interface.h:1 -msgid "A_ccounts" -msgstr "Úč_ty" - -#: ../src/client/application/geary-controller.vala:381 -#: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 -msgid "_Preferences" -msgstr "N_astavenia" - -#: ../src/client/application/geary-controller.vala:385 -#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:3 -msgid "_Help" -msgstr "Po_mocník" - -#: ../src/client/application/geary-controller.vala:389 -#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:4 -msgid "_About" -msgstr "_O aplikácii" - -#: ../src/client/application/geary-controller.vala:393 -#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:5 -msgid "_Quit" -msgstr "_Ukončiť" - -#: ../src/client/application/geary-controller.vala:398 -msgid "_Mark as..." +#: ../src/client/application/geary-controller.vala:450 +msgid "_Mark as…" msgstr "_Označiť ako…" -#: ../src/client/application/geary-controller.vala:404 +#: ../src/client/application/geary-controller.vala:456 msgid "Mark as _Read" msgstr "Označiť ako _prečítanú" -#: ../src/client/application/geary-controller.vala:410 +#: ../src/client/application/geary-controller.vala:462 msgid "Mark as _Unread" msgstr "Označiť ako _neprečítanú" -#: ../src/client/application/geary-controller.vala:416 +#: ../src/client/application/geary-controller.vala:468 msgid "_Star" msgstr "Označiť _hviezdičkou" -#: ../src/client/application/geary-controller.vala:421 +#: ../src/client/application/geary-controller.vala:473 msgid "U_nstar" -msgstr "Odz_načiť hviezdičku" +msgstr "Zrušiť oz_načenie hviezdičkou" -#: ../src/client/application/geary-controller.vala:431 +#: ../src/client/application/geary-controller.vala:483 msgid "Add label" msgstr "Pridá menovku" -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:484 msgid "_Label" msgstr "_Menovka" -#: ../src/client/application/geary-controller.vala:436 +#: ../src/client/application/geary-controller.vala:488 msgid "_Move" msgstr "_Presunúť" -#: ../src/client/application/geary-controller.vala:440 +#: ../src/client/application/geary-controller.vala:492 msgid "Compose new message (Ctrl+N, N)" msgstr "Vytvorí novú správu (Ctrl+N, N)" -#. Reply to a message. -#: ../src/client/application/geary-controller.vala:444 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1873 +#: ../src/client/application/geary-controller.vala:496 +#: ../ui/conversation-email-menus.ui.h:1 msgid "_Reply" msgstr "_Odpovedať" -#: ../src/client/application/geary-controller.vala:445 +#: ../src/client/application/geary-controller.vala:497 msgid "Reply (Ctrl+R, R)" msgstr "Odpovie (Ctrl+R, R)" -#: ../src/client/application/geary-controller.vala:449 +#: ../src/client/application/geary-controller.vala:501 msgid "R_eply All" msgstr "Odpov_edať všetkým" -#: ../src/client/application/geary-controller.vala:450 +#: ../src/client/application/geary-controller.vala:502 msgid "Reply all (Ctrl+Shift+R, Shift+R)" msgstr "Odpovie všetkým (Ctrl+Shift+R, Shift+R)" -#. Forward a message. -#: ../src/client/application/geary-controller.vala:455 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1883 +#: ../src/client/application/geary-controller.vala:507 +#: ../ui/conversation-email-menus.ui.h:3 msgid "_Forward" msgstr "_Preposlať" -#: ../src/client/application/geary-controller.vala:456 +#: ../src/client/application/geary-controller.vala:508 msgid "Forward (Ctrl+L, F)" msgstr "Prepošle (Ctrl+L, F)" -#: ../src/client/application/geary-controller.vala:495 -msgid "Empty" -msgstr "Vyprázdniť" - -#: ../src/client/application/geary-controller.vala:496 -msgid "Empty Spam or Trash folders" -msgstr "Vyprázdni priečinky Nevyžiadaná pošta alebo Kôš" - -#: ../src/client/application/geary-controller.vala:500 +#: ../src/client/application/geary-controller.vala:538 msgid "Empty _Spam…" msgstr "Vyprázdniť _Nevyžiadanú poštu…" -#: ../src/client/application/geary-controller.vala:504 +#: ../src/client/application/geary-controller.vala:542 msgid "Empty _Trash…" msgstr "Vyprázdniť _Kôš…" #. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:537 +#: ../src/client/application/geary-controller.vala:574 msgid "Toggle search bar" msgstr "Prepne panel vyhľadávania" -#: ../src/client/application/geary-controller.vala:744 +#. No callback is connected, since we bind the toggle button to the find bar visibility +#: ../src/client/application/geary-controller.vala:579 +msgid "Toggle find bar" +msgstr "Prepne panel nájdených výrazov" + +#: ../src/client/application/geary-controller.vala:757 msgid "Unable to store server trust exception" msgstr "Nie je možné uložiť výnimku dôveryhodnosti servera" -#: ../src/client/application/geary-controller.vala:981 +#: ../src/client/application/geary-controller.vala:992 msgid "Your settings are insecure" msgstr "Vaše nastavenie nie sú bezpečné" -#: ../src/client/application/geary-controller.vala:982 +#: ../src/client/application/geary-controller.vala:993 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -468,15 +532,15 @@ "TLS. To znamená, že vaše meno používateľa a heslo môže byť prečítané inou " "osobou v sieti. Naozaj chcete toto vykonať?" -#: ../src/client/application/geary-controller.vala:983 +#: ../src/client/application/geary-controller.vala:994 msgid "Co_ntinue" msgstr "Po_kračovať" -#: ../src/client/application/geary-controller.vala:1030 +#: ../src/client/application/geary-controller.vala:1041 msgid "Error connecting to the server" msgstr "Chyba počas pripájania k serveru" -#: ../src/client/application/geary-controller.vala:1031 +#: ../src/client/application/geary-controller.vala:1042 msgid "" "Geary encountered an error while connecting to the server. Please try again " "in a few moments." @@ -485,12 +549,12 @@ "to znovu neskôr." #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:1068 +#: ../src/client/application/geary-controller.vala:1079 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "Chyba pri odosielaní emailu" -#: ../src/client/application/geary-controller.vala:1069 +#: ../src/client/application/geary-controller.vala:1080 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." @@ -501,12 +565,12 @@ #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1073 +#: ../src/client/application/geary-controller.vala:1084 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "Chyba pri ukladaní odoslanej pošty" -#: ../src/client/application/geary-controller.vala:1074 +#: ../src/client/application/geary-controller.vala:1085 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." @@ -515,19 +579,19 @@ "priečinka „Odoslaná pošta“. Správa zostane vo vašom priečinku „Pošta na " "odoslanie“, pokiaľ ju neodstránite." -#: ../src/client/application/geary-controller.vala:1143 +#: ../src/client/application/geary-controller.vala:1154 msgid "Labels" msgstr "Menovky" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1155 +#: ../src/client/application/geary-controller.vala:1166 #, c-format msgid "Unable to open the database for %s" msgstr "Nie je možné otvoriť databázu pre %s" -#: ../src/client/application/geary-controller.vala:1156 +#: ../src/client/application/geary-controller.vala:1167 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -552,20 +616,20 @@ "Znovu zostavenie databázy zničí všetku miestnu poštu a jej prílohy. Pošta " "na serveri nebude ovplyvnená." -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "_Rebuild" msgstr "_Znovu zostaviť" -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "E_xit" msgstr "_Ukončiť" -#: ../src/client/application/geary-controller.vala:1167 +#: ../src/client/application/geary-controller.vala:1178 #, c-format -msgid "Unable to rebuild database for \"%s\"" +msgid "Unable to rebuild database for “%s”" msgstr "Nie je možné znovu zostaviť databázu účtu „%s“" -#: ../src/client/application/geary-controller.vala:1168 +#: ../src/client/application/geary-controller.vala:1179 #, c-format msgid "" "Error during rebuild:\n" @@ -578,14 +642,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1190 -#: ../src/client/application/geary-controller.vala:1200 +#: ../src/client/application/geary-controller.vala:1201 #: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:1222 #, c-format msgid "Unable to open local mailbox for %s" msgstr "Nie je možné otvoriť miestnu poštovú schránku účtu %s" -#: ../src/client/application/geary-controller.vala:1191 +#: ../src/client/application/geary-controller.vala:1202 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -604,10 +668,10 @@ "\n" "%s" -#: ../src/client/application/geary-controller.vala:1201 +#: ../src/client/application/geary-controller.vala:1212 msgid "" "The version number of the local mail database is formatted for a newer " -"version of Geary. Unfortunately, the database cannot be \"rolled back\" to " +"version of Geary. Unfortunately, the database cannot be “rolled back” to " "work with this version of Geary.\n" "\n" "Please install the latest version of Geary and try again." @@ -617,7 +681,7 @@ "s touto verziou aplikácie Geary.\n" "ynProsím, nainštalujte najnovšiu verziu programu Geary a skúste to znovu." -#: ../src/client/application/geary-controller.vala:1212 +#: ../src/client/application/geary-controller.vala:1223 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" @@ -630,27 +694,15 @@ "Prosím, skontrolujte vaše sieťové pripojenie a znovu spustite aplikáciu " "Geary." -#: ../src/client/application/geary-controller.vala:1723 -#, c-format -msgid "About %s" -msgstr "O %s" - -#. / Translators: add your name and email address to receive credit in the About dialog -#. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1726 -msgid "translator-credits" -msgstr "Dušan Kazik " - -#: ../src/client/application/geary-controller.vala:1984 +#: ../src/client/application/geary-controller.vala:1999 msgid "Undo move (Ctrl+Z)" msgstr "Vráti späť presunutie (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:1994 -#, c-format -msgid "Are you sure you want to open \"%s\"?" -msgstr "Naozaj chcete otvoriť „%s“?" +#: ../src/client/application/geary-controller.vala:2009 +msgid "Are you sure you want to open these attachments?" +msgstr "Naozaj chcete otvoriť tieto prílohy?" -#: ../src/client/application/geary-controller.vala:1995 +#: ../src/client/application/geary-controller.vala:2010 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -658,121 +710,105 @@ "Prílohy môžu po otvorení poškodiť váš systém. Otvárajte iba súbory z " "dôveryhodných zdrojov." -#: ../src/client/application/geary-controller.vala:1996 -msgid "Don't _ask me again" +#: ../src/client/application/geary-controller.vala:2011 +msgid "Don’t _ask me again" msgstr "Nepýtať s_a znovu" -#: ../src/client/application/geary-controller.vala:2014 +#: ../src/client/application/geary-controller.vala:2121 #, c-format -msgid "A file named \"%s\" already exists. Do you want to replace it?" +msgid "A file named “%s” already exists. Do you want to replace it?" msgstr "Súbor s názvom „%s“ už existuje. Chcete ho nahradiť?" -#: ../src/client/application/geary-controller.vala:2016 +#: ../src/client/application/geary-controller.vala:2123 #, c-format msgid "" -"The file already exists in \"%s\". Replacing it will overwrite its contents." +"The file already exists in “%s”. Replacing it will overwrite its contents." msgstr "Súbor v „%s“ už existuje. Nahradením sa prepíše jeho obsah." -#: ../src/client/application/geary-controller.vala:2019 +#: ../src/client/application/geary-controller.vala:2126 msgid "_Replace" msgstr "_Nahradiť" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2317 +#: ../src/client/application/geary-controller.vala:2374 msgid "Close open draft messages?" msgstr "Zavrieť otvorené koncepty správ?" -#: ../src/client/application/geary-controller.vala:2447 +#: ../src/client/application/geary-controller.vala:2496 #, c-format msgid "Empty all email from your %s folder?" msgstr "Vyprázdniť všetky emaily z vášho priečinka %s?" -#: ../src/client/application/geary-controller.vala:2448 +#: ../src/client/application/geary-controller.vala:2497 msgid "This removes the email from Geary and your email server." msgstr "" "Týmto sa odstránia všetky emaily z aplikácie Geary a vášho emailového " "servera." -#: ../src/client/application/geary-controller.vala:2449 +#: ../src/client/application/geary-controller.vala:2498 msgid "This cannot be undone." msgstr "Táto akcia sa nebude dať vrátiť späť." -#: ../src/client/application/geary-controller.vala:2450 +#: ../src/client/application/geary-controller.vala:2499 #, c-format msgid "Empty %s" msgstr "Vyprázdniť priečinok %s" -#: ../src/client/application/geary-controller.vala:2467 +#: ../src/client/application/geary-controller.vala:2516 #, c-format msgid "Error emptying %s" msgstr "Chyba pri vyprázdňovaní priečinka %s" -#: ../src/client/application/geary-controller.vala:2497 +#: ../src/client/application/geary-controller.vala:2546 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "Chcete natrvalo odstrániť túto správu?" msgstr[1] "Chcete natrvalo odstrániť tieto správy?" msgstr[2] "Chcete natrvalo odstrániť tieto správy?" -#: ../src/client/application/geary-controller.vala:2499 +#: ../src/client/application/geary-controller.vala:2548 msgid "Delete" msgstr "Odstrániť" -#: ../src/client/application/geary-controller.vala:2530 +#: ../src/client/application/geary-controller.vala:2580 msgid "Undo archive (Ctrl+Z)" msgstr "Vráti späť archiváciu (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2545 +#: ../src/client/application/geary-controller.vala:2595 msgid "Undo trash (Ctrl+Z)" msgstr "Vráti späť kôš (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2598 +#: ../src/client/application/geary-controller.vala:2649 msgid "Undo (Ctrl+Z)" msgstr "Vráti späť (Ctrl+Z)" -#: ../src/client/components/conversation-find-bar.vala:214 -#, c-format -msgid "%i match" -msgid_plural "%i matches" -msgstr[0] "%i zhoda" -msgstr[1] "%i zhody" -msgstr[2] "%i zhôd" - -#: ../src/client/components/conversation-find-bar.vala:216 -#, c-format -msgid "%i match (wrapped)" -msgid_plural "%i matches (wrapped)" -msgstr[0] "%i zhoda (zalomená)" -msgstr[1] "%i zhody (zalomené)" -msgstr[2] "%i zhôd (zalomených)" - -#: ../src/client/components/conversation-find-bar.vala:218 -msgid "not found" -msgstr "nenájdené" +#: ../src/client/application/geary-controller.vala:2780 +msgid "Failed to open default text editor." +msgstr "Zlyhalo otvorenie predvoleného textového editora." -#: ../src/client/components/main-window.vala:436 +#: ../src/client/components/main-window.vala:389 #, c-format msgid "%s (%d)" msgstr "%s (%d)" -#: ../src/client/components/search-bar.vala:10 +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "Vyhľadať" #. Search entry. -#: ../src/client/components/search-bar.vala:25 +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" msgstr "Cyhľadá kľúčové slová vo všetkých správach poštového účtu (Ctrl+S)" -#: ../src/client/components/search-bar.vala:118 +#: ../src/client/components/search-bar.vala:100 #, c-format msgid "Indexing %s account" msgstr "Indexuje sa účet %s" -#: ../src/client/components/search-bar.vala:129 +#: ../src/client/components/search-bar.vala:111 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" @@ -780,8 +816,8 @@ #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 -msgid "Sending..." -msgstr "Odosiela sa" +msgid "Sending…" +msgstr "Odosiela sa…" #: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 msgid "_OK" @@ -792,6 +828,10 @@ msgid "_Cancel" msgstr "_Zrušiť" +#: ../src/client/components/stock.vala:21 ../ui/gtk/menus.ui.h:6 +msgid "_About" +msgstr "_O aplikácii" + #: ../src/client/components/stock.vala:23 msgid "_Close" msgstr "_Zavrieť" @@ -800,51 +840,71 @@ msgid "_Discard" msgstr "Za_hodiť" -#: ../src/client/components/stock.vala:26 +#: ../src/client/components/stock.vala:25 ../ui/gtk/menus.ui.h:5 +msgid "_Help" +msgstr "Po_mocník" + +#: ../src/client/components/stock.vala:26 ../ui/conversation-email-menus.ui.h:9 msgid "_Open" msgstr "_Otvoriť" -#: ../src/client/components/stock.vala:28 -msgid "_Print..." +#: ../src/client/components/stock.vala:27 ../ui/gtk/menus.ui.h:3 +msgid "_Preferences" +msgstr "N_astavenia" + +#: ../src/client/components/stock.vala:28 ../ui/conversation-email-menus.ui.h:7 +msgid "_Print…" msgstr "_Tlačiť…" +#: ../src/client/components/stock.vala:29 ../ui/gtk/menus.ui.h:7 +msgid "_Quit" +msgstr "_Ukončiť" + #: ../src/client/components/stock.vala:30 ../ui/remove_confirm.glade.h:6 msgid "_Remove" msgstr "O_dstrániť" -#. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1335 -msgid "Select _All" -msgstr "Vybr_ať všetko" - -#: ../src/client/components/stock.vala:33 msgid "_Keep" msgstr "_Ponechať" -#: ../src/client/composer/composer-widget.vala:73 +#: ../src/client/composer/composer-link-popover.vala:150 +msgid "Link URL is not correctly formatted, e.g. http://example.com" +msgstr "URL odkazu nie je v správnom formáte, napr. http://priklad.sk" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid link URL" +msgstr "Neplatný URL odkazu" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid email address" +msgstr "Neplatná emailová adresa" + +#: ../src/client/composer/composer-widget.vala:154 msgid "Saved" msgstr "Uložené" -#: ../src/client/composer/composer-widget.vala:74 +#: ../src/client/composer/composer-widget.vala:155 msgid "Saving" msgstr "Ukladá sa" -#: ../src/client/composer/composer-widget.vala:75 +#: ../src/client/composer/composer-widget.vala:156 msgid "Error saving" msgstr "Chyba pri ukladaní" -#: ../src/client/composer/composer-widget.vala:76 +#: ../src/client/composer/composer-widget.vala:157 msgid "Press Backspace to delete quote" msgstr "Stlačte kláves Backspace na odstránenie citácie" -#: ../src/client/composer/composer-widget.vala:77 +#: ../src/client/composer/composer-widget.vala:158 msgid "New Message" msgstr "Nová správa" -#. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since -#. this is full-word checking, include all variants of each word. No spaces are allowed. -#: ../src/client/composer/composer-widget.vala:138 +#. Translators: This is list of keywords, separated by pipe ("|") +#. characters, that suggest an attachment; since this is full-word +#. checking, include all variants of each word. No spaces are +#. allowed. +#: ../src/client/composer/composer-widget.vala:167 msgid "" "attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" "enclosing|encloses|enclosure|enclosures" @@ -853,279 +913,189 @@ "priloženým|priložených|priloženého|prikladám|prikladanú|prikladané|" "prikladaný|prikladaným|prikladanému" -#: ../src/client/composer/composer-widget.vala:1114 -#: ../src/client/composer/composer-widget.vala:1118 +#: ../src/client/composer/composer-widget.vala:1122 +#: ../src/client/composer/composer-widget.vala:1141 msgid "Do you want to discard this message?" msgstr "Chcete zahodiť túto správu?" -#: ../src/client/composer/composer-widget.vala:1274 +#: ../src/client/composer/composer-widget.vala:1245 msgid "Send message with an empty subject and body?" msgstr "Odoslať správu bez predmetu a s prázdnym telom?" -#: ../src/client/composer/composer-widget.vala:1276 +#: ../src/client/composer/composer-widget.vala:1247 msgid "Send message with an empty subject?" msgstr "Odoslať správu bez predmetu?" -#: ../src/client/composer/composer-widget.vala:1278 +#: ../src/client/composer/composer-widget.vala:1249 msgid "Send message with an empty body?" msgstr "Odoslať správu s prázdnym telom?" -#: ../src/client/composer/composer-widget.vala:1280 +#: ../src/client/composer/composer-widget.vala:1253 msgid "Send message without an attachment?" msgstr "Odoslať správu bez prílohy?" -#: ../src/client/composer/composer-widget.vala:1542 -msgid "Cannot add attachment" -msgstr "Nedá sa pridať príloha" +#: ../src/client/composer/composer-widget.vala:1515 +#, c-format +msgid "“%s” already attached for delivery." +msgstr "„%s“ je už priložený na doručenie." -#: ../src/client/composer/composer-widget.vala:1553 +#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" +#. Translators: The first argument will be a +#. description of the document type, the second will +#. be a human-friendly size string. For example: +#. Document (100.9MB) +#: ../src/client/composer/composer-widget.vala:1523 +#: ../src/client/conversation-viewer/conversation-email.vala:138 #, c-format -msgid "\"%s\" could not be found." -msgstr "„%s“ sa nepodarilo nájsť." +msgid "%s (%s)" +msgstr "%s (%s)" #: ../src/client/composer/composer-widget.vala:1560 #, c-format -msgid "\"%s\" is a folder." +msgid "“%s” could not be found." +msgstr "„%s“ sa nepodarilo nájsť." + +#: ../src/client/composer/composer-widget.vala:1566 +#, c-format +msgid "“%s” is a folder." msgstr "„%s“ je priečinok." -#: ../src/client/composer/composer-widget.vala:1567 +#: ../src/client/composer/composer-widget.vala:1572 #, c-format -msgid "\"%s\" is an empty file." +msgid "“%s” is an empty file." msgstr "„%s“ je prázdny súbor." -#: ../src/client/composer/composer-widget.vala:1581 +#: ../src/client/composer/composer-widget.vala:1585 #, c-format -msgid "\"%s\" could not be opened for reading." +msgid "“%s” could not be opened for reading." msgstr "„%s“ sa nepodarilo otvoriť na čítanie." -#: ../src/client/composer/composer-widget.vala:1588 -#, c-format -msgid "\"%s\" already attached for delivery." -msgstr "„%s“ je už priložený na doručenie." - -#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-widget.vala:1597 -#, c-format -msgid "%s (%s)" -msgstr "%s (%s)" +#: ../src/client/composer/composer-widget.vala:1593 +msgid "Cannot add attachment" +msgstr "Nedá sa pridať príloha" -#: ../src/client/composer/composer-widget.vala:1657 +#: ../src/client/composer/composer-widget.vala:1645 msgid "To: " msgstr "Pre: " -#: ../src/client/composer/composer-widget.vala:1660 +#: ../src/client/composer/composer-widget.vala:1648 msgid "Cc: " msgstr "Kópia: " -#: ../src/client/composer/composer-widget.vala:1663 +#: ../src/client/composer/composer-widget.vala:1651 msgid "Bcc: " msgstr "Skrytá kópia: " -#: ../src/client/composer/composer-widget.vala:1666 +#: ../src/client/composer/composer-widget.vala:1654 msgid "Reply-To: " msgstr "Komu odpovedať: " -#: ../src/client/composer/composer-widget.vala:1899 +#: ../src/client/composer/composer-widget.vala:1786 msgid "Select Color" msgstr "Výber farby" #. Displayed in the From dropdown to indicate an "alternate email address" #. for an account. The first printf argument will be the alternate email #. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2334 +#: ../src/client/composer/composer-widget.vala:1986 #, c-format msgid "%1$s via %2$s" msgstr "%1$s prostredníctvom účtu %2$s" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2376 +#: ../src/client/composer/composer-widget.vala:2028 msgid "_From:" msgstr "Od:" +#. Translators: This is the name of the file chooser filter +#. when inserting an image in the composer. +#: ../src/client/composer/composer-widget.vala:2252 +msgid "Images" +msgstr "Obrázky" + +# tooltip +#: ../src/client/composer/spell-check-popover.vala:117 +msgid "Remove this language from the preferred list" +msgstr "Odstráni tento jazyk zo zoznamu uprednostňovaných" + +# tooltip +#: ../src/client/composer/spell-check-popover.vala:121 +msgid "Add this language to the preferred list" +msgstr "Pridá tento jazyk do zoznamu uprednostňovaných" + +# placeholder +#: ../src/client/composer/spell-check-popover.vala:217 +msgid "Search for more languages" +msgstr "Vyhľadajte viac jazykov" + #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Ja" -#: ../src/client/conversation-viewer/conversation-viewer.vala:414 -msgid "No conversations selected." -msgstr "Žiadne vybraté rozhovory." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:416 -#, c-format -msgid "%u conversation selected." -msgid_plural "%u conversations selected." -msgstr[0] "%u vybratý rozhovor." -msgstr[1] "%u vybraté rozhovory." -msgstr[2] "%u vybratých rozhovorov." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:446 -msgid "No search results found." -msgstr "Žiadne výsledky vyhľadávania." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:448 -msgid "No conversations in folder." -msgstr "Žiadne rozhovory v priečinku." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "This message contains remote images." -msgstr "Táto správa obsahuje vzdialené obrázky." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "Show Images" -msgstr "Zobraziť obrázky" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:715 -msgid "Always Show From Sender" -msgstr "Vždy zobraziť od odosielateľa" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:739 -msgid "Edit Draft" -msgstr "Upraviť koncept" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:815 -msgid "From:" -msgstr "Od:" +#. Translators: This is the file type displayed for +#. attachments with unknown file types. +#: ../src/client/conversation-viewer/conversation-email.vala:124 +msgid "Unknown" +msgstr "Neznámy" + +#. Preview headers +#. Translators: This is displayed in place of the from address +#. when the message has no from address. +#: ../src/client/conversation-viewer/conversation-message.vala:331 +msgid "No sender" +msgstr "Žiadny odosielateľ" + +#. Translators: This separates multiple 'from' +#. addresses in the header preview for a message. +#: ../src/client/conversation-viewer/conversation-message.vala:586 +msgid ", " +msgstr ", " + +#. Translators: This string is used as the HTML IMG ALT +#. attribute value when displaying an inline image in an email +#. that did not specify a file name. E.g. Image" +msgstr "Od " + +#: ../ui/conversation-message.ui.h:2 +msgid "1/1/1970\t" +msgstr "1.1.1970\t" + +#: ../ui/conversation-message.ui.h:3 +msgid "Preview body text." +msgstr "Náhľad textu v tele správy." + +#: ../ui/conversation-message.ui.h:4 +msgid "Sent by:" +msgstr "Odoslané kým:" + +#: ../ui/conversation-message.ui.h:5 +msgid "Reply to:" +msgstr "Komu odpovedať:" + +#: ../ui/conversation-message.ui.h:6 +msgid "Subject" +msgstr "Predmet" + +#: ../ui/conversation-message.ui.h:7 +msgid "To:" +msgstr "Pre:" + +#: ../ui/conversation-message.ui.h:8 +msgid "Cc:" +msgstr "Kópia:" + +#: ../ui/conversation-message.ui.h:9 +msgid "Bcc:" +msgstr "Skrytá kópia:" + +#: ../ui/conversation-message.ui.h:10 +msgid "Show Images" +msgstr "Zobraziť obrázky" + +#: ../ui/conversation-message.ui.h:11 +msgid "Always Show From Sender" +msgstr "Vždy zobraziť od odosielateľa" + +#: ../ui/conversation-message.ui.h:12 +msgid "Remote images not shown" +msgstr "Vzdialené obrázky neboli zobrazené" + +#: ../ui/conversation-message.ui.h:13 +msgid "Only show remote images from senders you trust." +msgstr "Vzdialené obrázky zobrazujte od odosielateľov, ktorým dôverujete." + +#: ../ui/conversation-message.ui.h:14 +msgid "But actually goes to:" +msgstr "Ale v skutočnosti odkazuje na:" + +#: ../ui/conversation-message.ui.h:15 +msgid "The link appears to go to:" +msgstr "Zdá sa, že tento odkaz odkazuje na:" + +#: ../ui/conversation-message.ui.h:16 +msgid "Deceptive link found" +msgstr "Našiel sa klamlivý odkaz" + +#: ../ui/conversation-message.ui.h:17 +msgid "The email sender may be leading you to the wrong web site." +msgstr "Odosielateľ emailu vás môže smerovať na nesprávnu webovú stránku." + +#: ../ui/conversation-message.ui.h:18 +msgid "If unsure, contact the sender and ask before continuing." +msgstr "Ak si nie ste istý, pred pokračovaním kontaktujte odosielateľa." + +# placeholder +#: ../ui/conversation-viewer.ui.h:1 +msgid "Find in conversation" +msgstr "Nájdite v rozhovore" + +#: ../ui/conversation-viewer.ui.h:2 +msgid "Find the previous occurrence of the search string." +msgstr "Nájde predošlý výskyt hľadaného reťazca." + +# tooltip +#: ../ui/conversation-viewer.ui.h:3 +msgid "Find the next occurrence of the search string." +msgstr "Nájde nasledovný výskyt hľadaného reťazca." + #: ../ui/edit_alternate_emails.glade.h:1 msgid "Remove email address" msgstr "Odstráni emailové adresy" @@ -2073,6 +2221,248 @@ msgid "label" msgstr "menovka" +#: ../ui/gtk/help-overlay.ui.h:1 +msgid "Conversation Shortcuts" +msgstr "Skratky rozhovorov" + +#: ../ui/gtk/help-overlay.ui.h:2 +msgctxt "shortcut window" +msgid "General" +msgstr "Všeobecné" + +#: ../ui/gtk/help-overlay.ui.h:3 +msgctxt "shortcut window" +msgid "Move focus to the next/previous pane" +msgstr "Zmena zamerania na nasledovný/predošlý panel" + +#: ../ui/gtk/help-overlay.ui.h:4 +msgctxt "shortcut window" +msgid "Move focus to conversation list" +msgstr "Zmena zamerania na zoznam rozhovorov" + +#: ../ui/gtk/help-overlay.ui.h:5 +msgctxt "shortcut window" +msgid "Detach composer window" +msgstr "Odpojenie okna tvorcu správy" + +#: ../ui/gtk/help-overlay.ui.h:6 +msgctxt "shortcut window" +msgid "Close composer window" +msgstr "Zavretie okna tvorcu správy" + +#: ../ui/gtk/help-overlay.ui.h:7 +msgctxt "shortcut window" +msgid "Show keyboard shortcuts" +msgstr "Zobrazenie klávesových skratiek" + +#: ../ui/gtk/help-overlay.ui.h:8 +msgctxt "shortcut window" +msgid "Show help" +msgstr "Zobrazenie pomocníka" + +#: ../ui/gtk/help-overlay.ui.h:9 +msgctxt "shortcut window" +msgid "Quit the application" +msgstr "Ukončenie aplikácie" + +#: ../ui/gtk/help-overlay.ui.h:10 +msgctxt "shortcut window" +msgid "Search" +msgstr "Vyhľadávanie" + +#: ../ui/gtk/help-overlay.ui.h:11 +msgctxt "shortcut window" +msgid "Jump to search box" +msgstr "Prejdenie do poľa vyhľadávania" + +#: ../ui/gtk/help-overlay.ui.h:12 +msgctxt "shortcut window" +msgid "Find in current conversation" +msgstr "Nájdenie v aktuálnom rozhovore" + +#: ../ui/gtk/help-overlay.ui.h:13 +msgctxt "shortcut window" +msgid "Find next/previous in current conversation" +msgstr "Nájdenie ďalšieho/predošlého výrazu v aktuálnom rozhovore" + +#: ../ui/gtk/help-overlay.ui.h:14 +msgctxt "shortcut window" +msgid "Actions" +msgstr "Akcie" + +#: ../ui/gtk/help-overlay.ui.h:15 +msgctxt "shortcut window" +msgid "Compose a new message" +msgstr "Napísanie novej správy" + +#: ../ui/gtk/help-overlay.ui.h:16 +msgctxt "shortcut window" +msgid "Reply to sender " +msgstr "Odpovedanie odosielateľovi" + +#: ../ui/gtk/help-overlay.ui.h:17 +msgctxt "shortcut window" +msgid "Reply to all" +msgstr "Odpovedanie všetkým" + +#: ../ui/gtk/help-overlay.ui.h:18 +msgctxt "shortcut window" +msgid "Forward" +msgstr "Preposlanie" + +#: ../ui/gtk/help-overlay.ui.h:19 +msgctxt "shortcut window" +msgid "Archive" +msgstr "Archivácia" + +#: ../ui/gtk/help-overlay.ui.h:20 +msgctxt "shortcut window" +msgid "Move to trash" +msgstr "Presunutie do koša" + +#: ../ui/gtk/help-overlay.ui.h:21 +msgctxt "shortcut window" +msgid "Toggle spam" +msgstr "Prepnutie nevyžiadanej pošty" + +#: ../ui/gtk/help-overlay.ui.h:22 +msgctxt "shortcut window" +msgid "Move the conversation" +msgstr "Presun rozhovoru" + +#: ../ui/gtk/help-overlay.ui.h:23 +msgctxt "shortcut window" +msgid "Label the conversation" +msgstr "Pridanie menovky rozhovoru" + +#: ../ui/gtk/help-overlay.ui.h:24 +msgctxt "shortcut window" +msgid "Mark read" +msgstr "Označenie ako prečítané" + +#: ../ui/gtk/help-overlay.ui.h:25 +msgctxt "shortcut window" +msgid "Mark unread" +msgstr "Označenie ako neprečítané" + +#: ../ui/gtk/help-overlay.ui.h:26 +msgctxt "shortcut window" +msgid "View" +msgstr "Zobrazenie" + +#: ../ui/gtk/help-overlay.ui.h:27 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Zväčšenie" + +#: ../ui/gtk/help-overlay.ui.h:28 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Zmenšenie" + +#: ../ui/gtk/help-overlay.ui.h:29 +msgctxt "shortcut window" +msgid "Reset zoom" +msgstr "Obnovenie priblíženia" + +#: ../ui/gtk/help-overlay.ui.h:30 +msgctxt "shortcut window" +msgid "Additional Shortcuts" +msgstr "Dodatočné skratky" + +#: ../ui/gtk/help-overlay.ui.h:31 +msgctxt "shortcut window" +msgid "Star" +msgstr "Označenie hviezdičkou" + +#: ../ui/gtk/help-overlay.ui.h:32 +msgctxt "shortcut window" +msgid "Unstar" +msgstr "Zrušiť označenie hviezdičkou" + +#: ../ui/gtk/help-overlay.ui.h:33 +msgctxt "shortcut window" +msgid "Delete" +msgstr "Odstránenie" + +#: ../ui/gtk/help-overlay.ui.h:34 +msgctxt "shortcut window" +msgid "Jump to next (older) conversation" +msgstr "Prejdenie na nasledovný (starší) rozhovor" + +#: ../ui/gtk/help-overlay.ui.h:35 +msgctxt "shortcut window" +msgid "Jump to previous (newer) conversation" +msgstr "Prejdenie na predošlý (novší) rozhovor" + +#: ../ui/gtk/help-overlay.ui.h:36 +msgid "Composer Shortcuts" +msgstr "Skratky tvorcu správ" + +#: ../ui/gtk/help-overlay.ui.h:37 +msgctxt "shortcut window" +msgid "Quote text" +msgstr "Citácia textu" + +# tooltip +#: ../ui/gtk/help-overlay.ui.h:38 +msgctxt "shortcut window" +msgid "Unquote text" +msgstr "Zrušenie citácie textu" + +#: ../ui/gtk/help-overlay.ui.h:39 +msgctxt "shortcut window" +msgid "Send" +msgstr "Odoslanie" + +#: ../ui/gtk/help-overlay.ui.h:40 +msgctxt "shortcut window" +msgid "Add attachment" +msgstr "Pridanie prílohy" + +#: ../ui/gtk/help-overlay.ui.h:41 +msgctxt "shortcut window" +msgid "Rich text mode" +msgstr "Formátovanie textu" + +#: ../ui/gtk/help-overlay.ui.h:42 +msgctxt "shortcut window" +msgid "Bold text" +msgstr "Tučný text" + +#: ../ui/gtk/help-overlay.ui.h:43 +msgctxt "shortcut window" +msgid "Italicize text" +msgstr "Kurzíva textu" + +#: ../ui/gtk/help-overlay.ui.h:44 +msgctxt "shortcut window" +msgid "Underline text" +msgstr "Podčiarknutie textu" + +#: ../ui/gtk/help-overlay.ui.h:45 +msgctxt "shortcut window" +msgid "Strike text" +msgstr "Preškrtnutie textu" + +#: ../ui/gtk/help-overlay.ui.h:46 +msgctxt "shortcut window" +msgid "Insert a link" +msgstr "Vloženie odkazu" + +#: ../ui/gtk/help-overlay.ui.h:47 +msgctxt "shortcut window" +msgid "Remove formatting" +msgstr "Odstránenie formátovania" + +#: ../ui/gtk/menus.ui.h:2 +msgid "A_ccounts" +msgstr "Úč_ty" + +#: ../ui/gtk/menus.ui.h:4 +msgid "_Keyboard Shortcuts" +msgstr "Klávesové _skratky" + #: ../ui/login.glade.h:1 msgid "email@example.com" msgstr "email@priklad.sk" @@ -2197,7 +2587,7 @@ msgid "Use IMAP cre_dentials" msgstr "Použiť p_overenia pre IMAP" -#: ../ui/login.glade.h:34 ../ui/preferences.glade.h:5 +#: ../ui/login.glade.h:34 msgid "Composer" msgstr "Tvorca správy" @@ -2217,6 +2607,10 @@ msgid "_Download mail" msgstr "_Prevziať poštu" +#: ../ui/main-toolbar.ui.h:1 +msgid "Empty Spam or Trash folders" +msgstr "Vyprázdni priečinky Nevyžiadaná pošta alebo Kôš" + #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" msgstr "Poverenia pre SMTP" @@ -2233,48 +2627,44 @@ msgid "_Authenticate" msgstr "_Overiť totožnosť" -#: ../ui/preferences.glade.h:1 +#: ../ui/preferences-dialog.ui.h:1 msgid "Reading" msgstr "Čítanie" -#: ../ui/preferences.glade.h:2 +#: ../ui/preferences-dialog.ui.h:2 msgid "_Automatically select next message" msgstr "_Automaticky vybrať ďalšiu správu" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences-dialog.ui.h:3 msgid "_Display conversation preview" msgstr "_Zobraziť náhľad rozhovoru" -#: ../ui/preferences.glade.h:4 +#: ../ui/preferences-dialog.ui.h:4 msgid "Use _three pane view" msgstr "Použiť zobrazenie s _troma panelmi" -#: ../ui/preferences.glade.h:6 -msgid "Enable _spell checking" -msgstr "Povoliť _kontrolu pravopisu" - -#: ../ui/preferences.glade.h:7 +#: ../ui/preferences-dialog.ui.h:5 msgid "Notifications" msgstr "Oznámenia" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences-dialog.ui.h:6 msgid "_Play notification sounds" msgstr "_Prehrať zvuky upozornení" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences-dialog.ui.h:7 msgid "Show _notifications for new mail" msgstr "Zobraziť _upozornenia pre novú poštu" -#: ../ui/preferences.glade.h:10 +#: ../ui/preferences-dialog.ui.h:8 msgid "Always _watch for new mail" msgstr "Vždy _sledovať novú poštu" -#: ../ui/preferences.glade.h:11 +#: ../ui/preferences-dialog.ui.h:9 msgid "Geary will run in the background and notify of new mail" msgstr "" "Aplikácia Geary bude spustená na pozadí a bude upozorňovať na novú poštu" -#: ../ui/preferences.glade.h:12 +#: ../ui/preferences-dialog.ui.h:10 msgid "Preferences" msgstr "Nastavenia" @@ -2306,21 +2696,165 @@ msgid "Geary update in progress…" msgstr "Prebieha aktualizácia aplikácie Geary…" +#~ msgid "Mail Client" +#~ msgstr "Poštový klient" + +#~ msgid "none" +#~ msgstr "žiadny" + +#~ msgid "_Inspect" +#~ msgstr "_Preskúmať" + +#~ msgid "%s — Composer Inspector" +#~ msgstr "%s — Inšpektor tvorcu správ" + +#~ msgid " (Invalid?)" +#~ msgstr " (Neplatný?)" + +#~ msgid "%s — Conversation Inspector" +#~ msgstr "%s — Inšpektor rozhovorov" + +#~ msgid "Copy _Link" +#~ msgstr "Skopírovať _odkaz" + +#~ msgid "Link (Ctrl+L)" +#~ msgstr "Vytvorí odkaz (Ctrl+L)" + +#~ msgid "Enable _spell checking" +#~ msgstr "Povoliť _kontrolu pravopisu" + +#~ msgid "Empty" +#~ msgstr "Vyprázdniť" + +#~ msgid "_Inspect..." +#~ msgstr "_Preskúmať…" + +# tooltip +#~ msgid "Close and Discard" +#~ msgstr "Zavrie a zahodí" + +# tooltip +#~ msgid "Close and Save" +#~ msgstr "Zavrie a uloží" + +#~ msgid "%i match" +#~ msgid_plural "%i matches" +#~ msgstr[0] "%i zhoda" +#~ msgstr[1] "%i zhody" +#~ msgstr[2] "%i zhôd" + +#~ msgid "%i match (wrapped)" +#~ msgid_plural "%i matches (wrapped)" +#~ msgstr[0] "%i zhoda (zalomená)" +#~ msgstr[1] "%i zhody (zalomené)" +#~ msgstr[2] "%i zhôd (zalomených)" + +#~ msgid "not found" +#~ msgstr "nenájdené" + +#~ msgid "No conversations selected." +#~ msgstr "Žiadne vybraté rozhovory." + +#~ msgid "%u conversation selected." +#~ msgid_plural "%u conversations selected." +#~ msgstr[0] "%u vybratý rozhovor." +#~ msgstr[1] "%u vybraté rozhovory." +#~ msgstr[2] "%u vybratých rozhovorov." + +#~ msgid "No search results found." +#~ msgstr "Žiadne výsledky vyhľadávania." + +#~ msgid "From:" +#~ msgstr "Od:" + +#~ msgid "Date:" +#~ msgstr "Dátum:" + +#~ msgid "Select _Message" +#~ msgstr "Vybrať _správu" + +#~ msgid "_Save As..." +#~ msgstr "_Uložiť ako…" + +#~ msgid "Save A_ttachment..." +#~ msgid_plural "Save All A_ttachments..." +#~ msgstr[0] "Uložiť p_rílohu…" +#~ msgstr[1] "Uložiť všetky p_rílohy…" +#~ msgstr[2] "Uložiť všetky p_rílohy…" + +#~ msgid "_Left" +#~ msgstr "_Vľavo" + +#~ msgid "_Right" +#~ msgstr "Vp_ravo" + +#~ msgid "_Center" +#~ msgstr "Na _stred" + +#~ msgid "_Justify" +#~ msgstr "_Zarovnať" + +#~ msgid "More options" +#~ msgstr "Viac volieb" + +#~ msgctxt "Short Label" +#~ msgid "Close and Save" +#~ msgstr "Zavrieť a uložiť" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Save" +#~ msgstr "Zavrie a uloží" + +#~ msgctxt "Short Label" +#~ msgid "Close and Discard" +#~ msgstr "Zavrieť a zahodiť" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Discard" +#~ msgstr "Zavrie a zahodí" + +#~ msgid "Large" +#~ msgstr "Veľké" + +#~ msgid "Medium" +#~ msgstr "Stredné" + +#~ msgid "Small" +#~ msgstr "Malé" + +#~ msgid "Sans Serif" +#~ msgstr "Sans Serif" + +#~ msgid "Serif" +#~ msgstr "Serif" + +#~ msgid "Fixed Width" +#~ msgstr "Pevná šírka" + +#~ msgid "Detach" +#~ msgstr "Odpojí" + +#~ msgid "_Attach File" +#~ msgstr "_Priložiť súbor" + +#~ msgid "Attach File" +#~ msgstr "Priloží súbor" + +#~ msgid "_Include Original Attachments" +#~ msgstr "Zahrnúť _pôvodné prílohy" + +#~ msgid "Spelling language" +#~ msgstr "Pravopis jazyka" + +#~ msgid "Application Menu" +#~ msgstr "Ponuka aplikácie" + #~ msgid "Copyright 2011-2015 Yorba Foundation" #~ msgstr "Autorské práva 2011-2015 Nadácia Yorba" #~ msgid "_Donate" #~ msgstr "_Prispieť" -#~ msgid "No conversations selected" -#~ msgstr "Žiadne vybrané rozhovory" - -#~ msgid "%u conversation selected" -#~ msgid_plural "%u conversations selected" -#~ msgstr[0] "%u vybraný rozhovor" -#~ msgstr[1] "%u vybrané rozhovory" -#~ msgstr[2] "%u vybraných rozhovorov" - #~ msgid "Password:" #~ msgstr "Heslo:" diff -Nru geary-0.11.4/po/sl.po geary-0.12.0/po/sl.po --- geary-0.11.4/po/sl.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/sl.po 2017-10-02 11:25:21.000000000 +0000 @@ -2,69 +2,166 @@ # Copyright (C) 2009 geary COPYRIGHT HOLDER # This file is distributed under the same license as the geary package. # -# anthonmanix , 2012-2013. -# Matej Urbančič , 2014. +# anthonmanix , 2012–2013. +# Matej Urbančič , 2014–2017. # msgid "" msgstr "" -"Project-Id-Version: geary-0.4.1\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" -"product=geary&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2014-02-27 20:29+0000\n" -"PO-Revision-Date: 2014-03-22 08:45+0100\n" +"Project-Id-Version: geary master\n" +"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" +"product=geary&keywords=I18N+L10N&component=internationalization\n" +"POT-Creation-Date: 2017-09-26 17:00+0200\n" +"PO-Revision-Date: 2017-09-27 16:30+0200\n" "Last-Translator: Matej Urbančič \n" "Language-Team: Slovenian GNOME Translation Team \n" -"Language: sl\n" +"Language: sl_SI\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n" "%100==4 ? 3 : 0);\n" "X-Poedit-SourceCharset: utf-8\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 2.0.1\n" -#: ../desktop/geary.desktop.in.h:1 -#| msgid "Geary Mail" +#. Translators: The application name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:2 +#: ../desktop/org.gnome.Geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" msgstr "Geary" -#: ../desktop/geary.desktop.in.h:2 -#: ../src/client/application/geary-application.vala:18 -msgid "Mail Client" -msgstr "Poštni klient" +#. Translators: The development team's name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:4 +msgid "Geary Development Team" +msgstr "Razvojna skupina Geary" + +#. Translators: The application's summary / tagline +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:6 +#: ../desktop/org.gnome.Geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 +msgid "Send and receive email" +msgstr "Pošlji in prejmi sporočila" -#: ../desktop/geary.desktop.in.h:3 -msgid "Geary Mail" -msgstr "Geary Mail" +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:7 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"Program Geary je odjemalec elektronske pošte za GNOME, ki temelji na logiki " +"pogovorov. Omogoča branje, iskanje in pošiljanje sporočil prek preglednega " +"modernega vmesnika." -#: ../desktop/geary.desktop.in.h:4 -msgid "Send and receive email" -msgstr "Pošlji in prejmi epošto" +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:8 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"Sistem pogovorov omogoča branje nizov sporočil brez nepotrebnega klikanja " +"med sporočilo." -#: ../desktop/geary.desktop.in.h:5 -msgid "Email;E-mail;Mail;" -msgstr "Epošta;E-pošta;Pošta;" +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:9 +msgid "Geary’s features include:" +msgstr "Program Geary omogoča:" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:10 +msgid "Quick email account setup" +msgstr "Hitro nastavitev računa elektronske pošte" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:11 +msgid "Shows related messages together in conversations" +msgstr "Povezana sporočila so zbrana skupaj v obliki pogovora" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:12 +msgid "Fast, full text and keyword search" +msgstr "Hitro iskanje po celotnem besedilu s ključnimi besedami" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:13 +msgid "Full-featured HTML and plain text message composer" +msgstr "" +"Zmogljiv sestavljalnik sporočil v besedilnem ali oblikovanem zapisu HTML" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:14 +msgid "Desktop notification of new mail" +msgstr "Obvestila o prispeli pošti" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:15 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" +msgstr "" +"Podprti so sistemi spletne pošte, kot so Gmail, Yahoo!, Outlook.com in drugi " +"strežniki IMAP" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:17 +msgid "Geary displaying a conversation" +msgstr "Prikaz sporočil zbranih v pogovor" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:19 +msgid "Geary showing the rich text composer" +msgstr "Geary z odprtim oknom sestavljalnika" + +#: ../desktop/org.gnome.Geary.desktop.in.h:2 +msgid "Email" +msgstr "Elektronska pošta" + +#: ../desktop/org.gnome.Geary.desktop.in.h:3 +msgid "Geary Email" +msgstr "Pošta Geary" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/org.gnome.Geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;Elektronska pošta;" -#: ../desktop/geary.desktop.in.h:6 +#: ../desktop/org.gnome.Geary.desktop.in.h:7 ../ui/gtk/menus.ui.h:1 msgid "Compose Message" msgstr "Sestavi sporočilo" -#: ../src/client/accounts/account-dialog-add-edit-pane.vala:48 +#: ../desktop/geary-autostart.desktop.in.h:2 +#: ../src/client/application/geary-application.vala:21 +msgid "Mail Client" +msgstr "Poštni odjemalec" + +#: ../desktop/geary-autostart.desktop.in.h:3 +msgid "Geary Mail" +msgstr "Pošta Geary" + +#: ../desktop/geary-autostart.desktop.in.h:5 +msgid "Email;E-mail;Mail;" +msgstr "elektronska pošta;epošta;e-pošta;pošta;sporočila;email;mail;" + +#: ../desktop/geary-attach.contract.in.h:1 +msgid "Send by email" +msgstr "Pošlji z elektronsko pošto" + +#: ../desktop/geary-attach.contract.in.h:2 +msgid "Send files using Geary" +msgstr "Pošlji datoteke s programom Geary" + +#: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:31 +#: ../ui/conversation-email-menus.ui.h:10 msgid "_Save" msgstr "_Shrani" -#: ../src/client/accounts/account-dialog-add-edit-pane.vala:48 +#: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:22 msgid "_Add" msgstr "_Dodaj" +#. reset/clear widgets +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 +#, c-format +msgid "Additional addresses for %s" +msgstr "Dodatni naslovi za %s" + #. Sets min size. -#: ../src/client/accounts/account-dialog.vala:19 +#: ../src/client/accounts/account-dialog.vala:21 msgid "Accounts" msgstr "Računi" -#. Copyright 2011-2014 Yorba Foundation +#. Copyright 2016 Software Freedom Conservancy Inc. #. * #. * This software is licensed under the GNU Lesser General Public License #. * (version 2.1 or later). See the COPYING file in this distribution. @@ -75,406 +172,437 @@ msgid "First Last" msgstr "Ime Priimek" -#: ../src/client/accounts/add-edit-page.vala:202 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." -msgstr "Dobrodošli v Geary." +msgstr "Dobrodošli v programu Geary." -#: ../src/client/accounts/add-edit-page.vala:202 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." -msgstr "Vpišite podatke o svojem računu, da lahko začnete." +msgstr "Vpišite podatke o računa za začetek uporabe." -#: ../src/client/accounts/add-edit-page.vala:223 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "2 tedna nazaj" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:224 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "1 mesec nazaj" -#: ../src/client/accounts/add-edit-page.vala:225 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "3 mesece nazaj" -#: ../src/client/accounts/add-edit-page.vala:226 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "6 mesecev nazaj" -#: ../src/client/accounts/add-edit-page.vala:227 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "1 leto nazaj" -#: ../src/client/accounts/add-edit-page.vala:228 -#| msgid "1 year back" +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" msgstr "2 leti nazaj" -#: ../src/client/accounts/add-edit-page.vala:229 -#| msgid "1 year back" +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" msgstr "4 leta nazaj" #. Separator -#: ../src/client/accounts/add-edit-page.vala:231 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "Vse" -#: ../src/client/accounts/add-edit-page.vala:630 +#: ../src/client/accounts/add-edit-page.vala:283 +msgid "Edit" +msgstr "Uredi" + +#: ../src/client/accounts/add-edit-page.vala:285 +msgid "Preview" +msgstr "Predogled" + +#: ../src/client/accounts/add-edit-page.vala:751 msgid "Remem_ber passwords" msgstr "Zap_omni si gesla" -#: ../src/client/accounts/add-edit-page.vala:637 ../ui/login.glade.h:6 +#: ../src/client/accounts/add-edit-page.vala:758 ../ui/login.glade.h:7 msgid "Remem_ber password" msgstr "Zap_omni si geslo" -#: ../src/client/accounts/add-edit-page.vala:671 +#: ../src/client/accounts/add-edit-page.vala:792 msgid "Unable to validate:\n" -msgstr "Potrditev ni možna:\n" +msgstr "Overitev ni mogoča:\n" -#: ../src/client/accounts/add-edit-page.vala:673 -msgid " • Invalid account nickname.\n" -msgstr "• Napačen vzdevek računa.\n" - -#: ../src/client/accounts/add-edit-page.vala:676 -msgid " • Email address already added to Geary.\n" -msgstr "• Epoštni naslov je že dodan v Geary.\n" - -#: ../src/client/accounts/add-edit-page.vala:680 -msgid " • IMAP connection error.\n" -msgstr "• Napaka pri IMAP povezavi.\n" - -#: ../src/client/accounts/add-edit-page.vala:683 -msgid " • IMAP username or password incorrect.\n" -msgstr "• IMAP uporabniško ime ali geslo je napačno.\n" - -#: ../src/client/accounts/add-edit-page.vala:686 -msgid " • SMTP connection error.\n" -msgstr "• Napaka pri SMTP povezavi.\n" - -#: ../src/client/accounts/add-edit-page.vala:689 -msgid " • SMTP username or password incorrect.\n" -msgstr "• SMTP uporabniško ime ali geslo je napačno.\n" - -#: ../src/client/accounts/add-edit-page.vala:693 -msgid " • Connection error.\n" -msgstr "• Napaka pri povezavi.\n" - -#: ../src/client/accounts/add-edit-page.vala:697 -msgid " • Username or password incorrect.\n" -msgstr "• Uporabniško ime ali geslo je napačno.\n" - -#: ../src/client/application/geary-application.vala:19 -#| msgid "Copyright 2011-2013 Yorba Foundation" -msgid "Copyright 2011-2014 Yorba Foundation" -msgstr "Avtorske pravice © 2004-2014 Yorba Foundation" +#: ../src/client/accounts/add-edit-page.vala:794 +#| msgid " • Invalid account nickname.\n" +msgid " • Invalid account nickname.\n" +msgstr " • Neveljaven naziv računa.\n" + +#: ../src/client/accounts/add-edit-page.vala:797 +#| msgid " • Email address already added to Geary.\n" +msgid " • Email address already added to Geary.\n" +msgstr " • Elektronski naslov je že dodan v program.\n" + +#: ../src/client/accounts/add-edit-page.vala:801 +#| msgid " • IMAP connection error.\n" +msgid " • IMAP connection error.\n" +msgstr " • Napaka povezave s strežnikom IMAP.\n" + +#: ../src/client/accounts/add-edit-page.vala:804 +#| msgid " • IMAP username or password incorrect.\n" +msgid " • IMAP username or password incorrect.\n" +msgstr "" +" • Uporabniško ime ali geslo za povezavo s strežnikom IMAP je " +"napačno.\n" -#: ../src/client/application/geary-application.vala:21 -msgid "Visit the Yorba web site" -msgstr "Obiščite spletno stran Yorba" +#: ../src/client/accounts/add-edit-page.vala:807 +#| msgid " • SMTP connection error.\n" +msgid " • SMTP connection error.\n" +msgstr " • Napaka povezovanja s strežnikom SMTP.\n" + +#: ../src/client/accounts/add-edit-page.vala:810 +msgid " • SMTP username or password incorrect.\n" +msgstr "" +" • Uporabniško ime ali geslo za povezavo s strežnikom SMTP je " +"napačno.\n" + +#: ../src/client/accounts/add-edit-page.vala:814 +#| msgid " • Connection error.\n" +msgid " • Connection error.\n" +msgstr " • Napaka povezovanja.\n" + +#: ../src/client/accounts/add-edit-page.vala:818 +msgid " • Username or password incorrect.\n" +msgstr " • Uporabniško ime ali geslo za povezavo je napačno.\n" + +#: ../src/client/application/geary-application.vala:22 +msgid "Copyright 2016 Software Freedom Conservancy Inc." +msgstr "Avtorske pravice 2017 Software Freedom Conservancy Inc." + +#: ../src/client/application/geary-application.vala:24 +msgid "Visit the Geary web site" +msgstr "Obišči spletišče Geary" + +#: ../src/client/application/geary-application.vala:464 +#, c-format +msgid "About %s" +msgstr "O %s" + +#. Translators: add your name and email address to receive +#. credit in the About dialog For example: Yamada Taro +#. +#: ../src/client/application/geary-application.vala:468 +msgid "translator-credits" +msgstr "Matej Urbančič " #: ../src/client/application/geary-args.vala:10 -msgid "Output debugging information" -msgstr "Izpis informacij o razhroščevanju" +msgid "Start Geary with hidden main window" +msgstr "Zaženi program s skritim glavnim oknom" #: ../src/client/application/geary-args.vala:11 +msgid "Output debugging information" +msgstr "Izpiši podrobnosti o razhroščevanju" + +#: ../src/client/application/geary-args.vala:12 msgid "Log conversation monitoring" msgstr "Beleži nadzorovanje pogovorov" -#: ../src/client/application/geary-args.vala:12 +#: ../src/client/application/geary-args.vala:13 msgid "Log network deserialization" -msgstr "Beleži serializacijo mreže" +msgstr "Beleži razporejanje omrežja" -#: ../src/client/application/geary-args.vala:13 +#: ../src/client/application/geary-args.vala:14 msgid "Log network activity" -msgstr "Beleži aktivnost mreže" +msgstr "Beleži dejavnost omrežja" #. / The IMAP replay queue is how changes on the server are replicated on the client. #. / It could also be called the IMAP events queue. -#: ../src/client/application/geary-args.vala:16 +#: ../src/client/application/geary-args.vala:17 msgid "Log IMAP replay queue" -msgstr "Beleži IMAP vrsto ponovitev" +msgstr "Beleži vrsto odzivov IMAP" #. / Serialization is how commands and responses are converted into a stream of bytes for #. / network transmission -#: ../src/client/application/geary-args.vala:19 +#: ../src/client/application/geary-args.vala:20 msgid "Log network serialization" -msgstr "Beleži serializacijo mreže" +msgstr "Beleži zaporejanje omrežja" -#: ../src/client/application/geary-args.vala:20 +#: ../src/client/application/geary-args.vala:21 msgid "Log periodic activity" -msgstr "Beleži periodično aktivnost" +msgstr "Beleži dejavnost" -#: ../src/client/application/geary-args.vala:21 +#: ../src/client/application/geary-args.vala:22 msgid "Log database queries (generates lots of messages)" -msgstr "Beleži poizvedbe podatkovne baze (ustvari veli sporočil)" +msgstr "Beleži poizvedbe podatkovne zbirke (ustvari mnogo sporočil)" #. / "Normalization" can also be called "synchronization" -#: ../src/client/application/geary-args.vala:23 +#: ../src/client/application/geary-args.vala:24 msgid "Log folder normalization" -msgstr "Beleži normalizacijo map" +msgstr "Beleži usklajevanje map" -#: ../src/client/application/geary-args.vala:24 +#: ../src/client/application/geary-args.vala:25 msgid "Allow inspection of WebView" -msgstr "Allow inspection of WebView" +msgstr "Dovoli nadzor WebView" -#: ../src/client/application/geary-args.vala:25 +#: ../src/client/application/geary-args.vala:26 +msgid "Revoke all server certificates with TLS warnings" +msgstr "Prekliči vsa potrdila strežnika z varnostnimi opozorili TLS" + +#: ../src/client/application/geary-args.vala:27 +msgid "Perform a graceful quit" +msgstr "Izvedi končanje" + +#: ../src/client/application/geary-args.vala:28 msgid "Display program version" -msgstr "Prikaži različico programa" +msgstr "Pokaži različico programa" #. This gives a command-line hint on how to open new composer windows with mailto: -#: ../src/client/application/geary-args.vala:47 +#: ../src/client/application/geary-args.vala:53 #, c-format msgid "Use %s to open a new composer window" -msgstr "" +msgstr "Uporabi %s za odpiranje novega okna sestavljalnika" -#: ../src/client/application/geary-args.vala:48 +#: ../src/client/application/geary-args.vala:54 msgid "Please report comments, suggestions and bugs to:" -msgstr "Prosimo prijavite komentarje, predloge in hrošče na:" +msgstr "Opombe, predloge in poročila o hroščih, pošljite na:" #. i18n: Command line arguments are invalid -#: ../src/client/application/geary-args.vala:55 +#: ../src/client/application/geary-args.vala:61 #, c-format msgid "Failed to parse command line options: %s\n" -msgstr "Razčlenjevanje možnosti ukazne vrstice ni uspelo: %s\n" +msgstr "Razčlenjevanje možnosti ukazne vrstice je spodletelo: %s\n" -#: ../src/client/application/geary-args.vala:66 +#: ../src/client/application/geary-args.vala:72 #, c-format -msgid "Unrecognized command line option \"%s\"\n" -msgstr "Neznana možnost ukazne vrstice \"%s\"\n" +msgid "Unrecognized command line option “%s”\n" +msgstr "Neprepoznana možnost ukazne vrstice »%s«\n" -#: ../src/client/application/geary-controller.vala:46 -msgid "_Delete" -msgstr "_Briši" +#: ../src/client/application/geary-controller.vala:57 +msgid "Delete conversation" +msgstr "Izbriši pogovor" -#: ../src/client/application/geary-controller.vala:47 -#, fuzzy -#| msgid "Delete conversation (Delete, Backspace, A)" +#: ../src/client/application/geary-controller.vala:58 msgid "Delete conversation (Shift+Delete)" -msgstr "Japonsko (_Shift-JIS)" +msgstr "Izbriši pogovor (SHIFT+Del)" -#: ../src/client/application/geary-controller.vala:48 -#, fuzzy -#| msgid "Delete conversations (Delete, Backspace, A)" +#: ../src/client/application/geary-controller.vala:59 msgid "Delete conversations (Shift+Delete)" -msgstr "Japonsko (_Shift-JIS)" - -#: ../src/client/application/geary-controller.vala:51 -#| msgid "Trash" -msgid "_Trash" -msgstr "_Smeti" +msgstr "Izbriši pogovore (SHIFT+Del)" -#: ../src/client/application/geary-controller.vala:52 -#, fuzzy -#| msgid "Archive conversations (Delete, Backspace, A)" -msgid "Move conversation to trash (Delete, Backspace)" -msgstr "Arhiviraj pogovore (Delete, Backspace, A)" +#. This refers to the action ("move email to the trash"), not the Trash folder itself +#: ../src/client/application/geary-controller.vala:63 +msgid "Move conversation to Trash (Delete, Backspace)" +msgstr "Premakni pogovor v smeti (Del, Povratna tipka)" -#: ../src/client/application/geary-controller.vala:53 -#, fuzzy -#| msgid "Archive conversations (Delete, Backspace, A)" -msgid "Move conversations to trash (Delete, Backspace)" -msgstr "Arhiviraj pogovore (Delete, Backspace, A)" +#: ../src/client/application/geary-controller.vala:64 +msgid "Move conversations to Trash (Delete, Backspace)" +msgstr "Premakni pogovore v smeti (Del, Povratna tipka)" -#: ../src/client/application/geary-controller.vala:56 +#. This refers to the action ("archive an email"), not the Archive folder itself +#: ../src/client/application/geary-controller.vala:68 msgid "_Archive" msgstr "_Arhiv" -#: ../src/client/application/geary-controller.vala:57 -#, fuzzy -#| msgid "Move conversation" +#: ../src/client/application/geary-controller.vala:69 msgid "Archive conversation (A)" -msgstr "Pogovor hipnega sporočanja" +msgstr "Arhiviraj pogovor (A)" -#: ../src/client/application/geary-controller.vala:58 -#, fuzzy -#| msgid "Move conversations" +#: ../src/client/application/geary-controller.vala:70 msgid "Archive conversations (A)" -msgstr "Zgodovina pogovorov" +msgstr "Arhiviraj pogovore (A)" -#: ../src/client/application/geary-controller.vala:61 +#: ../src/client/application/geary-controller.vala:73 msgid "Mark as S_pam" msgstr "Označi kot _neželeno pošto" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:74 msgid "Mark as not S_pam" msgstr "Označi kot _želeno pošto" -#: ../src/client/application/geary-controller.vala:64 -#: ../src/client/application/geary-controller.vala:275 +#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:448 msgid "Mark conversation" msgstr "Označi pogovor" -#: ../src/client/application/geary-controller.vala:65 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark conversations" msgstr "Označi pogovore" -#: ../src/client/application/geary-controller.vala:66 +#: ../src/client/application/geary-controller.vala:78 msgid "Add label to conversation" msgstr "Dodaj oznako pogovoru" -#: ../src/client/application/geary-controller.vala:67 +#: ../src/client/application/geary-controller.vala:79 msgid "Add label to conversations" msgstr "Dodaj oznako pogovorom" -#: ../src/client/application/geary-controller.vala:68 -#: ../src/client/application/geary-controller.vala:314 +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:487 msgid "Move conversation" msgstr "Premakni pogovor" -#: ../src/client/application/geary-controller.vala:69 +#: ../src/client/application/geary-controller.vala:81 msgid "Move conversations" msgstr "Premakni pogovore" -#: ../src/client/application/geary-controller.vala:251 -msgid "A_ccounts" -msgstr "_Računi" - -#: ../src/client/application/geary-controller.vala:256 -#: ../src/client/components/stock.vala:27 -msgid "_Preferences" -msgstr "_Nastavitve" - -#: ../src/client/application/geary-controller.vala:260 -#: ../src/client/components/stock.vala:25 -msgid "_Help" -msgstr "_Pomoč" - -#: ../src/client/application/geary-controller.vala:264 -#: ../src/client/components/stock.vala:21 -msgid "_About" -msgstr "_O programu" - -#: ../src/client/application/geary-controller.vala:268 -msgid "_Donate" -msgstr "_Prispevaj" - -#: ../src/client/application/geary-controller.vala:272 -#: ../src/client/components/stock.vala:29 -msgid "_Quit" -msgstr "_Zapusti" - -#: ../src/client/application/geary-controller.vala:277 -msgid "_Mark as..." -msgstr "_Označi kot..." +#: ../src/client/application/geary-controller.vala:450 +msgid "_Mark as…" +msgstr "_Označi kot ..." -#: ../src/client/application/geary-controller.vala:283 +#: ../src/client/application/geary-controller.vala:456 msgid "Mark as _Read" msgstr "Označi kot _prebrano" -#: ../src/client/application/geary-controller.vala:289 +#: ../src/client/application/geary-controller.vala:462 msgid "Mark as _Unread" msgstr "Označi kot _neprebrano" -#: ../src/client/application/geary-controller.vala:295 +#: ../src/client/application/geary-controller.vala:468 msgid "_Star" msgstr "Dodaj _zvezdico" -#: ../src/client/application/geary-controller.vala:300 +#: ../src/client/application/geary-controller.vala:473 msgid "U_nstar" msgstr "_Odstrani zvezdico" -#: ../src/client/application/geary-controller.vala:310 +#: ../src/client/application/geary-controller.vala:483 msgid "Add label" msgstr "Dodaj oznako" -#: ../src/client/application/geary-controller.vala:311 +#: ../src/client/application/geary-controller.vala:484 msgid "_Label" msgstr "_Oznaka" -#: ../src/client/application/geary-controller.vala:315 +#: ../src/client/application/geary-controller.vala:488 msgid "_Move" msgstr "_Premakni" -#: ../src/client/application/geary-controller.vala:319 +#: ../src/client/application/geary-controller.vala:492 msgid "Compose new message (Ctrl+N, N)" -msgstr "Sestavi novo sporočilo (Ctrl+N, N)" +msgstr "Sestavi novo sporočilo (CTRL+N, N)" -#. Reply to a message. -#: ../src/client/application/geary-controller.vala:323 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1567 +#: ../src/client/application/geary-controller.vala:496 +#: ../ui/conversation-email-menus.ui.h:1 msgid "_Reply" msgstr "_Odgovori" -#: ../src/client/application/geary-controller.vala:324 +#: ../src/client/application/geary-controller.vala:497 msgid "Reply (Ctrl+R, R)" -msgstr "Odgovori (Ctrl+R, R)" +msgstr "Odgovori (CTRL+R, R)" -#: ../src/client/application/geary-controller.vala:328 +#: ../src/client/application/geary-controller.vala:501 msgid "R_eply All" -msgstr "O_dgovori na vse" +msgstr "O_dgovori vsem" -#: ../src/client/application/geary-controller.vala:329 +#: ../src/client/application/geary-controller.vala:502 msgid "Reply all (Ctrl+Shift+R, Shift+R)" -msgstr "Odgovori na vse (Ctrl+Shift+R, Shift+R)" +msgstr "Odgovori vsem (CTRL+SHIFT+R, SHIFT+R)" -#. Forward a message. -#: ../src/client/application/geary-controller.vala:334 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1577 +#: ../src/client/application/geary-controller.vala:507 +#: ../ui/conversation-email-menus.ui.h:3 msgid "_Forward" msgstr "_Posreduj" -#: ../src/client/application/geary-controller.vala:335 +#: ../src/client/application/geary-controller.vala:508 msgid "Forward (Ctrl+L, F)" -msgstr "Posreduj (Ctrl+L, F)" +msgstr "Posreduj (CTRL+L, F)" -#: ../src/client/application/geary-controller.vala:618 +#: ../src/client/application/geary-controller.vala:538 +msgid "Empty _Spam…" +msgstr "Izprazni mapo _neželene pošte" + +#: ../src/client/application/geary-controller.vala:542 +msgid "Empty _Trash…" +msgstr "Izprazni _smeti" + +#. No callback is connected, since we bind the toggle button to the search bar visibility +#: ../src/client/application/geary-controller.vala:574 +msgid "Toggle search bar" +msgstr "Preklopi prikaz iskalne vrstice" + +#. No callback is connected, since we bind the toggle button to the find bar visibility +#: ../src/client/application/geary-controller.vala:579 +msgid "Toggle find bar" +msgstr "Preklopi vrstico iskanja" + +#: ../src/client/application/geary-controller.vala:757 +msgid "Unable to store server trust exception" +msgstr "Ni mogoče shraniti potrditve izjeme varnosti strežnika" + +#: ../src/client/application/geary-controller.vala:992 msgid "Your settings are insecure" -msgstr "Vaše nastavitve niso varne" +msgstr "Nastavitve niso varne" -#: ../src/client/application/geary-controller.vala:619 +#: ../src/client/application/geary-controller.vala:993 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " "you sure you want to do this?" msgstr "" -"Vaše IMAP in/ali SMTP nastavitve ne določajo SSL ali TLS. To pomeni, da " -"lahko druga oseba na omrežju prebere vaše uporabniško ime in geslo. Ali ste " +"V nastavitvah IMAP oziroma SMTP ni določenih poveril SSL ali TLS. To pomeni, " +"da lahko tretje osebe neovirano pridobijo uporabniško ime in geslo. Ali ste " "prepričani, da želite to storiti?" -#: ../src/client/application/geary-controller.vala:620 +#: ../src/client/application/geary-controller.vala:994 msgid "Co_ntinue" msgstr "_Nadaljuj" +#: ../src/client/application/geary-controller.vala:1041 +msgid "Error connecting to the server" +msgstr "Napaka med povezovanjem s strežnikom" + +#: ../src/client/application/geary-controller.vala:1042 +msgid "" +"Geary encountered an error while connecting to the server. Please try again " +"in a few moments." +msgstr "" +"Med povezovanjem s strežnikom je prišlo do napake. Poskusite znova čez nekaj " +"trenutkov." + #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:698 +#: ../src/client/application/geary-controller.vala:1079 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" -msgstr "Napaka pri pošiljanju epošte" +msgstr "Napaka med pošiljanjem sporočila" -#: ../src/client/application/geary-controller.vala:699 +#: ../src/client/application/geary-controller.vala:1080 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." msgstr "" +"Prišlo je do napake med pošiljanjem elektronskega sporočila. Če se problem " +"tudi v bodoče večkrat ponovi, ročno izbrišite sporočilo iz mape odhodne " +"pošte." #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:703 +#: ../src/client/application/geary-controller.vala:1084 #: ../src/client/components/status-bar.vala:33 -#, fuzzy -#| msgid "Error sending email" msgid "Error saving sent mail" -msgstr "Napaka med branjem poštne datoteke: %s" +msgstr "Napaka shranjevanja poslanega sporočila" -#: ../src/client/application/geary-controller.vala:704 +#: ../src/client/application/geary-controller.vala:1085 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." msgstr "" +"Prišlo je do napake med shranjevanjem sporočila v mapo poslane pošte. " +"Sporočilo bo ostalo v mapi, dokler ga ročno ne izbrišete." -#: ../src/client/application/geary-controller.vala:773 +#: ../src/client/application/geary-controller.vala:1154 msgid "Labels" msgstr "Oznake" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:785 +#: ../src/client/application/geary-controller.vala:1166 #, c-format msgid "Unable to open the database for %s" -msgstr "Podatkovne baze za %s ni mogoče odpreti" +msgstr "Podatkovne zbirke za %s ni mogoče odpreti" -#: ../src/client/application/geary-controller.vala:786 +#: ../src/client/application/geary-controller.vala:1167 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -487,38 +615,51 @@ "Rebuilding the database will destroy all local email and its attachments. " "The mail on the your server will not be affected." msgstr "" +"Prišlo je do napake odpiranja krajevne podatkovne zbirke za ta račun. " +"Najverjetneje je težava v okvarjeni podatkovni zbirki v mapi:\n" +"\n" +"%s\n" +"\n" +"Program lahko ponovno izgradi zbirko in jo ponovno uskladi s strežnikom, ali " +"pa se program konča.\n" +"\n" +"S ponovno izgradnjo podatkovne zbirke so uničeni vsi krajevni podatki " +"sporočil in prilog. Sporočila na strežniku ostanejo nespremenjena." -#: ../src/client/application/geary-controller.vala:788 +#: ../src/client/application/geary-controller.vala:1169 msgid "_Rebuild" msgstr "Ponovno _izgradi" -#: ../src/client/application/geary-controller.vala:788 +#: ../src/client/application/geary-controller.vala:1169 msgid "E_xit" -msgstr "I_zhod" +msgstr "_Končaj" -#: ../src/client/application/geary-controller.vala:797 +#: ../src/client/application/geary-controller.vala:1178 #, c-format -msgid "Unable to rebuild database for \"%s\"" -msgstr "Podatkovne baze za \"%s\" ni mogoče ponovno zgraditi" +msgid "Unable to rebuild database for “%s”" +msgstr "Ponovna izgradnja mape za »%s« ni mogoča." -#: ../src/client/application/geary-controller.vala:798 -#, fuzzy, c-format +#: ../src/client/application/geary-controller.vala:1179 +#, c-format msgid "" "Error during rebuild:\n" "\n" "%s" -msgstr "Napaka med snemanjem: %s\n" +msgstr "" +"Napaka med ponovno izgradnjo:\n" +"\n" +"%s" #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:820 -#: ../src/client/application/geary-controller.vala:830 -#: ../src/client/application/geary-controller.vala:841 -#, fuzzy, c-format +#: ../src/client/application/geary-controller.vala:1201 +#: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:1222 +#, c-format msgid "Unable to open local mailbox for %s" -msgstr "Ni mogoče odpreti datoteke namizja %s za zaganjalnik%s%s pulta\n" +msgstr "Ni mogoče odpreti krajevnega poštnega predala za %s" -#: ../src/client/application/geary-controller.vala:821 +#: ../src/client/application/geary-controller.vala:1202 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -529,498 +670,553 @@ "\n" "%s" msgstr "" +"Prišlo je do napake odpiranja krajevne podatkovne zbirke za ta račun. " +"Najverjetneje je težava v dovoljenjih datotek.\n" +"\n" +"Preverite, ali so dodeljena ustrezna dovoljenja za vse datoteke v tej mapi:\n" +"\n" +"%s" -#: ../src/client/application/geary-controller.vala:831 +#: ../src/client/application/geary-controller.vala:1212 msgid "" "The version number of the local mail database is formatted for a newer " -"version of Geary. Unfortunately, the database cannot be \"rolled back\" to " +"version of Geary. Unfortunately, the database cannot be “rolled back” to " "work with this version of Geary.\n" "\n" "Please install the latest version of Geary and try again." msgstr "" +"Krajevna podatkovna zbirka pošte je shranjena kot novejša različica. Na " +"žalost nadgradnje ni mogoče povrniti in uporabiti za trenutno nameščeno " +"različico programa Geary.\n" +"\n" +"Namestite najnovejšo različico programa in poskusite znova." -#: ../src/client/application/geary-controller.vala:842 +#: ../src/client/application/geary-controller.vala:1223 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" "\n" "Please check your network connection and restart Geary." msgstr "" +"Prišlo je do napake med odpiranjem krajevnega računa. Najverjetneje je " +"težava v omrežni povezavi.\n" +"\n" +"Preverite povezave in ponovno zaženite program." -#: ../src/client/application/geary-controller.vala:1335 -#, c-format -msgid "About %s" -msgstr "O %s" - -#. / Translators: add your name and email address to receive credit in the About dialog -#. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1338 -msgid "translator-credits" -msgstr "zasluge-za-prevajanje" +#: ../src/client/application/geary-controller.vala:1999 +msgid "Undo move (Ctrl+Z)" +msgstr "Razveljavi premik (CTRL+Z)" -#: ../src/client/application/geary-controller.vala:1595 -#, c-format -msgid "Are you sure you want to open \"%s\"?" -msgstr "Ste prepričani, da želite odpreti \"%s\"?" +#: ../src/client/application/geary-controller.vala:2009 +msgid "Are you sure you want to open these attachments?" +msgstr "Ali ste prepričani, da želite odpreti vse priloge?" -#: ../src/client/application/geary-controller.vala:1596 +#: ../src/client/application/geary-controller.vala:2010 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." msgstr "" -"Priponke so lahko škodljive vašemu sistemu, če jih odprete. Odpirajte samo " -"datoteke iz zaupljivih virov." +"Priloge lahko vsebujejo zlonamerno kodo, ki lahko škoduje sistemu. Odpirajte " +"samo datoteke iz zaupljivih virov." -#: ../src/client/application/geary-controller.vala:1597 -msgid "Don't _ask me again" -msgstr "Ne _sprašuj me več" +#: ../src/client/application/geary-controller.vala:2011 +msgid "Don’t _ask me again" +msgstr "_Ne vprašaj več" -#: ../src/client/application/geary-controller.vala:1615 +#: ../src/client/application/geary-controller.vala:2121 #, c-format -msgid "A file named \"%s\" already exists. Do you want to replace it?" -msgstr "Datoteka z imenom \"%s\" že obstaja. Ali jo želite zamenjati?" +msgid "A file named “%s” already exists. Do you want to replace it?" +msgstr "Datoteka z imenom »%s« že obstaja. Ali jo želite zamenjati?" -#: ../src/client/application/geary-controller.vala:1617 +#: ../src/client/application/geary-controller.vala:2123 #, c-format msgid "" -"The file already exists in \"%s\". Replacing it will overwrite its contents." +"The file already exists in “%s”. Replacing it will overwrite its contents." msgstr "" -"Datoteka že obstaja v \"%s\". Če jo zamenjate, boste prepisali njeno " -"vsebino." +"Datoteka že obstaja v mapi »%s«. S prepisom bo izgubljena vsebina ciljne " +"datoteke." -#: ../src/client/application/geary-controller.vala:1620 +#: ../src/client/application/geary-controller.vala:2126 msgid "_Replace" msgstr "_Zamenjaj" -#: ../src/client/application/geary-controller.vala:1922 -#, fuzzy -#| msgid "Do you want to discard this message?" +#. Find out what to do with the inline composers. +#. TODO: Remove this in favor of automatically saving drafts +#: ../src/client/application/geary-controller.vala:2374 +msgid "Close open draft messages?" +msgstr "Ali želite zapreti odprt osnutek sporočila?" + +#: ../src/client/application/geary-controller.vala:2496 +#, c-format +msgid "Empty all email from your %s folder?" +msgstr "Ali želite odstraniti vsa elektronska sporočila iz mape %s?" + +#: ../src/client/application/geary-controller.vala:2497 +msgid "This removes the email from Geary and your email server." +msgstr "S tem bo sporočilo odstranjeno krajevno in iz poštnega strežnika." + +#: ../src/client/application/geary-controller.vala:2498 +msgid "This cannot be undone." +msgstr "Dejanja ni mogoče povrniti." + +#: ../src/client/application/geary-controller.vala:2499 +#, c-format +msgid "Empty %s" +msgstr "Izprazni %s" + +#: ../src/client/application/geary-controller.vala:2516 +#, c-format +msgid "Error emptying %s" +msgstr "Napaka praznjenja %s" + +#: ../src/client/application/geary-controller.vala:2546 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" -msgstr[0] "Ali res želite izbrisati to kategorijo?\n" -msgstr[1] "Želite zavreči to sporočilo?" -msgstr[2] "Želite zavreči to sporočilo?" -msgstr[3] "Želite zavreči to sporočilo?" +msgstr[0] "Ali res želite trajno izbrisati ta sporočila?" +msgstr[1] "Ali res želite trajno izbrisati to sporočilo?" +msgstr[2] "Ali res želite trajno izbrisati ti sporočili?" +msgstr[3] "Ali res želite trajno izbrisati ta sporočila?" -#: ../src/client/application/geary-controller.vala:1924 -#| msgid "_Delete" +#: ../src/client/application/geary-controller.vala:2548 msgid "Delete" msgstr "Izbriši" -#: ../src/client/components/conversation-find-bar.vala:214 -#, fuzzy, c-format -#| msgid "%i matches" -msgid "%i match" -msgid_plural "%i matches" -msgstr[0] "%i zadetkov" -msgstr[1] "%i zadetkov" -msgstr[2] "%i zadetkov" -msgstr[3] "%i zadetkov" - -#: ../src/client/components/conversation-find-bar.vala:216 -#, fuzzy, c-format -#| msgid "%i matches (wrapped)" -msgid "%i match (wrapped)" -msgid_plural "%i matches (wrapped)" -msgstr[0] "Primerjaj skladnosti polj" -msgstr[1] "%i zadetkov (celotno)" -msgstr[2] "%i zadetkov (celotno)" -msgstr[3] "%i zadetkov (celotno)" - -#: ../src/client/components/conversation-find-bar.vala:218 -msgid "not found" -msgstr "Ni zadetkov" +#: ../src/client/application/geary-controller.vala:2580 +msgid "Undo archive (Ctrl+Z)" +msgstr "Razveljavi arhiviranje (CTRL+Z)" + +#: ../src/client/application/geary-controller.vala:2595 +msgid "Undo trash (Ctrl+Z)" +msgstr "Razveljavi smeti (CTRL+Z)" + +#: ../src/client/application/geary-controller.vala:2649 +msgid "Undo (Ctrl+Z)" +msgstr "Razveljavi (CTRL+Z)" -#: ../src/client/components/main-toolbar.vala:11 +#: ../src/client/application/geary-controller.vala:2780 +msgid "Failed to open default text editor." +msgstr "Odpiranje privzetega urejevalnika besedila je spodletelo." + +#: ../src/client/components/main-window.vala:389 +#, c-format +#| msgid "%s (%s)" +msgid "%s (%d)" +msgstr "%s (%d)" + +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" -msgstr "Iskanje" +msgstr "Poišči" -#. Spacer. -#. Search bar. -#: ../src/client/components/main-toolbar.vala:84 +#. Search entry. +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" -msgstr "Preišči vso pošto v računu za ključne besede (Ctrl+S)" +msgstr "Preišči vsa sporočila računa za ključne besede (CTRL+S)" -#: ../src/client/components/main-toolbar.vala:205 +#: ../src/client/components/search-bar.vala:100 #, c-format msgid "Indexing %s account" -msgstr "Indeksiranje računa %s" +msgstr "Poteka ustvarjanje kazala računa %s" -#: ../src/client/components/main-toolbar.vala:212 +#: ../src/client/components/search-bar.vala:111 #: ../src/client/folder-list/folder-list-search-branch.vala:39 -#, fuzzy, c-format +#, c-format msgid "Search %s account" -msgstr "Iskanje računa" +msgstr "Preišči račun %s" #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 -msgid "Sending..." -msgstr "Pošiljanje..." +msgid "Sending…" +msgstr "Poteka pošiljanje ..." -#: ../src/client/components/stock.vala:18 -#: ../ui/account_cannot_remove.glade.h:3 +#: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 msgid "_OK" msgstr "_V redu" -#: ../src/client/components/stock.vala:19 ../ui/remove_confirm.glade.h:5 +#: ../src/client/components/stock.vala:19 ../ui/edit_alternate_emails.glade.h:3 +#: ../ui/password-dialog.glade.h:5 ../ui/remove_confirm.glade.h:5 msgid "_Cancel" msgstr "_Prekliči" -#: ../src/client/components/stock.vala:23 ../ui/account_list.glade.h:4 -#: ../ui/preferences.glade.h:1 +#: ../src/client/components/stock.vala:21 ../ui/gtk/menus.ui.h:6 +msgid "_About" +msgstr "_O programu" + +#: ../src/client/components/stock.vala:23 msgid "_Close" msgstr "_Zapri" #: ../src/client/components/stock.vala:24 msgid "_Discard" -msgstr "_Zavrži" +msgstr "_Zavrzi" + +#: ../src/client/components/stock.vala:25 ../ui/gtk/menus.ui.h:5 +msgid "_Help" +msgstr "Pomo_č" -#: ../src/client/components/stock.vala:26 +#: ../src/client/components/stock.vala:26 ../ui/conversation-email-menus.ui.h:9 msgid "_Open" msgstr "_Odpri" -#: ../src/client/components/stock.vala:28 -msgid "_Print..." -msgstr "_Tiskaj..." +#: ../src/client/components/stock.vala:27 ../ui/gtk/menus.ui.h:3 +msgid "_Preferences" +msgstr "_Možnosti" + +#: ../src/client/components/stock.vala:28 ../ui/conversation-email-menus.ui.h:7 +msgid "_Print…" +msgstr "_Natisni ..." + +#: ../src/client/components/stock.vala:29 ../ui/gtk/menus.ui.h:7 +msgid "_Quit" +msgstr "_Končaj" #: ../src/client/components/stock.vala:30 ../ui/remove_confirm.glade.h:6 msgid "_Remove" msgstr "_Odstrani" -#. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1035 -msgid "Select _All" -msgstr "Izberi _vse" - -#: ../src/client/components/stock.vala:33 msgid "_Keep" msgstr "_Obdrži" -#: ../src/client/composer/composer-window.vala:40 -msgid "New Message" -msgstr "Novo sporočilo" +#: ../src/client/composer/composer-link-popover.vala:150 +msgid "Link URL is not correctly formatted, e.g. http://example.com" +msgstr "" +"Naslov URL povezave ni pravilno oblikovan; biti mora v zapisu http://primer." +"si" -#: ../src/client/composer/composer-window.vala:41 +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid link URL" +msgstr "Neveljaven naslov URL povezave" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid email address" +msgstr "Neveljaven elektronski naslov" + +#: ../src/client/composer/composer-widget.vala:154 msgid "Saved" msgstr "Shranjeno" -#: ../src/client/composer/composer-window.vala:42 +#: ../src/client/composer/composer-widget.vala:155 msgid "Saving" -msgstr "Shranjevanje" +msgstr "Poteka shranjevanje" -#: ../src/client/composer/composer-window.vala:43 +#: ../src/client/composer/composer-widget.vala:156 msgid "Error saving" -msgstr "Napaka pri shranjevanju" +msgstr "Napaka med shranjevanjem" -#. / A list of keywords, separated by pipe ("|") characters, that suggest an attachment -#: ../src/client/composer/composer-window.vala:90 -msgid "attach|enclosed|enclosing|cover letter" -msgstr "" +#: ../src/client/composer/composer-widget.vala:157 +msgid "Press Backspace to delete quote" +msgstr "Pritisnite povratno tipko za brisanje izvornega besedila" -#: ../src/client/composer/composer-window.vala:679 -msgid "Do you want to discard the unsaved message?" -msgstr "Želite zavreči neshranjeno sporočilo?" +#: ../src/client/composer/composer-widget.vala:158 +msgid "New Message" +msgstr "Novo sporočilo" + +#. Translators: This is list of keywords, separated by pipe ("|") +#. characters, that suggest an attachment; since this is full-word +#. checking, include all variants of each word. No spaces are +#. allowed. +#: ../src/client/composer/composer-widget.vala:167 +msgid "" +"attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" +"enclosing|encloses|enclosure|enclosures" +msgstr "" +"pripni|pripenjanje|priloži|priloga|priloge|priloženo|pripeto|vključeno|" +"vstavljeno|dodano|priponka|vstavek" -#: ../src/client/composer/composer-window.vala:682 +#: ../src/client/composer/composer-widget.vala:1122 +#: ../src/client/composer/composer-widget.vala:1141 msgid "Do you want to discard this message?" -msgstr "Želite zavreči to sporočilo?" +msgstr "Ali želite zavreči to sporočilo?" -#: ../src/client/composer/composer-window.vala:759 +#: ../src/client/composer/composer-widget.vala:1245 msgid "Send message with an empty subject and body?" -msgstr "Želite poslati sporočilo brez zadeve in vsebine?" +msgstr "Ali želite poslati sporočilo brez zadeve in vsebine?" -#: ../src/client/composer/composer-window.vala:761 +#: ../src/client/composer/composer-widget.vala:1247 msgid "Send message with an empty subject?" -msgstr "Želite poslati sporočilo brez zadeve?" +msgstr "Ali želite poslati sporočilo brez vpisane zadeve?" -#: ../src/client/composer/composer-window.vala:763 +#: ../src/client/composer/composer-widget.vala:1249 msgid "Send message with an empty body?" -msgstr "Želite poslati sporočilo brez vsebine?" +msgstr "Ali želite poslati sporočilo brez vsebine?" -#: ../src/client/composer/composer-window.vala:765 +#: ../src/client/composer/composer-widget.vala:1253 msgid "Send message without an attachment?" -msgstr "Želite poslati sporočilo brez priponke?" +msgstr "Ali želite poslati sporočilo brez priloge?" -#: ../src/client/composer/composer-window.vala:948 -msgid "Cannot add attachment" -msgstr "Priponke ni možno dodati" - -#: ../src/client/composer/composer-window.vala:959 +#: ../src/client/composer/composer-widget.vala:1515 #, c-format -msgid "\"%s\" could not be found." -msgstr "\"%s\" ni bilo mogoče najti." +msgid "“%s” already attached for delivery." +msgstr "Datoteka »%s« je že priložena za pošiljanje." -#: ../src/client/composer/composer-window.vala:966 +#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" +#. Translators: The first argument will be a +#. description of the document type, the second will +#. be a human-friendly size string. For example: +#. Document (100.9MB) +#: ../src/client/composer/composer-widget.vala:1523 +#: ../src/client/conversation-viewer/conversation-email.vala:138 #, c-format -msgid "\"%s\" is a folder." -msgstr "\"%s\" je mapa." +msgid "%s (%s)" +msgstr "%s (%s)" -#: ../src/client/composer/composer-window.vala:973 +#: ../src/client/composer/composer-widget.vala:1560 #, c-format -msgid "\"%s\" is an empty file." -msgstr "\"%s\" je prazna datoteka." +msgid "“%s” could not be found." +msgstr "Predmeta »%s« ni mogoče najti." -#: ../src/client/composer/composer-window.vala:987 +#: ../src/client/composer/composer-widget.vala:1566 #, c-format -msgid "\"%s\" could not be opened for reading." -msgstr "\"%s\" ni bilo mogoče odpreti za branje." +msgid "“%s” is a folder." +msgstr "Predmet »%s« je mapa." -#: ../src/client/composer/composer-window.vala:994 +#: ../src/client/composer/composer-widget.vala:1572 #, c-format -msgid "\"%s\" already attached for delivery." -msgstr "\"%s\" že pripeto za dostavo." +msgid "“%s” is an empty file." +msgstr "Datoteka »%s« je prazna datoteka." -#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-window.vala:1003 +#: ../src/client/composer/composer-widget.vala:1585 #, c-format -msgid "%s (%s)" -msgstr "%s (%s)" +msgid "“%s” could not be opened for reading." +msgstr "Datoteke »%s« ni mogoče odpreti za branje." + +#: ../src/client/composer/composer-widget.vala:1593 +msgid "Cannot add attachment" +msgstr "Priloge ni mogoče dodati" + +#: ../src/client/composer/composer-widget.vala:1645 +msgid "To: " +msgstr "Za: " + +#: ../src/client/composer/composer-widget.vala:1648 +msgid "Cc: " +msgstr "Kp: " + +#: ../src/client/composer/composer-widget.vala:1651 +msgid "Bcc: " +msgstr "Skp: " + +#: ../src/client/composer/composer-widget.vala:1654 +msgid "Reply-To: " +msgstr "Odgovori na:" -#: ../src/client/composer/composer-window.vala:1265 +#: ../src/client/composer/composer-widget.vala:1786 msgid "Select Color" -msgstr "Izberi barvo" +msgstr "Izbor barve" + +#. Displayed in the From dropdown to indicate an "alternate email address" +#. for an account. The first printf argument will be the alternate email +#. address, and the second will be the account's primary email address. +#: ../src/client/composer/composer-widget.vala:1986 +#, c-format +msgid "%1$s via %2$s" +msgstr "%1$s prek %2$s" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-window.vala:1655 -#| msgid "From:" +#: ../src/client/composer/composer-widget.vala:2028 msgid "_From:" msgstr "_Od:" -#. For other types of messages, just show the from account. -#. Composer label (without mnemonic underscore) for the account selector -#. when choosing what address to send a message from. -#. Geary account mail will be sent from -#: ../src/client/composer/composer-window.vala:1671 -#: ../src/client/conversation-viewer/conversation-viewer.vala:628 -#: ../ui/composer.glade.h:41 -msgid "From:" -msgstr "Od:" +#. Translators: This is the name of the file chooser filter +#. when inserting an image in the composer. +#: ../src/client/composer/composer-widget.vala:2252 +msgid "Images" +msgstr "Slike" + +#: ../src/client/composer/spell-check-popover.vala:117 +msgid "Remove this language from the preferred list" +msgstr "Odstrani jezik s seznama prednostnih jezikov" + +#: ../src/client/composer/spell-check-popover.vala:121 +msgid "Add this language to the preferred list" +msgstr "Dodaj jezik na seznam prednostnih jezikov" + +#: ../src/client/composer/spell-check-popover.vala:217 +msgid "Search for more languages" +msgstr "Poišči dodatne jezike" #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Jaz" -#: ../src/client/conversation-viewer/conversation-viewer.vala:255 -msgid "No conversations selected." -msgstr "Ni izbranih pogovorov." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:257 -#, fuzzy, c-format -#| msgid "%u conversations selected." -msgid "%u conversation selected." -msgid_plural "%u conversations selected." -msgstr[0] "Izbrano dostopno" -msgstr[1] "%u pogovorov izbranih." -msgstr[2] "%u pogovorov izbranih." -msgstr[3] "%u pogovorov izbranih." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:286 -msgid "No search results found." -msgstr "Ni najdenih rezultatov iskanja." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:288 -msgid "No conversations in folder." -msgstr "V mapi ni pogovorov." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:527 -msgid "This message contains remote images." -msgstr "To sporočilo vsebuje oddaljene slike." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:527 -msgid "Show Images" -msgstr "Prikaži slike" +#. Translators: This is the file type displayed for +#. attachments with unknown file types. +#: ../src/client/conversation-viewer/conversation-email.vala:124 +msgid "Unknown" +msgstr "Neznano" + +#. Preview headers +#. Translators: This is displayed in place of the from address +#. when the message has no from address. +#: ../src/client/conversation-viewer/conversation-message.vala:331 +msgid "No sender" +msgstr "Ni pošiljatelja" + +#. Translators: This separates multiple 'from' +#. addresses in the header preview for a message. +#: ../src/client/conversation-viewer/conversation-message.vala:586 +msgid ", " +msgstr ", " + +#. Translators: This string is used as the HTML IMG ALT +#. attribute value when displaying an inline image in an email +#. that did not specify a file name. E.g. Image" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1515 -msgid "_Save As..." -msgstr "_Shrani kot..." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1520 -msgid "Save All A_ttachments..." -msgstr "Shrani vse _priponke" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1534 -msgid "_Save Image As..." -msgstr "_Shrani sliko kot..." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1557 -msgid "Save A_ttachment..." -msgid_plural "Save All A_ttachments..." -msgstr[0] "Shrani _priponko" -msgstr[1] "Shrani obe _priponki" -msgstr[2] "Shrani vse _priponke" -msgstr[3] "Shrani vse _priponke" - -#. Reply to all on a message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1572 -msgid "Reply to _All" -msgstr "Odgovori _vsem" - -#. Mark as read/unread. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1589 -msgid "_Mark as Read" -msgstr "_Označi kot prebrano" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1593 -msgid "_Mark as Unread" -msgstr "_Označi kot neprebrano" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1599 -msgid "Mark Unread From _Here" -msgstr "Označi kot neprebrano od _tukaj" - -#. Separator. -#. View original message source. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1614 -msgid "_View Source" -msgstr "_Pokaži izvorno kodo" +#: ../src/client/dialogs/certificate-warning-dialog.vala:52 +msgid "" +"Selecting “Don’t Trust This Server” will cause Geary not to access this " +"server." +msgstr "" +"Z izbiro možnosti »Ne zaupaj strežniku« onemogočite dostop programa do tega " +"računa." -#. Generate the attachment table. -#. / Placeholder filename for attachments with no filename. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1908 -#: ../src/engine/rfc822/rfc822-utils.vala:327 -msgid "none" -msgstr "nobeno" +#: ../src/client/dialogs/certificate-warning-dialog.vala:54 +msgid "Geary will not add or update this email account." +msgstr "Ta poštni račun ne bo dodan in posodabljan." -#: ../src/client/conversation-viewer/conversation-viewer.vala:2038 -msgid "Failed to open default text editor." -msgstr "Odpiranje privzetega urejevalnika besedila ni uspelo." +#: ../src/client/dialogs/certificate-warning-dialog.vala:59 +msgid "" +"Selecting “Don’t Trust This Server” will cause Geary to stop accessing this " +"account." +msgstr "" +"Z izbiro možnosti »Ne zaupaj strežniku« preprečite dostop programa do tega " +"računa." -#: ../src/client/conversation-viewer/conversation-web-view.vala:296 -#, c-format -msgid "%s - Conversation Inspector" -msgstr "%s - Preverjanje pogovorov" +#: ../src/client/dialogs/certificate-warning-dialog.vala:61 +msgid "Geary will exit if you have no other open email accounts." +msgstr "Program bo končan, če ni odprtega nobenega poštnega računa." -#: ../src/client/dialogs/attachment-dialog.vala:18 -msgid "Choose a file" -msgstr "Izberite datoteko" +#: ../src/client/dialogs/certificate-warning-dialog.vala:66 +msgid "" +"Contact your system administrator or email service provider if you have any " +"question about these issues." +msgstr "" +"Stopite v stik s skrbnikom sistema ali pa ponudnikom storitev elektronske " +"pošte, če imate neodgovorjena vprašanja glede teh zapletov." -#: ../src/client/dialogs/attachment-dialog.vala:23 -msgid "_Attach" -msgstr "_Pripni" +#: ../src/client/dialogs/certificate-warning-dialog.vala:73 +msgid "The server’s certificate is not signed by a known authority" +msgstr "Potrdilo strežnika ni podpisano s strani znanega podpisnika potrdil" + +#: ../src/client/dialogs/certificate-warning-dialog.vala:76 +msgid "The server’s identity does not match the identity in the certificate" +msgstr "Potrdilo strežnika ni skladno z istovetnostjo strani" + +#: ../src/client/dialogs/certificate-warning-dialog.vala:79 +msgid "The server’s certificate has expired" +msgstr "Potrdilo strežnika je poteklo" + +#: ../src/client/dialogs/certificate-warning-dialog.vala:82 +msgid "The server’s certificate has not been activated" +msgstr "Potrdilo strežnika ni omogočeno" + +#: ../src/client/dialogs/certificate-warning-dialog.vala:85 +msgid "The server’s certificate has been revoked and is now invalid" +msgstr "Potrdilo strežnika je preklicano in ni več veljavno" + +#: ../src/client/dialogs/certificate-warning-dialog.vala:88 +msgid "The server’s certificate is considered insecure" +msgstr "Potrdilo strežnika je obravnavan kot ne-varen" + +#: ../src/client/dialogs/certificate-warning-dialog.vala:91 +msgid "An error has occurred processing the server’s certificate" +msgstr "Prišlo je do napake med preverjanjem potrdila strežnika" #. We can't keep these in the glade file, because Gnome doesn't want markup in translatable #. strings, and Glade doesn't support the "larger" size attribute. See this bug report for #. details: https://bugzilla.gnome.org/show_bug.cgi?id=679006 #: ../src/client/dialogs/password-dialog.vala:16 -#, fuzzy -#| msgid "Please enter your email password" -msgid "Please enter your password" -msgstr "Vnesite svoje geslo Kerberos:" +msgid "Geary requires your email password to continue" +msgstr "Program zahteva nadaljevanje z geslom računa" #. Label displaying total number of email messages in a folder -#: ../src/client/folder-list/folder-list-folder-entry.vala:30 +#: ../src/client/folder-list/folder-list-folder-entry.vala:32 #, c-format msgid "%d message" msgid_plural "%d messages" -msgstr[0] "%d sporočilo" -msgstr[1] "%d sporočili" -msgstr[2] "%d sporočila" -msgstr[3] "%d sporočil" +msgstr[0] "%d sporočil" +msgstr[1] "%d sporočilo" +msgstr[2] "%d sporočili" +msgstr[3] "%d sporočila" #. / Label displaying number of unread email messages in a folder -#: ../src/client/folder-list/folder-list-folder-entry.vala:37 +#: ../src/client/folder-list/folder-list-folder-entry.vala:39 #, c-format msgid "%d unread" msgid_plural "%d unread" -msgstr[0] "%d neprebrano" -msgstr[1] "%d neprebrani" -msgstr[2] "%d neprebrana" -msgstr[3] "%d neprebranih" +msgstr[0] "%d neprebranih" +msgstr[1] "%d neprebrano" +msgstr[2] "%d neprebrani" +msgstr[3] "%d neprebrana" #. / This string represents the divider between two messages: "n messages" and "n unread", #. / shown in the folder list as a tooltip. Please use your languages conventions for #. / combining the two, i.e. a comma (",") for English; "6 messages, 3 unread" -#: ../src/client/folder-list/folder-list-folder-entry.vala:43 +#: ../src/client/folder-list/folder-list-folder-entry.vala:45 #, c-format msgid "%s, %s" msgstr "%s, %s" @@ -1030,52 +1226,52 @@ msgstr "Prejeto" #: ../src/client/folder-list/folder-list-search-branch.vala:44 -#, fuzzy, c-format -#| msgid "%d results" +#, c-format msgid "%d result" msgid_plural "%d results" -msgstr[0] "Seznam rezultatov" -msgstr[1] "%d rezultatov" -msgstr[2] "%d rezultatov" -msgstr[3] "%d rezultatov" +msgstr[0] "%d zadetkov" +msgstr[1] "%d zadetek" +msgstr[2] "%d zadetka" +msgstr[3] "%d zadetki" #: ../src/client/notification/libmessagingmenu.vala:75 #, c-format -msgid "%s - New Messages" -msgstr "%s - Nova sporočila" +#| msgid "%s - New Messages" +msgid "%s — New Messages" +msgstr "%s – nova sporočila" -#: ../src/client/notification/libnotify.vala:72 +#: ../src/client/notification/libnotify.vala:74 #, c-format msgid "%d new message" msgid_plural "%d new messages" -msgstr[0] "%d novo sporočilo" -msgstr[1] "%d nova sporočila" -msgstr[2] "%d nova sporočila" -msgstr[3] "%d novih sporočil" +msgstr[0] "%d novih sporočil" +msgstr[1] "%d novo sporočilo" +msgstr[2] "%d novi sporočili" +msgstr[3] "%d nova sporočila" -#: ../src/client/notification/libnotify.vala:75 -#, fuzzy, c-format +#: ../src/client/notification/libnotify.vala:77 +#, c-format msgid "%s, %d new message total" msgid_plural "%s, %d new messages total" -msgstr[0] "Okno novega sporočila" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "%s, %d novih sporočil" +msgstr[1] "%s, %d novo sporočilo" +msgstr[2] "%s, %d novi sporočili" +msgstr[3] "%s, %d nova sporočila" -#: ../src/client/notification/libnotify.vala:107 -#, fuzzy, c-format +#: ../src/client/notification/libnotify.vala:109 +#, c-format msgid "" "%s\n" "(%d other new message for %s)" msgid_plural "" "%s\n" "(%d other new messages for %s)" -msgstr[0] "Vprašaj za vsako sporočilo" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "%s (%d drugih novih sporočil za %s)" +msgstr[1] "%s (%d drugo novo sporočilo za %s)" +msgstr[2] "%s (%d drugi novi sporočili za %s)" +msgstr[3] "%s (%d druga nova sporočila za %s)" -#: ../src/client/notification/libnotify.vala:160 +#: ../src/client/notification/libnotify.vala:165 msgid "Open" msgstr "Odpri" @@ -1135,22 +1331,22 @@ msgstr "Zdaj" #: ../src/client/util/util-date.vala:167 -#, fuzzy, c-format +#, c-format msgid "%dm ago" msgid_plural "%dm ago" -msgstr[0] "pred {0} dnevi, {1}" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "%d min nazaj" +msgstr[1] "%d min nazaj" +msgstr[2] "%d min nazaj" +msgstr[3] "%d min nazaj" #: ../src/client/util/util-date.vala:171 -#, fuzzy, c-format +#, c-format msgid "%dh ago" msgid_plural "%dh ago" -msgstr[0] "pred {0} dnevi, {1}" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "%dh nazaj" +msgstr[1] "%dh nazaj" +msgstr[2] "%dh nazaj" +msgstr[3] "%dh nazaj" #: ../src/client/util/util-date.vala:178 msgid "Yesterday" @@ -1164,13 +1360,13 @@ msgstr "%A" #: ../src/client/util/util-email.vala:30 -#: ../src/engine/rfc822/rfc822-message.vala:742 +#: ../src/engine/rfc822/rfc822-message.vala:908 msgid "(no subject)" msgstr "(brez zadeve)" #: ../src/client/util/util-files.vala:16 msgid "bytes" -msgstr "bytov" +msgstr "bajti" #: ../src/client/util/util-files.vala:19 msgctxt "Abbreviation for terabyte" @@ -1208,6 +1404,14 @@ msgid "Other" msgstr "Ostalo" +#: ../src/engine/api/geary-service.vala:20 +msgid "IMAP" +msgstr "IMAP" + +#: ../src/engine/api/geary-service.vala:23 +msgid "SMTP" +msgstr "SMTP" + #: ../src/engine/api/geary-special-folder-type.vala:24 msgid "Inbox" msgstr "Prejeto" @@ -1230,7 +1434,7 @@ #: ../src/engine/api/geary-special-folder-type.vala:39 msgid "All Mail" -msgstr "Vsa pošta" +msgstr "Vsa sporočila" #: ../src/engine/api/geary-special-folder-type.vala:42 msgid "Spam" @@ -1242,169 +1446,295 @@ #: ../src/engine/api/geary-special-folder-type.vala:48 msgid "Outbox" -msgstr "Odhodno" +msgstr "Odhodna pošta" #: ../src/engine/api/geary-special-folder-type.vala:54 msgid "Archive" msgstr "Arhiv" -#: ../src/engine/api/geary-special-folder-type.vala:58 ../ui/login.glade.h:25 +#: ../src/engine/api/geary-special-folder-type.vala:58 ../ui/login.glade.h:29 msgid "None" -msgstr "Nobena" +msgstr "Brez" -#. Map of user-supplied search field names to column names. -#. / Can be typed in the search box like attachment:file.txt to find -#. / messages with attachments with a particular name. -#: ../src/engine/imap-db/imap-db-account.vala:662 -#, fuzzy -#| msgid "Save A_ttachment..." -#| msgid_plural "Save All A_ttachments..." +#. Map of possibly translated search operator names and values +#. to English/internal names and values. We include the +#. English version anyway so that when translations provide a +#. localised version of the operator names but have not also +#. translated the user manual, the English version in the +#. manual still works. +#. Can be typed in the search box like "attachment:file.txt" +#. to find messages with attachments with a particular name. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:99 +msgctxt "Search operator" msgid "attachment" msgstr "priloga" -#. / Can be typed in the search box like bcc:johndoe@example.com to find -#. / messages bcc'd to a particular person. -#. Fields we allow the token to be "me" as in from:me. -#: ../src/engine/imap-db/imap-db-account.vala:665 -#: ../src/engine/imap-db/imap-db-account.vala:684 -#, fuzzy +#. Can be typed in the search box like +#. "bcc:johndoe@example.com" to find messages bcc'd to a +#. particular person. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:108 +msgctxt "Search operator" msgid "bcc" -msgstr "Skp:" +msgstr "skp" -#. / Can be typed in the search box like body:word to find the word only -#. / if it occurs in the body of a message. -#: ../src/engine/imap-db/imap-db-account.vala:668 -#, fuzzy +#. Can be typed in the search box like "body:word" to find +#. "word" only if it occurs in the body of a message. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:116 +msgctxt "Search operator" msgid "body" -msgstr "Telo" +msgstr "vsebina" -#. / Can be typed in the search box like cc:johndoe@example.com to find -#. / messages cc'd to a particular person. -#: ../src/engine/imap-db/imap-db-account.vala:671 -#: ../src/engine/imap-db/imap-db-account.vala:684 -#, fuzzy -#| msgid "Bcc:" +#. Can be typed in the search box like +#. "cc:johndoe@example.com" to find messages cc'd to a +#. particular person. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:125 +msgctxt "Search operator" msgid "cc" -msgstr "Kp:" +msgstr "kp" -#. / Can be typed in the search box like from:johndoe@example.com to -#. / find messages from a particular sender. -#: ../src/engine/imap-db/imap-db-account.vala:674 -#: ../src/engine/imap-db/imap-db-account.vala:684 -#, fuzzy +#. Can be typed in the search box like +#. "from:johndoe@example.com" to find messages from a +#. particular sender. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:134 +msgctxt "Search operator" msgid "from" -msgstr "izvajalec" +msgstr "pošiljatelj" -#. / Can be typed in the search box like subject:word to find the word -#. / only if it occurs in the subject of a message. -#: ../src/engine/imap-db/imap-db-account.vala:677 -#, fuzzy -#| msgid "Subject:" +#. Can be typed in the search box like "is:unread" to find +#. messages that are read, unread, or starred. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:142 +msgctxt "Search operator" +msgid "is" +msgstr "je" + +#. Can be typed in the search box like "subject:word" to find +#. "word" only if it occurs in the subject of a message. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary +#. User Guide. +#: ../src/engine/imap-db/imap-db-account.vala:150 +msgctxt "Search operator" msgid "subject" -msgstr "Zadeva" +msgstr "zadeva" -#. / Can be typed in the search box like to:johndoe@example.com to find -#. / messages received by a particular person. -#: ../src/engine/imap-db/imap-db-account.vala:680 -#: ../src/engine/imap-db/imap-db-account.vala:684 -#, fuzzy +#. Can be typed in the search box like +#. "to:johndoe@example.com" to find messages received by a +#. particular person. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:159 +msgctxt "Search operator" msgid "to" -msgstr "do" +msgstr "za" -#. "me" can be typed like from:me or cc:me, etc. as a shorthand -#. to find mail to or from yourself in search. -#: ../src/engine/imap-db/imap-db-account.vala:699 -#, fuzzy +#. Can be typed in the search box after "to:", "cc:" and +#. "bcc:" e.g.: "to:me". Matches conversations that are +#. addressed to the user. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:180 +msgctxt "Search operator value - mail addressed to the user" msgid "me" -msgstr "moj" +msgstr "mene" -#. List of folder names to match for Drafts, separated by |. Please add localized common -#. names for the Drafts folder, leaving in the English names as well. The first in the list -#. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:439 -#, fuzzy -#| msgid "Drafts" +#. Can be typed in the search box after "from:" i.e.: +#. "from:me". Matches conversations were sent by the user. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:192 +msgctxt "Search operator value - mail sent by the user" +msgid "me" +msgstr "mene" + +#. Can be typed in the search box after "is:" i.e.: +#. "is:read". Matches conversations that are flagged as read. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:204 +msgctxt "'is:' search operator value" +msgid "read" +msgstr "prebrano" + +#. Can be typed in the search box after "is:" i.e.: +#. "is:starred". Matches conversations that are flagged as +#. starred. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:215 +msgctxt "'is:' search operator value" +msgid "starred" +msgstr "zvezdica" + +#. Can be typed in the search box after "is:" i.e.: +#. "is:unread". Matches conversations that are flagged unread. +#. +#. The translated string must be a single word (use '-', '_' +#. or similar to combine words into one), should be short, and +#. also match the translation in "search.page" of the Geary User +#. Guide. +#: ../src/engine/imap-db/imap-db-account.vala:225 +msgctxt "'is:' search operator value" +msgid "unread" +msgstr "neprebrano" + +#. List of general possible folder names to match for the +#. Draft mailbox. Separate names using a vertical bar and +#. put the most common localized name to the front for the +#. default. English names do not need to be included. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:626 msgid "Drafts | Draft" -msgstr "Shrani osnutek" +msgstr "Osnutki | Osnutek" -#. List of folder names to match for Sent Mail, separated by |. Please add localized common -#. names for the Sent Mail folder, leaving in the English names as well. The first in the list -#. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:444 -#, fuzzy +#. List of general possible folder names to match for the +#. Sent mailbox. Separate names using a vertical bar and +#. put the most common localized name to the front for the +#. default. English names do not need to be included. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:635 msgid "Sent | Sent Mail | Sent Email | Sent E-Mail" -msgstr "Ni mogoče izvršiti %s: pošta ni poslana." +msgstr "Poslano | Poslana sporočila | Poslana pošta" -#. List of folder names to match for Spam, separated by |. Please add localized common -#. names for the Spam folder, leaving in the English names as well. The first in the list -#. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:449 +#. The localised name(s) of the Sent folder name as used +#. by MS Outlook/Exchange. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:640 +msgctxt "Outlook localised name" +msgid "Sent Items" +msgstr "Poslani predmeti" + +#. List of general possible folder names to match for the +#. Spam mailbox. Separate names using a vertical bar and +#. put the most common localized name to the front for the +#. default. English names do not need to be included. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:650 msgid "" "Junk | Spam | Junk Mail | Junk Email | Junk E-Mail | Bulk Mail | Bulk Email " "| Bulk E-Mail" msgstr "" +"Junk | Spam | Neželena pošta | Neodobrena pošta | Lažna pošta | Paketna " +"pošta | Vsiljena pošta" -#. List of folder names to match for Trash, separated by |. Please add localized common -#. names for the Trash folder, leaving in the English names as well. The first in the list -#. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:454 -#, fuzzy +#. List of general possible folder names to match for the +#. Trash mailbox. Separate names using a vertical bar and +#. put the most common localized name to the front for the +#. default. English names do not need to be included. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:660 msgid "Trash | Rubbish | Rubbish Bin" -msgstr "Pokaži &dvojiško" +msgstr "Smeti | Smetnjak" + +#. The localised name(s) of the Trash folder name as used +#. by MS Outlook/Exchange. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:665 +msgctxt "Outlook localised name" +msgid "Deleted Items" +msgstr "Izbrisani predmeti" + +#. List of general possible folder names to match for the +#. Archive mailbox. Separate names using a vertical bar +#. and put the most common localized name to the front for +#. the default. English names do not need to be included. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:675 +msgid "Archive | Archives" +msgstr "Arhiv | Arhivi" #. / Format for the datetime that a message being replied to was received #. / See http://developer.gnome.org/glib/2.32/glib-GDateTime.html#g-date-time-format -#: ../src/engine/rfc822/rfc822-utils.vala:165 +#: ../src/engine/rfc822/rfc822-utils.vala:236 msgid "%a, %b %-e, %Y at %-l:%M %p" msgstr "%a, %-e. %b, %Y ob %-l:%M %p" #. / The quoted header for a message being replied to. #. / %1$s will be substituted for the date, and %2$s will be substituted for #. / the original sender. -#: ../src/engine/rfc822/rfc822-utils.vala:171 +#: ../src/engine/rfc822/rfc822-utils.vala:242 #, c-format msgid "On %1$s, %2$s wrote:" -msgstr "%1$s, je %2$s napisal:" +msgstr "%1$s %2$s:" #. / The quoted header for a message being replied to (in case the date is not known). #. / %s will be replaced by the original sender. -#: ../src/engine/rfc822/rfc822-utils.vala:178 +#: ../src/engine/rfc822/rfc822-utils.vala:249 #, c-format msgid "%s wrote:" -msgstr "%s je napisal:" +msgstr "%s sporoča:" #. / The quoted header for a message being replied to (in case the sender is not known). #. / %s will be replaced by the original date -#: ../src/engine/rfc822/rfc822-utils.vala:184 +#: ../src/engine/rfc822/rfc822-utils.vala:255 #, c-format msgid "On %s:" msgstr "Na %s:" -#: ../src/engine/rfc822/rfc822-utils.vala:211 +#: ../src/engine/rfc822/rfc822-utils.vala:278 msgid "---------- Forwarded message ----------" msgstr "---------- Posredovano sporočilo ----------" -#: ../src/engine/rfc822/rfc822-utils.vala:215 +#: ../src/engine/rfc822/rfc822-utils.vala:282 #, c-format msgid "From: %s\n" msgstr "Od: %s\n" -#: ../src/engine/rfc822/rfc822-utils.vala:216 +#: ../src/engine/rfc822/rfc822-utils.vala:283 #, c-format msgid "Subject: %s\n" msgstr "Zadeva: %s\n" -#: ../src/engine/rfc822/rfc822-utils.vala:217 +#: ../src/engine/rfc822/rfc822-utils.vala:284 #, c-format msgid "Date: %s\n" msgstr "Datum: %s\n" -#: ../src/engine/rfc822/rfc822-utils.vala:220 +#: ../src/engine/rfc822/rfc822-utils.vala:287 #, c-format msgid "To: %s\n" msgstr "Za: %s\n" -#: ../src/engine/rfc822/rfc822-utils.vala:223 +#: ../src/engine/rfc822/rfc822-utils.vala:290 #, c-format msgid "Cc: %s\n" msgstr "Kp: %s\n" @@ -1419,8 +1749,8 @@ "A composer window associated with this account is currently open. Send or " "discard the message and try again." msgstr "" -"Ta račun ima trenutno odprto okno za sestavljanje sporoči. Pošljite ali " -"zavržite sporočilo in poskusite ponovno." +"Ta račun je trenutno odprto okno za sestavljalnika sporoči. Pošljite ali " +"zavrzite sporočilo in poskusite znova." #: ../ui/account_list.glade.h:1 msgid "Add account" @@ -1438,181 +1768,434 @@ msgid "Please wait while Geary validates your account." msgstr "Prosimo počakajte, da Geary potrdi vaš račun." -#: ../ui/composer.glade.h:1 +#: ../ui/certificate_warning_dialog.glade.h:1 +msgid "Untrusted Connection" +msgstr "Ne-varna povezava" + +#: ../ui/certificate_warning_dialog.glade.h:2 +msgid "_Always Trust This Server" +msgstr "_Vedno zaupaj strežniku" + +#: ../ui/certificate_warning_dialog.glade.h:3 +msgid "_Trust This Server" +msgstr "_Zaupaj strežniku" + +#: ../ui/certificate_warning_dialog.glade.h:4 +msgid "_Don’t Trust This Server" +msgstr "_Ne zaupaj strežniku" + +#: ../ui/composer-headerbar.ui.h:1 +msgid "Detach (Ctrl+D)" +msgstr "Odpni (CTRL+D)" + +#: ../ui/composer-headerbar.ui.h:2 +msgid "Attach File (Ctrl+T)" +msgstr "Priloži datoteko (CTRL+T)" + +#: ../ui/composer-headerbar.ui.h:3 +msgid "Include Original Attachments" +msgstr "Vključi izvorne priloge" + +#: ../ui/composer-headerbar.ui.h:4 +#| msgid "Bold (Ctrl+B)" +msgid "Send (Ctrl+Enter)" +msgstr "Pošlji (CTRL+Enter)" + +#: ../ui/composer-headerbar.ui.h:5 +msgid "_Send" +msgstr "_Pošlji" + +#: ../ui/composer-headerbar.ui.h:6 +msgid "Discard and Close" +msgstr "Zavrzi in zapri" + +#: ../ui/composer-headerbar.ui.h:7 +msgid "Save and Close" +msgstr "Shrani in zapri" + +#. Note that this button and the Update button will never be shown at the same time to the user. +#: ../ui/composer-link-popover.ui.h:2 +msgid "Insert the new link with this URL" +msgstr "Ustavi novo povezavo s tem naslovom URL" + +#: ../ui/composer-link-popover.ui.h:3 +msgid "Link URL" +msgstr "Naslov URL povezave" + +#. Note that this button and the Insert button will never be shown at the same time to the user. +#: ../ui/composer-link-popover.ui.h:5 +msgid "Update this link’s URL" +msgstr "Posodobi naslov URL povezave" + +#: ../ui/composer-link-popover.ui.h:6 +msgid "Delete this link" +msgstr "Izbriši povezavo" + +#: ../ui/composer-link-popover.ui.h:7 +msgid "Open this link" +msgstr "Odpri povezavo" + +#: ../ui/composer-menus.ui.h:1 +msgid "S_ans Serif" +msgstr "S_ans Serif" + +#: ../ui/composer-menus.ui.h:2 +msgid "S_erif" +msgstr "S_erif" + +#: ../ui/composer-menus.ui.h:3 +msgid "_Fixed Width" +msgstr "_Nespremenljiva širina" + +#: ../ui/composer-menus.ui.h:4 +msgid "_Small" +msgstr "_Majhna" + +#: ../ui/composer-menus.ui.h:5 +msgid "_Medium" +msgstr "_Srednja" + +#: ../ui/composer-menus.ui.h:6 +msgid "Lar_ge" +msgstr "_Velika" + +#: ../ui/composer-menus.ui.h:7 +msgid "C_olor" +msgstr "_Barva" + +#: ../ui/composer-menus.ui.h:8 +msgid "_Rich Text" +msgstr "_Oblikovano besedilo" + +#: ../ui/composer-menus.ui.h:9 +msgid "Show Extended Fields" +msgstr "Pokaži razširjena polja" + +#: ../ui/composer-menus.ui.h:10 msgid "_Undo" msgstr "_Razveljavi" -#: ../ui/composer.glade.h:2 +#: ../ui/composer-menus.ui.h:11 msgid "_Redo" msgstr "_Ponovi" -#: ../ui/composer.glade.h:3 +#: ../ui/composer-menus.ui.h:12 msgid "Cu_t" msgstr "_Izreži" -#: ../ui/composer.glade.h:5 +#: ../ui/composer-menus.ui.h:13 ../ui/conversation-message-menus.ui.h:7 +msgid "_Copy" +msgstr "_Kopiraj" + +#: ../ui/composer-menus.ui.h:14 msgid "_Paste" msgstr "_Prilepi" -#: ../ui/composer.glade.h:6 -msgid "_Left" -msgstr "_Levo" - -#: ../ui/composer.glade.h:7 -msgid "_Right" -msgstr "_Desno" - -#: ../ui/composer.glade.h:8 -msgid "_Center" -msgstr "_Sredinsko" - -#: ../ui/composer.glade.h:9 -msgid "_Justify" -msgstr "_Obojestransko" - -#: ../ui/composer.glade.h:10 -msgid "Link (Ctrl+L)" -msgstr "Povezava (Ctrl+L)" +#: ../ui/composer-menus.ui.h:15 +msgctxt "Clipboard paste with rich text" +msgid "Paste _With Formatting" +msgstr "Prilepi z _oblikovanjem" -#: ../ui/composer.glade.h:11 -msgid "C_olor" -msgstr "_Barva" +#: ../ui/composer-menus.ui.h:16 +msgid "Select _All" +msgstr "Izberi _vse" -#: ../ui/composer.glade.h:12 -msgid "More options" -msgstr "Več možnosti" +#: ../ui/composer-menus.ui.h:17 ../ui/conversation-message-menus.ui.h:9 +msgid "_Inspect…" +msgstr "_Preveri ..." -#: ../ui/composer.glade.h:13 -msgid "Quote text (Ctrl+])" -msgstr "Dodaj narekovaje (Ctrl+])" +#. Address(es) e-mail is to be sent to +#: ../ui/composer-widget.ui.h:2 +msgid "_To" +msgstr "_Za" + +#: ../ui/composer-widget.ui.h:3 +msgid "_Cc" +msgstr "_Kp" + +#: ../ui/composer-widget.ui.h:4 +msgid "_Subject" +msgstr "Z_adeva" + +#: ../ui/composer-widget.ui.h:5 +msgid "_Bcc" +msgstr "_Skp" + +#: ../ui/composer-widget.ui.h:6 +msgid "_Reply-To" +msgstr "_Odgovori na:" -#: ../ui/composer.glade.h:14 -msgid "Unquote text (Ctrl+[)" -msgstr "Odstrani narekovaje (Ctrl+[)" +#. Geary account mail will be sent from +#: ../ui/composer-widget.ui.h:8 +msgid "From" +msgstr "Od" -#: ../ui/composer.glade.h:15 -msgid "Remove formatting (Ctrl+Space)" -msgstr "Odstrani oblikovanje (Ctrl+Presledek)" +#: ../ui/composer-widget.ui.h:9 +msgid "Drop files here" +msgstr "Povlecite datoteke sem" -#: ../ui/composer.glade.h:16 -#, fuzzy -#| msgid "Paste _With Formatting" -msgctxt "Clipboard paste with rich text" -msgid "Paste _With Formatting" -msgstr "Moderni slog s finančnim oblikovanjem" +#: ../ui/composer-widget.ui.h:10 +msgid "To add them as attachments" +msgstr "Da jih dodate kot priponke." -#: ../ui/composer.glade.h:18 +#: ../ui/composer-widget.ui.h:11 +msgid "Undo last edit (Ctrl+Z)" +msgstr "Razveljavi zadnjo spremembo [CTRL+Z]" + +#: ../ui/composer-widget.ui.h:12 +msgid "Redo last edit (Ctrl+Shift+Z)" +msgstr "Ponovno uveljavi zadnje urejanje (CTRL+SHIFT+Z)" + +#: ../ui/composer-widget.ui.h:13 msgid "Bold (Ctrl+B)" -msgstr "Krepko (Ctrl+B)" +msgstr "Krepko (CTRL+B)" -#: ../ui/composer.glade.h:19 +#: ../ui/composer-widget.ui.h:14 msgid "Italic (Ctrl+I)" -msgstr "Ležeče (Ctrl+I)" +msgstr "Ležeče (CTRL+I)" -#: ../ui/composer.glade.h:20 +#: ../ui/composer-widget.ui.h:15 msgid "Underline (Ctrl+U)" -msgstr "Podčrtano (Ctrl+U)" +msgstr "Podčrtano (CTRL+U)" -#: ../ui/composer.glade.h:21 +#: ../ui/composer-widget.ui.h:16 msgid "Strikethrough (Ctrl+K)" -msgstr "Prečrtano (Ctrl+K)" +msgstr "Prečrtano (CTRL+K)" -#: ../ui/composer.glade.h:22 -msgid "_Rich Text" -msgstr "_Oblikovano besedilo" +#: ../ui/composer-widget.ui.h:17 +msgid "Quote text (Ctrl+])" +msgstr "Dodaj narekovaje (CTRL+])" -#: ../ui/composer.glade.h:23 -msgid "Lar_ge" -msgstr "_Velika" +#: ../ui/composer-widget.ui.h:18 +msgid "Unquote text (Ctrl+[)" +msgstr "Odstrani izvorno besedilo" + +#: ../ui/composer-widget.ui.h:19 +msgid "Insert or update selection link (Ctrl+L)" +msgstr "Vstavi ali posodobi povezavo izbire (CTRL+L)" + +#: ../ui/composer-widget.ui.h:20 +msgid "Insert an image (Ctrl+G)" +msgstr "Vstavi sliko (CTRL+G)" + +#: ../ui/composer-widget.ui.h:21 +msgid "Remove selection formatting (Ctrl+Space)" +msgstr "Odstrani oblikovanje izbranega besedila (CTRL+Presledek)" + +#: ../ui/composer-widget.ui.h:22 +msgid "Select spell checking languages" +msgstr "Izbor jezikov za preverjanje črkovanja" + +#: ../ui/conversation-email.ui.h:1 +msgid "Save all attachments" +msgstr "Shrani vse priloge" + +#. Note: The application will never show this button at the same time as unstar_button, one will always be hidden. +#: ../ui/conversation-email.ui.h:3 +msgid "Mark this message as starred" +msgstr "Označi sporočilo z zvezdico" + +#. Note: The application will never show this button at the same time as star_button, one will always be hidden. +#: ../ui/conversation-email.ui.h:5 +msgid "Mark this message as not starred" +msgstr "Odstrani oznako z zvezdico s sporočila" + +#: ../ui/conversation-email.ui.h:6 +msgid "Display the message menu" +msgstr "Prikaži meni sporočila" + +#: ../ui/conversation-email.ui.h:7 +msgid "Open selected attachments" +msgstr "Odpri izbrane priloge" + +#: ../ui/conversation-email.ui.h:8 +msgid "Save selected attachments" +msgstr "Shrani izbrane priloge" + +#: ../ui/conversation-email.ui.h:9 +msgid "Select all attachments" +msgstr "Izberi vse priloge" -#: ../ui/composer.glade.h:24 -msgid "Large" -msgstr "Velika" +#: ../ui/conversation-email.ui.h:10 +msgid "Edit Draft" +msgstr "Uredi osnutek" -#: ../ui/composer.glade.h:25 -msgid "_Medium" -msgstr "_Srednja" +#: ../ui/conversation-email.ui.h:11 +msgid "Draft message" +msgstr "Osnutek" + +#: ../ui/conversation-email.ui.h:12 +msgid "This message has not yet been sent." +msgstr "Sporočilo še ni bilo poslano." + +#: ../ui/conversation-email.ui.h:13 +msgid "Try Again" +msgstr "Poskusite ponovno" + +#: ../ui/conversation-email.ui.h:14 +msgid "Message not saved" +msgstr "Sporočilo ni shranjeno." -#: ../ui/composer.glade.h:26 -msgid "Medium" -msgstr "Srednja" +#: ../ui/conversation-email.ui.h:15 +msgid "This message was sent, but has not been saved to your account." +msgstr "" +"Sporočilo je poslano, vendar pa kopija ni shranjena v mapo poslanih sporočil." -#: ../ui/composer.glade.h:27 -msgid "_Small" -msgstr "_Majhna" +#: ../ui/conversation-email-menus.ui.h:2 +msgid "Reply to _All" +msgstr "Odgovori _vsem" -#: ../ui/composer.glade.h:28 -msgid "Small" -msgstr "Majhna" +#: ../ui/conversation-email-menus.ui.h:4 +msgid "_Mark Read" +msgstr "Označi kot _prebrano" -#: ../ui/composer.glade.h:29 -#, fuzzy -msgid "S_ans Serif" -msgstr "Pisava Serif:" +#: ../ui/conversation-email-menus.ui.h:5 +msgid "_Mark Unread" +msgstr "Označi kot _neprebrano" -#: ../ui/composer.glade.h:30 -msgid "Sans Serif" -msgstr "Brez-serifna" +#: ../ui/conversation-email-menus.ui.h:6 +msgid "Mark Unread From _Here" +msgstr "Označi kot neprebrano od _tukaj" -#: ../ui/composer.glade.h:31 -msgid "S_erif" -msgstr "" +#: ../ui/conversation-email-menus.ui.h:8 +msgid "_View Source" +msgstr "_Pokaži izvorno kodo" -#: ../ui/composer.glade.h:32 -msgid "Serif" -msgstr "Serifna" +#: ../ui/conversation-email-menus.ui.h:11 +msgid "_Save All" +msgstr "Shrani _vse" + +#: ../ui/conversation-message-menus.ui.h:1 +msgid "_Open Link" +msgstr "_Odpri povezavo" + +#: ../ui/conversation-message-menus.ui.h:2 +msgid "Copy Link _Address" +msgstr "Kopiraj _naslov povezave" + +#: ../ui/conversation-message-menus.ui.h:3 +msgid "Send New _Message…" +msgstr "Pošlji novo _sporočilo ..." + +#: ../ui/conversation-message-menus.ui.h:4 +msgid "Copy Email _Address" +msgstr "Kopiraj _elektronski naslov" + +#: ../ui/conversation-message-menus.ui.h:5 +msgid "Save _Image As…" +msgstr "Shrani sliko _kot ..." + +#: ../ui/conversation-message-menus.ui.h:6 +msgid "_Select All" +msgstr "_Izberi vse" + +#: ../ui/conversation-message-menus.ui.h:8 +msgid "Search for messages from" +msgstr "Išči sporočila iz" + +#: ../ui/conversation-message.ui.h:1 +msgid "From " +msgstr "Od " + +#: ../ui/conversation-message.ui.h:2 +msgid "1/1/1970\t" +msgstr "1/1/1970\t" + +#: ../ui/conversation-message.ui.h:3 +msgid "Preview body text." +msgstr "Predogled besedila vsebine." + +#: ../ui/conversation-message.ui.h:4 +msgid "Sent by:" +msgstr "Pošiljatelj:" + +#: ../ui/conversation-message.ui.h:5 +msgid "Reply to:" +msgstr "Odgovori na:" -#: ../ui/composer.glade.h:33 -msgid "_Fixed Width" -msgstr "_Nespremenljiva širina" +#: ../ui/conversation-message.ui.h:6 +msgid "Subject" +msgstr "Zadeva" -#: ../ui/composer.glade.h:34 -msgid "Fixed Width" -msgstr "Nespremenljiva širina" +#: ../ui/conversation-message.ui.h:7 +msgid "To:" +msgstr "Za:" -#. Address(es) e-mail is to be sent to -#: ../ui/composer.glade.h:36 -msgid "_To:" -msgstr "_Za:" - -#: ../ui/composer.glade.h:37 -msgid "_Cc:" -msgstr "_Kp:" - -#: ../ui/composer.glade.h:38 -#| msgid "Subject:" -msgid "_Subject:" -msgstr "_Zadeva:" - -#: ../ui/composer.glade.h:39 -#| msgid "Bcc:" -msgid "_Bcc:" -msgstr "_Skp:" +#: ../ui/conversation-message.ui.h:8 +msgid "Cc:" +msgstr "Kp:" -#: ../ui/composer.glade.h:42 -msgid "Drop files here" -msgstr "Povlecite datoteke sem" +#: ../ui/conversation-message.ui.h:9 +msgid "Bcc:" +msgstr "Skp:" -#: ../ui/composer.glade.h:43 -msgid "To add them as attachments" -msgstr "Da jih dodate kot priponke." +#: ../ui/conversation-message.ui.h:10 +msgid "Show Images" +msgstr "Prikaži slike" -#: ../ui/composer.glade.h:44 -msgid "_Attach File" -msgstr "_Pripni datoteko" - -#: ../ui/composer.glade.h:45 -msgid "_Include Original Attachments" -msgstr "_Vključi originalne priponke" - -#: ../ui/composer.glade.h:46 -#| msgid "_Close" -msgid "C_lose" -msgstr "_Zapri" +#: ../ui/conversation-message.ui.h:11 +msgid "Always Show From Sender" +msgstr "Vedno pokaži naslov pošiljatelja" -#: ../ui/composer.glade.h:47 -msgid "_Send" -msgstr "_Pošlji" +#: ../ui/conversation-message.ui.h:12 +msgid "Remote images not shown" +msgstr "Slike na oddaljenih strežnikih niso prikazane" + +#: ../ui/conversation-message.ui.h:13 +msgid "Only show remote images from senders you trust." +msgstr "" +"Slike z oddaljenih mest pokaži le, če je pošiljatelj na seznamu zaupljivih " +"oseb." + +#: ../ui/conversation-message.ui.h:14 +msgid "But actually goes to:" +msgstr "Vendar bo narejena preusmeritev na:" + +#: ../ui/conversation-message.ui.h:15 +msgid "The link appears to go to:" +msgstr "Videti je, da kaže povezava na:" + +#: ../ui/conversation-message.ui.h:16 +msgid "Deceptive link found" +msgstr "Zaznan je zavajajoča povezava" + +#: ../ui/conversation-message.ui.h:17 +msgid "The email sender may be leading you to the wrong web site." +msgstr "Pošiljatelj sporočila vas morda pošilja na napačno spletno mesto." + +#: ../ui/conversation-message.ui.h:18 +msgid "If unsure, contact the sender and ask before continuing." +msgstr "" +"V kolikor niste prepričani, stopite v stik s pošiljateljem in vprašajte pred " +"nadaljevanjem." + +#: ../ui/conversation-viewer.ui.h:1 +msgid "Find in conversation" +msgstr "Najdi v pogovoru" + +#: ../ui/conversation-viewer.ui.h:2 +msgid "Find the previous occurrence of the search string." +msgstr "Najde predhodno pojavitev iskanega niza." + +#: ../ui/conversation-viewer.ui.h:3 +msgid "Find the next occurrence of the search string." +msgstr "Najde naslednjo pojavitev iskanega niza." + +#: ../ui/edit_alternate_emails.glade.h:1 +msgid "Remove email address" +msgstr "Odstrani elektronski naslov" + +#: ../ui/edit_alternate_emails.glade.h:2 +msgid "" +"Some email services require additional addresses be configured on the " +"server. Contact your email provider for more information." +msgstr "" +"Nekateri strežniki poštnih storitev zahtevajo dodatne nastavitve naslovov. " +"Za več podrobnosti stopite v stik s ponudnikom poštnih storitev." + +#: ../ui/edit_alternate_emails.glade.h:4 +msgid "_Update" +msgstr "_Posodobi" #: ../ui/find_bar.glade.h:1 msgid "Find:" @@ -1631,193 +2214,469 @@ msgstr "_Razlikuj velikosti črk" #: ../ui/find_bar.glade.h:5 -#| msgid "Labels" msgid "label" msgstr "oznaka" +#: ../ui/gtk/help-overlay.ui.h:1 +msgid "Conversation Shortcuts" +msgstr "Tipkovna bližnjica pogovora" + +#: ../ui/gtk/help-overlay.ui.h:2 +msgctxt "shortcut window" +msgid "General" +msgstr "Splošno" + +#: ../ui/gtk/help-overlay.ui.h:3 +msgctxt "shortcut window" +msgid "Move focus to the next/previous pane" +msgstr "Premakni žarišče na naslednje/predhodno okno" + +#: ../ui/gtk/help-overlay.ui.h:4 +msgctxt "shortcut window" +msgid "Move focus to conversation list" +msgstr "Premakni žarišče na seznam pogovorov" + +#: ../ui/gtk/help-overlay.ui.h:5 +msgctxt "shortcut window" +msgid "Detach composer window" +msgstr "Odpni okno skladalnika" + +#: ../ui/gtk/help-overlay.ui.h:6 +msgctxt "shortcut window" +msgid "Close composer window" +msgstr "Zapri okno skladalnika" + +#: ../ui/gtk/help-overlay.ui.h:7 +msgctxt "shortcut window" +msgid "Show keyboard shortcuts" +msgstr "Pokaži tipkovne bližnjice‫" + +#: ../ui/gtk/help-overlay.ui.h:8 +msgctxt "shortcut window" +msgid "Show help" +msgstr "Pokaži pomoč" + +#: ../ui/gtk/help-overlay.ui.h:9 +msgctxt "shortcut window" +msgid "Quit the application" +msgstr "Končaj program" + +#: ../ui/gtk/help-overlay.ui.h:10 +msgctxt "shortcut window" +msgid "Search" +msgstr "Iskanje" + +#: ../ui/gtk/help-overlay.ui.h:11 +msgctxt "shortcut window" +msgid "Jump to search box" +msgstr "Skoči na iskalno polje" + +#: ../ui/gtk/help-overlay.ui.h:12 +msgctxt "shortcut window" +msgid "Find in current conversation" +msgstr "Najdi v pogovoru" + +#: ../ui/gtk/help-overlay.ui.h:13 +msgctxt "shortcut window" +msgid "Find next/previous in current conversation" +msgstr "Najdi naslednjo/predhodno pojavitev iskalnega niza v pogovoru" + +#: ../ui/gtk/help-overlay.ui.h:14 +msgctxt "shortcut window" +msgid "Actions" +msgstr "Dejanja" + +#: ../ui/gtk/help-overlay.ui.h:15 +msgctxt "shortcut window" +msgid "Compose a new message" +msgstr "Sestavi novo sporočilo" + +#: ../ui/gtk/help-overlay.ui.h:16 +msgctxt "shortcut window" +msgid "Reply to sender " +msgstr "Odgovori pošiljatelju" + +#: ../ui/gtk/help-overlay.ui.h:17 +msgctxt "shortcut window" +msgid "Reply to all" +msgstr "Odgovori vsem" + +#: ../ui/gtk/help-overlay.ui.h:18 +msgctxt "shortcut window" +msgid "Forward" +msgstr "Posreduj" + +#: ../ui/gtk/help-overlay.ui.h:19 +msgctxt "shortcut window" +msgid "Archive" +msgstr "Arhiv" + +#: ../ui/gtk/help-overlay.ui.h:20 +msgctxt "shortcut window" +msgid "Move to trash" +msgstr "Premakni v smeti" + +#: ../ui/gtk/help-overlay.ui.h:21 +msgctxt "shortcut window" +msgid "Toggle spam" +msgstr "Preklopi sporočilo kot neželeno" + +#: ../ui/gtk/help-overlay.ui.h:22 +msgctxt "shortcut window" +msgid "Move the conversation" +msgstr "Premakni pogovor" + +#: ../ui/gtk/help-overlay.ui.h:23 +msgctxt "shortcut window" +msgid "Label the conversation" +msgstr "Označi pogovor" + +#: ../ui/gtk/help-overlay.ui.h:24 +msgctxt "shortcut window" +msgid "Mark read" +msgstr "Označi kot prebrano" + +#: ../ui/gtk/help-overlay.ui.h:25 +msgctxt "shortcut window" +msgid "Mark unread" +msgstr "Označi kot neprebrano" + +#: ../ui/gtk/help-overlay.ui.h:26 +msgctxt "shortcut window" +msgid "View" +msgstr "Pogled" + +#: ../ui/gtk/help-overlay.ui.h:27 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Približaj" + +#: ../ui/gtk/help-overlay.ui.h:28 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Oddalji" + +#: ../ui/gtk/help-overlay.ui.h:29 +msgctxt "shortcut window" +msgid "Reset zoom" +msgstr "Ponastavi približanje" + +#: ../ui/gtk/help-overlay.ui.h:30 +msgctxt "shortcut window" +msgid "Additional Shortcuts" +msgstr "Dodatne tipkovne bližnjice" + +#: ../ui/gtk/help-overlay.ui.h:31 +msgctxt "shortcut window" +msgid "Star" +msgstr "Dodaj zvezdico" + +#: ../ui/gtk/help-overlay.ui.h:32 +msgctxt "shortcut window" +msgid "Unstar" +msgstr "Odstrani zvezdico" + +#: ../ui/gtk/help-overlay.ui.h:33 +msgctxt "shortcut window" +msgid "Delete" +msgstr "Izbriši" + +#: ../ui/gtk/help-overlay.ui.h:34 +msgctxt "shortcut window" +msgid "Jump to next (older) conversation" +msgstr "Skoči na naslednji (starejši) pogovor" + +#: ../ui/gtk/help-overlay.ui.h:35 +msgctxt "shortcut window" +msgid "Jump to previous (newer) conversation" +msgstr "Skoči na predhodni (novejši) pogovor" + +#: ../ui/gtk/help-overlay.ui.h:36 +msgid "Composer Shortcuts" +msgstr "Tipkovne bližnjice skladalnika" + +#: ../ui/gtk/help-overlay.ui.h:37 +msgctxt "shortcut window" +msgid "Quote text" +msgstr "Navedi izvorno besedilo" + +#: ../ui/gtk/help-overlay.ui.h:38 +msgctxt "shortcut window" +msgid "Unquote text" +msgstr "Odstrani izvorno besedilo" + +#: ../ui/gtk/help-overlay.ui.h:39 +msgctxt "shortcut window" +msgid "Send" +msgstr "Pošlji" + +#: ../ui/gtk/help-overlay.ui.h:40 +msgctxt "shortcut window" +msgid "Add attachment" +msgstr "Dodaj prilogo" + +#: ../ui/gtk/help-overlay.ui.h:41 +msgctxt "shortcut window" +msgid "Rich text mode" +msgstr "Oblikovano sporočilo" + +#: ../ui/gtk/help-overlay.ui.h:42 +msgctxt "shortcut window" +msgid "Bold text" +msgstr "Krepko besedilo" + +#: ../ui/gtk/help-overlay.ui.h:43 +msgctxt "shortcut window" +msgid "Italicize text" +msgstr "Ležeče besedilo" + +#: ../ui/gtk/help-overlay.ui.h:44 +msgctxt "shortcut window" +msgid "Underline text" +msgstr "Podčrtano besedilo" + +#: ../ui/gtk/help-overlay.ui.h:45 +msgctxt "shortcut window" +msgid "Strike text" +msgstr "Prečrtano besedilo" + +#: ../ui/gtk/help-overlay.ui.h:46 +msgctxt "shortcut window" +msgid "Insert a link" +msgstr "Vstavi povezavo" + +#: ../ui/gtk/help-overlay.ui.h:47 +msgctxt "shortcut window" +msgid "Remove formatting" +msgstr "Odstrani oblikovanje" + +#: ../ui/gtk/menus.ui.h:2 +msgid "A_ccounts" +msgstr "_Računi" + +#: ../ui/gtk/menus.ui.h:4 +msgid "_Keyboard Shortcuts" +msgstr "_Tipkovne bližnjice‫" + #: ../ui/login.glade.h:1 +msgid "email@example.com" +msgstr "elektronski.naslov@primer.si" + +#: ../ui/login.glade.h:2 ../ui/password-dialog.glade.h:3 msgid "Password" msgstr "Geslo" -#: ../ui/login.glade.h:2 -msgid "E_mail address:" -msgstr "E_poštni naslov:" - #: ../ui/login.glade.h:3 -msgid "_Password:" -msgstr "_Geslo:" +msgid "E_mail address" +msgstr "_Elektronski naslov" #: ../ui/login.glade.h:4 -msgid "S_ervice:" -msgstr "_Storitev:" +msgid "_Password" +msgstr "_Geslo" #: ../ui/login.glade.h:5 -msgid "N_ame:" -msgstr "_Ime:" +msgid "S_ervice" +msgstr "_Storitev" -#: ../ui/login.glade.h:7 -msgid "N_ickname:" -msgstr "_Vzdevek:" +#: ../ui/login.glade.h:6 +msgid "N_ame" +msgstr "_Ime" #: ../ui/login.glade.h:8 -msgid "Work, Home, etc." -msgstr "Delo, dom, itd." +msgid "N_ickname" +msgstr "_Vzdevek" #: ../ui/login.glade.h:9 -#| msgid "Sent Mail" -msgid "_Save sent mail" -msgstr "_Shrani poslana sporočila" +msgid "Work, Home, etc." +msgstr "Delovno mesto, domači naslov, itd." #: ../ui/login.glade.h:10 -msgid "IMAP settings" -msgstr "IMAP nastavitve" +msgid "_Save sent mail" +msgstr "_Shrani poslana sporočila" #: ../ui/login.glade.h:11 -msgid "Se_rver:" -msgstr "_Strežnik:" +msgid "Addi_tional email addresses…" +msgstr "Dodatni _elektronski naslovi ..." #: ../ui/login.glade.h:12 -msgid "P_ort:" -msgstr "_Vrata:" +msgid "IMAP settings" +msgstr "Nastavitve IMAP" #: ../ui/login.glade.h:13 -msgid "Ser_ver:" -msgstr "_Strežnik:" +msgid "Se_rver" +msgstr "_Strežnik" #: ../ui/login.glade.h:14 -msgid "Por_t:" -msgstr "_Vrata:" +msgid "imap.example.com" +msgstr "imap@primer.si" #: ../ui/login.glade.h:15 -msgid "SMTP settings" -msgstr "SMTP nastavitve" +msgid "P_ort" +msgstr "_Vrata" #: ../ui/login.glade.h:16 -msgid "User_name:" -msgstr "_Uporabniško ime:" +msgid "smtp.example.com" +msgstr "smtp@primer.si" #: ../ui/login.glade.h:17 -msgid "Pass_word:" -msgstr "_Geslo:" +msgid "Ser_ver" +msgstr "St_režnik" #: ../ui/login.glade.h:18 -msgid "SMTP username" -msgstr "SMTP uporabniško ime" +msgid "Por_t" +msgstr "_Vrata" #: ../ui/login.glade.h:19 -msgid "SMTP password" -msgstr "SMTP geslo" +msgid "SMTP settings" +msgstr "Nastavitve SMTP" #: ../ui/login.glade.h:20 -msgid "_Username:" -msgstr "_Uporabniško ime:" +msgid "User_name" +msgstr "_Uporabniško ime" #: ../ui/login.glade.h:21 -msgid "IMAP username" -msgstr "IMAP uporabniško ime" +msgid "Pass_word" +msgstr "_Geslo" #: ../ui/login.glade.h:22 -msgid "IMAP password" -msgstr "IMAP geslo" +msgid "SMTP username" +msgstr "Uporabniško ime SMTP" #: ../ui/login.glade.h:23 -msgid "Encr_yption:" -msgstr "Ši_friranje:" +msgid "SMTP password" +msgstr "Geslo SMTP" #: ../ui/login.glade.h:24 -msgid "Encrypt_ion:" -msgstr "Ši_friranje:" +msgid "_Username" +msgstr "_Uporabniško ime" + +#: ../ui/login.glade.h:25 +msgid "IMAP username" +msgstr "Uporabniško ime IMAP" #: ../ui/login.glade.h:26 +msgid "IMAP password" +msgstr "Geslo IMAP" + +#: ../ui/login.glade.h:27 +msgid "Encr_yption" +msgstr "_Šifriranje" + +#: ../ui/login.glade.h:28 +msgid "Encrypt_ion" +msgstr "Ši_friranje" + +#: ../ui/login.glade.h:30 msgid "SSL/TLS" msgstr "SSL/TLS" -#: ../ui/login.glade.h:27 +#: ../ui/login.glade.h:31 msgid "STARTTLS" msgstr "STARTTLS" -#: ../ui/login.glade.h:28 +#: ../ui/login.glade.h:32 msgid "No authentication re_quired" msgstr "_Overitev ni potrebna" -#: ../ui/login.glade.h:29 -#, fuzzy -#| msgid "IMAP Credentials" +#: ../ui/login.glade.h:33 msgid "Use IMAP cre_dentials" -msgstr "IMAP poverilnice" +msgstr "Uporabi poverilnice _IMAP" -#: ../ui/login.glade.h:30 +#: ../ui/login.glade.h:34 +msgid "Composer" +msgstr "Sestavljalnik" + +#: ../ui/login.glade.h:35 +msgid "Save dra_fts on server" +msgstr "Shrani osnutke na strežnik" + +#: ../ui/login.glade.h:36 +msgid "Si_gn emails (HTML allowed):" +msgstr "_Podpiši sporočila (s podporo za HTML):" + +#: ../ui/login.glade.h:37 msgid "Storage" -msgstr "Shranjevanje" +msgstr "Shramba" -#: ../ui/login.glade.h:31 -msgid "_Download mail:" -msgstr "_Prenesi pošto:" +#: ../ui/login.glade.h:38 +msgid "_Download mail" +msgstr "_Prejmi sporočila" + +#: ../ui/main-toolbar.ui.h:1 +msgid "Empty Spam or Trash folders" +msgstr "Izprazni mapi smeti in neželene pošte" #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" -msgstr "SMTP poverilnice" +msgstr "Poverila SMTP" #: ../ui/password-dialog.glade.h:2 -msgid "Username:" +msgid "Username" msgstr "Uporabniško ime" -#: ../ui/password-dialog.glade.h:3 -msgid "Password:" -msgstr "Geslo:" - #: ../ui/password-dialog.glade.h:4 -#| msgid "_Remember passwords" msgid "_Remember password" msgstr "_Zapomni si geslo" -#: ../ui/preferences.glade.h:2 +#: ../ui/password-dialog.glade.h:6 +msgid "_Authenticate" +msgstr "_Overi" + +#: ../ui/preferences-dialog.ui.h:1 msgid "Reading" msgstr "Branje" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences-dialog.ui.h:2 msgid "_Automatically select next message" msgstr "_Samodejno izberi novo sporočilo" -#: ../ui/preferences.glade.h:4 +#: ../ui/preferences-dialog.ui.h:3 msgid "_Display conversation preview" msgstr "_Prikaži predogled pogovora" -#: ../ui/preferences.glade.h:5 -msgid "Composer" -msgstr "Skladatelj" - -#: ../ui/preferences.glade.h:6 -msgid "Enable _spell checking" -msgstr "Omogoči _preverjanje pravopisa" +#: ../ui/preferences-dialog.ui.h:4 +msgid "Use _three pane view" +msgstr "Uporabi pogled _drevesne zgradbe" -#: ../ui/preferences.glade.h:7 +#: ../ui/preferences-dialog.ui.h:5 msgid "Notifications" msgstr "Obvestila" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences-dialog.ui.h:6 msgid "_Play notification sounds" msgstr "_Predvajaj zvočna obvestila" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences-dialog.ui.h:7 msgid "Show _notifications for new mail" -msgstr "Prikaži _obvestila za novo pošto" +msgstr "Prikaži _obvestila o novo prispeli pošti" + +#: ../ui/preferences-dialog.ui.h:8 +msgid "Always _watch for new mail" +msgstr "Vedno preveri za _nova sporočila" + +#: ../ui/preferences-dialog.ui.h:9 +msgid "Geary will run in the background and notify of new mail" +msgstr "Program Geary bo zagnan v ozadju za javljanje o novo prispeli pošti" + +#: ../ui/preferences-dialog.ui.h:10 +msgid "Preferences" +msgstr "Možnosti" #: ../ui/remove_confirm.glade.h:1 msgid "" "Are you sure you want to remove this " "account? " msgstr "" -"Ste prepričani, da želite odstraniti " -"ta račun? " +"Ali ste prepričani, da želite " +"odstraniti ta račun? " #: ../ui/remove_confirm.glade.h:2 msgid "" "All email associated with this account will be removed from your computer. " "This will not affect email on the server." msgstr "" -"Vsa epošta povezana s tem računom bo odstranjena z vašega računalnika. To ne " -"bo vplivalo na epošto na strežniku." +"Vsa elektronska pošta, povezana s tem računom, bo odstranjena z računalnika. " +"To ne bo vplivalo na sporočila, shranjena na strežniku." #: ../ui/remove_confirm.glade.h:3 msgid "Nickname:" @@ -1825,19 +2684,124 @@ #: ../ui/remove_confirm.glade.h:4 msgid "Email address:" -msgstr "Epoštni naslov:" +msgstr "Elektronski naslov:" #: ../ui/upgrade_dialog.glade.h:1 +msgid "Geary update in progress…" +msgstr "Posodobitev programa Geary je v teku ..." + +#~ msgid "Copyright 2011-2014 Yorba Foundation" +#~ msgstr "Avtorske pravice © 2004-2014 Yorba Foundation" + +#~ msgid "_Delete" +#~ msgstr "_Briši" + +#~ msgid "_Trash" +#~ msgstr "_Smeti" + +#~ msgid "_Donate" +#~ msgstr "_Prispevaj" + +#, fuzzy +#~ msgid "%i match" +#~ msgid_plural "%i matches" +#~ msgstr[0] "%i zadetkov" +#~ msgstr[1] "%i zadetkov" +#~ msgstr[2] "%i zadetkov" +#~ msgstr[3] "%i zadetkov" + #, fuzzy -msgid "Geary upgrade in progress." -msgstr "Obravnavanje zahteve je v teku" +#~ msgid "%i match (wrapped)" +#~ msgid_plural "%i matches (wrapped)" +#~ msgstr[0] "Primerjaj skladnosti polj" +#~ msgstr[1] "%i zadetkov (celotno)" +#~ msgstr[2] "%i zadetkov (celotno)" +#~ msgstr[3] "%i zadetkov (celotno)" + +#~ msgid "not found" +#~ msgstr "Ni zadetkov" + +#~ msgid "Do you want to discard the unsaved message?" +#~ msgstr "Želite zavreči neshranjeno sporočilo?" + +#~ msgid "No search results found." +#~ msgstr "Ni najdenih rezultatov iskanja." + +#~ msgid "Date:" +#~ msgstr "Datum:" + +#~ msgid "Copy _Link" +#~ msgstr "Kopiraj _povezavo" + +#~ msgid "Select _Message" +#~ msgstr "Izberi _sporočilo" + +#, fuzzy +#~ msgid " (Invalid?)" +#~ msgstr "" + +#~ msgid "_Save As..." +#~ msgstr "_Shrani kot..." + +#~ msgid "Save A_ttachment..." +#~ msgid_plural "Save All A_ttachments..." +#~ msgstr[0] "Shrani _priponko" +#~ msgstr[1] "Shrani obe _priponki" +#~ msgstr[2] "Shrani vse _priponke" +#~ msgstr[3] "Shrani vse _priponke" + +#~ msgid "none" +#~ msgstr "nobeno" + +#, fuzzy +#~ msgid "Please enter your password" +#~ msgstr "Vnesite svoje geslo Kerberos:" + +#~ msgid "_Left" +#~ msgstr "_Levo" + +#~ msgid "_Right" +#~ msgstr "_Desno" + +#~ msgid "_Center" +#~ msgstr "_Sredinsko" + +#~ msgid "_Justify" +#~ msgstr "_Obojestransko" + +#~ msgid "Link (Ctrl+L)" +#~ msgstr "Povezava (Ctrl+L)" + +#~ msgid "More options" +#~ msgstr "Več možnosti" + +#~ msgid "Large" +#~ msgstr "Velika" + +#~ msgid "Medium" +#~ msgstr "Srednja" + +#~ msgid "Small" +#~ msgstr "Majhna" + +#~ msgid "Sans Serif" +#~ msgstr "Brez-serifna" + +#~ msgid "Serif" +#~ msgstr "Serifna" + +#~ msgid "Fixed Width" +#~ msgstr "Nespremenljiva širina" + +#~ msgid "C_lose" +#~ msgstr "_Zapri" + +#~ msgid "Password:" +#~ msgstr "Geslo:" #~ msgid "Archive conversation (Delete, Backspace, A)" #~ msgstr "Arhiviraj pogovor (Delete, Backspace, A)" -#~ msgid "General" -#~ msgstr "Splošno" - #~ msgid "Port:" #~ msgstr "Vrata:" diff -Nru geary-0.11.4/po/sr@latin.po geary-0.12.0/po/sr@latin.po --- geary-0.11.4/po/sr@latin.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/sr@latin.po 2017-10-02 11:25:21.000000000 +0000 @@ -8,45 +8,109 @@ msgid "" msgstr "" "Project-Id-Version: geary\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=geary&k" -"eywords=I18N+L10N&component=internationalization\n" -"POT-Creation-Date: 2017-01-21 22:09+0000\n" -"PO-Revision-Date: 2017-01-26 07:05+0200\n" +"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" +"product=geary&keywords=I18N+L10N&component=internationalization\n" +"POT-Creation-Date: 2017-02-26 06:52+0000\n" +"PO-Revision-Date: 2017-02-26 09:25+0200\n" "Last-Translator: Miroslav Nikolić \n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : " -"n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n" +"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Project-Style: gnome\n" -#: ../desktop/geary.desktop.in.h:1 ../desktop/geary-autostart.desktop.in.h:1 +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:1 +#: ../desktop/org.gnome.Geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" msgstr "Geri" -#: ../desktop/geary.desktop.in.h:2 ../desktop/geary-autostart.desktop.in.h:2 -#: ../src/client/application/geary-application.vala:18 +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:2 +#: ../desktop/org.gnome.Geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 +msgid "Send and receive email" +msgstr "Šalje i prima e-poštu" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:3 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"Geri je program za e-poštu izgrađen oko razgovora, za radnu površ Gnoma 3. " +"Omogućuje vam da čitate, nađete i šaljete e-poštu sa jasnim, savremenim " +"sučeljem." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:4 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"Razgovori vam omogućavaju da pročitate čitav razgovor a da ne morate da " +"tražite i klikate od poruke do poruke." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:5 +msgid "Geary’s features include:" +msgstr "U Gerijeve funkcije spadaju:" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:6 +msgid "Quick email account setup" +msgstr "Brzo podešavanje naloga e-pošte" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:7 +msgid "Shows related messages together in conversations" +msgstr "Zajednički prikaz povezanih poruka u razgovoru" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:8 +msgid "Fast, full text and keyword search" +msgstr "Brza pretraga po čitavom tekstu i ključnoj reči" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:9 +msgid "Full-featured HTML and plain text message composer" +msgstr "Potpuno funkcionalan sastavljač poruke u HTML-u i običnom tekstu" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:10 +msgid "Desktop notification of new mail" +msgstr "Obaveštenje o novoj pošti na radnoj površi" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:11 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" +msgstr "" +"Saglasan je sa G-poštom, Jahu! poštom, Autlukom i drugim IMAP serverima" + +#: ../desktop/org.gnome.Geary.desktop.in.h:2 +msgid "Email" +msgstr "E-pošta" + +#: ../desktop/org.gnome.Geary.desktop.in.h:3 +msgid "Geary Email" +msgstr "Gerijeva e-pošta" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/org.gnome.Geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "pošta;e-pošta;imap;gpošta;g-pošta;jahu;hotmejl;autluk;" + +#: ../desktop/org.gnome.Geary.desktop.in.h:7 ../ui/gtk/menus.ui.h:1 +msgid "Compose Message" +msgstr "Nova poruka" + +#: ../desktop/geary-autostart.desktop.in.h:2 +#: ../src/client/application/geary-application.vala:21 msgid "Mail Client" msgstr "Program za e-poštu" -#: ../desktop/geary.desktop.in.h:3 ../desktop/geary-autostart.desktop.in.h:3 +#: ../desktop/geary-autostart.desktop.in.h:3 msgid "Geary Mail" msgstr "Gerijeva pošta" -#: ../desktop/geary.desktop.in.h:4 ../desktop/geary-autostart.desktop.in.h:4 -msgid "Send and receive email" -msgstr "Šalje i prima e-poštu" - -#: ../desktop/geary.desktop.in.h:5 ../desktop/geary-autostart.desktop.in.h:5 +#: ../desktop/geary-autostart.desktop.in.h:5 msgid "Email;E-mail;Mail;" msgstr "pošta;e-pošta;el. pošta;elektronska pošta;" -#: ../desktop/geary.desktop.in.h:6 -msgid "Compose Message" -msgstr "Nova poruka" - #: ../desktop/geary-attach.contract.in.h:1 msgid "Send by email" msgstr "Pošalji e-poštom" @@ -57,6 +121,7 @@ #: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:31 +#: ../ui/conversation-email-menus.ui.h:10 msgid "_Save" msgstr "_Sačuvaj" @@ -66,7 +131,7 @@ msgstr "_Dodaj" #. reset/clear widgets -#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 #, c-format msgid "Additional addresses for %s" msgstr "Dodatne adrese za %s" @@ -87,108 +152,125 @@ msgid "First Last" msgstr "Ime i prezime" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." msgstr "Dobro došli u Geri." -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." msgstr "Unesite podatke vašeg naloga za početak." -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "od pre 2 nedelje" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:254 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "od pre 1 meseca" -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "od pre 3 meseci" -#: ../src/client/accounts/add-edit-page.vala:256 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "od pre 6 meseci" -#: ../src/client/accounts/add-edit-page.vala:257 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "od pre 1 godine" -#: ../src/client/accounts/add-edit-page.vala:258 +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" msgstr "od pre 2 godine" -#: ../src/client/accounts/add-edit-page.vala:259 +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" msgstr "od pre 4 godina" #. Separator -#: ../src/client/accounts/add-edit-page.vala:261 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "Sve" -#: ../src/client/accounts/add-edit-page.vala:280 +#: ../src/client/accounts/add-edit-page.vala:283 msgid "Edit" msgstr "Uređivanje" -#: ../src/client/accounts/add-edit-page.vala:282 +#: ../src/client/accounts/add-edit-page.vala:285 msgid "Preview" msgstr "Pregled" -#: ../src/client/accounts/add-edit-page.vala:723 +#: ../src/client/accounts/add-edit-page.vala:751 msgid "Remem_ber passwords" msgstr "_Zapamti lozinke" -#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:7 +#: ../src/client/accounts/add-edit-page.vala:758 ../ui/login.glade.h:7 msgid "Remem_ber password" msgstr "_Zapamti lozinku" -#: ../src/client/accounts/add-edit-page.vala:764 +#: ../src/client/accounts/add-edit-page.vala:792 msgid "Unable to validate:\n" msgstr "Ne mogu da potvrdim:\n" -#: ../src/client/accounts/add-edit-page.vala:766 -msgid " • Invalid account nickname.\n" -msgstr " • Neispravan nadimak naloga.\n" - -#: ../src/client/accounts/add-edit-page.vala:769 -msgid " • Email address already added to Geary.\n" -msgstr " • Adresa e-pošte je već dodata u Geri.\n" - -#: ../src/client/accounts/add-edit-page.vala:773 -msgid " • IMAP connection error.\n" -msgstr " • Greška IMAP veze.\n" - -#: ../src/client/accounts/add-edit-page.vala:776 -msgid " • IMAP username or password incorrect.\n" -msgstr " • Netačno korisničko ime ili lozinka IMAP-a.\n" - -#: ../src/client/accounts/add-edit-page.vala:779 -msgid " • SMTP connection error.\n" -msgstr " • Greška SMTP veze.\n" - -#: ../src/client/accounts/add-edit-page.vala:782 -msgid " • SMTP username or password incorrect.\n" -msgstr " • Netačno korisničko ime ili lozinka SMTP-a.\n" - -#: ../src/client/accounts/add-edit-page.vala:786 -msgid " • Connection error.\n" -msgstr " • Greška veze.\n" - -#: ../src/client/accounts/add-edit-page.vala:790 -msgid " • Username or password incorrect.\n" -msgstr " • Netačno korisničko ime ili lozinka.\n" +#: ../src/client/accounts/add-edit-page.vala:794 +msgid " • Invalid account nickname.\n" +msgstr " • Neispravan nadimak naloga.\n" + +#: ../src/client/accounts/add-edit-page.vala:797 +msgid " • Email address already added to Geary.\n" +msgstr " • Adresa e-pošte je već dodata u Geri.\n" + +#: ../src/client/accounts/add-edit-page.vala:801 +msgid " • IMAP connection error.\n" +msgstr " • Greška IMAP veze.\n" + +#: ../src/client/accounts/add-edit-page.vala:804 +msgid " • IMAP username or password incorrect.\n" +msgstr " • Netačno korisničko ime ili lozinka IMAP-a.\n" + +#: ../src/client/accounts/add-edit-page.vala:807 +msgid " • SMTP connection error.\n" +msgstr " • Greška SMTP veze.\n" + +#: ../src/client/accounts/add-edit-page.vala:810 +msgid " • SMTP username or password incorrect.\n" +msgstr " • Netačno korisničko ime ili lozinka SMTP-a.\n" + +#: ../src/client/accounts/add-edit-page.vala:814 +msgid " • Connection error.\n" +msgstr " • Greška veze.\n" + +#: ../src/client/accounts/add-edit-page.vala:818 +msgid " • Username or password incorrect.\n" +msgstr " • Netačno korisničko ime ili lozinka.\n" -#: ../src/client/application/geary-application.vala:19 +#: ../src/client/application/geary-application.vala:22 msgid "Copyright 2016 Software Freedom Conservancy Inc." msgstr "Autorska prava 2016 Software Freedom Conservancy Inc." -#: ../src/client/application/geary-application.vala:21 +#: ../src/client/application/geary-application.vala:24 msgid "Visit the Geary web site" msgstr "Posetite veb stranicu Gerija" +#: ../src/client/application/geary-application.vala:445 +#, c-format +msgid "About %s" +msgstr "O programu „%s“" + +#. Translators: add your name and email address to receive +#. credit in the About dialog For example: Yamada Taro +#. +#: ../src/client/application/geary-application.vala:449 +msgid "translator-credits" +msgstr "" +"Miroslav Nikolić \n" +"Miloš Popović \n" +"Marko M. Kostić \n" +"\n" +"http://prevod.org — prevod na srpski jezik" + #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" msgstr "Pokreće Gerija sa skrivenim glavnim prozorom" @@ -236,224 +318,198 @@ #: ../src/client/application/geary-args.vala:25 msgid "Allow inspection of WebView" -msgstr "Dopušta pregledanje Veb pregleda (WebView)" +msgstr "Dopušta pregledanje Veb pregleda" #: ../src/client/application/geary-args.vala:26 msgid "Revoke all server certificates with TLS warnings" msgstr "Opoziva sva uverenja servera sa TLS upozorenjima" #: ../src/client/application/geary-args.vala:27 +msgid "Perform a graceful quit" +msgstr "Obavlja graciozan izlaz" + +#: ../src/client/application/geary-args.vala:28 msgid "Display program version" msgstr "Prikazuje izdanje programa" #. This gives a command-line hint on how to open new composer windows with mailto: -#: ../src/client/application/geary-args.vala:51 +#: ../src/client/application/geary-args.vala:53 #, c-format msgid "Use %s to open a new composer window" msgstr "Koristite „%s“ za otvaranje novog prozora sastavljača" -#: ../src/client/application/geary-args.vala:52 +#: ../src/client/application/geary-args.vala:54 msgid "Please report comments, suggestions and bugs to:" msgstr "Napomene, predloge i greške šaljite na:" #. i18n: Command line arguments are invalid -#: ../src/client/application/geary-args.vala:59 +#: ../src/client/application/geary-args.vala:61 #, c-format msgid "Failed to parse command line options: %s\n" msgstr "Ne mogu da obradim opciju linije naredbi: %s\n" -#: ../src/client/application/geary-args.vala:70 +#: ../src/client/application/geary-args.vala:72 #, c-format -msgid "Unrecognized command line option \"%s\"\n" -msgstr "Nepoznata opcija linije naredbi: %s\n" +msgid "Unrecognized command line option “%s”\n" +msgstr "Nepoznata opcija linije naredbi „%s“\n" -#: ../src/client/application/geary-controller.vala:61 +#: ../src/client/application/geary-controller.vala:57 msgid "Delete conversation" msgstr "Obriši razgovor" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:58 msgid "Delete conversation (Shift+Delete)" -msgstr "Obriši razgovor (Shift+Del)" +msgstr "Obriši razgovor (Pomak+Obriši)" -#: ../src/client/application/geary-controller.vala:63 +#: ../src/client/application/geary-controller.vala:59 msgid "Delete conversations (Shift+Delete)" -msgstr "Obriši razgovore (Shift+Del)" +msgstr "Obriši razgovore (Pomak+Obriši)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:67 +#: ../src/client/application/geary-controller.vala:63 msgid "Move conversation to Trash (Delete, Backspace)" -msgstr "Premesti razgovor u smeće (Del, Backspace)" +msgstr "Premesti razgovor u smeće (Obriši, Povratnica)" -#: ../src/client/application/geary-controller.vala:68 +#: ../src/client/application/geary-controller.vala:64 msgid "Move conversations to Trash (Delete, Backspace)" -msgstr "Premesti razgovore u smeće (Del, Backspace)" +msgstr "Premesti razgovore u smeće (Obriši, Povratnica)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:72 +#: ../src/client/application/geary-controller.vala:68 msgid "_Archive" msgstr "_Arhiviraj" -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:69 msgid "Archive conversation (A)" msgstr "Arhiviraj razgovor (A)" -#: ../src/client/application/geary-controller.vala:74 +#: ../src/client/application/geary-controller.vala:70 msgid "Archive conversations (A)" msgstr "Arhiviraj razgovore (A)" -#: ../src/client/application/geary-controller.vala:77 +#: ../src/client/application/geary-controller.vala:73 msgid "Mark as S_pam" msgstr "Označi kao _nepoželjno" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:74 msgid "Mark as not S_pam" msgstr "Označi da nije _nepoželjno" -#: ../src/client/application/geary-controller.vala:80 -#: ../src/client/application/geary-controller.vala:396 +#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:448 msgid "Mark conversation" msgstr "Označi razgovor" -#: ../src/client/application/geary-controller.vala:81 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark conversations" msgstr "Označi razgovore" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:78 msgid "Add label to conversation" msgstr "Dodaj natpis razgovoru" -#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:79 msgid "Add label to conversations" msgstr "Dodaj natpis razgovorima" -#: ../src/client/application/geary-controller.vala:84 -#: ../src/client/application/geary-controller.vala:435 +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:487 msgid "Move conversation" msgstr "Premesti razgovor" -#: ../src/client/application/geary-controller.vala:85 +#: ../src/client/application/geary-controller.vala:81 msgid "Move conversations" msgstr "Premesti razgovore" -#: ../src/client/application/geary-controller.vala:376 -#: ../ui/app_menu.interface.h:1 -msgid "A_ccounts" -msgstr "_Nalozi" - -#: ../src/client/application/geary-controller.vala:381 -#: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 -msgid "_Preferences" -msgstr "_Postavke" - -#: ../src/client/application/geary-controller.vala:385 -#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:3 -msgid "_Help" -msgstr "Po_moć" - -#: ../src/client/application/geary-controller.vala:389 -#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:4 -msgid "_About" -msgstr "_O programu" - -#: ../src/client/application/geary-controller.vala:393 -#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:5 -msgid "_Quit" -msgstr "_Izađi" - -#: ../src/client/application/geary-controller.vala:398 -msgid "_Mark as..." -msgstr "_Označi kao..." +#: ../src/client/application/geary-controller.vala:450 +msgid "_Mark as…" +msgstr "_Označi kao…" -#: ../src/client/application/geary-controller.vala:404 +#: ../src/client/application/geary-controller.vala:456 msgid "Mark as _Read" msgstr "Označi kao _pročitano" -#: ../src/client/application/geary-controller.vala:410 +#: ../src/client/application/geary-controller.vala:462 msgid "Mark as _Unread" msgstr "Označi kao _nepročitano" -#: ../src/client/application/geary-controller.vala:416 +#: ../src/client/application/geary-controller.vala:468 msgid "_Star" msgstr "_Dodaj zvezdicu" -#: ../src/client/application/geary-controller.vala:421 +#: ../src/client/application/geary-controller.vala:473 msgid "U_nstar" msgstr "_Ukloni zvezdicu" -#: ../src/client/application/geary-controller.vala:431 +#: ../src/client/application/geary-controller.vala:483 msgid "Add label" msgstr "Dodaj natpis" -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:484 msgid "_Label" msgstr "_Natpis" -#: ../src/client/application/geary-controller.vala:436 +#: ../src/client/application/geary-controller.vala:488 msgid "_Move" msgstr "_Premesti" -#: ../src/client/application/geary-controller.vala:440 +#: ../src/client/application/geary-controller.vala:492 msgid "Compose new message (Ctrl+N, N)" -msgstr "Sastavite novu poruku (Ctrl+N, N)" +msgstr "Sastavite novu poruku (Ktrl+N, N)" -#. Reply to a message. -#: ../src/client/application/geary-controller.vala:444 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1873 +#: ../src/client/application/geary-controller.vala:496 +#: ../ui/conversation-email-menus.ui.h:1 msgid "_Reply" msgstr "_Odgovori" -#: ../src/client/application/geary-controller.vala:445 +#: ../src/client/application/geary-controller.vala:497 msgid "Reply (Ctrl+R, R)" -msgstr "Odgovorite (Ctrl+R, R)" +msgstr "Odgovorite (Ktrl+R, R)" -#: ../src/client/application/geary-controller.vala:449 +#: ../src/client/application/geary-controller.vala:501 msgid "R_eply All" msgstr "Odgovori _svima" -#: ../src/client/application/geary-controller.vala:450 +#: ../src/client/application/geary-controller.vala:502 msgid "Reply all (Ctrl+Shift+R, Shift+R)" -msgstr "Odgovorite svima (Ctrl+Shift+R, Shift+R)" +msgstr "Odgovorite svima (Ktrl+Shift+R, Shift+R)" -#. Forward a message. -#: ../src/client/application/geary-controller.vala:455 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1883 +#: ../src/client/application/geary-controller.vala:507 +#: ../ui/conversation-email-menus.ui.h:3 msgid "_Forward" msgstr "_Prosledi" -#: ../src/client/application/geary-controller.vala:456 +#: ../src/client/application/geary-controller.vala:508 msgid "Forward (Ctrl+L, F)" -msgstr "Prosledite (Ctrl+L, F)" - -#: ../src/client/application/geary-controller.vala:495 -msgid "Empty" -msgstr "Isprazni" - -#: ../src/client/application/geary-controller.vala:496 -msgid "Empty Spam or Trash folders" -msgstr "Isprazni fascikle s nepoželjnom poštom ili otpad" +msgstr "Prosledite (Ktrl+L, F)" -#: ../src/client/application/geary-controller.vala:500 +#: ../src/client/application/geary-controller.vala:538 msgid "Empty _Spam…" msgstr "Isprazni _nepoželjno…" -#: ../src/client/application/geary-controller.vala:504 +#: ../src/client/application/geary-controller.vala:542 msgid "Empty _Trash…" msgstr "Isprazni _otpad…" #. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:537 +#: ../src/client/application/geary-controller.vala:574 msgid "Toggle search bar" msgstr "Prikaz trake za pretragu" -#: ../src/client/application/geary-controller.vala:744 +#. No callback is connected, since we bind the toggle button to the find bar visibility +#: ../src/client/application/geary-controller.vala:579 +msgid "Toggle find bar" +msgstr "Prikaz trake za pretragu" + +#: ../src/client/application/geary-controller.vala:757 msgid "Unable to store server trust exception" msgstr "Ne mogu da sačuvam izuzetak poverenja servera" -#: ../src/client/application/geary-controller.vala:981 +#: ../src/client/application/geary-controller.vala:992 msgid "Your settings are insecure" msgstr "Vaša podešavanja nisu bezbedna" -#: ../src/client/application/geary-controller.vala:982 +#: ../src/client/application/geary-controller.vala:993 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -463,15 +519,15 @@ "korisničko ime i lozinku može da pročita neko drugi na mreži. Da li sigurno " "želite da nastavite?" -#: ../src/client/application/geary-controller.vala:983 +#: ../src/client/application/geary-controller.vala:994 msgid "Co_ntinue" msgstr "_Nastavi" -#: ../src/client/application/geary-controller.vala:1030 +#: ../src/client/application/geary-controller.vala:1041 msgid "Error connecting to the server" msgstr "Greška povezivanja na server" -#: ../src/client/application/geary-controller.vala:1031 +#: ../src/client/application/geary-controller.vala:1042 msgid "" "Geary encountered an error while connecting to the server. Please try again " "in a few moments." @@ -480,12 +536,12 @@ "nekoliko trenutaka." #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:1068 +#: ../src/client/application/geary-controller.vala:1079 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "Greška slanja e-pošte" -#: ../src/client/application/geary-controller.vala:1069 +#: ../src/client/application/geary-controller.vala:1080 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." @@ -495,12 +551,12 @@ #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1073 +#: ../src/client/application/geary-controller.vala:1084 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "Greška prilikom čuvanja poslate pošte" -#: ../src/client/application/geary-controller.vala:1074 +#: ../src/client/application/geary-controller.vala:1085 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." @@ -508,19 +564,19 @@ "Geri je naišao na grešku prilikom čuvanja poruke u „Poslato“. Poruka će " "ostati u vašoj fascikli „Za slanje“ sve dok je ne izbrišete." -#: ../src/client/application/geary-controller.vala:1143 +#: ../src/client/application/geary-controller.vala:1154 msgid "Labels" msgstr "Natpisi" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1155 +#: ../src/client/application/geary-controller.vala:1166 #, c-format msgid "Unable to open the database for %s" msgstr "Ne mogu da otvorim bazu podataka za „%s“" -#: ../src/client/application/geary-controller.vala:1156 +#: ../src/client/application/geary-controller.vala:1167 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -544,20 +600,20 @@ "Ponovna izgradnja baze podataka će uništiti e-poštu koju čuvate na vašem " "računaru i njene priloge. Pošta na vašem serveru će ostati netaknuta." -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "_Rebuild" msgstr "Ponovo _izgradi" -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "E_xit" msgstr "_Izađi" -#: ../src/client/application/geary-controller.vala:1167 +#: ../src/client/application/geary-controller.vala:1178 #, c-format -msgid "Unable to rebuild database for \"%s\"" +msgid "Unable to rebuild database for “%s”" msgstr "Ne mogu da ponovo izgradim bazu podataka za „%s“" -#: ../src/client/application/geary-controller.vala:1168 +#: ../src/client/application/geary-controller.vala:1179 #, c-format msgid "" "Error during rebuild:\n" @@ -570,14 +626,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1190 -#: ../src/client/application/geary-controller.vala:1200 +#: ../src/client/application/geary-controller.vala:1201 #: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:1222 #, c-format msgid "Unable to open local mailbox for %s" msgstr "Ne mogu da otvorim lokalno sanduče za „%s“" -#: ../src/client/application/geary-controller.vala:1191 +#: ../src/client/application/geary-controller.vala:1202 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -596,10 +652,10 @@ "\n" "%s" -#: ../src/client/application/geary-controller.vala:1201 +#: ../src/client/application/geary-controller.vala:1212 msgid "" "The version number of the local mail database is formatted for a newer " -"version of Geary. Unfortunately, the database cannot be \"rolled back\" to " +"version of Geary. Unfortunately, the database cannot be “rolled back” to " "work with this version of Geary.\n" "\n" "Please install the latest version of Geary and try again." @@ -610,7 +666,7 @@ "\n" "Instalirajte najnovije izdanje Gerija i pokušajte ponovo." -#: ../src/client/application/geary-controller.vala:1212 +#: ../src/client/application/geary-controller.vala:1223 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" @@ -622,32 +678,15 @@ "\n" "Proverite vašu mrežu i ponovo pokrenite Gerija." -#: ../src/client/application/geary-controller.vala:1723 -#, c-format -msgid "About %s" -msgstr "O programu „%s“" - -#. / Translators: add your name and email address to receive credit in the About dialog -#. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1726 -msgid "translator-credits" -msgstr "" -"Miroslav Nikolić \n" -"Miloš Popović \n" -"Marko M. Kostić \n" -"\n" -"http://prevod.org — prevod na srpski jezik" - -#: ../src/client/application/geary-controller.vala:1984 +#: ../src/client/application/geary-controller.vala:1998 msgid "Undo move (Ctrl+Z)" -msgstr "Opozovi (Ctrl+Z)" +msgstr "Opozovi (Ktrl+Z)" -#: ../src/client/application/geary-controller.vala:1994 -#, c-format -msgid "Are you sure you want to open \"%s\"?" -msgstr "Da li ste sigurni da želite da otvorite „%s“?" +#: ../src/client/application/geary-controller.vala:2008 +msgid "Are you sure you want to open these attachments?" +msgstr "Da li sigurno želite da otvorite ove priloge?" -#: ../src/client/application/geary-controller.vala:1995 +#: ../src/client/application/geary-controller.vala:2009 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -655,56 +694,56 @@ "Priložene datoteke mogu da oštete sistem ako se otvore. Otvorite datoteke " "samo sa poverljivih izvora." -#: ../src/client/application/geary-controller.vala:1996 -msgid "Don't _ask me again" +#: ../src/client/application/geary-controller.vala:2010 +msgid "Don’t _ask me again" msgstr "Ne pitaj me _ponovo" -#: ../src/client/application/geary-controller.vala:2014 +#: ../src/client/application/geary-controller.vala:2145 #, c-format -msgid "A file named \"%s\" already exists. Do you want to replace it?" +msgid "A file named “%s” already exists. Do you want to replace it?" msgstr "Datoteka pod nazivom „%s“ već postoji. Da li želite da je zamenite?" -#: ../src/client/application/geary-controller.vala:2016 +#: ../src/client/application/geary-controller.vala:2147 #, c-format msgid "" -"The file already exists in \"%s\". Replacing it will overwrite its contents." +"The file already exists in “%s”. Replacing it will overwrite its contents." msgstr "" "Datoteka već postoji u „%s“. Ukoliko je zamenite prepisaćete njen sadržaj." -#: ../src/client/application/geary-controller.vala:2019 +#: ../src/client/application/geary-controller.vala:2150 msgid "_Replace" msgstr "_Zameni" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2324 +#: ../src/client/application/geary-controller.vala:2398 msgid "Close open draft messages?" msgstr "Da zatvorim otvorene poruke s nacrtima?" -#: ../src/client/application/geary-controller.vala:2454 +#: ../src/client/application/geary-controller.vala:2520 #, c-format msgid "Empty all email from your %s folder?" msgstr "Da ispraznim e-poštu iz fascikle „%s“?" -#: ../src/client/application/geary-controller.vala:2455 +#: ../src/client/application/geary-controller.vala:2521 msgid "This removes the email from Geary and your email server." msgstr "Ovo će ukloniti poštu iz Gerija i na serverima vaše e-pošte." -#: ../src/client/application/geary-controller.vala:2456 +#: ../src/client/application/geary-controller.vala:2522 msgid "This cannot be undone." msgstr "Ne možete da opozovete ovu radnju." -#: ../src/client/application/geary-controller.vala:2457 +#: ../src/client/application/geary-controller.vala:2523 #, c-format msgid "Empty %s" msgstr "Isprazni „%s“" -#: ../src/client/application/geary-controller.vala:2474 +#: ../src/client/application/geary-controller.vala:2540 #, c-format msgid "Error emptying %s" msgstr "Greška prilikom pražnjenja „%s“" -#: ../src/client/application/geary-controller.vala:2504 +#: ../src/client/application/geary-controller.vala:2570 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "Da li želite trajno da obrišete ovu poruku?" @@ -712,66 +751,48 @@ msgstr[2] "Da li želite trajno da obrišete ove poruke?" msgstr[3] "Da li želite trajno da obrišete ovu poruku?" -#: ../src/client/application/geary-controller.vala:2506 +#: ../src/client/application/geary-controller.vala:2572 msgid "Delete" msgstr "Obriši" -#: ../src/client/application/geary-controller.vala:2537 +#: ../src/client/application/geary-controller.vala:2604 msgid "Undo archive (Ctrl+Z)" -msgstr "Opozovi arhiviranje (Ctrl+Z)" +msgstr "Opozovi arhiviranje (Ktrl+Z)" -#: ../src/client/application/geary-controller.vala:2552 +#: ../src/client/application/geary-controller.vala:2619 msgid "Undo trash (Ctrl+Z)" -msgstr "Opozovi brisanje (Ctrl+Z)" +msgstr "Opozovi brisanje (Ktrl+Z)" -#: ../src/client/application/geary-controller.vala:2605 +#: ../src/client/application/geary-controller.vala:2673 msgid "Undo (Ctrl+Z)" -msgstr "Opozovi (Ctrl+Z)" +msgstr "Opozovi (Ktrl+Z)" -#: ../src/client/components/conversation-find-bar.vala:214 -#, c-format -msgid "%i match" -msgid_plural "%i matches" -msgstr[0] "%i rezultat" -msgstr[1] "%i rezultata" -msgstr[2] "%i rezultata" -msgstr[3] "%i rezultat" - -#: ../src/client/components/conversation-find-bar.vala:216 -#, c-format -msgid "%i match (wrapped)" -msgid_plural "%i matches (wrapped)" -msgstr[0] "%i rezultat (umotano)" -msgstr[1] "%i rezultata (umotano)" -msgstr[2] "%i rezultata (umotano)" -msgstr[3] "%i rezultat (umotano)" - -#: ../src/client/components/conversation-find-bar.vala:218 -msgid "not found" -msgstr "nije nađeno" +#: ../src/client/application/geary-controller.vala:2804 +msgid "Failed to open default text editor." +msgstr "Ne mogu da otvorim podrazumevani urednik teksta." -#: ../src/client/components/main-window.vala:438 +#: ../src/client/components/main-window.vala:389 #, c-format msgid "%s (%d)" msgstr "%s (%d)" -#: ../src/client/components/search-bar.vala:10 +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "Potraži" #. Search entry. -#: ../src/client/components/search-bar.vala:25 +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" -msgstr "Potražite ključne reči u svim porukama u nalogu (Ctrl+S)" +msgstr "Potražite ključne reči u svim porukama u nalogu (Ktrl+S)" -#: ../src/client/components/search-bar.vala:118 +#: ../src/client/components/search-bar.vala:100 #, c-format msgid "Indexing %s account" msgstr "Popisujem nalog „%s“" -#: ../src/client/components/search-bar.vala:129 +#: ../src/client/components/search-bar.vala:111 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" @@ -779,8 +800,8 @@ #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 -msgid "Sending..." -msgstr "Šaljem..." +msgid "Sending…" +msgstr "Šaljem…" #: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 msgid "_OK" @@ -791,6 +812,10 @@ msgid "_Cancel" msgstr "Ot_kaži" +#: ../src/client/components/stock.vala:21 ../ui/gtk/menus.ui.h:6 +msgid "_About" +msgstr "_O programu" + #: ../src/client/components/stock.vala:23 msgid "_Close" msgstr "_Zatvori" @@ -799,330 +824,257 @@ msgid "_Discard" msgstr "Od_baci" -#: ../src/client/components/stock.vala:26 +#: ../src/client/components/stock.vala:25 ../ui/gtk/menus.ui.h:5 +msgid "_Help" +msgstr "Po_moć" + +#: ../src/client/components/stock.vala:26 ../ui/conversation-email-menus.ui.h:9 msgid "_Open" msgstr "Ot_vori" -#: ../src/client/components/stock.vala:28 -msgid "_Print..." -msgstr "_Štampaj..." +#: ../src/client/components/stock.vala:27 ../ui/gtk/menus.ui.h:3 +msgid "_Preferences" +msgstr "_Postavke" + +#: ../src/client/components/stock.vala:28 ../ui/conversation-email-menus.ui.h:7 +msgid "_Print…" +msgstr "_Štampaj…" + +#: ../src/client/components/stock.vala:29 ../ui/gtk/menus.ui.h:7 +msgid "_Quit" +msgstr "_Izađi" #: ../src/client/components/stock.vala:30 ../ui/remove_confirm.glade.h:6 msgid "_Remove" msgstr "_Ukloni" -#. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1335 -msgid "Select _All" -msgstr "Izaberi _sve" - -#: ../src/client/components/stock.vala:33 msgid "_Keep" msgstr "_Zadrži" -#: ../src/client/composer/composer-widget.vala:73 +#: ../src/client/composer/composer-link-popover.vala:150 +msgid "Link URL is not correctly formatted, e.g. http://example.com" +msgstr "Adresa veze nije ispravno oblikovana, tj. „http://primer.com“" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid link URL" +msgstr "Neispravna adresa veze" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid email address" +msgstr "Neispravna adresa e-pošte" + +#: ../src/client/composer/composer-widget.vala:154 msgid "Saved" msgstr "Sačuvana" -#: ../src/client/composer/composer-widget.vala:74 +#: ../src/client/composer/composer-widget.vala:155 msgid "Saving" msgstr "Čuvam" -#: ../src/client/composer/composer-widget.vala:75 +#: ../src/client/composer/composer-widget.vala:156 msgid "Error saving" msgstr "Greška prilikom čuvanja" -#: ../src/client/composer/composer-widget.vala:76 +#: ../src/client/composer/composer-widget.vala:157 msgid "Press Backspace to delete quote" msgstr "Pritisnite Backspace za brisanje navodnika" -#: ../src/client/composer/composer-widget.vala:77 +#: ../src/client/composer/composer-widget.vala:158 msgid "New Message" msgstr "Nova poruka" -#. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since -#. this is full-word checking, include all variants of each word. No spaces are allowed. -#: ../src/client/composer/composer-widget.vala:138 +#. Translators: This is list of keywords, separated by pipe ("|") +#. characters, that suggest an attachment; since this is full-word +#. checking, include all variants of each word. No spaces are +#. allowed. +#: ../src/client/composer/composer-widget.vala:167 msgid "" "attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" "enclosing|encloses|enclosure|enclosures" msgstr "prilog|priloži|prilogu|prilažem|prilaganja|prilozi|priloženo" #: ../src/client/composer/composer-widget.vala:1121 -#: ../src/client/composer/composer-widget.vala:1125 +#: ../src/client/composer/composer-widget.vala:1140 msgid "Do you want to discard this message?" msgstr "Da li želite da odbacite ovu poruku?" -#: ../src/client/composer/composer-widget.vala:1281 +#: ../src/client/composer/composer-widget.vala:1237 msgid "Send message with an empty subject and body?" msgstr "Da pošaljem poruku sa praznim naslovom i tekstom?" -#: ../src/client/composer/composer-widget.vala:1283 +#: ../src/client/composer/composer-widget.vala:1239 msgid "Send message with an empty subject?" msgstr "Da pošaljem poruku sa praznim naslovom?" -#: ../src/client/composer/composer-widget.vala:1285 +#: ../src/client/composer/composer-widget.vala:1241 msgid "Send message with an empty body?" msgstr "Da pošaljem poruku bez ikakvog teksta?" -#: ../src/client/composer/composer-widget.vala:1287 +#: ../src/client/composer/composer-widget.vala:1245 msgid "Send message without an attachment?" msgstr "Da pošaljem poruku bez priloga?" -#: ../src/client/composer/composer-widget.vala:1553 -msgid "Cannot add attachment" -msgstr "Ne mogu da dodam prilog" +#: ../src/client/composer/composer-widget.vala:1498 +#, c-format +msgid "“%s” already attached for delivery." +msgstr "„%s“ je već priloženo za isporuku." + +#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" +#. Translators: The first argument will be a +#. description of the document type, the second will +#. be a human-friendly size string. For example: +#. Document (100.9MB) +#: ../src/client/composer/composer-widget.vala:1506 +#: ../src/client/conversation-viewer/conversation-email.vala:138 +#, c-format +msgid "%s (%s)" +msgstr "%s (%s)" -#: ../src/client/composer/composer-widget.vala:1564 +#: ../src/client/composer/composer-widget.vala:1543 #, c-format -msgid "\"%s\" could not be found." +msgid "“%s” could not be found." msgstr "Ne mogu da pronađem „%s“." -#: ../src/client/composer/composer-widget.vala:1571 +#: ../src/client/composer/composer-widget.vala:1549 #, c-format -msgid "\"%s\" is a folder." +msgid "“%s” is a folder." msgstr "„%s“ je fascikla." -#: ../src/client/composer/composer-widget.vala:1578 +#: ../src/client/composer/composer-widget.vala:1555 #, c-format -msgid "\"%s\" is an empty file." +msgid "“%s” is an empty file." msgstr "„%s“ je prazna datoteka." -#: ../src/client/composer/composer-widget.vala:1592 +#: ../src/client/composer/composer-widget.vala:1568 #, c-format -msgid "\"%s\" could not be opened for reading." +msgid "“%s” could not be opened for reading." msgstr "Ne mogu da otvorim „%s“ za čitanje." -#: ../src/client/composer/composer-widget.vala:1599 -#, c-format -msgid "\"%s\" already attached for delivery." -msgstr "„%s“ je već priloženo za isporuku." - -#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-widget.vala:1608 -#, c-format -msgid "%s (%s)" -msgstr "%s (%s)" +#: ../src/client/composer/composer-widget.vala:1576 +msgid "Cannot add attachment" +msgstr "Ne mogu da dodam prilog" -#: ../src/client/composer/composer-widget.vala:1668 +#: ../src/client/composer/composer-widget.vala:1638 msgid "To: " msgstr "Prima: " -#: ../src/client/composer/composer-widget.vala:1671 +#: ../src/client/composer/composer-widget.vala:1641 msgid "Cc: " msgstr "Cc: " -#: ../src/client/composer/composer-widget.vala:1674 +#: ../src/client/composer/composer-widget.vala:1644 msgid "Bcc: " msgstr "Bcc: " -#: ../src/client/composer/composer-widget.vala:1677 +#: ../src/client/composer/composer-widget.vala:1647 msgid "Reply-To: " msgstr "Odgovor za: " -#: ../src/client/composer/composer-widget.vala:1910 +#: ../src/client/composer/composer-widget.vala:1778 msgid "Select Color" msgstr "Izaberite boju" #. Displayed in the From dropdown to indicate an "alternate email address" #. for an account. The first printf argument will be the alternate email #. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2345 +#: ../src/client/composer/composer-widget.vala:1978 #, c-format msgid "%1$s via %2$s" msgstr "%1$s preko %2$s" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2389 +#: ../src/client/composer/composer-widget.vala:2020 msgid "_From:" msgstr "_Šalje:" +#. Translators: This is the name of the file chooser filter +#. when inserting an image in the composer. +#: ../src/client/composer/composer-widget.vala:2244 +msgid "Images" +msgstr "Slike" + +#: ../src/client/composer/spell-check-popover.vala:117 +msgid "Remove this language from the preferred list" +msgstr "Uklonite ovaj jezik sa spiska poželjnih" + +#: ../src/client/composer/spell-check-popover.vala:121 +msgid "Add this language to the preferred list" +msgstr "Dodajte ovaj jezik na spisak poželjnih" + +#: ../src/client/composer/spell-check-popover.vala:217 +msgid "Search for more languages" +msgstr "Potraži još jezika" + #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Ja" -#: ../src/client/conversation-viewer/conversation-viewer.vala:414 -msgid "No conversations selected." -msgstr "Nije izabran razgovor." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:416 -#, c-format -msgid "%u conversation selected." -msgid_plural "%u conversations selected." -msgstr[0] "Izabran je %u razgovor." -msgstr[1] "Izabrana su %u razgovora." -msgstr[2] "Izabrano je %u razgovora." -msgstr[3] "Izabran je %u razgovor." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:446 -msgid "No search results found." -msgstr "Nema rezultata pretrage." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:448 -msgid "No conversations in folder." -msgstr "Nema razgovora u fascikli." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "This message contains remote images." -msgstr "Ova poruka sadrži nepreuzete slike." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "Show Images" -msgstr "Prikaži slike" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:715 -msgid "Always Show From Sender" -msgstr "Uvek prikaži od ovog pošiljaoca" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:739 -msgid "Edit Draft" -msgstr "Uredi nacrt" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:815 -msgid "From:" -msgstr "Šalje:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:818 -msgid "To:" -msgstr "Prima:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:821 -msgid "Cc:" -msgstr "Cc:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:824 -msgid "Bcc:" -msgstr "Bcc:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:827 -msgid "Subject:" -msgstr "Naslov:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:830 -msgid "Date:" -msgstr "Datum:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1150 -#, c-format -msgid "%u read message" -msgid_plural "%u read messages" -msgstr[0] "%u nova poruka" -msgstr[1] "%u nove poruke" -msgstr[2] "%u novih poruka" -msgstr[3] "%u nova poruka" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1282 -#, c-format -msgid "This message was sent successfully, but could not be saved to %s." -msgstr "Ova poruka je uspešno poslata, ali ne može biti sačuvana u „%s“." - -#. Add a menu item for copying the current selection. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1308 -#: ../ui/composer.glade.h:4 -msgid "_Copy" -msgstr "_Umnoži" - -#. Add a menu item for copying the address. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1316 -msgid "Copy _Email Address" -msgstr "Umnoži adresu _e-pošte" - -#. Add a menu item for copying the link. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1321 -#: ../ui/composer.glade.h:17 -msgid "Copy _Link" -msgstr "Umnoži _vezu" - -#. Select message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1329 -msgid "Select _Message" -msgstr "Izaberi _poruku" - -#. Inspect. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1341 -msgid "_Inspect" -msgstr "_Proveri" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1572 -msgid "This link appears to go to" -msgstr "Ova veza izgleda kao da vodi do" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1573 -msgid "but actually goes to" -msgstr "ali zapravo vodi do" - -#. If href doesn't look like a URL, something is fishy, so warn the user -#: ../src/client/conversation-viewer/conversation-viewer.vala:1628 -msgid " (Invalid?)" -msgstr " (Neispravno?)" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1734 -msgid "_Save Image As..." -msgstr "_Sačuvaj sliku kao..." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1838 -msgid "_Save As..." -msgstr "_Sačuvaj kao..." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1843 -msgid "Save All A_ttachments..." -msgstr "Sačuvaj sve _priloge..." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1863 -msgid "Save A_ttachment..." -msgid_plural "Save All A_ttachments..." -msgstr[0] "Sačuvaj _prilog..." -msgstr[1] "Sačuvaj _priloge..." -msgstr[2] "Sačuvaj _priloge..." -msgstr[3] "Sačuvaj _prilog..." - -#. Reply to all on a message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1878 -msgid "Reply to _All" -msgstr "Odgovori _svima" - -#. Mark as read/unread. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1895 -msgid "_Mark as Read" -msgstr "_Označi kao pročitano" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1899 -msgid "_Mark as Unread" -msgstr "_Označi kao nepročitano" +#. Translators: This is the file type displayed for +#. attachments with unknown file types. +#: ../src/client/conversation-viewer/conversation-email.vala:124 +msgid "Unknown" +msgstr "Nepoznato" + +#. Preview headers +#. Translators: This is displayed in place of the from address +#. when the message has no from address. +#: ../src/client/conversation-viewer/conversation-message.vala:331 +msgid "No sender" +msgstr "Nema pošiljaoca" + +#. Translators: This separates multiple 'from' +#. addresses in the header preview for a message. +#: ../src/client/conversation-viewer/conversation-message.vala:586 +msgid ", " +msgstr ", " + +#. Translators: This string is used as the HTML IMG ALT +#. attribute value when displaying an inline image in an email +#. that did not specify a file name. E.g. Image" +msgstr "Šalje " + +#: ../ui/conversation-message.ui.h:2 +msgid "1/1/1970\t" +msgstr "1/1/1970\t" + +#: ../ui/conversation-message.ui.h:3 +msgid "Preview body text." +msgstr "Prikaži tekst poruke." + +#: ../ui/conversation-message.ui.h:4 +msgid "Sent by:" +msgstr "Poslao je:" + +#: ../ui/conversation-message.ui.h:5 +msgid "Reply to:" +msgstr "Odgovor za:" + +#: ../ui/conversation-message.ui.h:6 +msgid "Subject" +msgstr "Naslov" + +#: ../ui/conversation-message.ui.h:7 +msgid "To:" +msgstr "Prima:" + +#: ../ui/conversation-message.ui.h:8 +msgid "Cc:" +msgstr "Cc:" + +#: ../ui/conversation-message.ui.h:9 +msgid "Bcc:" +msgstr "Bcc:" + +#: ../ui/conversation-message.ui.h:10 +msgid "Show Images" +msgstr "Prikaži slike" + +#: ../ui/conversation-message.ui.h:11 +msgid "Always Show From Sender" +msgstr "Uvek prikaži od ovog pošiljaoca" + +#: ../ui/conversation-message.ui.h:12 +msgid "Remote images not shown" +msgstr "Udaljene slike nisu prikazane" + +#: ../ui/conversation-message.ui.h:13 +msgid "Only show remote images from senders you trust." +msgstr "Prikažite samo slike pošiljalaca kojima verujete." + +#: ../ui/conversation-message.ui.h:14 +msgid "But actually goes to:" +msgstr "Ali zapravo vodi do:" + +#: ../ui/conversation-message.ui.h:15 +msgid "The link appears to go to:" +msgstr "Veza izgleda kao da vodi do:" + +#: ../ui/conversation-message.ui.h:16 +msgid "Deceptive link found" +msgstr "Nađoh obmanljivu vezu" + +#: ../ui/conversation-message.ui.h:17 +msgid "The email sender may be leading you to the wrong web site." +msgstr "Pošiljalac e-pošte možda vas vodi na pogrešan veb sajt." + +#: ../ui/conversation-message.ui.h:18 +msgid "If unsure, contact the sender and ask before continuing." +msgstr "" +"Ako niste sigurni, obratite se pošiljaocu i pitajte ga pre nego što nastavite." + +#: ../ui/conversation-viewer.ui.h:1 +msgid "Find in conversation" +msgstr "Nađi u razgovoru" + +#: ../ui/conversation-viewer.ui.h:2 +msgid "Find the previous occurrence of the search string." +msgstr "Nađite prethodno pojavljivanje niske pretrage." + +#: ../ui/conversation-viewer.ui.h:3 +msgid "Find the next occurrence of the search string." +msgstr "Nađite sledeće pojavljivanje niske pretrage." + #: ../ui/edit_alternate_emails.glade.h:1 msgid "Remove email address" msgstr "Ukloni adrese e-pošte" @@ -2078,6 +2185,247 @@ msgid "label" msgstr "natpis" +#: ../ui/gtk/help-overlay.ui.h:1 +msgid "Conversation Shortcuts" +msgstr "Prečice razgovora" + +#: ../ui/gtk/help-overlay.ui.h:2 +msgctxt "shortcut window" +msgid "General" +msgstr "Opšte" + +#: ../ui/gtk/help-overlay.ui.h:3 +msgctxt "shortcut window" +msgid "Move focus to the next/previous pane" +msgstr "Prebacite fokus na sledeće/prethodno okno" + +#: ../ui/gtk/help-overlay.ui.h:4 +msgctxt "shortcut window" +msgid "Move focus to conversation list" +msgstr "Prebacite fokus na spisak razgovora" + +#: ../ui/gtk/help-overlay.ui.h:5 +msgctxt "shortcut window" +msgid "Detach composer window" +msgstr "Otkačite prozor sastavljača" + +#: ../ui/gtk/help-overlay.ui.h:6 +msgctxt "shortcut window" +msgid "Close composer window" +msgstr "Zatvorite prozor sastavljača" + +#: ../ui/gtk/help-overlay.ui.h:7 +msgctxt "shortcut window" +msgid "Show keyboard shortcuts" +msgstr "Prikažite prečice tastature" + +#: ../ui/gtk/help-overlay.ui.h:8 +msgctxt "shortcut window" +msgid "Show help" +msgstr "Prikažite pomoć" + +#: ../ui/gtk/help-overlay.ui.h:9 +msgctxt "shortcut window" +msgid "Quit the application" +msgstr "Izađite iz programa" + +#: ../ui/gtk/help-overlay.ui.h:10 +msgctxt "shortcut window" +msgid "Search" +msgstr "Tražite" + +#: ../ui/gtk/help-overlay.ui.h:11 +msgctxt "shortcut window" +msgid "Jump to search box" +msgstr "Skočite u polje pretrage" + +#: ../ui/gtk/help-overlay.ui.h:12 +msgctxt "shortcut window" +msgid "Find in current conversation" +msgstr "Nađite u tekućem razgovoru" + +#: ../ui/gtk/help-overlay.ui.h:13 +msgctxt "shortcut window" +msgid "Find next/previous in current conversation" +msgstr "Nađite sledeće/prethodno u tekućem razgovoru" + +#: ../ui/gtk/help-overlay.ui.h:14 +msgctxt "shortcut window" +msgid "Actions" +msgstr "Radnje" + +#: ../ui/gtk/help-overlay.ui.h:15 +msgctxt "shortcut window" +msgid "Compose a new message" +msgstr "Sastavite novu poruku" + +#: ../ui/gtk/help-overlay.ui.h:16 +msgctxt "shortcut window" +msgid "Reply to sender " +msgstr "Odgovorite pošiljaocu " + +#: ../ui/gtk/help-overlay.ui.h:17 +msgctxt "shortcut window" +msgid "Reply to all" +msgstr "Odgovori svima" + +#: ../ui/gtk/help-overlay.ui.h:18 +msgctxt "shortcut window" +msgid "Forward" +msgstr "Prosledi" + +#: ../ui/gtk/help-overlay.ui.h:19 +msgctxt "shortcut window" +msgid "Archive" +msgstr "Arhiva" + +#: ../ui/gtk/help-overlay.ui.h:20 +msgctxt "shortcut window" +msgid "Move to trash" +msgstr "Premestite u smeće" + +#: ../ui/gtk/help-overlay.ui.h:21 +msgctxt "shortcut window" +msgid "Toggle spam" +msgstr "Okinite đubre" + +#: ../ui/gtk/help-overlay.ui.h:22 +msgctxt "shortcut window" +msgid "Move the conversation" +msgstr "Premestite razgovor" + +#: ../ui/gtk/help-overlay.ui.h:23 +msgctxt "shortcut window" +msgid "Label the conversation" +msgstr "Označite razgovor" + +#: ../ui/gtk/help-overlay.ui.h:24 +msgctxt "shortcut window" +msgid "Mark read" +msgstr "Označi kao pročitano" + +#: ../ui/gtk/help-overlay.ui.h:25 +msgctxt "shortcut window" +msgid "Mark unread" +msgstr "Označi kao nepročitano" + +#: ../ui/gtk/help-overlay.ui.h:26 +msgctxt "shortcut window" +msgid "View" +msgstr "Pregledajte" + +#: ../ui/gtk/help-overlay.ui.h:27 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Uvećajte" + +#: ../ui/gtk/help-overlay.ui.h:28 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Umanjite" + +#: ../ui/gtk/help-overlay.ui.h:29 +msgctxt "shortcut window" +msgid "Reset zoom" +msgstr "Povratite uveličanje" + +#: ../ui/gtk/help-overlay.ui.h:30 +msgctxt "shortcut window" +msgid "Additional Shortcuts" +msgstr "Dodatne prečice" + +#: ../ui/gtk/help-overlay.ui.h:31 +msgctxt "shortcut window" +msgid "Star" +msgstr "Dodajte zvezdicu" + +#: ../ui/gtk/help-overlay.ui.h:32 +msgctxt "shortcut window" +msgid "Unstar" +msgstr "Uklonite zvezdicu" + +#: ../ui/gtk/help-overlay.ui.h:33 +msgctxt "shortcut window" +msgid "Delete" +msgstr "Obrišite" + +#: ../ui/gtk/help-overlay.ui.h:34 +msgctxt "shortcut window" +msgid "Jump to next (older) conversation" +msgstr "Skočite na sledeći (stariji) razgovor" + +#: ../ui/gtk/help-overlay.ui.h:35 +msgctxt "shortcut window" +msgid "Jump to previous (newer) conversation" +msgstr "Skočite na prethodni (noviji) razgovor" + +#: ../ui/gtk/help-overlay.ui.h:36 +msgid "Composer Shortcuts" +msgstr "Prečice sastavljača" + +#: ../ui/gtk/help-overlay.ui.h:37 +msgctxt "shortcut window" +msgid "Quote text" +msgstr "Citirajte tekst" + +#: ../ui/gtk/help-overlay.ui.h:38 +msgctxt "shortcut window" +msgid "Unquote text" +msgstr "Poništite citat teksta" + +#: ../ui/gtk/help-overlay.ui.h:39 +msgctxt "shortcut window" +msgid "Send" +msgstr "Pošaljite" + +#: ../ui/gtk/help-overlay.ui.h:40 +msgctxt "shortcut window" +msgid "Add attachment" +msgstr "Dodajte prilog" + +#: ../ui/gtk/help-overlay.ui.h:41 +msgctxt "shortcut window" +msgid "Rich text mode" +msgstr "Obogatite tekst" + +#: ../ui/gtk/help-overlay.ui.h:42 +msgctxt "shortcut window" +msgid "Bold text" +msgstr "Podebljajte tekst" + +#: ../ui/gtk/help-overlay.ui.h:43 +msgctxt "shortcut window" +msgid "Italicize text" +msgstr "Iskosite tekst" + +#: ../ui/gtk/help-overlay.ui.h:44 +msgctxt "shortcut window" +msgid "Underline text" +msgstr "Podvucite tekst" + +#: ../ui/gtk/help-overlay.ui.h:45 +msgctxt "shortcut window" +msgid "Strike text" +msgstr "Precrtajte tekst" + +#: ../ui/gtk/help-overlay.ui.h:46 +msgctxt "shortcut window" +msgid "Insert a link" +msgstr "Umetnite vezu" + +#: ../ui/gtk/help-overlay.ui.h:47 +msgctxt "shortcut window" +msgid "Remove formatting" +msgstr "Uklonite formatiranje" + +#: ../ui/gtk/menus.ui.h:2 +msgid "A_ccounts" +msgstr "_Nalozi" + +#: ../ui/gtk/menus.ui.h:4 +msgid "_Keyboard Shortcuts" +msgstr "_Prečice tastature" + #: ../ui/login.glade.h:1 msgid "email@example.com" msgstr "e-pošta@primer.com" @@ -2202,7 +2550,7 @@ msgid "Use IMAP cre_dentials" msgstr "Koristi IMAP _uverenja" -#: ../ui/login.glade.h:34 ../ui/preferences.glade.h:5 +#: ../ui/login.glade.h:34 msgid "Composer" msgstr "Sastavljač" @@ -2222,6 +2570,10 @@ msgid "_Download mail" msgstr "_Preuzmi poštu" +#: ../ui/main-toolbar.ui.h:1 +msgid "Empty Spam or Trash folders" +msgstr "Isprazni fascikle s nepoželjnom poštom ili otpad" + #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" msgstr "SMTP uverenja" @@ -2238,47 +2590,43 @@ msgid "_Authenticate" msgstr "_Potvrdi identitet" -#: ../ui/preferences.glade.h:1 +#: ../ui/preferences-dialog.ui.h:1 msgid "Reading" msgstr "Čitanje" -#: ../ui/preferences.glade.h:2 +#: ../ui/preferences-dialog.ui.h:2 msgid "_Automatically select next message" msgstr "_Sam izaberi sledeću poruku" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences-dialog.ui.h:3 msgid "_Display conversation preview" msgstr "_Prikaži pregled razgovora" -#: ../ui/preferences.glade.h:4 +#: ../ui/preferences-dialog.ui.h:4 msgid "Use _three pane view" msgstr "Prikaz u _tri površi" -#: ../ui/preferences.glade.h:6 -msgid "Enable _spell checking" -msgstr "Uključi _proveru pisanja" - -#: ../ui/preferences.glade.h:7 +#: ../ui/preferences-dialog.ui.h:5 msgid "Notifications" msgstr "Obaveštenja" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences-dialog.ui.h:6 msgid "_Play notification sounds" msgstr "_Pusti zvuke obaveštenja" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences-dialog.ui.h:7 msgid "Show _notifications for new mail" msgstr "Prikaži _obaveštenja za novu poštu" -#: ../ui/preferences.glade.h:10 +#: ../ui/preferences-dialog.ui.h:8 msgid "Always _watch for new mail" msgstr "Uvek _osluškuj za nove poruke" -#: ../ui/preferences.glade.h:11 +#: ../ui/preferences-dialog.ui.h:9 msgid "Geary will run in the background and notify of new mail" msgstr "Geri će raditi u pozadini i slati obaveštenja kada dođe nova e-poruka" -#: ../ui/preferences.glade.h:12 +#: ../ui/preferences-dialog.ui.h:10 msgid "Preferences" msgstr "Postavke" @@ -2310,6 +2658,138 @@ msgid "Geary update in progress…" msgstr "Ažuriranje Gerija je u toku…" +#~ msgid "none" +#~ msgstr "ništa" + +#~ msgid "Empty" +#~ msgstr "Isprazni" + +#~ msgid "%i match" +#~ msgid_plural "%i matches" +#~ msgstr[0] "%i rezultat" +#~ msgstr[1] "%i rezultata" +#~ msgstr[2] "%i rezultata" +#~ msgstr[3] "%i rezultat" + +#~ msgid "%i match (wrapped)" +#~ msgid_plural "%i matches (wrapped)" +#~ msgstr[0] "%i rezultat (umotano)" +#~ msgstr[1] "%i rezultata (umotano)" +#~ msgstr[2] "%i rezultata (umotano)" +#~ msgstr[3] "%i rezultat (umotano)" + +#~ msgid "not found" +#~ msgstr "nije nađeno" + +#~ msgid "No search results found." +#~ msgstr "Nema rezultata pretrage." + +#~ msgid "From:" +#~ msgstr "Šalje:" + +#~ msgid "Date:" +#~ msgstr "Datum:" + +#~ msgid "Copy _Link" +#~ msgstr "Umnoži _vezu" + +#~ msgid "Select _Message" +#~ msgstr "Izaberi _poruku" + +#~ msgid " (Invalid?)" +#~ msgstr " (Neispravno?)" + +#~ msgid "_Save As..." +#~ msgstr "_Sačuvaj kao..." + +#~ msgid "Save A_ttachment..." +#~ msgid_plural "Save All A_ttachments..." +#~ msgstr[0] "Sačuvaj _prilog..." +#~ msgstr[1] "Sačuvaj _priloge..." +#~ msgstr[2] "Sačuvaj _priloge..." +#~ msgstr[3] "Sačuvaj _prilog..." + +#~ msgid "_Left" +#~ msgstr "_Levo" + +#~ msgid "_Right" +#~ msgstr "_Desno" + +#~ msgid "_Center" +#~ msgstr "Po _sredini" + +#~ msgid "_Justify" +#~ msgstr "_Poravnaj" + +#~ msgid "Link (Ctrl+L)" +#~ msgstr "Veza (Ctrl+L)" + +#~ msgid "More options" +#~ msgstr "Još mogućnosti" + +#~ msgctxt "Label" +#~ msgid "Close and Save" +#~ msgstr "Zatvori i sačuvaj" + +#~ msgctxt "Short Label" +#~ msgid "Close and Save" +#~ msgstr "Zatvori i sačuvaj" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Save" +#~ msgstr "Zatvori i sačuvaj" + +#~ msgctxt "Label" +#~ msgid "Close and Discard" +#~ msgstr "Zatvori i odbaci" + +#~ msgctxt "Short Label" +#~ msgid "Close and Discard" +#~ msgstr "Zatvori i odbaci" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Discard" +#~ msgstr "Zatvori i odbaci" + +#~ msgid "Large" +#~ msgstr "Veliki" + +#~ msgid "Medium" +#~ msgstr "Srednji" + +#~ msgid "Small" +#~ msgstr "Mali" + +#~ msgid "Sans Serif" +#~ msgstr "Bezserifni" + +#~ msgid "Serif" +#~ msgstr "Serifni" + +#~ msgid "Fixed Width" +#~ msgstr "Stalna širina" + +#~ msgid "Detach" +#~ msgstr "Otkači" + +#~ msgid "_Attach File" +#~ msgstr "_Priloži datoteku" + +#~ msgid "Attach File" +#~ msgstr "Prilaže datoteku" + +#~ msgid "_Include Original Attachments" +#~ msgstr "_Uključi izvorne priloge" + +#~ msgid "Spelling language" +#~ msgstr "Jezik za proveru pisanja" + +#~ msgid "Enable _spell checking" +#~ msgstr "Uključi _proveru pisanja" + +#~ msgid "Application Menu" +#~ msgstr "Izbornik programa" + #~ msgid "Copyright 2011-2015 Yorba Foundation" #~ msgstr "Autorska prava 2011-2015 Jorba (Yorba) Fondacija" diff -Nru geary-0.11.4/po/sr.po geary-0.12.0/po/sr.po --- geary-0.11.4/po/sr.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/sr.po 2017-10-02 11:25:21.000000000 +0000 @@ -8,45 +8,109 @@ msgid "" msgstr "" "Project-Id-Version: geary\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=geary&k" -"eywords=I18N+L10N&component=internationalization\n" -"POT-Creation-Date: 2017-01-21 22:09+0000\n" -"PO-Revision-Date: 2017-01-26 07:05+0200\n" +"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" +"product=geary&keywords=I18N+L10N&component=internationalization\n" +"POT-Creation-Date: 2017-02-26 06:52+0000\n" +"PO-Revision-Date: 2017-02-26 09:25+0200\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : " -"n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n" +"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Project-Style: gnome\n" -#: ../desktop/geary.desktop.in.h:1 ../desktop/geary-autostart.desktop.in.h:1 +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:1 +#: ../desktop/org.gnome.Geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" msgstr "Гери" -#: ../desktop/geary.desktop.in.h:2 ../desktop/geary-autostart.desktop.in.h:2 -#: ../src/client/application/geary-application.vala:18 +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:2 +#: ../desktop/org.gnome.Geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 +msgid "Send and receive email" +msgstr "Шаље и прима е-пошту" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:3 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"Гери је програм за е-пошту изграђен око разговора, за радну површ Гнома 3. " +"Омогућује вам да читате, нађете и шаљете е-пошту са јасним, савременим " +"сучељем." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:4 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"Разговори вам омогућавају да прочитате читав разговор а да не морате да " +"тражите и кликате од поруке до поруке." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:5 +msgid "Geary’s features include:" +msgstr "У Геријеве функције спадају:" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:6 +msgid "Quick email account setup" +msgstr "Брзо подешавање налога е-поште" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:7 +msgid "Shows related messages together in conversations" +msgstr "Заједнички приказ повезаних порука у разговору" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:8 +msgid "Fast, full text and keyword search" +msgstr "Брза претрага по читавом тексту и кључној речи" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:9 +msgid "Full-featured HTML and plain text message composer" +msgstr "Потпуно функционалан састављач поруке у ХТМЛ-у и обичном тексту" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:10 +msgid "Desktop notification of new mail" +msgstr "Обавештење о новој пошти на радној површи" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:11 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" +msgstr "" +"Сагласан је са Г-поштом, Јаху! поштом, Аутлуком и другим ИМАП серверима" + +#: ../desktop/org.gnome.Geary.desktop.in.h:2 +msgid "Email" +msgstr "Е-пошта" + +#: ../desktop/org.gnome.Geary.desktop.in.h:3 +msgid "Geary Email" +msgstr "Геријева е-пошта" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/org.gnome.Geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "пошта;е-пошта;имап;гпошта;г-пошта;јаху;хотмејл;аутлук;" + +#: ../desktop/org.gnome.Geary.desktop.in.h:7 ../ui/gtk/menus.ui.h:1 +msgid "Compose Message" +msgstr "Нова порука" + +#: ../desktop/geary-autostart.desktop.in.h:2 +#: ../src/client/application/geary-application.vala:21 msgid "Mail Client" msgstr "Програм за е-пошту" -#: ../desktop/geary.desktop.in.h:3 ../desktop/geary-autostart.desktop.in.h:3 +#: ../desktop/geary-autostart.desktop.in.h:3 msgid "Geary Mail" msgstr "Геријева пошта" -#: ../desktop/geary.desktop.in.h:4 ../desktop/geary-autostart.desktop.in.h:4 -msgid "Send and receive email" -msgstr "Шаље и прима е-пошту" - -#: ../desktop/geary.desktop.in.h:5 ../desktop/geary-autostart.desktop.in.h:5 +#: ../desktop/geary-autostart.desktop.in.h:5 msgid "Email;E-mail;Mail;" msgstr "пошта;е-пошта;ел. пошта;електронска пошта;" -#: ../desktop/geary.desktop.in.h:6 -msgid "Compose Message" -msgstr "Нова порука" - #: ../desktop/geary-attach.contract.in.h:1 msgid "Send by email" msgstr "Пошаљи е-поштом" @@ -57,6 +121,7 @@ #: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:31 +#: ../ui/conversation-email-menus.ui.h:10 msgid "_Save" msgstr "_Сачувај" @@ -66,7 +131,7 @@ msgstr "_Додај" #. reset/clear widgets -#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 #, c-format msgid "Additional addresses for %s" msgstr "Додатне адресе за %s" @@ -87,108 +152,125 @@ msgid "First Last" msgstr "Име и презиме" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." msgstr "Добро дошли у Гери." -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." msgstr "Унесите податке вашег налога за почетак." -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "од пре 2 недеље" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:254 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "од пре 1 месеца" -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "од пре 3 месеци" -#: ../src/client/accounts/add-edit-page.vala:256 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "од пре 6 месеци" -#: ../src/client/accounts/add-edit-page.vala:257 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "од пре 1 године" -#: ../src/client/accounts/add-edit-page.vala:258 +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" msgstr "од пре 2 године" -#: ../src/client/accounts/add-edit-page.vala:259 +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" msgstr "од пре 4 година" #. Separator -#: ../src/client/accounts/add-edit-page.vala:261 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "Све" -#: ../src/client/accounts/add-edit-page.vala:280 +#: ../src/client/accounts/add-edit-page.vala:283 msgid "Edit" msgstr "Уређивање" -#: ../src/client/accounts/add-edit-page.vala:282 +#: ../src/client/accounts/add-edit-page.vala:285 msgid "Preview" msgstr "Преглед" -#: ../src/client/accounts/add-edit-page.vala:723 +#: ../src/client/accounts/add-edit-page.vala:751 msgid "Remem_ber passwords" msgstr "_Запамти лозинке" -#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:7 +#: ../src/client/accounts/add-edit-page.vala:758 ../ui/login.glade.h:7 msgid "Remem_ber password" msgstr "_Запамти лозинку" -#: ../src/client/accounts/add-edit-page.vala:764 +#: ../src/client/accounts/add-edit-page.vala:792 msgid "Unable to validate:\n" msgstr "Не могу да потврдим:\n" -#: ../src/client/accounts/add-edit-page.vala:766 -msgid " • Invalid account nickname.\n" -msgstr " • Неисправан надимак налога.\n" - -#: ../src/client/accounts/add-edit-page.vala:769 -msgid " • Email address already added to Geary.\n" -msgstr " • Адреса е-поште је већ додата у Гери.\n" - -#: ../src/client/accounts/add-edit-page.vala:773 -msgid " • IMAP connection error.\n" -msgstr " • Грешка ИМАП везе.\n" - -#: ../src/client/accounts/add-edit-page.vala:776 -msgid " • IMAP username or password incorrect.\n" -msgstr " • Нетачно корисничко име или лозинка ИМАП-а.\n" - -#: ../src/client/accounts/add-edit-page.vala:779 -msgid " • SMTP connection error.\n" -msgstr " • Грешка СМТП везе.\n" - -#: ../src/client/accounts/add-edit-page.vala:782 -msgid " • SMTP username or password incorrect.\n" -msgstr " • Нетачно корисничко име или лозинка СМТП-а.\n" - -#: ../src/client/accounts/add-edit-page.vala:786 -msgid " • Connection error.\n" -msgstr " • Грешка везе.\n" - -#: ../src/client/accounts/add-edit-page.vala:790 -msgid " • Username or password incorrect.\n" -msgstr " • Нетачно корисничко име или лозинка.\n" +#: ../src/client/accounts/add-edit-page.vala:794 +msgid " • Invalid account nickname.\n" +msgstr " • Неисправан надимак налога.\n" + +#: ../src/client/accounts/add-edit-page.vala:797 +msgid " • Email address already added to Geary.\n" +msgstr " • Адреса е-поште је већ додата у Гери.\n" + +#: ../src/client/accounts/add-edit-page.vala:801 +msgid " • IMAP connection error.\n" +msgstr " • Грешка ИМАП везе.\n" + +#: ../src/client/accounts/add-edit-page.vala:804 +msgid " • IMAP username or password incorrect.\n" +msgstr " • Нетачно корисничко име или лозинка ИМАП-а.\n" + +#: ../src/client/accounts/add-edit-page.vala:807 +msgid " • SMTP connection error.\n" +msgstr " • Грешка СМТП везе.\n" + +#: ../src/client/accounts/add-edit-page.vala:810 +msgid " • SMTP username or password incorrect.\n" +msgstr " • Нетачно корисничко име или лозинка СМТП-а.\n" + +#: ../src/client/accounts/add-edit-page.vala:814 +msgid " • Connection error.\n" +msgstr " • Грешка везе.\n" + +#: ../src/client/accounts/add-edit-page.vala:818 +msgid " • Username or password incorrect.\n" +msgstr " • Нетачно корисничко име или лозинка.\n" -#: ../src/client/application/geary-application.vala:19 +#: ../src/client/application/geary-application.vala:22 msgid "Copyright 2016 Software Freedom Conservancy Inc." msgstr "Ауторска права 2016 Software Freedom Conservancy Inc." -#: ../src/client/application/geary-application.vala:21 +#: ../src/client/application/geary-application.vala:24 msgid "Visit the Geary web site" msgstr "Посетите веб страницу Герија" +#: ../src/client/application/geary-application.vala:445 +#, c-format +msgid "About %s" +msgstr "О програму „%s“" + +#. Translators: add your name and email address to receive +#. credit in the About dialog For example: Yamada Taro +#. +#: ../src/client/application/geary-application.vala:449 +msgid "translator-credits" +msgstr "" +"Мирослав Николић \n" +"Милош Поповић \n" +"Марко М. Костић \n" +"\n" +"http://prevod.org — превод на српски језик" + #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" msgstr "Покреће Герија са скривеним главним прозором" @@ -236,224 +318,198 @@ #: ../src/client/application/geary-args.vala:25 msgid "Allow inspection of WebView" -msgstr "Допушта прегледање Веб прегледа (WebView)" +msgstr "Допушта прегледање Веб прегледа" #: ../src/client/application/geary-args.vala:26 msgid "Revoke all server certificates with TLS warnings" msgstr "Опозива сва уверења сервера са ТЛС упозорењима" #: ../src/client/application/geary-args.vala:27 +msgid "Perform a graceful quit" +msgstr "Обавља грациозан излаз" + +#: ../src/client/application/geary-args.vala:28 msgid "Display program version" msgstr "Приказује издање програма" #. This gives a command-line hint on how to open new composer windows with mailto: -#: ../src/client/application/geary-args.vala:51 +#: ../src/client/application/geary-args.vala:53 #, c-format msgid "Use %s to open a new composer window" msgstr "Користите „%s“ за отварање новог прозора састављача" -#: ../src/client/application/geary-args.vala:52 +#: ../src/client/application/geary-args.vala:54 msgid "Please report comments, suggestions and bugs to:" msgstr "Напомене, предлоге и грешке шаљите на:" #. i18n: Command line arguments are invalid -#: ../src/client/application/geary-args.vala:59 +#: ../src/client/application/geary-args.vala:61 #, c-format msgid "Failed to parse command line options: %s\n" msgstr "Не могу да обрадим опцију линије наредби: %s\n" -#: ../src/client/application/geary-args.vala:70 +#: ../src/client/application/geary-args.vala:72 #, c-format -msgid "Unrecognized command line option \"%s\"\n" -msgstr "Непозната опција линије наредби: %s\n" +msgid "Unrecognized command line option “%s”\n" +msgstr "Непозната опција линије наредби „%s“\n" -#: ../src/client/application/geary-controller.vala:61 +#: ../src/client/application/geary-controller.vala:57 msgid "Delete conversation" msgstr "Обриши разговор" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:58 msgid "Delete conversation (Shift+Delete)" -msgstr "Обриши разговор (Shift+Del)" +msgstr "Обриши разговор (Помак+Обриши)" -#: ../src/client/application/geary-controller.vala:63 +#: ../src/client/application/geary-controller.vala:59 msgid "Delete conversations (Shift+Delete)" -msgstr "Обриши разговоре (Shift+Del)" +msgstr "Обриши разговоре (Помак+Обриши)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:67 +#: ../src/client/application/geary-controller.vala:63 msgid "Move conversation to Trash (Delete, Backspace)" -msgstr "Премести разговор у смеће (Del, Backspace)" +msgstr "Премести разговор у смеће (Обриши, Повратница)" -#: ../src/client/application/geary-controller.vala:68 +#: ../src/client/application/geary-controller.vala:64 msgid "Move conversations to Trash (Delete, Backspace)" -msgstr "Премести разговоре у смеће (Del, Backspace)" +msgstr "Премести разговоре у смеће (Обриши, Повратница)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:72 +#: ../src/client/application/geary-controller.vala:68 msgid "_Archive" msgstr "_Архивирај" -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:69 msgid "Archive conversation (A)" msgstr "Архивирај разговор (А)" -#: ../src/client/application/geary-controller.vala:74 +#: ../src/client/application/geary-controller.vala:70 msgid "Archive conversations (A)" msgstr "Архивирај разговоре (А)" -#: ../src/client/application/geary-controller.vala:77 +#: ../src/client/application/geary-controller.vala:73 msgid "Mark as S_pam" msgstr "Означи као _непожељно" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:74 msgid "Mark as not S_pam" msgstr "Означи да није _непожељно" -#: ../src/client/application/geary-controller.vala:80 -#: ../src/client/application/geary-controller.vala:396 +#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:448 msgid "Mark conversation" msgstr "Означи разговор" -#: ../src/client/application/geary-controller.vala:81 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark conversations" msgstr "Означи разговоре" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:78 msgid "Add label to conversation" msgstr "Додај натпис разговору" -#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:79 msgid "Add label to conversations" msgstr "Додај натпис разговорима" -#: ../src/client/application/geary-controller.vala:84 -#: ../src/client/application/geary-controller.vala:435 +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:487 msgid "Move conversation" msgstr "Премести разговор" -#: ../src/client/application/geary-controller.vala:85 +#: ../src/client/application/geary-controller.vala:81 msgid "Move conversations" msgstr "Премести разговоре" -#: ../src/client/application/geary-controller.vala:376 -#: ../ui/app_menu.interface.h:1 -msgid "A_ccounts" -msgstr "_Налози" - -#: ../src/client/application/geary-controller.vala:381 -#: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 -msgid "_Preferences" -msgstr "_Поставке" - -#: ../src/client/application/geary-controller.vala:385 -#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:3 -msgid "_Help" -msgstr "По_моћ" - -#: ../src/client/application/geary-controller.vala:389 -#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:4 -msgid "_About" -msgstr "_О програму" - -#: ../src/client/application/geary-controller.vala:393 -#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:5 -msgid "_Quit" -msgstr "_Изађи" - -#: ../src/client/application/geary-controller.vala:398 -msgid "_Mark as..." -msgstr "_Означи као..." +#: ../src/client/application/geary-controller.vala:450 +msgid "_Mark as…" +msgstr "_Означи као…" -#: ../src/client/application/geary-controller.vala:404 +#: ../src/client/application/geary-controller.vala:456 msgid "Mark as _Read" msgstr "Означи као _прочитано" -#: ../src/client/application/geary-controller.vala:410 +#: ../src/client/application/geary-controller.vala:462 msgid "Mark as _Unread" msgstr "Означи као _непрочитано" -#: ../src/client/application/geary-controller.vala:416 +#: ../src/client/application/geary-controller.vala:468 msgid "_Star" msgstr "_Додај звездицу" -#: ../src/client/application/geary-controller.vala:421 +#: ../src/client/application/geary-controller.vala:473 msgid "U_nstar" msgstr "_Уклони звездицу" -#: ../src/client/application/geary-controller.vala:431 +#: ../src/client/application/geary-controller.vala:483 msgid "Add label" msgstr "Додај натпис" -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:484 msgid "_Label" msgstr "_Натпис" -#: ../src/client/application/geary-controller.vala:436 +#: ../src/client/application/geary-controller.vala:488 msgid "_Move" msgstr "_Премести" -#: ../src/client/application/geary-controller.vala:440 +#: ../src/client/application/geary-controller.vala:492 msgid "Compose new message (Ctrl+N, N)" -msgstr "Саставите нову поруку (Ctrl+N, N)" +msgstr "Саставите нову поруку (Ктрл+N, N)" -#. Reply to a message. -#: ../src/client/application/geary-controller.vala:444 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1873 +#: ../src/client/application/geary-controller.vala:496 +#: ../ui/conversation-email-menus.ui.h:1 msgid "_Reply" msgstr "_Одговори" -#: ../src/client/application/geary-controller.vala:445 +#: ../src/client/application/geary-controller.vala:497 msgid "Reply (Ctrl+R, R)" -msgstr "Одговорите (Ctrl+R, R)" +msgstr "Одговорите (Ктрл+R, R)" -#: ../src/client/application/geary-controller.vala:449 +#: ../src/client/application/geary-controller.vala:501 msgid "R_eply All" msgstr "Одговори _свима" -#: ../src/client/application/geary-controller.vala:450 +#: ../src/client/application/geary-controller.vala:502 msgid "Reply all (Ctrl+Shift+R, Shift+R)" -msgstr "Одговорите свима (Ctrl+Shift+R, Shift+R)" +msgstr "Одговорите свима (Ктрл+Shift+R, Shift+R)" -#. Forward a message. -#: ../src/client/application/geary-controller.vala:455 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1883 +#: ../src/client/application/geary-controller.vala:507 +#: ../ui/conversation-email-menus.ui.h:3 msgid "_Forward" msgstr "_Проследи" -#: ../src/client/application/geary-controller.vala:456 +#: ../src/client/application/geary-controller.vala:508 msgid "Forward (Ctrl+L, F)" -msgstr "Проследите (Ctrl+L, F)" - -#: ../src/client/application/geary-controller.vala:495 -msgid "Empty" -msgstr "Испразни" - -#: ../src/client/application/geary-controller.vala:496 -msgid "Empty Spam or Trash folders" -msgstr "Испразни фасцикле с непожељном поштом или отпад" +msgstr "Проследите (Ктрл+L, F)" -#: ../src/client/application/geary-controller.vala:500 +#: ../src/client/application/geary-controller.vala:538 msgid "Empty _Spam…" msgstr "Испразни _непожељно…" -#: ../src/client/application/geary-controller.vala:504 +#: ../src/client/application/geary-controller.vala:542 msgid "Empty _Trash…" msgstr "Испразни _отпад…" #. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:537 +#: ../src/client/application/geary-controller.vala:574 msgid "Toggle search bar" msgstr "Приказ траке за претрагу" -#: ../src/client/application/geary-controller.vala:744 +#. No callback is connected, since we bind the toggle button to the find bar visibility +#: ../src/client/application/geary-controller.vala:579 +msgid "Toggle find bar" +msgstr "Приказ траке за претрагу" + +#: ../src/client/application/geary-controller.vala:757 msgid "Unable to store server trust exception" msgstr "Не могу да сачувам изузетак поверења сервера" -#: ../src/client/application/geary-controller.vala:981 +#: ../src/client/application/geary-controller.vala:992 msgid "Your settings are insecure" msgstr "Ваша подешавања нису безбедна" -#: ../src/client/application/geary-controller.vala:982 +#: ../src/client/application/geary-controller.vala:993 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -463,15 +519,15 @@ "корисничко име и лозинку може да прочита неко други на мрежи. Да ли сигурно " "желите да наставите?" -#: ../src/client/application/geary-controller.vala:983 +#: ../src/client/application/geary-controller.vala:994 msgid "Co_ntinue" msgstr "_Настави" -#: ../src/client/application/geary-controller.vala:1030 +#: ../src/client/application/geary-controller.vala:1041 msgid "Error connecting to the server" msgstr "Грешка повезивања на сервер" -#: ../src/client/application/geary-controller.vala:1031 +#: ../src/client/application/geary-controller.vala:1042 msgid "" "Geary encountered an error while connecting to the server. Please try again " "in a few moments." @@ -480,12 +536,12 @@ "неколико тренутака." #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:1068 +#: ../src/client/application/geary-controller.vala:1079 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "Грешка слања е-поште" -#: ../src/client/application/geary-controller.vala:1069 +#: ../src/client/application/geary-controller.vala:1080 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." @@ -495,12 +551,12 @@ #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1073 +#: ../src/client/application/geary-controller.vala:1084 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "Грешка приликом чувања послате поште" -#: ../src/client/application/geary-controller.vala:1074 +#: ../src/client/application/geary-controller.vala:1085 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." @@ -508,19 +564,19 @@ "Гери је наишао на грешку приликом чувања поруке у „Послато“. Порука ће " "остати у вашој фасцикли „За слање“ све док је не избришете." -#: ../src/client/application/geary-controller.vala:1143 +#: ../src/client/application/geary-controller.vala:1154 msgid "Labels" msgstr "Натписи" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1155 +#: ../src/client/application/geary-controller.vala:1166 #, c-format msgid "Unable to open the database for %s" msgstr "Не могу да отворим базу података за „%s“" -#: ../src/client/application/geary-controller.vala:1156 +#: ../src/client/application/geary-controller.vala:1167 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -544,20 +600,20 @@ "Поновна изградња базе података ће уништити е-пошту коју чувате на вашем " "рачунару и њене прилоге. Пошта на вашем серверу ће остати нетакнута." -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "_Rebuild" msgstr "Поново _изгради" -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "E_xit" msgstr "_Изађи" -#: ../src/client/application/geary-controller.vala:1167 +#: ../src/client/application/geary-controller.vala:1178 #, c-format -msgid "Unable to rebuild database for \"%s\"" +msgid "Unable to rebuild database for “%s”" msgstr "Не могу да поново изградим базу података за „%s“" -#: ../src/client/application/geary-controller.vala:1168 +#: ../src/client/application/geary-controller.vala:1179 #, c-format msgid "" "Error during rebuild:\n" @@ -570,14 +626,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1190 -#: ../src/client/application/geary-controller.vala:1200 +#: ../src/client/application/geary-controller.vala:1201 #: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:1222 #, c-format msgid "Unable to open local mailbox for %s" msgstr "Не могу да отворим локално сандуче за „%s“" -#: ../src/client/application/geary-controller.vala:1191 +#: ../src/client/application/geary-controller.vala:1202 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -596,10 +652,10 @@ "\n" "%s" -#: ../src/client/application/geary-controller.vala:1201 +#: ../src/client/application/geary-controller.vala:1212 msgid "" "The version number of the local mail database is formatted for a newer " -"version of Geary. Unfortunately, the database cannot be \"rolled back\" to " +"version of Geary. Unfortunately, the database cannot be “rolled back” to " "work with this version of Geary.\n" "\n" "Please install the latest version of Geary and try again." @@ -610,7 +666,7 @@ "\n" "Инсталирајте најновије издање Герија и покушајте поново." -#: ../src/client/application/geary-controller.vala:1212 +#: ../src/client/application/geary-controller.vala:1223 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" @@ -622,32 +678,15 @@ "\n" "Проверите вашу мрежу и поново покрените Герија." -#: ../src/client/application/geary-controller.vala:1723 -#, c-format -msgid "About %s" -msgstr "О програму „%s“" - -#. / Translators: add your name and email address to receive credit in the About dialog -#. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1726 -msgid "translator-credits" -msgstr "" -"Мирослав Николић \n" -"Милош Поповић \n" -"Марко М. Костић \n" -"\n" -"http://prevod.org — превод на српски језик" - -#: ../src/client/application/geary-controller.vala:1984 +#: ../src/client/application/geary-controller.vala:1998 msgid "Undo move (Ctrl+Z)" -msgstr "Опозови (Ctrl+Z)" +msgstr "Опозови (Ктрл+Z)" -#: ../src/client/application/geary-controller.vala:1994 -#, c-format -msgid "Are you sure you want to open \"%s\"?" -msgstr "Да ли сте сигурни да желите да отворите „%s“?" +#: ../src/client/application/geary-controller.vala:2008 +msgid "Are you sure you want to open these attachments?" +msgstr "Да ли сигурнo желите да отворите ове прилоге?" -#: ../src/client/application/geary-controller.vala:1995 +#: ../src/client/application/geary-controller.vala:2009 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -655,56 +694,56 @@ "Приложене датотеке могу да оштете систем ако се отворе. Отворите датотеке " "само са поверљивих извора." -#: ../src/client/application/geary-controller.vala:1996 -msgid "Don't _ask me again" +#: ../src/client/application/geary-controller.vala:2010 +msgid "Don’t _ask me again" msgstr "Не питај ме _поново" -#: ../src/client/application/geary-controller.vala:2014 +#: ../src/client/application/geary-controller.vala:2145 #, c-format -msgid "A file named \"%s\" already exists. Do you want to replace it?" +msgid "A file named “%s” already exists. Do you want to replace it?" msgstr "Датотека под називом „%s“ већ постоји. Да ли желите да је замените?" -#: ../src/client/application/geary-controller.vala:2016 +#: ../src/client/application/geary-controller.vala:2147 #, c-format msgid "" -"The file already exists in \"%s\". Replacing it will overwrite its contents." +"The file already exists in “%s”. Replacing it will overwrite its contents." msgstr "" "Датотека већ постоји у „%s“. Уколико је замените преписаћете њен садржај." -#: ../src/client/application/geary-controller.vala:2019 +#: ../src/client/application/geary-controller.vala:2150 msgid "_Replace" msgstr "_Замени" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2324 +#: ../src/client/application/geary-controller.vala:2398 msgid "Close open draft messages?" msgstr "Да затворим отворене поруке с нацртима?" -#: ../src/client/application/geary-controller.vala:2454 +#: ../src/client/application/geary-controller.vala:2520 #, c-format msgid "Empty all email from your %s folder?" msgstr "Да испразним е-пошту из фасцикле „%s“?" -#: ../src/client/application/geary-controller.vala:2455 +#: ../src/client/application/geary-controller.vala:2521 msgid "This removes the email from Geary and your email server." msgstr "Ово ће уклонити пошту из Герија и на серверима ваше е-поште." -#: ../src/client/application/geary-controller.vala:2456 +#: ../src/client/application/geary-controller.vala:2522 msgid "This cannot be undone." msgstr "Не можете да опозовете ову радњу." -#: ../src/client/application/geary-controller.vala:2457 +#: ../src/client/application/geary-controller.vala:2523 #, c-format msgid "Empty %s" msgstr "Испразни „%s“" -#: ../src/client/application/geary-controller.vala:2474 +#: ../src/client/application/geary-controller.vala:2540 #, c-format msgid "Error emptying %s" msgstr "Грешка приликом пражњења „%s“" -#: ../src/client/application/geary-controller.vala:2504 +#: ../src/client/application/geary-controller.vala:2570 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "Да ли желите трајно да обришете ову поруку?" @@ -712,66 +751,48 @@ msgstr[2] "Да ли желите трајно да обришете ове поруке?" msgstr[3] "Да ли желите трајно да обришете ову поруку?" -#: ../src/client/application/geary-controller.vala:2506 +#: ../src/client/application/geary-controller.vala:2572 msgid "Delete" msgstr "Обриши" -#: ../src/client/application/geary-controller.vala:2537 +#: ../src/client/application/geary-controller.vala:2604 msgid "Undo archive (Ctrl+Z)" -msgstr "Опозови архивирање (Ctrl+Z)" +msgstr "Опозови архивирање (Ктрл+Z)" -#: ../src/client/application/geary-controller.vala:2552 +#: ../src/client/application/geary-controller.vala:2619 msgid "Undo trash (Ctrl+Z)" -msgstr "Опозови брисање (Ctrl+Z)" +msgstr "Опозови брисање (Ктрл+Z)" -#: ../src/client/application/geary-controller.vala:2605 +#: ../src/client/application/geary-controller.vala:2673 msgid "Undo (Ctrl+Z)" -msgstr "Опозови (Ctrl+Z)" +msgstr "Опозови (Ктрл+Z)" -#: ../src/client/components/conversation-find-bar.vala:214 -#, c-format -msgid "%i match" -msgid_plural "%i matches" -msgstr[0] "%i резултат" -msgstr[1] "%i резултата" -msgstr[2] "%i резултата" -msgstr[3] "%i резултат" - -#: ../src/client/components/conversation-find-bar.vala:216 -#, c-format -msgid "%i match (wrapped)" -msgid_plural "%i matches (wrapped)" -msgstr[0] "%i резултат (умотано)" -msgstr[1] "%i резултата (умотано)" -msgstr[2] "%i резултата (умотано)" -msgstr[3] "%i резултат (умотано)" - -#: ../src/client/components/conversation-find-bar.vala:218 -msgid "not found" -msgstr "није нађено" +#: ../src/client/application/geary-controller.vala:2804 +msgid "Failed to open default text editor." +msgstr "Не могу да отворим подразумевани уредник текста." -#: ../src/client/components/main-window.vala:438 +#: ../src/client/components/main-window.vala:389 #, c-format msgid "%s (%d)" msgstr "%s (%d)" -#: ../src/client/components/search-bar.vala:10 +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "Потражи" #. Search entry. -#: ../src/client/components/search-bar.vala:25 +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" -msgstr "Потражите кључне речи у свим порукама у налогу (Ctrl+S)" +msgstr "Потражите кључне речи у свим порукама у налогу (Ктрл+S)" -#: ../src/client/components/search-bar.vala:118 +#: ../src/client/components/search-bar.vala:100 #, c-format msgid "Indexing %s account" msgstr "Пописујем налог „%s“" -#: ../src/client/components/search-bar.vala:129 +#: ../src/client/components/search-bar.vala:111 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" @@ -779,8 +800,8 @@ #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 -msgid "Sending..." -msgstr "Шаљем..." +msgid "Sending…" +msgstr "Шаљем…" #: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 msgid "_OK" @@ -791,6 +812,10 @@ msgid "_Cancel" msgstr "От_кажи" +#: ../src/client/components/stock.vala:21 ../ui/gtk/menus.ui.h:6 +msgid "_About" +msgstr "_О програму" + #: ../src/client/components/stock.vala:23 msgid "_Close" msgstr "_Затвори" @@ -799,330 +824,257 @@ msgid "_Discard" msgstr "Од_баци" -#: ../src/client/components/stock.vala:26 +#: ../src/client/components/stock.vala:25 ../ui/gtk/menus.ui.h:5 +msgid "_Help" +msgstr "По_моћ" + +#: ../src/client/components/stock.vala:26 ../ui/conversation-email-menus.ui.h:9 msgid "_Open" msgstr "От_вори" -#: ../src/client/components/stock.vala:28 -msgid "_Print..." -msgstr "_Штампај..." +#: ../src/client/components/stock.vala:27 ../ui/gtk/menus.ui.h:3 +msgid "_Preferences" +msgstr "_Поставке" + +#: ../src/client/components/stock.vala:28 ../ui/conversation-email-menus.ui.h:7 +msgid "_Print…" +msgstr "_Штампај…" + +#: ../src/client/components/stock.vala:29 ../ui/gtk/menus.ui.h:7 +msgid "_Quit" +msgstr "_Изађи" #: ../src/client/components/stock.vala:30 ../ui/remove_confirm.glade.h:6 msgid "_Remove" msgstr "_Уклони" -#. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1335 -msgid "Select _All" -msgstr "Изабери _све" - -#: ../src/client/components/stock.vala:33 msgid "_Keep" msgstr "_Задржи" -#: ../src/client/composer/composer-widget.vala:73 +#: ../src/client/composer/composer-link-popover.vala:150 +msgid "Link URL is not correctly formatted, e.g. http://example.com" +msgstr "Адреса везе није исправно обликована, тј. „http://primer.com“" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid link URL" +msgstr "Неисправна адреса везе" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid email address" +msgstr "Неисправна адреса е-поште" + +#: ../src/client/composer/composer-widget.vala:154 msgid "Saved" msgstr "Сачувана" -#: ../src/client/composer/composer-widget.vala:74 +#: ../src/client/composer/composer-widget.vala:155 msgid "Saving" msgstr "Чувам" -#: ../src/client/composer/composer-widget.vala:75 +#: ../src/client/composer/composer-widget.vala:156 msgid "Error saving" msgstr "Грешка приликом чувања" -#: ../src/client/composer/composer-widget.vala:76 +#: ../src/client/composer/composer-widget.vala:157 msgid "Press Backspace to delete quote" msgstr "Притисните Backspace за брисање наводника" -#: ../src/client/composer/composer-widget.vala:77 +#: ../src/client/composer/composer-widget.vala:158 msgid "New Message" msgstr "Нова порука" -#. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since -#. this is full-word checking, include all variants of each word. No spaces are allowed. -#: ../src/client/composer/composer-widget.vala:138 +#. Translators: This is list of keywords, separated by pipe ("|") +#. characters, that suggest an attachment; since this is full-word +#. checking, include all variants of each word. No spaces are +#. allowed. +#: ../src/client/composer/composer-widget.vala:167 msgid "" "attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" "enclosing|encloses|enclosure|enclosures" msgstr "прилог|приложи|прилогу|прилажем|прилагања|прилози|приложено" #: ../src/client/composer/composer-widget.vala:1121 -#: ../src/client/composer/composer-widget.vala:1125 +#: ../src/client/composer/composer-widget.vala:1140 msgid "Do you want to discard this message?" msgstr "Да ли желите да одбаците ову поруку?" -#: ../src/client/composer/composer-widget.vala:1281 +#: ../src/client/composer/composer-widget.vala:1237 msgid "Send message with an empty subject and body?" msgstr "Да пошаљем поруку са празним насловом и текстом?" -#: ../src/client/composer/composer-widget.vala:1283 +#: ../src/client/composer/composer-widget.vala:1239 msgid "Send message with an empty subject?" msgstr "Да пошаљем поруку са празним насловом?" -#: ../src/client/composer/composer-widget.vala:1285 +#: ../src/client/composer/composer-widget.vala:1241 msgid "Send message with an empty body?" msgstr "Да пошаљем поруку без икаквог текста?" -#: ../src/client/composer/composer-widget.vala:1287 +#: ../src/client/composer/composer-widget.vala:1245 msgid "Send message without an attachment?" msgstr "Да пошаљем поруку без прилога?" -#: ../src/client/composer/composer-widget.vala:1553 -msgid "Cannot add attachment" -msgstr "Не могу да додам прилог" +#: ../src/client/composer/composer-widget.vala:1498 +#, c-format +msgid "“%s” already attached for delivery." +msgstr "„%s“ је већ приложено за испоруку." + +#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" +#. Translators: The first argument will be a +#. description of the document type, the second will +#. be a human-friendly size string. For example: +#. Document (100.9MB) +#: ../src/client/composer/composer-widget.vala:1506 +#: ../src/client/conversation-viewer/conversation-email.vala:138 +#, c-format +msgid "%s (%s)" +msgstr "%s (%s)" -#: ../src/client/composer/composer-widget.vala:1564 +#: ../src/client/composer/composer-widget.vala:1543 #, c-format -msgid "\"%s\" could not be found." +msgid "“%s” could not be found." msgstr "Не могу да пронађем „%s“." -#: ../src/client/composer/composer-widget.vala:1571 +#: ../src/client/composer/composer-widget.vala:1549 #, c-format -msgid "\"%s\" is a folder." +msgid "“%s” is a folder." msgstr "„%s“ је фасцикла." -#: ../src/client/composer/composer-widget.vala:1578 +#: ../src/client/composer/composer-widget.vala:1555 #, c-format -msgid "\"%s\" is an empty file." +msgid "“%s” is an empty file." msgstr "„%s“ је празна датотека." -#: ../src/client/composer/composer-widget.vala:1592 +#: ../src/client/composer/composer-widget.vala:1568 #, c-format -msgid "\"%s\" could not be opened for reading." +msgid "“%s” could not be opened for reading." msgstr "Не могу да отворим „%s“ за читање." -#: ../src/client/composer/composer-widget.vala:1599 -#, c-format -msgid "\"%s\" already attached for delivery." -msgstr "„%s“ је већ приложено за испоруку." - -#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-widget.vala:1608 -#, c-format -msgid "%s (%s)" -msgstr "%s (%s)" +#: ../src/client/composer/composer-widget.vala:1576 +msgid "Cannot add attachment" +msgstr "Не могу да додам прилог" -#: ../src/client/composer/composer-widget.vala:1668 +#: ../src/client/composer/composer-widget.vala:1638 msgid "To: " msgstr "Прима: " -#: ../src/client/composer/composer-widget.vala:1671 +#: ../src/client/composer/composer-widget.vala:1641 msgid "Cc: " msgstr "Цц: " -#: ../src/client/composer/composer-widget.vala:1674 +#: ../src/client/composer/composer-widget.vala:1644 msgid "Bcc: " msgstr "Бцц: " -#: ../src/client/composer/composer-widget.vala:1677 +#: ../src/client/composer/composer-widget.vala:1647 msgid "Reply-To: " msgstr "Одговор за: " -#: ../src/client/composer/composer-widget.vala:1910 +#: ../src/client/composer/composer-widget.vala:1778 msgid "Select Color" msgstr "Изаберите боју" #. Displayed in the From dropdown to indicate an "alternate email address" #. for an account. The first printf argument will be the alternate email #. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2345 +#: ../src/client/composer/composer-widget.vala:1978 #, c-format msgid "%1$s via %2$s" msgstr "%1$s преко %2$s" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2389 +#: ../src/client/composer/composer-widget.vala:2020 msgid "_From:" msgstr "_Шаље:" +#. Translators: This is the name of the file chooser filter +#. when inserting an image in the composer. +#: ../src/client/composer/composer-widget.vala:2244 +msgid "Images" +msgstr "Слике" + +#: ../src/client/composer/spell-check-popover.vala:117 +msgid "Remove this language from the preferred list" +msgstr "Уклоните овај језик са списка пожељних" + +#: ../src/client/composer/spell-check-popover.vala:121 +msgid "Add this language to the preferred list" +msgstr "Додајте овај језик на списак пожељних" + +#: ../src/client/composer/spell-check-popover.vala:217 +msgid "Search for more languages" +msgstr "Потражи још језика" + #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Ја" -#: ../src/client/conversation-viewer/conversation-viewer.vala:414 -msgid "No conversations selected." -msgstr "Није изабран разговор." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:416 -#, c-format -msgid "%u conversation selected." -msgid_plural "%u conversations selected." -msgstr[0] "Изабран је %u разговор." -msgstr[1] "Изабрана су %u разговора." -msgstr[2] "Изабрано је %u разговора." -msgstr[3] "Изабран је %u разговор." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:446 -msgid "No search results found." -msgstr "Нема резултата претраге." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:448 -msgid "No conversations in folder." -msgstr "Нема разговора у фасцикли." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "This message contains remote images." -msgstr "Ова порука садржи непреузете слике." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "Show Images" -msgstr "Прикажи слике" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:715 -msgid "Always Show From Sender" -msgstr "Увек прикажи од овог пошиљаоца" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:739 -msgid "Edit Draft" -msgstr "Уреди нацрт" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:815 -msgid "From:" -msgstr "Шаље:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:818 -msgid "To:" -msgstr "Прима:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:821 -msgid "Cc:" -msgstr "Цц:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:824 -msgid "Bcc:" -msgstr "Бцц:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:827 -msgid "Subject:" -msgstr "Наслов:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:830 -msgid "Date:" -msgstr "Датум:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1150 -#, c-format -msgid "%u read message" -msgid_plural "%u read messages" -msgstr[0] "%u нова порука" -msgstr[1] "%u нове поруке" -msgstr[2] "%u нових порука" -msgstr[3] "%u нова порука" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1282 -#, c-format -msgid "This message was sent successfully, but could not be saved to %s." -msgstr "Ова порука је успешно послата, али не може бити сачувана у „%s“." - -#. Add a menu item for copying the current selection. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1308 -#: ../ui/composer.glade.h:4 -msgid "_Copy" -msgstr "_Умножи" - -#. Add a menu item for copying the address. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1316 -msgid "Copy _Email Address" -msgstr "Умножи адресу _е-поште" - -#. Add a menu item for copying the link. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1321 -#: ../ui/composer.glade.h:17 -msgid "Copy _Link" -msgstr "Умножи _везу" - -#. Select message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1329 -msgid "Select _Message" -msgstr "Изабери _поруку" - -#. Inspect. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1341 -msgid "_Inspect" -msgstr "_Провери" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1572 -msgid "This link appears to go to" -msgstr "Ова веза изгледа као да води до" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1573 -msgid "but actually goes to" -msgstr "али заправо води до" - -#. If href doesn't look like a URL, something is fishy, so warn the user -#: ../src/client/conversation-viewer/conversation-viewer.vala:1628 -msgid " (Invalid?)" -msgstr " (Неисправно?)" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1734 -msgid "_Save Image As..." -msgstr "_Сачувај слику као..." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1838 -msgid "_Save As..." -msgstr "_Сачувај као..." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1843 -msgid "Save All A_ttachments..." -msgstr "Сачувај све _прилоге..." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1863 -msgid "Save A_ttachment..." -msgid_plural "Save All A_ttachments..." -msgstr[0] "Сачувај _прилог..." -msgstr[1] "Сачувај _прилоге..." -msgstr[2] "Сачувај _прилоге..." -msgstr[3] "Сачувај _прилог..." - -#. Reply to all on a message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1878 -msgid "Reply to _All" -msgstr "Одговори _свима" - -#. Mark as read/unread. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1895 -msgid "_Mark as Read" -msgstr "_Означи као прочитано" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1899 -msgid "_Mark as Unread" -msgstr "_Означи као непрочитано" +#. Translators: This is the file type displayed for +#. attachments with unknown file types. +#: ../src/client/conversation-viewer/conversation-email.vala:124 +msgid "Unknown" +msgstr "Непознато" + +#. Preview headers +#. Translators: This is displayed in place of the from address +#. when the message has no from address. +#: ../src/client/conversation-viewer/conversation-message.vala:331 +msgid "No sender" +msgstr "Нема пошиљаоца" + +#. Translators: This separates multiple 'from' +#. addresses in the header preview for a message. +#: ../src/client/conversation-viewer/conversation-message.vala:586 +msgid ", " +msgstr ", " + +#. Translators: This string is used as the HTML IMG ALT +#. attribute value when displaying an inline image in an email +#. that did not specify a file name. E.g. Image" +msgstr "Шаље <е-пошта>" + +#: ../ui/conversation-message.ui.h:2 +msgid "1/1/1970\t" +msgstr "1/1/1970\t" + +#: ../ui/conversation-message.ui.h:3 +msgid "Preview body text." +msgstr "Прикажи текст поруке." + +#: ../ui/conversation-message.ui.h:4 +msgid "Sent by:" +msgstr "Послао је:" + +#: ../ui/conversation-message.ui.h:5 +msgid "Reply to:" +msgstr "Одговор за:" + +#: ../ui/conversation-message.ui.h:6 +msgid "Subject" +msgstr "Наслов" + +#: ../ui/conversation-message.ui.h:7 +msgid "To:" +msgstr "Прима:" + +#: ../ui/conversation-message.ui.h:8 +msgid "Cc:" +msgstr "Цц:" + +#: ../ui/conversation-message.ui.h:9 +msgid "Bcc:" +msgstr "Бцц:" + +#: ../ui/conversation-message.ui.h:10 +msgid "Show Images" +msgstr "Прикажи слике" + +#: ../ui/conversation-message.ui.h:11 +msgid "Always Show From Sender" +msgstr "Увек прикажи од овог пошиљаоца" + +#: ../ui/conversation-message.ui.h:12 +msgid "Remote images not shown" +msgstr "Удаљене слике нису приказане" + +#: ../ui/conversation-message.ui.h:13 +msgid "Only show remote images from senders you trust." +msgstr "Прикажите само слике пошиљалаца којима верујете." + +#: ../ui/conversation-message.ui.h:14 +msgid "But actually goes to:" +msgstr "Али заправо води до:" + +#: ../ui/conversation-message.ui.h:15 +msgid "The link appears to go to:" +msgstr "Веза изгледа као да води до:" + +#: ../ui/conversation-message.ui.h:16 +msgid "Deceptive link found" +msgstr "Нађох обманљиву везу" + +#: ../ui/conversation-message.ui.h:17 +msgid "The email sender may be leading you to the wrong web site." +msgstr "Пошиљалац е-поште можда вас води на погрешан веб сајт." + +#: ../ui/conversation-message.ui.h:18 +msgid "If unsure, contact the sender and ask before continuing." +msgstr "" +"Ако нисте сигурни, обратите се пошиљаоцу и питајте га пре него што наставите." + +#: ../ui/conversation-viewer.ui.h:1 +msgid "Find in conversation" +msgstr "Нађи у разговору" + +#: ../ui/conversation-viewer.ui.h:2 +msgid "Find the previous occurrence of the search string." +msgstr "Нађите претходно појављивање ниске претраге." + +#: ../ui/conversation-viewer.ui.h:3 +msgid "Find the next occurrence of the search string." +msgstr "Нађите следеће појављивање ниске претраге." + #: ../ui/edit_alternate_emails.glade.h:1 msgid "Remove email address" msgstr "Уклони адресе е-поште" @@ -2078,6 +2185,247 @@ msgid "label" msgstr "натпис" +#: ../ui/gtk/help-overlay.ui.h:1 +msgid "Conversation Shortcuts" +msgstr "Пречице разговора" + +#: ../ui/gtk/help-overlay.ui.h:2 +msgctxt "shortcut window" +msgid "General" +msgstr "Опште" + +#: ../ui/gtk/help-overlay.ui.h:3 +msgctxt "shortcut window" +msgid "Move focus to the next/previous pane" +msgstr "Пребаците фокус на следеће/претходно окно" + +#: ../ui/gtk/help-overlay.ui.h:4 +msgctxt "shortcut window" +msgid "Move focus to conversation list" +msgstr "Пребаците фокус на списак разговора" + +#: ../ui/gtk/help-overlay.ui.h:5 +msgctxt "shortcut window" +msgid "Detach composer window" +msgstr "Откачите прозор састављача" + +#: ../ui/gtk/help-overlay.ui.h:6 +msgctxt "shortcut window" +msgid "Close composer window" +msgstr "Затворите прозор састављача" + +#: ../ui/gtk/help-overlay.ui.h:7 +msgctxt "shortcut window" +msgid "Show keyboard shortcuts" +msgstr "Прикажите пречице тастатуре" + +#: ../ui/gtk/help-overlay.ui.h:8 +msgctxt "shortcut window" +msgid "Show help" +msgstr "Прикажите помоћ" + +#: ../ui/gtk/help-overlay.ui.h:9 +msgctxt "shortcut window" +msgid "Quit the application" +msgstr "Изађите из програма" + +#: ../ui/gtk/help-overlay.ui.h:10 +msgctxt "shortcut window" +msgid "Search" +msgstr "Тражите" + +#: ../ui/gtk/help-overlay.ui.h:11 +msgctxt "shortcut window" +msgid "Jump to search box" +msgstr "Скочите у поље претраге" + +#: ../ui/gtk/help-overlay.ui.h:12 +msgctxt "shortcut window" +msgid "Find in current conversation" +msgstr "Нађите у текућем разговору" + +#: ../ui/gtk/help-overlay.ui.h:13 +msgctxt "shortcut window" +msgid "Find next/previous in current conversation" +msgstr "Нађите следеће/претходно у текућем разговору" + +#: ../ui/gtk/help-overlay.ui.h:14 +msgctxt "shortcut window" +msgid "Actions" +msgstr "Радње" + +#: ../ui/gtk/help-overlay.ui.h:15 +msgctxt "shortcut window" +msgid "Compose a new message" +msgstr "Саставите нову поруку" + +#: ../ui/gtk/help-overlay.ui.h:16 +msgctxt "shortcut window" +msgid "Reply to sender " +msgstr "Одговорите пошиљаоцу " + +#: ../ui/gtk/help-overlay.ui.h:17 +msgctxt "shortcut window" +msgid "Reply to all" +msgstr "Одговори свима" + +#: ../ui/gtk/help-overlay.ui.h:18 +msgctxt "shortcut window" +msgid "Forward" +msgstr "Проследи" + +#: ../ui/gtk/help-overlay.ui.h:19 +msgctxt "shortcut window" +msgid "Archive" +msgstr "Архива" + +#: ../ui/gtk/help-overlay.ui.h:20 +msgctxt "shortcut window" +msgid "Move to trash" +msgstr "Преместите у смеће" + +#: ../ui/gtk/help-overlay.ui.h:21 +msgctxt "shortcut window" +msgid "Toggle spam" +msgstr "Окините ђубре" + +#: ../ui/gtk/help-overlay.ui.h:22 +msgctxt "shortcut window" +msgid "Move the conversation" +msgstr "Преместите разговор" + +#: ../ui/gtk/help-overlay.ui.h:23 +msgctxt "shortcut window" +msgid "Label the conversation" +msgstr "Означите разговор" + +#: ../ui/gtk/help-overlay.ui.h:24 +msgctxt "shortcut window" +msgid "Mark read" +msgstr "Означи као прочитано" + +#: ../ui/gtk/help-overlay.ui.h:25 +msgctxt "shortcut window" +msgid "Mark unread" +msgstr "Означи као непрочитано" + +#: ../ui/gtk/help-overlay.ui.h:26 +msgctxt "shortcut window" +msgid "View" +msgstr "Прегледајте" + +#: ../ui/gtk/help-overlay.ui.h:27 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Увећајте" + +#: ../ui/gtk/help-overlay.ui.h:28 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Умањите" + +#: ../ui/gtk/help-overlay.ui.h:29 +msgctxt "shortcut window" +msgid "Reset zoom" +msgstr "Повратите увеличање" + +#: ../ui/gtk/help-overlay.ui.h:30 +msgctxt "shortcut window" +msgid "Additional Shortcuts" +msgstr "Додатне пречице" + +#: ../ui/gtk/help-overlay.ui.h:31 +msgctxt "shortcut window" +msgid "Star" +msgstr "Додајте звездицу" + +#: ../ui/gtk/help-overlay.ui.h:32 +msgctxt "shortcut window" +msgid "Unstar" +msgstr "Уклоните звездицу" + +#: ../ui/gtk/help-overlay.ui.h:33 +msgctxt "shortcut window" +msgid "Delete" +msgstr "Обришите" + +#: ../ui/gtk/help-overlay.ui.h:34 +msgctxt "shortcut window" +msgid "Jump to next (older) conversation" +msgstr "Скочите на следећи (старији) разговор" + +#: ../ui/gtk/help-overlay.ui.h:35 +msgctxt "shortcut window" +msgid "Jump to previous (newer) conversation" +msgstr "Скочите на претходни (новији) разговор" + +#: ../ui/gtk/help-overlay.ui.h:36 +msgid "Composer Shortcuts" +msgstr "Пречице састављача" + +#: ../ui/gtk/help-overlay.ui.h:37 +msgctxt "shortcut window" +msgid "Quote text" +msgstr "Цитирајте текст" + +#: ../ui/gtk/help-overlay.ui.h:38 +msgctxt "shortcut window" +msgid "Unquote text" +msgstr "Поништите цитат текста" + +#: ../ui/gtk/help-overlay.ui.h:39 +msgctxt "shortcut window" +msgid "Send" +msgstr "Пошаљите" + +#: ../ui/gtk/help-overlay.ui.h:40 +msgctxt "shortcut window" +msgid "Add attachment" +msgstr "Додајте прилог" + +#: ../ui/gtk/help-overlay.ui.h:41 +msgctxt "shortcut window" +msgid "Rich text mode" +msgstr "Обогатите текст" + +#: ../ui/gtk/help-overlay.ui.h:42 +msgctxt "shortcut window" +msgid "Bold text" +msgstr "Подебљајте текст" + +#: ../ui/gtk/help-overlay.ui.h:43 +msgctxt "shortcut window" +msgid "Italicize text" +msgstr "Искосите текст" + +#: ../ui/gtk/help-overlay.ui.h:44 +msgctxt "shortcut window" +msgid "Underline text" +msgstr "Подвуците текст" + +#: ../ui/gtk/help-overlay.ui.h:45 +msgctxt "shortcut window" +msgid "Strike text" +msgstr "Прецртајте текст" + +#: ../ui/gtk/help-overlay.ui.h:46 +msgctxt "shortcut window" +msgid "Insert a link" +msgstr "Уметните везу" + +#: ../ui/gtk/help-overlay.ui.h:47 +msgctxt "shortcut window" +msgid "Remove formatting" +msgstr "Уклоните форматирање" + +#: ../ui/gtk/menus.ui.h:2 +msgid "A_ccounts" +msgstr "_Налози" + +#: ../ui/gtk/menus.ui.h:4 +msgid "_Keyboard Shortcuts" +msgstr "_Пречице тастатуре" + #: ../ui/login.glade.h:1 msgid "email@example.com" msgstr "e-pošta@primer.com" @@ -2202,7 +2550,7 @@ msgid "Use IMAP cre_dentials" msgstr "Користи ИМАП _уверења" -#: ../ui/login.glade.h:34 ../ui/preferences.glade.h:5 +#: ../ui/login.glade.h:34 msgid "Composer" msgstr "Састављач" @@ -2222,6 +2570,10 @@ msgid "_Download mail" msgstr "_Преузми пошту" +#: ../ui/main-toolbar.ui.h:1 +msgid "Empty Spam or Trash folders" +msgstr "Испразни фасцикле с непожељном поштом или отпад" + #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" msgstr "СМТП уверења" @@ -2238,47 +2590,43 @@ msgid "_Authenticate" msgstr "_Потврди идентитет" -#: ../ui/preferences.glade.h:1 +#: ../ui/preferences-dialog.ui.h:1 msgid "Reading" msgstr "Читање" -#: ../ui/preferences.glade.h:2 +#: ../ui/preferences-dialog.ui.h:2 msgid "_Automatically select next message" msgstr "_Сам изабери следећу поруку" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences-dialog.ui.h:3 msgid "_Display conversation preview" msgstr "_Прикажи преглед разговора" -#: ../ui/preferences.glade.h:4 +#: ../ui/preferences-dialog.ui.h:4 msgid "Use _three pane view" msgstr "Приказ у _три површи" -#: ../ui/preferences.glade.h:6 -msgid "Enable _spell checking" -msgstr "Укључи _проверу писања" - -#: ../ui/preferences.glade.h:7 +#: ../ui/preferences-dialog.ui.h:5 msgid "Notifications" msgstr "Обавештења" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences-dialog.ui.h:6 msgid "_Play notification sounds" msgstr "_Пусти звуке обавештења" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences-dialog.ui.h:7 msgid "Show _notifications for new mail" msgstr "Прикажи _обавештења за нову пошту" -#: ../ui/preferences.glade.h:10 +#: ../ui/preferences-dialog.ui.h:8 msgid "Always _watch for new mail" msgstr "Увек _ослушкуј за нове поруке" -#: ../ui/preferences.glade.h:11 +#: ../ui/preferences-dialog.ui.h:9 msgid "Geary will run in the background and notify of new mail" msgstr "Гери ће радити у позадини и слати обавештења када дође нова е-порука" -#: ../ui/preferences.glade.h:12 +#: ../ui/preferences-dialog.ui.h:10 msgid "Preferences" msgstr "Поставке" @@ -2310,6 +2658,138 @@ msgid "Geary update in progress…" msgstr "Ажурирање Герија је у току…" +#~ msgid "none" +#~ msgstr "ништа" + +#~ msgid "Empty" +#~ msgstr "Испразни" + +#~ msgid "%i match" +#~ msgid_plural "%i matches" +#~ msgstr[0] "%i резултат" +#~ msgstr[1] "%i резултата" +#~ msgstr[2] "%i резултата" +#~ msgstr[3] "%i резултат" + +#~ msgid "%i match (wrapped)" +#~ msgid_plural "%i matches (wrapped)" +#~ msgstr[0] "%i резултат (умотано)" +#~ msgstr[1] "%i резултата (умотано)" +#~ msgstr[2] "%i резултата (умотано)" +#~ msgstr[3] "%i резултат (умотано)" + +#~ msgid "not found" +#~ msgstr "није нађено" + +#~ msgid "No search results found." +#~ msgstr "Нема резултата претраге." + +#~ msgid "From:" +#~ msgstr "Шаље:" + +#~ msgid "Date:" +#~ msgstr "Датум:" + +#~ msgid "Copy _Link" +#~ msgstr "Умножи _везу" + +#~ msgid "Select _Message" +#~ msgstr "Изабери _поруку" + +#~ msgid " (Invalid?)" +#~ msgstr " (Неисправно?)" + +#~ msgid "_Save As..." +#~ msgstr "_Сачувај као..." + +#~ msgid "Save A_ttachment..." +#~ msgid_plural "Save All A_ttachments..." +#~ msgstr[0] "Сачувај _прилог..." +#~ msgstr[1] "Сачувај _прилоге..." +#~ msgstr[2] "Сачувај _прилоге..." +#~ msgstr[3] "Сачувај _прилог..." + +#~ msgid "_Left" +#~ msgstr "_Лево" + +#~ msgid "_Right" +#~ msgstr "_Десно" + +#~ msgid "_Center" +#~ msgstr "По _средини" + +#~ msgid "_Justify" +#~ msgstr "_Поравнај" + +#~ msgid "Link (Ctrl+L)" +#~ msgstr "Веза (Ctrl+L)" + +#~ msgid "More options" +#~ msgstr "Још могућности" + +#~ msgctxt "Label" +#~ msgid "Close and Save" +#~ msgstr "Затвори и сачувај" + +#~ msgctxt "Short Label" +#~ msgid "Close and Save" +#~ msgstr "Затвори и сачувај" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Save" +#~ msgstr "Затвори и сачувај" + +#~ msgctxt "Label" +#~ msgid "Close and Discard" +#~ msgstr "Затвори и одбаци" + +#~ msgctxt "Short Label" +#~ msgid "Close and Discard" +#~ msgstr "Затвори и одбаци" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Discard" +#~ msgstr "Затвори и одбаци" + +#~ msgid "Large" +#~ msgstr "Велики" + +#~ msgid "Medium" +#~ msgstr "Средњи" + +#~ msgid "Small" +#~ msgstr "Мали" + +#~ msgid "Sans Serif" +#~ msgstr "Безсерифни" + +#~ msgid "Serif" +#~ msgstr "Серифни" + +#~ msgid "Fixed Width" +#~ msgstr "Стална ширина" + +#~ msgid "Detach" +#~ msgstr "Откачи" + +#~ msgid "_Attach File" +#~ msgstr "_Приложи датотеку" + +#~ msgid "Attach File" +#~ msgstr "Прилаже датотеку" + +#~ msgid "_Include Original Attachments" +#~ msgstr "_Укључи изворне прилоге" + +#~ msgid "Spelling language" +#~ msgstr "Језик за проверу писања" + +#~ msgid "Enable _spell checking" +#~ msgstr "Укључи _проверу писања" + +#~ msgid "Application Menu" +#~ msgstr "Изборник програма" + #~ msgid "Copyright 2011-2015 Yorba Foundation" #~ msgstr "Ауторска права 2011-2015 Јорба (Yorba) Фондација" diff -Nru geary-0.11.4/po/sv.po geary-0.12.0/po/sv.po --- geary-0.11.4/po/sv.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/sv.po 2017-10-02 11:25:21.000000000 +0000 @@ -1,6 +1,6 @@ # po/geary.pot # PO message string template file for Geary email client -# Copyright 2016 Software Freedom Conservancy Inc. +# Copyright 2016-2017 Software Freedom Conservancy Inc. # This file is distributed under the GNU LGPL, version 2.1. # # Translators: @@ -12,14 +12,15 @@ # TommyBrunn , 2012 # Mattias Eriksson , 2014, 2015. # Anders Jonsson , 2016. +# Josef Andersson , 2016, 2017. # msgid "" msgstr "" "Project-Id-Version: geary-0.5.2\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" +"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "product=geary&keywords=I18N+L10N&component=internationalization\n" -"POT-Creation-Date: 2016-12-25 01:15+0000\n" -"PO-Revision-Date: 2017-01-04 23:59+0100\n" +"POT-Creation-Date: 2017-09-26 12:56+0000\n" +"PO-Revision-Date: 2017-09-26 22:46+0200\n" "Last-Translator: Anders Jonsson \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -27,33 +28,113 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.8.11\n" +"X-Generator: Poedit 2.0.3\n" -#: ../desktop/geary.desktop.in.h:1 ../desktop/geary-autostart.desktop.in.h:1 +#. Translators: The application name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:2 +#: ../desktop/org.gnome.Geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" msgstr "Geary" -#: ../desktop/geary.desktop.in.h:2 ../desktop/geary-autostart.desktop.in.h:2 -#: ../src/client/application/geary-application.vala:18 +#. Translators: The development team's name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:4 +msgid "Geary Development Team" +msgstr "Gearys utvecklingsgrupp" + +#. Translators: The application's summary / tagline +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:6 +#: ../desktop/org.gnome.Geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 +msgid "Send and receive email" +msgstr "Skicka och ta emot e-post" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:7 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"Geary är ett e-postprogram byggt kring konversationer för GNOME 3-" +"skrivbordet. Det låter dig läsa, söka och sända e-post med ett enkelt " +"modernt gränssnitt." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:8 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"Konversationer låter dig läsa en fullständig diskussion utan att behöva " +"hitta och klicka från meddelande till meddelande." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:9 +msgid "Geary’s features include:" +msgstr "Gearys egenskaper omfattar:" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:10 +msgid "Quick email account setup" +msgstr "Snabb inställning av e-postkonto" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:11 +msgid "Shows related messages together in conversations" +msgstr "Visa relaterade meddelanden tillsammans i konversationer" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:12 +msgid "Fast, full text and keyword search" +msgstr "Snabb heltext- och nyckelordssökning" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:13 +msgid "Full-featured HTML and plain text message composer" +msgstr "Fullständig HTML- och textbehandlare" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:14 +msgid "Desktop notification of new mail" +msgstr "Skrivbordasaviseringar för ny e-post" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:15 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" +msgstr "Kompatibel med GMail, Yahoo! Mail, Outlook.com och andra IMAP-servrar" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:17 +msgid "Geary displaying a conversation" +msgstr "Geary visande en konversation" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:19 +msgid "Geary showing the rich text composer" +msgstr "Geary visande rich text-redigeraren" + +#: ../desktop/org.gnome.Geary.desktop.in.h:2 +msgid "Email" +msgstr "E-post" + +#: ../desktop/org.gnome.Geary.desktop.in.h:3 +msgid "Geary Email" +msgstr "Geary E-post" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/org.gnome.Geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "E-post;Epost;IMAP;GMail;Yahoo;Hotmail;Outlook;" + +#: ../desktop/org.gnome.Geary.desktop.in.h:7 ../ui/gtk/menus.ui.h:1 +msgid "Compose Message" +msgstr "Skriv meddelande" + +#: ../desktop/geary-autostart.desktop.in.h:2 +#: ../src/client/application/geary-application.vala:21 msgid "Mail Client" msgstr "E-postklient" -#: ../desktop/geary.desktop.in.h:3 ../desktop/geary-autostart.desktop.in.h:3 +#: ../desktop/geary-autostart.desktop.in.h:3 msgid "Geary Mail" msgstr "Geary Mail" -#: ../desktop/geary.desktop.in.h:4 ../desktop/geary-autostart.desktop.in.h:4 -msgid "Send and receive email" -msgstr "Skicka och ta emot e-post" - -#: ../desktop/geary.desktop.in.h:5 ../desktop/geary-autostart.desktop.in.h:5 +#: ../desktop/geary-autostart.desktop.in.h:5 msgid "Email;E-mail;Mail;" msgstr "Email;E-mail;Mail;Epost;E-Post;" -#: ../desktop/geary.desktop.in.h:6 -msgid "Compose Message" -msgstr "Skriv meddelande" - #: ../desktop/geary-attach.contract.in.h:1 msgid "Send by email" msgstr "Skicka som e-post" @@ -64,6 +145,7 @@ #: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:31 +#: ../ui/conversation-email-menus.ui.h:10 msgid "_Save" msgstr "_Spara" @@ -73,7 +155,7 @@ msgstr "_Lägg till" #. reset/clear widgets -#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 #, c-format msgid "Additional addresses for %s" msgstr "Ytterligare adresser för %s" @@ -94,108 +176,125 @@ msgid "First Last" msgstr "Förnamn Efternamn" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." msgstr "Välkommen till Geary." -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." msgstr "Fyll i din kontoinformation för att komma igång." -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "två veckor tillbaka" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:254 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "en månad tillbaka" -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "tre månader tillbaka" -#: ../src/client/accounts/add-edit-page.vala:256 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "ett halvår tillbaka" -#: ../src/client/accounts/add-edit-page.vala:257 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "ett år tillbaka" -#: ../src/client/accounts/add-edit-page.vala:258 +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" msgstr "2 år tillbaka" -#: ../src/client/accounts/add-edit-page.vala:259 +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" msgstr "4 år tillbaka" #. Separator -#: ../src/client/accounts/add-edit-page.vala:261 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "Allt" -#: ../src/client/accounts/add-edit-page.vala:280 +#: ../src/client/accounts/add-edit-page.vala:283 msgid "Edit" msgstr "Redigera" -#: ../src/client/accounts/add-edit-page.vala:282 +#: ../src/client/accounts/add-edit-page.vala:285 msgid "Preview" msgstr "Förhandsgranska" -#: ../src/client/accounts/add-edit-page.vala:723 +#: ../src/client/accounts/add-edit-page.vala:751 msgid "Remem_ber passwords" msgstr "_Kom ihåg lösenord" -#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:7 +#: ../src/client/accounts/add-edit-page.vala:758 ../ui/login.glade.h:7 msgid "Remem_ber password" msgstr "_Kom ihåg lösenord" -#: ../src/client/accounts/add-edit-page.vala:764 +#: ../src/client/accounts/add-edit-page.vala:792 msgid "Unable to validate:\n" msgstr "Kan inte bekräfta:\n" -#: ../src/client/accounts/add-edit-page.vala:766 -msgid " • Invalid account nickname.\n" -msgstr " • Ogiltigt konto-alias.\n" - -#: ../src/client/accounts/add-edit-page.vala:769 -msgid " • Email address already added to Geary.\n" -msgstr " • E-postadress redan tillagd i Geary.\n" - -#: ../src/client/accounts/add-edit-page.vala:773 -msgid " • IMAP connection error.\n" -msgstr " • IMAP-anslutningsfel.\n" - -#: ../src/client/accounts/add-edit-page.vala:776 -msgid " • IMAP username or password incorrect.\n" -msgstr " • Felaktigt IMAP-användarnamn eller -lösenord.\n" - -#: ../src/client/accounts/add-edit-page.vala:779 -msgid " • SMTP connection error.\n" -msgstr " • SMTP-anslutningsfel.\n" - -#: ../src/client/accounts/add-edit-page.vala:782 -msgid " • SMTP username or password incorrect.\n" -msgstr " • Felaktigt SMTP-användarnamn eller -lösenord.\n" - -#: ../src/client/accounts/add-edit-page.vala:786 -msgid " • Connection error.\n" -msgstr " • Anslutningsfel.\n" - -#: ../src/client/accounts/add-edit-page.vala:790 -msgid " • Username or password incorrect.\n" -msgstr " • Felaktigt användarnamn eller lösenord.\n" +#: ../src/client/accounts/add-edit-page.vala:794 +msgid " • Invalid account nickname.\n" +msgstr " • Ogiltigt konto-alias.\n" + +#: ../src/client/accounts/add-edit-page.vala:797 +msgid " • Email address already added to Geary.\n" +msgstr " • E-postadress redan tillagd i Geary.\n" + +#: ../src/client/accounts/add-edit-page.vala:801 +msgid " • IMAP connection error.\n" +msgstr " • IMAP-anslutningsfel.\n" + +#: ../src/client/accounts/add-edit-page.vala:804 +msgid " • IMAP username or password incorrect.\n" +msgstr " • Felaktigt IMAP-användarnamn eller -lösenord.\n" + +#: ../src/client/accounts/add-edit-page.vala:807 +msgid " • SMTP connection error.\n" +msgstr " • SMTP-anslutningsfel.\n" + +#: ../src/client/accounts/add-edit-page.vala:810 +msgid " • SMTP username or password incorrect.\n" +msgstr " • Felaktigt SMTP-användarnamn eller -lösenord.\n" + +#: ../src/client/accounts/add-edit-page.vala:814 +msgid " • Connection error.\n" +msgstr " • Anslutningsfel.\n" + +#: ../src/client/accounts/add-edit-page.vala:818 +msgid " • Username or password incorrect.\n" +msgstr " • Felaktigt användarnamn eller lösenord.\n" -#: ../src/client/application/geary-application.vala:19 +#: ../src/client/application/geary-application.vala:22 msgid "Copyright 2016 Software Freedom Conservancy Inc." msgstr "Copyright 2016 Software Freedom Conservancy Inc." -#: ../src/client/application/geary-application.vala:21 +#: ../src/client/application/geary-application.vala:24 msgid "Visit the Geary web site" msgstr "Besök Gearys webbplats" +#: ../src/client/application/geary-application.vala:464 +#, c-format +msgid "About %s" +msgstr "Om %s" + +#. Translators: add your name and email address to receive +#. credit in the About dialog For example: Yamada Taro +#. +#: ../src/client/application/geary-application.vala:468 +msgid "translator-credits" +msgstr "" +"Joachim Johansson \n" +"Mattias Eriksson \n" +"\n" +"Skicka synpunkter på översättningen till\n" +"." + #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" msgstr "Starta Geary med huvudfönstret dolt" @@ -250,217 +349,191 @@ msgstr "Återkalla alla servercertifikat med TLS-varningar" #: ../src/client/application/geary-args.vala:27 +msgid "Perform a graceful quit" +msgstr "Avsluta" + +#: ../src/client/application/geary-args.vala:28 msgid "Display program version" msgstr "Visa programversion" #. This gives a command-line hint on how to open new composer windows with mailto: -#: ../src/client/application/geary-args.vala:51 +#: ../src/client/application/geary-args.vala:53 #, c-format msgid "Use %s to open a new composer window" msgstr "Använd %s för att öppna ett nytt redigerarfönster" -#: ../src/client/application/geary-args.vala:52 +#: ../src/client/application/geary-args.vala:54 msgid "Please report comments, suggestions and bugs to:" msgstr "Rapportera fel, eller kom med förslag och kommentarer, på:" #. i18n: Command line arguments are invalid -#: ../src/client/application/geary-args.vala:59 +#: ../src/client/application/geary-args.vala:61 #, c-format msgid "Failed to parse command line options: %s\n" msgstr "Kunde ej tyda kommandoradsalternativ: %s\n" -#: ../src/client/application/geary-args.vala:70 +#: ../src/client/application/geary-args.vala:72 #, c-format -msgid "Unrecognized command line option \"%s\"\n" -msgstr "Felaktigt kommandoradsalternativ: \"%s\"\n" +msgid "Unrecognized command line option “%s”\n" +msgstr "Felaktigt kommandoradsalternativ: ”%s”\n" -#: ../src/client/application/geary-controller.vala:61 +#: ../src/client/application/geary-controller.vala:57 msgid "Delete conversation" msgstr "Radera konversation" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:58 msgid "Delete conversation (Shift+Delete)" msgstr "Radera konversationen (Skift+Delete)" -#: ../src/client/application/geary-controller.vala:63 +#: ../src/client/application/geary-controller.vala:59 msgid "Delete conversations (Shift+Delete)" msgstr "Radera konversationerna (Skift+Delete)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:67 +#: ../src/client/application/geary-controller.vala:63 msgid "Move conversation to Trash (Delete, Backspace)" msgstr "Flytta konversationen till papperskorgen (Delete, Backsteg)" -#: ../src/client/application/geary-controller.vala:68 +#: ../src/client/application/geary-controller.vala:64 msgid "Move conversations to Trash (Delete, Backspace)" msgstr "Flytta konversationerna till papperskorgen (Delete, Backsteg)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:72 +#: ../src/client/application/geary-controller.vala:68 msgid "_Archive" msgstr "_Arkivera" -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:69 msgid "Archive conversation (A)" msgstr "Arkivera konversationen (A)" -#: ../src/client/application/geary-controller.vala:74 +#: ../src/client/application/geary-controller.vala:70 msgid "Archive conversations (A)" msgstr "Arkivera konversationerna (A)" -#: ../src/client/application/geary-controller.vala:77 +#: ../src/client/application/geary-controller.vala:73 msgid "Mark as S_pam" msgstr "Markera som skrä_ppost" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:74 msgid "Mark as not S_pam" msgstr "Markera som icke skrä_ppost" -#: ../src/client/application/geary-controller.vala:80 -#: ../src/client/application/geary-controller.vala:396 +#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:448 msgid "Mark conversation" msgstr "Markera konversation" -#: ../src/client/application/geary-controller.vala:81 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark conversations" msgstr "Markera konversationer" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:78 msgid "Add label to conversation" msgstr "Lägg till en etikett till konversationen" -#: ../src/client/application/geary-controller.vala:83 +#: ../src/client/application/geary-controller.vala:79 msgid "Add label to conversations" msgstr "Lägg till etiketter till konversationerna" -#: ../src/client/application/geary-controller.vala:84 -#: ../src/client/application/geary-controller.vala:435 +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:487 msgid "Move conversation" msgstr "Flytta konversationen" -#: ../src/client/application/geary-controller.vala:85 +#: ../src/client/application/geary-controller.vala:81 msgid "Move conversations" msgstr "Flytta konversationerna" -#: ../src/client/application/geary-controller.vala:376 -#: ../ui/app_menu.interface.h:1 -msgid "A_ccounts" -msgstr "_Konton" - -#: ../src/client/application/geary-controller.vala:381 -#: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 -msgid "_Preferences" -msgstr "_Inställningar" - -#: ../src/client/application/geary-controller.vala:385 -#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:3 -msgid "_Help" -msgstr "_Hjälp" - -#: ../src/client/application/geary-controller.vala:389 -#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:4 -msgid "_About" -msgstr "_Om" - -#: ../src/client/application/geary-controller.vala:393 -#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:5 -msgid "_Quit" -msgstr "_Avsluta" - -#: ../src/client/application/geary-controller.vala:398 -msgid "_Mark as..." +#: ../src/client/application/geary-controller.vala:450 +msgid "_Mark as…" msgstr "_Markera som…" -#: ../src/client/application/geary-controller.vala:404 +#: ../src/client/application/geary-controller.vala:456 msgid "Mark as _Read" msgstr "Markera som _läst" -#: ../src/client/application/geary-controller.vala:410 +#: ../src/client/application/geary-controller.vala:462 msgid "Mark as _Unread" msgstr "Markera som _oläst" -#: ../src/client/application/geary-controller.vala:416 +#: ../src/client/application/geary-controller.vala:468 msgid "_Star" msgstr "Markera som _viktigt" -#: ../src/client/application/geary-controller.vala:421 +#: ../src/client/application/geary-controller.vala:473 msgid "U_nstar" msgstr "Markera som ov_iktigt" -#: ../src/client/application/geary-controller.vala:431 +#: ../src/client/application/geary-controller.vala:483 msgid "Add label" msgstr "Lägg till etikett" -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:484 msgid "_Label" msgstr "Tilldela _etikett" -#: ../src/client/application/geary-controller.vala:436 +#: ../src/client/application/geary-controller.vala:488 msgid "_Move" msgstr "_Flytta" -#: ../src/client/application/geary-controller.vala:440 +#: ../src/client/application/geary-controller.vala:492 msgid "Compose new message (Ctrl+N, N)" msgstr "Skriv nytt meddelande (Ctrl+N, N)" -#. Reply to a message. -#: ../src/client/application/geary-controller.vala:444 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1873 +#: ../src/client/application/geary-controller.vala:496 +#: ../ui/conversation-email-menus.ui.h:1 msgid "_Reply" msgstr "Sva_ra" -#: ../src/client/application/geary-controller.vala:445 +#: ../src/client/application/geary-controller.vala:497 msgid "Reply (Ctrl+R, R)" msgstr "Svara (Ctrl+R, R)" -#: ../src/client/application/geary-controller.vala:449 +#: ../src/client/application/geary-controller.vala:501 msgid "R_eply All" msgstr "Svara _alla" -#: ../src/client/application/geary-controller.vala:450 +#: ../src/client/application/geary-controller.vala:502 msgid "Reply all (Ctrl+Shift+R, Shift+R)" msgstr "Svara alla (Ctrl+Skift+R, Skift+R)" -#. Forward a message. -#: ../src/client/application/geary-controller.vala:455 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1883 +#: ../src/client/application/geary-controller.vala:507 +#: ../ui/conversation-email-menus.ui.h:3 msgid "_Forward" msgstr "Vidare_befordra" -#: ../src/client/application/geary-controller.vala:456 +#: ../src/client/application/geary-controller.vala:508 msgid "Forward (Ctrl+L, F)" msgstr "Vidarebefordra (Ctrl+L, F)" -#: ../src/client/application/geary-controller.vala:495 -msgid "Empty" -msgstr "Töm" - -#: ../src/client/application/geary-controller.vala:496 -msgid "Empty Spam or Trash folders" -msgstr "Töm skräp- eller papperskorgar" - -#: ../src/client/application/geary-controller.vala:500 +#: ../src/client/application/geary-controller.vala:538 msgid "Empty _Spam…" msgstr "Töm _skräpkorg…" -#: ../src/client/application/geary-controller.vala:504 +#: ../src/client/application/geary-controller.vala:542 msgid "Empty _Trash…" msgstr "_Töm papperskorg…" #. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:537 +#: ../src/client/application/geary-controller.vala:574 msgid "Toggle search bar" msgstr "Växla visning av sökrad" -#: ../src/client/application/geary-controller.vala:744 +#. No callback is connected, since we bind the toggle button to the find bar visibility +#: ../src/client/application/geary-controller.vala:579 +msgid "Toggle find bar" +msgstr "Växla visning av sökrad" + +#: ../src/client/application/geary-controller.vala:757 msgid "Unable to store server trust exception" msgstr "Kan inte lagra undantag för tillit till server" -#: ../src/client/application/geary-controller.vala:981 +#: ../src/client/application/geary-controller.vala:992 msgid "Your settings are insecure" msgstr "Dina inställningar är osäkra" -#: ../src/client/application/geary-controller.vala:982 +#: ../src/client/application/geary-controller.vala:993 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -470,15 +543,15 @@ "Detta innebär att ditt användarnamn och lösenord kan avläsas av någon annan " "på nätverket. Är du säker på att du vill göra detta?" -#: ../src/client/application/geary-controller.vala:983 +#: ../src/client/application/geary-controller.vala:994 msgid "Co_ntinue" msgstr "_Fortsätt" -#: ../src/client/application/geary-controller.vala:1030 +#: ../src/client/application/geary-controller.vala:1041 msgid "Error connecting to the server" msgstr "Fel vid anslutning till server" -#: ../src/client/application/geary-controller.vala:1031 +#: ../src/client/application/geary-controller.vala:1042 msgid "" "Geary encountered an error while connecting to the server. Please try again " "in a few moments." @@ -487,27 +560,27 @@ "stund." #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:1068 +#: ../src/client/application/geary-controller.vala:1079 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "Misslyckades med att skicka e-post" -#: ../src/client/application/geary-controller.vala:1069 +#: ../src/client/application/geary-controller.vala:1080 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." msgstr "" -"Geary råkade ut för ett fel vid skickande av e-post. Om problemen kvarstår " +"Geary råkade ut för ett fel vid skickande av e-post. Om problemen kvarstår " "kan du manuellt ta bort e-postmeddelandet från din utkorg." #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1073 +#: ../src/client/application/geary-controller.vala:1084 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "Misslyckades med att spara skickat e-postmeddelande" -#: ../src/client/application/geary-controller.vala:1074 +#: ../src/client/application/geary-controller.vala:1085 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." @@ -516,19 +589,19 @@ "till \"Skickad e-post\". Meddelandet kommer att ligga kvar i utkorgen tills " "du tar bort det." -#: ../src/client/application/geary-controller.vala:1143 +#: ../src/client/application/geary-controller.vala:1154 msgid "Labels" msgstr "Etiketter" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1155 +#: ../src/client/application/geary-controller.vala:1166 #, c-format msgid "Unable to open the database for %s" msgstr "Kunde inte öppna databasen för %s" -#: ../src/client/application/geary-controller.vala:1156 +#: ../src/client/application/geary-controller.vala:1167 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -551,20 +624,20 @@ "Att bygga om databasen medför att alla lokala e-postmeddelanden och bifogade " "filer förstörs. E-post på din server är inte berörda av felet." -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "_Rebuild" msgstr "_Bygg om" -#: ../src/client/application/geary-controller.vala:1158 +#: ../src/client/application/geary-controller.vala:1169 msgid "E_xit" msgstr "_Avsluta" -#: ../src/client/application/geary-controller.vala:1167 +#: ../src/client/application/geary-controller.vala:1178 #, c-format -msgid "Unable to rebuild database for \"%s\"" +msgid "Unable to rebuild database for “%s”" msgstr "Kunde inte bygga om databasen för ”%s”" -#: ../src/client/application/geary-controller.vala:1168 +#: ../src/client/application/geary-controller.vala:1179 #, c-format msgid "" "Error during rebuild:\n" @@ -577,14 +650,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1190 -#: ../src/client/application/geary-controller.vala:1200 +#: ../src/client/application/geary-controller.vala:1201 #: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:1222 #, c-format msgid "Unable to open local mailbox for %s" msgstr "Kunde inte öppna lokal brevlåda för %s" -#: ../src/client/application/geary-controller.vala:1191 +#: ../src/client/application/geary-controller.vala:1202 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -603,22 +676,21 @@ "\n" "%s" -#: ../src/client/application/geary-controller.vala:1201 +#: ../src/client/application/geary-controller.vala:1212 msgid "" "The version number of the local mail database is formatted for a newer " -"version of Geary. Unfortunately, the database cannot be \"rolled back\" to " +"version of Geary. Unfortunately, the database cannot be “rolled back” to " "work with this version of Geary.\n" "\n" "Please install the latest version of Geary and try again." msgstr "" "Versionsnumret för den lokala e-postdatabasen är formaterad för en nyare " -"version av Geary. \n" -"Tyvärr kan databasen inte återställas att fungera med denna version av " -"Geary.\n" +"version av Geary. Tyvärr kan databasen inte återställas att fungera med " +"denna version av Geary.\n" "\n" "Vänligen installera den senaste versionen av Geary och försök igen." -#: ../src/client/application/geary-controller.vala:1212 +#: ../src/client/application/geary-controller.vala:1223 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" @@ -630,32 +702,15 @@ "\n" "Vänligen kontrollera din nätverksanslutning och starta om Geary." -#: ../src/client/application/geary-controller.vala:1723 -#, c-format -msgid "About %s" -msgstr "Om %s" - -#. / Translators: add your name and email address to receive credit in the About dialog -#. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1726 -msgid "translator-credits" -msgstr "" -"Joachim Johansson \n" -"Mattias Eriksson \n" -"\n" -"Skicka synpunkter på översättningen till\n" -"." - -#: ../src/client/application/geary-controller.vala:1984 +#: ../src/client/application/geary-controller.vala:1999 msgid "Undo move (Ctrl+Z)" msgstr "Ångra förflyttning (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:1994 -#, c-format -msgid "Are you sure you want to open \"%s\"?" -msgstr "Är du säker på att du vill öppna ”%s”?" +#: ../src/client/application/geary-controller.vala:2009 +msgid "Are you sure you want to open these attachments?" +msgstr "Är du säker på att du vill öppna dessa bilagor?" -#: ../src/client/application/geary-controller.vala:1995 +#: ../src/client/application/geary-controller.vala:2010 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -663,118 +718,104 @@ "Om du öppnar bifogade filer kan du skada ditt system. Öppna enbart filer " "från kontakter du litar på." -#: ../src/client/application/geary-controller.vala:1996 -msgid "Don't _ask me again" +#: ../src/client/application/geary-controller.vala:2011 +msgid "Don’t _ask me again" msgstr "Fråga _inte igen" -#: ../src/client/application/geary-controller.vala:2014 +#: ../src/client/application/geary-controller.vala:2121 #, c-format -msgid "A file named \"%s\" already exists. Do you want to replace it?" +msgid "A file named “%s” already exists. Do you want to replace it?" msgstr "En fil med namnet ”%s” finns redan. Vill du ersätta den?" -#: ../src/client/application/geary-controller.vala:2016 +#: ../src/client/application/geary-controller.vala:2123 #, c-format msgid "" -"The file already exists in \"%s\". Replacing it will overwrite its contents." +"The file already exists in “%s”. Replacing it will overwrite its contents." msgstr "" "Filen finns redan i ”%s”. Att ersätta den kommer att skriva över dess " "innehåll." -#: ../src/client/application/geary-controller.vala:2019 +#: ../src/client/application/geary-controller.vala:2126 msgid "_Replace" msgstr "E_rsätt" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2324 +#: ../src/client/application/geary-controller.vala:2374 msgid "Close open draft messages?" msgstr "Stänga öppna utkast?" -#: ../src/client/application/geary-controller.vala:2454 +#: ../src/client/application/geary-controller.vala:2496 #, c-format msgid "Empty all email from your %s folder?" msgstr "Ta bort alla e-postmeddelanden från din mapp %s?" -#: ../src/client/application/geary-controller.vala:2455 +#: ../src/client/application/geary-controller.vala:2497 msgid "This removes the email from Geary and your email server." msgstr "Detta tar bort e-postmeddelanden från Geary och din e-postserver." -#: ../src/client/application/geary-controller.vala:2456 +#: ../src/client/application/geary-controller.vala:2498 msgid "This cannot be undone." msgstr "Detta kan inte ångras." -#: ../src/client/application/geary-controller.vala:2457 +#: ../src/client/application/geary-controller.vala:2499 #, c-format msgid "Empty %s" msgstr "Töm %s" -#: ../src/client/application/geary-controller.vala:2474 +#: ../src/client/application/geary-controller.vala:2516 #, c-format msgid "Error emptying %s" msgstr "Fel vid tömning av %s" -#: ../src/client/application/geary-controller.vala:2504 +#: ../src/client/application/geary-controller.vala:2546 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "Vill du radera detta meddelande permanent?" msgstr[1] "Vill du radera dessa meddelanden permanent?" -#: ../src/client/application/geary-controller.vala:2506 +#: ../src/client/application/geary-controller.vala:2548 msgid "Delete" msgstr "Radera" -#: ../src/client/application/geary-controller.vala:2537 +#: ../src/client/application/geary-controller.vala:2580 msgid "Undo archive (Ctrl+Z)" msgstr "Ångra arkivering (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2552 +#: ../src/client/application/geary-controller.vala:2595 msgid "Undo trash (Ctrl+Z)" msgstr "Ångra flytt till papperskorgen (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2605 +#: ../src/client/application/geary-controller.vala:2649 msgid "Undo (Ctrl+Z)" msgstr "Ångra (Ctrl+Z)" -#: ../src/client/components/conversation-find-bar.vala:214 -#, c-format -msgid "%i match" -msgid_plural "%i matches" -msgstr[0] "%i träff" -msgstr[1] "%i träffar" - -#: ../src/client/components/conversation-find-bar.vala:216 -#, c-format -msgid "%i match (wrapped)" -msgid_plural "%i matches (wrapped)" -msgstr[0] "%i träff (från början)" -msgstr[1] "%i träffar (från början)" - -#: ../src/client/components/conversation-find-bar.vala:218 -msgid "not found" -msgstr "ingen sökträff" +#: ../src/client/application/geary-controller.vala:2780 +msgid "Failed to open default text editor." +msgstr "Det gick inte att öppna standardtextredigeraren." -#: ../src/client/components/main-window.vala:438 +#: ../src/client/components/main-window.vala:389 #, c-format msgid "%s (%d)" msgstr "%s (%d)" -#: ../src/client/components/search-bar.vala:10 +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "Sök" #. Search entry. -#: ../src/client/components/search-bar.vala:25 +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" msgstr "Sök i all e-post i alla konton efter nyckelord (Ctrl+S)" -#: ../src/client/components/search-bar.vala:118 +#: ../src/client/components/search-bar.vala:100 #, c-format msgid "Indexing %s account" msgstr "Indexerar %s konto" -#: ../src/client/components/search-bar.vala:129 +#: ../src/client/components/search-bar.vala:111 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" @@ -782,7 +823,7 @@ #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 -msgid "Sending..." +msgid "Sending…" msgstr "Skickar…" #: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 @@ -794,6 +835,10 @@ msgid "_Cancel" msgstr "_Avbryt" +#: ../src/client/components/stock.vala:21 ../ui/gtk/menus.ui.h:6 +msgid "_About" +msgstr "_Om" + #: ../src/client/components/stock.vala:23 msgid "_Close" msgstr "_Stäng" @@ -802,51 +847,72 @@ msgid "_Discard" msgstr "_Förkasta" -#: ../src/client/components/stock.vala:26 +#: ../src/client/components/stock.vala:25 ../ui/gtk/menus.ui.h:5 +msgid "_Help" +msgstr "_Hjälp" + +#: ../src/client/components/stock.vala:26 ../ui/conversation-email-menus.ui.h:9 msgid "_Open" msgstr "_Öppna" -#: ../src/client/components/stock.vala:28 -msgid "_Print..." +#: ../src/client/components/stock.vala:27 ../ui/gtk/menus.ui.h:3 +msgid "_Preferences" +msgstr "_Inställningar" + +#: ../src/client/components/stock.vala:28 ../ui/conversation-email-menus.ui.h:7 +msgid "_Print…" msgstr "_Skriv ut…" +#: ../src/client/components/stock.vala:29 ../ui/gtk/menus.ui.h:7 +msgid "_Quit" +msgstr "_Avsluta" + #: ../src/client/components/stock.vala:30 ../ui/remove_confirm.glade.h:6 msgid "_Remove" msgstr "_Ta bort" -#. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1335 -msgid "Select _All" -msgstr "Välj _alla" - -#: ../src/client/components/stock.vala:33 msgid "_Keep" msgstr "_Behåll" -#: ../src/client/composer/composer-widget.vala:73 +#: ../src/client/composer/composer-link-popover.vala:150 +msgid "Link URL is not correctly formatted, e.g. http://example.com" +msgstr "" +"Länk-URL är inte korrekt formaterad, det vill säga t.ex. http://exempel.se" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid link URL" +msgstr "Ogiltig länk-URL" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid email address" +msgstr "Ogiltig e-postadress" + +#: ../src/client/composer/composer-widget.vala:154 msgid "Saved" msgstr "Sparat" -#: ../src/client/composer/composer-widget.vala:74 +#: ../src/client/composer/composer-widget.vala:155 msgid "Saving" msgstr "Sparar" -#: ../src/client/composer/composer-widget.vala:75 +#: ../src/client/composer/composer-widget.vala:156 msgid "Error saving" msgstr "Misslyckades med att spara" -#: ../src/client/composer/composer-widget.vala:76 +#: ../src/client/composer/composer-widget.vala:157 msgid "Press Backspace to delete quote" msgstr "Tryck på Backsteg för att ta bort citat" -#: ../src/client/composer/composer-widget.vala:77 +#: ../src/client/composer/composer-widget.vala:158 msgid "New Message" msgstr "Nytt meddelande" -#. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since -#. this is full-word checking, include all variants of each word. No spaces are allowed. -#: ../src/client/composer/composer-widget.vala:138 +#. Translators: This is list of keywords, separated by pipe ("|") +#. characters, that suggest an attachment; since this is full-word +#. checking, include all variants of each word. No spaces are +#. allowed. +#: ../src/client/composer/composer-widget.vala:167 msgid "" "attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" "enclosing|encloses|enclosure|enclosures" @@ -854,274 +920,187 @@ "bifoga|bifogar|bifogat|inkludera|inkluderar|inkluderat|bilaga|bilagor|" "skickar med|medföljande|attachment" -#: ../src/client/composer/composer-widget.vala:1121 -#: ../src/client/composer/composer-widget.vala:1125 +#: ../src/client/composer/composer-widget.vala:1122 +#: ../src/client/composer/composer-widget.vala:1141 msgid "Do you want to discard this message?" msgstr "Vill du förkasta detta meddelande?" -#: ../src/client/composer/composer-widget.vala:1281 +#: ../src/client/composer/composer-widget.vala:1245 msgid "Send message with an empty subject and body?" msgstr "Skicka meddelande med en tom ämnesrad och utan innehåll?" -#: ../src/client/composer/composer-widget.vala:1283 +#: ../src/client/composer/composer-widget.vala:1247 msgid "Send message with an empty subject?" msgstr "Skicka meddelande med en tom ämnesrad?" -#: ../src/client/composer/composer-widget.vala:1285 +#: ../src/client/composer/composer-widget.vala:1249 msgid "Send message with an empty body?" msgstr "Skicka meddelande utan innehåll?" -#: ../src/client/composer/composer-widget.vala:1287 +#: ../src/client/composer/composer-widget.vala:1253 msgid "Send message without an attachment?" msgstr "Skicka meddelande utan att bifoga filer?" -#: ../src/client/composer/composer-widget.vala:1553 -msgid "Cannot add attachment" -msgstr "Kan inte bifoga din fil" - -#: ../src/client/composer/composer-widget.vala:1564 +#: ../src/client/composer/composer-widget.vala:1515 #, c-format -msgid "\"%s\" could not be found." -msgstr "\"%s\" kunde inte hittas." +msgid "“%s” already attached for delivery." +msgstr "”%s” är redan bifogad och kommer att skickas." -#: ../src/client/composer/composer-widget.vala:1571 +#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" +#. Translators: The first argument will be a +#. description of the document type, the second will +#. be a human-friendly size string. For example: +#. Document (100.9MB) +#: ../src/client/composer/composer-widget.vala:1523 +#: ../src/client/conversation-viewer/conversation-email.vala:138 #, c-format -msgid "\"%s\" is a folder." -msgstr "”%s” är en mapp." +msgid "%s (%s)" +msgstr "%s (%s)" -#: ../src/client/composer/composer-widget.vala:1578 +#: ../src/client/composer/composer-widget.vala:1560 #, c-format -msgid "\"%s\" is an empty file." -msgstr "”%s” är en tom fil." +msgid "“%s” could not be found." +msgstr "”%s” kunde inte hittas." -#: ../src/client/composer/composer-widget.vala:1592 +#: ../src/client/composer/composer-widget.vala:1566 #, c-format -msgid "\"%s\" could not be opened for reading." -msgstr "”%s” kunde inte öppnas." +msgid "“%s” is a folder." +msgstr "”%s” är en mapp." -#: ../src/client/composer/composer-widget.vala:1599 +#: ../src/client/composer/composer-widget.vala:1572 #, c-format -msgid "\"%s\" already attached for delivery." -msgstr "”%s” är redan bifogad och kommer att skickas." +msgid "“%s” is an empty file." +msgstr "”%s” är en tom fil." -#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-widget.vala:1608 +#: ../src/client/composer/composer-widget.vala:1585 #, c-format -msgid "%s (%s)" -msgstr "%s (%s)" +msgid "“%s” could not be opened for reading." +msgstr "”%s” kunde inte öppnas för läsning." -#: ../src/client/composer/composer-widget.vala:1668 +#: ../src/client/composer/composer-widget.vala:1593 +msgid "Cannot add attachment" +msgstr "Kan inte bifoga din fil" + +#: ../src/client/composer/composer-widget.vala:1645 msgid "To: " msgstr "Till: " -#: ../src/client/composer/composer-widget.vala:1671 +#: ../src/client/composer/composer-widget.vala:1648 msgid "Cc: " msgstr "Cc: " -#: ../src/client/composer/composer-widget.vala:1674 +#: ../src/client/composer/composer-widget.vala:1651 msgid "Bcc: " msgstr "Bcc: " -#: ../src/client/composer/composer-widget.vala:1677 +#: ../src/client/composer/composer-widget.vala:1654 msgid "Reply-To: " msgstr "Svara-till: " -#: ../src/client/composer/composer-widget.vala:1910 +#: ../src/client/composer/composer-widget.vala:1786 msgid "Select Color" msgstr "Välj färg" #. Displayed in the From dropdown to indicate an "alternate email address" #. for an account. The first printf argument will be the alternate email #. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2345 +#: ../src/client/composer/composer-widget.vala:1986 #, c-format msgid "%1$s via %2$s" msgstr "%1$s via %2$s" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2389 +#: ../src/client/composer/composer-widget.vala:2028 msgid "_From:" msgstr "_Från:" +#. Translators: This is the name of the file chooser filter +#. when inserting an image in the composer. +#: ../src/client/composer/composer-widget.vala:2252 +msgid "Images" +msgstr "Bilder" + +#: ../src/client/composer/spell-check-popover.vala:117 +msgid "Remove this language from the preferred list" +msgstr "Ta bort detta språk från listan över föredragna språk" + +#: ../src/client/composer/spell-check-popover.vala:121 +msgid "Add this language to the preferred list" +msgstr "Lägg till detta språk till listan över föredragna språk" + +#: ../src/client/composer/spell-check-popover.vala:217 +msgid "Search for more languages" +msgstr "Sök efter fler språk" + #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Jag" -#: ../src/client/conversation-viewer/conversation-viewer.vala:414 -msgid "No conversations selected." -msgstr "Inga valda konversationer." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:416 -#, c-format -msgid "%u conversation selected." -msgid_plural "%u conversations selected." -msgstr[0] "%u konversation markerad." -msgstr[1] "%u konversationer markerade." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:446 -msgid "No search results found." -msgstr "Inga sökresultat funna." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:448 -msgid "No conversations in folder." -msgstr "Inga konversationer i mappen." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "This message contains remote images." -msgstr "Meddelandet innehåller bilder från internet." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "Show Images" -msgstr "Visa bilder" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:715 -msgid "Always Show From Sender" -msgstr "Visa alltid från avsändare" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:739 -msgid "Edit Draft" -msgstr "Redigera utkast" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:815 -msgid "From:" -msgstr "Från:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:818 -msgid "To:" -msgstr "Till:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:821 -msgid "Cc:" -msgstr "Cc:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:824 -msgid "Bcc:" -msgstr "Bcc:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:827 -msgid "Subject:" -msgstr "Ämne:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:830 -msgid "Date:" -msgstr "Datum:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1150 -#, c-format -msgid "%u read message" -msgid_plural "%u read messages" -msgstr[0] "%u läst meddelande" -msgstr[1] "%u lästa meddelanden" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1282 -#, c-format -msgid "This message was sent successfully, but could not be saved to %s." -msgstr "Detta meddelande har skickats, men kunde inte sparas till %s." - -#. Add a menu item for copying the current selection. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1308 -#: ../ui/composer.glade.h:4 -msgid "_Copy" -msgstr "_Kopiera" - -#. Add a menu item for copying the address. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1316 -msgid "Copy _Email Address" -msgstr "Kopiera _e-postadress" +#. Translators: This is the file type displayed for +#. attachments with unknown file types. +#: ../src/client/conversation-viewer/conversation-email.vala:124 +msgid "Unknown" +msgstr "Okänd" + +#. Preview headers +#. Translators: This is displayed in place of the from address +#. when the message has no from address. +#: ../src/client/conversation-viewer/conversation-message.vala:331 +msgid "No sender" +msgstr "Ingen avsändare" + +#. Translators: This separates multiple 'from' +#. addresses in the header preview for a message. +#: ../src/client/conversation-viewer/conversation-message.vala:586 +msgid ", " +msgstr ", " + +#. Translators: This string is used as the HTML IMG ALT +#. attribute value when displaying an inline image in an email +#. that did not specify a file name. E.g. Image" +msgstr "Från " + +#: ../ui/conversation-message.ui.h:2 +msgid "1/1/1970\t" +msgstr "1/1/1970\t" + +#: ../ui/conversation-message.ui.h:3 +msgid "Preview body text." +msgstr "Förhandsgranska meddelandetext." + +#: ../ui/conversation-message.ui.h:4 +msgid "Sent by:" +msgstr "Skickat av:" + +#: ../ui/conversation-message.ui.h:5 +msgid "Reply to:" +msgstr "Svara-till:" + +#: ../ui/conversation-message.ui.h:6 +msgid "Subject" +msgstr "Ämne" + +#: ../ui/conversation-message.ui.h:7 +msgid "To:" +msgstr "Till:" + +#: ../ui/conversation-message.ui.h:8 +msgid "Cc:" +msgstr "Cc:" + +#: ../ui/conversation-message.ui.h:9 +msgid "Bcc:" +msgstr "Bcc:" + +#: ../ui/conversation-message.ui.h:10 +msgid "Show Images" +msgstr "Visa bilder" + +#: ../ui/conversation-message.ui.h:11 +msgid "Always Show From Sender" +msgstr "Visa alltid från avsändare" + +#: ../ui/conversation-message.ui.h:12 +msgid "Remote images not shown" +msgstr "Fjärrbilder visas inte" + +#: ../ui/conversation-message.ui.h:13 +msgid "Only show remote images from senders you trust." +msgstr "Visa endast fjärrbilder från avsändare du litar på." + +#: ../ui/conversation-message.ui.h:14 +msgid "But actually goes to:" +msgstr "men går egentligen till:" + +#: ../ui/conversation-message.ui.h:15 +msgid "The link appears to go to:" +msgstr "Denna länk ser ut att gå till:" + +#: ../ui/conversation-message.ui.h:16 +msgid "Deceptive link found" +msgstr "Bedräglig länk funnen" + +#: ../ui/conversation-message.ui.h:17 +msgid "The email sender may be leading you to the wrong web site." +msgstr "E-postavsändaren kan försöka att leda dig till fel webbplats." + +#: ../ui/conversation-message.ui.h:18 +msgid "If unsure, contact the sender and ask before continuing." +msgstr "Om osäker, kontakta avsändaren och fråga innan du fortsätter." + +#: ../ui/conversation-viewer.ui.h:1 +msgid "Find in conversation" +msgstr "Hitta i konversation" + +#: ../ui/conversation-viewer.ui.h:2 +msgid "Find the previous occurrence of the search string." +msgstr "Hitta föregående förekomst av söksträngen." + +#: ../ui/conversation-viewer.ui.h:3 +msgid "Find the next occurrence of the search string." +msgstr "Hitta nästa förekomst av söksträngen." + #: ../ui/edit_alternate_emails.glade.h:1 msgid "Remove email address" msgstr "Ta bort e-postadress" @@ -2060,9 +2193,250 @@ msgid "label" msgstr "etikett" +#: ../ui/gtk/help-overlay.ui.h:1 +msgid "Conversation Shortcuts" +msgstr "Konversationsgenvägar" + +#: ../ui/gtk/help-overlay.ui.h:2 +msgctxt "shortcut window" +msgid "General" +msgstr "Allmänt" + +#: ../ui/gtk/help-overlay.ui.h:3 +msgctxt "shortcut window" +msgid "Move focus to the next/previous pane" +msgstr "Flytta fokus till nästa/föregående panel" + +#: ../ui/gtk/help-overlay.ui.h:4 +msgctxt "shortcut window" +msgid "Move focus to conversation list" +msgstr "Flytta fokus till konversationslistan" + +#: ../ui/gtk/help-overlay.ui.h:5 +msgctxt "shortcut window" +msgid "Detach composer window" +msgstr "Koppla loss textinmatningsfönstret" + +#: ../ui/gtk/help-overlay.ui.h:6 +msgctxt "shortcut window" +msgid "Close composer window" +msgstr "Stäng textinmatningsfönster" + +#: ../ui/gtk/help-overlay.ui.h:7 +msgctxt "shortcut window" +msgid "Show keyboard shortcuts" +msgstr "Visa tangentbordsgenvägar" + +#: ../ui/gtk/help-overlay.ui.h:8 +msgctxt "shortcut window" +msgid "Show help" +msgstr "Visa hjälp" + +#: ../ui/gtk/help-overlay.ui.h:9 +msgctxt "shortcut window" +msgid "Quit the application" +msgstr "Avsluta programmet" + +#: ../ui/gtk/help-overlay.ui.h:10 +msgctxt "shortcut window" +msgid "Search" +msgstr "Sök" + +#: ../ui/gtk/help-overlay.ui.h:11 +msgctxt "shortcut window" +msgid "Jump to search box" +msgstr "Hoppa till sökfältet" + +#: ../ui/gtk/help-overlay.ui.h:12 +msgctxt "shortcut window" +msgid "Find in current conversation" +msgstr "Hitta i aktuell konversation" + +#: ../ui/gtk/help-overlay.ui.h:13 +msgctxt "shortcut window" +msgid "Find next/previous in current conversation" +msgstr "Hitta nästa/föregående i aktuell konversation" + +#: ../ui/gtk/help-overlay.ui.h:14 +msgctxt "shortcut window" +msgid "Actions" +msgstr "Åtgärder" + +#: ../ui/gtk/help-overlay.ui.h:15 +msgctxt "shortcut window" +msgid "Compose a new message" +msgstr "Skapa ett nytt meddelande" + +#: ../ui/gtk/help-overlay.ui.h:16 +msgctxt "shortcut window" +msgid "Reply to sender " +msgstr "Svar till avsändare " + +#: ../ui/gtk/help-overlay.ui.h:17 +msgctxt "shortcut window" +msgid "Reply to all" +msgstr "Svar till alla" + +#: ../ui/gtk/help-overlay.ui.h:18 +msgctxt "shortcut window" +msgid "Forward" +msgstr "Vidarebefordra" + +#: ../ui/gtk/help-overlay.ui.h:19 +msgctxt "shortcut window" +msgid "Archive" +msgstr "Arkiv" + +#: ../ui/gtk/help-overlay.ui.h:20 +msgctxt "shortcut window" +msgid "Move to trash" +msgstr "Flytta till papperskorgen" + +#: ../ui/gtk/help-overlay.ui.h:21 +msgctxt "shortcut window" +msgid "Toggle spam" +msgstr "Växla spam" + +#: ../ui/gtk/help-overlay.ui.h:22 +msgctxt "shortcut window" +msgid "Move the conversation" +msgstr "Flytta konversationen" + +#: ../ui/gtk/help-overlay.ui.h:23 +msgctxt "shortcut window" +msgid "Label the conversation" +msgstr "Lägg till en etikett till konversationen" + +#: ../ui/gtk/help-overlay.ui.h:24 +msgctxt "shortcut window" +msgid "Mark read" +msgstr "Markera som läst" + +#: ../ui/gtk/help-overlay.ui.h:25 +msgctxt "shortcut window" +msgid "Mark unread" +msgstr "Markera som oläst" + +#: ../ui/gtk/help-overlay.ui.h:26 +msgctxt "shortcut window" +msgid "View" +msgstr "Visa" + +#: ../ui/gtk/help-overlay.ui.h:27 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Zooma in" + +#: ../ui/gtk/help-overlay.ui.h:28 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Zooma ut" + +#: ../ui/gtk/help-overlay.ui.h:29 +msgctxt "shortcut window" +msgid "Reset zoom" +msgstr "Återställ zoom" + +#: ../ui/gtk/help-overlay.ui.h:30 +msgctxt "shortcut window" +msgid "Additional Shortcuts" +msgstr "Ytterligare genvägar" + +#: ../ui/gtk/help-overlay.ui.h:31 +msgctxt "shortcut window" +msgid "Star" +msgstr "Stjärnmärk" + +#: ../ui/gtk/help-overlay.ui.h:32 +msgctxt "shortcut window" +msgid "Unstar" +msgstr "Ta bort stjärmärkning" + +#: ../ui/gtk/help-overlay.ui.h:33 +msgctxt "shortcut window" +msgid "Delete" +msgstr "Ta bort" + +#: ../ui/gtk/help-overlay.ui.h:34 +msgctxt "shortcut window" +msgid "Jump to next (older) conversation" +msgstr "Hoppa till nästa (äldre) konversation" + +#: ../ui/gtk/help-overlay.ui.h:35 +msgctxt "shortcut window" +msgid "Jump to previous (newer) conversation" +msgstr "Hoppa till föregående (nyare) konversation" + +#: ../ui/gtk/help-overlay.ui.h:36 +msgid "Composer Shortcuts" +msgstr "Redigeringsgenvägar" + +#: ../ui/gtk/help-overlay.ui.h:37 +msgctxt "shortcut window" +msgid "Quote text" +msgstr "Citera text" + +#: ../ui/gtk/help-overlay.ui.h:38 +msgctxt "shortcut window" +msgid "Unquote text" +msgstr "Avcitera text" + +#: ../ui/gtk/help-overlay.ui.h:39 +msgctxt "shortcut window" +msgid "Send" +msgstr "Skicka" + +#: ../ui/gtk/help-overlay.ui.h:40 +msgctxt "shortcut window" +msgid "Add attachment" +msgstr "Bifoga bilaga" + +#: ../ui/gtk/help-overlay.ui.h:41 +msgctxt "shortcut window" +msgid "Rich text mode" +msgstr "Rich Text-läge" + +#: ../ui/gtk/help-overlay.ui.h:42 +msgctxt "shortcut window" +msgid "Bold text" +msgstr "Fet text" + +#: ../ui/gtk/help-overlay.ui.h:43 +msgctxt "shortcut window" +msgid "Italicize text" +msgstr "Kursiv text" + +#: ../ui/gtk/help-overlay.ui.h:44 +msgctxt "shortcut window" +msgid "Underline text" +msgstr "Understryk text" + +#: ../ui/gtk/help-overlay.ui.h:45 +msgctxt "shortcut window" +msgid "Strike text" +msgstr "Genomstruken text" + +#: ../ui/gtk/help-overlay.ui.h:46 +msgctxt "shortcut window" +msgid "Insert a link" +msgstr "Infoga en länk" + +#: ../ui/gtk/help-overlay.ui.h:47 +msgctxt "shortcut window" +msgid "Remove formatting" +msgstr "Ta bort formatering" + +#: ../ui/gtk/menus.ui.h:2 +msgid "A_ccounts" +msgstr "_Konton" + +#: ../ui/gtk/menus.ui.h:4 +msgid "_Keyboard Shortcuts" +msgstr "_Tangenbordsgenvägar" + #: ../ui/login.glade.h:1 msgid "email@example.com" -msgstr "e-post@example.com" +msgstr "epost@exempel.se" #: ../ui/login.glade.h:2 ../ui/password-dialog.glade.h:3 msgid "Password" @@ -2110,7 +2484,7 @@ #: ../ui/login.glade.h:14 msgid "imap.example.com" -msgstr "imap.example.com" +msgstr "email@exempel.se" #: ../ui/login.glade.h:15 msgid "P_ort" @@ -2118,7 +2492,7 @@ #: ../ui/login.glade.h:16 msgid "smtp.example.com" -msgstr "smtp.example.com" +msgstr "smtp.exempel.se" #: ../ui/login.glade.h:17 msgid "Ser_ver" @@ -2184,7 +2558,7 @@ msgid "Use IMAP cre_dentials" msgstr "Använ_d autentiseringsuppgifter för IMAP" -#: ../ui/login.glade.h:34 ../ui/preferences.glade.h:5 +#: ../ui/login.glade.h:34 msgid "Composer" msgstr "Textinmatningsfönster" @@ -2204,6 +2578,10 @@ msgid "_Download mail" msgstr "_Hämta e-post" +#: ../ui/main-toolbar.ui.h:1 +msgid "Empty Spam or Trash folders" +msgstr "Töm skräp- eller papperskorgar" + #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" msgstr "SMTP-certifikation" @@ -2220,47 +2598,43 @@ msgid "_Authenticate" msgstr "_Autentisera" -#: ../ui/preferences.glade.h:1 +#: ../ui/preferences-dialog.ui.h:1 msgid "Reading" msgstr "Läser" -#: ../ui/preferences.glade.h:2 +#: ../ui/preferences-dialog.ui.h:2 msgid "_Automatically select next message" msgstr "Välj nästa meddelande _automatiskt" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences-dialog.ui.h:3 msgid "_Display conversation preview" msgstr "_Visa förhandsvisning av konversation" -#: ../ui/preferences.glade.h:4 +#: ../ui/preferences-dialog.ui.h:4 msgid "Use _three pane view" msgstr "Använd tredelad vy" -#: ../ui/preferences.glade.h:6 -msgid "Enable _spell checking" -msgstr "Aktivera _stavningskontroll" - -#: ../ui/preferences.glade.h:7 +#: ../ui/preferences-dialog.ui.h:5 msgid "Notifications" msgstr "Aviseringar" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences-dialog.ui.h:6 msgid "_Play notification sounds" msgstr "S_pela aviseringsljud" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences-dialog.ui.h:7 msgid "Show _notifications for new mail" msgstr "Visa _aviseringar för ny e-post" -#: ../ui/preferences.glade.h:10 +#: ../ui/preferences-dialog.ui.h:8 msgid "Always _watch for new mail" msgstr "_Kontrollera alltid om det finns ny e-post" -#: ../ui/preferences.glade.h:11 +#: ../ui/preferences-dialog.ui.h:9 msgid "Geary will run in the background and notify of new mail" msgstr "Geary kommer att köra i bakgrunden och avisera om ny e-post" -#: ../ui/preferences.glade.h:12 +#: ../ui/preferences-dialog.ui.h:10 msgid "Preferences" msgstr "Inställningar" @@ -2292,6 +2666,144 @@ msgid "Geary update in progress…" msgstr "Geary-uppgradering pågår…" +#~ msgid "none" +#~ msgstr "inget" + +#~ msgid "_Inspect" +#~ msgstr "_Inspektera" + +#~ msgid "%s — Composer Inspector" +#~ msgstr "%s — Redigeraröversikt" + +#~ msgid " (Invalid?)" +#~ msgstr " (Ogiltig?)" + +#~ msgid "%s — Conversation Inspector" +#~ msgstr "%s — Konversationsöversikt" + +#~ msgid "Copy _Link" +#~ msgstr "Kopiera _länk" + +#~ msgid "Link (Ctrl+L)" +#~ msgstr "Länk (Ctrl+L)" + +#~ msgid "Enable _spell checking" +#~ msgstr "Aktivera _stavningskontroll" + +#~ msgid "_Inspect..." +#~ msgstr "_Inspektera..." + +#~ msgid "Empty" +#~ msgstr "Töm" + +#~ msgid "%i match" +#~ msgid_plural "%i matches" +#~ msgstr[0] "%i träff" +#~ msgstr[1] "%i träffar" + +#~ msgid "%i match (wrapped)" +#~ msgid_plural "%i matches (wrapped)" +#~ msgstr[0] "%i träff (från början)" +#~ msgstr[1] "%i träffar (från början)" + +#~ msgid "not found" +#~ msgstr "ingen sökträff" + +#~ msgid "No search results found." +#~ msgstr "Inga sökresultat funna." + +#~ msgid "From:" +#~ msgstr "Från:" + +#~ msgid "Date:" +#~ msgstr "Datum:" + +#~ msgid "Select _Message" +#~ msgstr "_Markera meddelande" + +#~ msgid "_Save As..." +#~ msgstr "_Spara som…" + +#~ msgid "Save A_ttachment..." +#~ msgid_plural "Save All A_ttachments..." +#~ msgstr[0] "Spara b_ifogad fil…" +#~ msgstr[1] "Spara alla b_ifogade filer…" + +#~ msgid "_Left" +#~ msgstr "_Vänster" + +#~ msgid "_Right" +#~ msgstr "_Höger" + +#~ msgid "_Center" +#~ msgstr "_Centrerad" + +#~ msgid "_Justify" +#~ msgstr "_Marginaljusterad" + +#~ msgid "More options" +#~ msgstr "Fler inställningar" + +#~ msgctxt "Label" +#~ msgid "Close and Save" +#~ msgstr "Stäng och spara" + +#~ msgctxt "Short Label" +#~ msgid "Close and Save" +#~ msgstr "Stäng och spara" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Save" +#~ msgstr "Stäng och spara" + +#~ msgctxt "Label" +#~ msgid "Close and Discard" +#~ msgstr "Stäng och förkasta" + +#~ msgctxt "Short Label" +#~ msgid "Close and Discard" +#~ msgstr "Stäng och förkasta" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Discard" +#~ msgstr "Stäng och förkasta" + +#~ msgid "Large" +#~ msgstr "Stor" + +#~ msgid "Medium" +#~ msgstr "Medel" + +#~ msgid "Small" +#~ msgstr "Liten" + +#~ msgid "Sans Serif" +#~ msgstr "Sans Serif" + +#~ msgid "Serif" +#~ msgstr "Serif" + +#~ msgid "Fixed Width" +#~ msgstr "Fast bredd" + +#~ msgid "Detach" +#~ msgstr "Frikoppla" + +#~ msgid "_Attach File" +#~ msgstr "_Bifoga fil" + +#~ msgid "Attach File" +#~ msgstr "Bifoga fil" + +#~ msgid "_Include Original Attachments" +#~ msgstr "_Inkludera bifogade filer från original" + +#~ msgid "Spelling language" +#~ msgstr "Stavningsspråk" + +#~ msgid "Application Menu" +#~ msgstr "Programmeny" + #~ msgid "Copyright 2011-2015 Yorba Foundation" #~ msgstr "Copyright 2011-2015 Yorba Foundation" diff -Nru geary-0.11.4/po/tr.po geary-0.12.0/po/tr.po --- geary-0.11.4/po/tr.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/tr.po 2017-10-02 11:25:21.000000000 +0000 @@ -8,18 +8,18 @@ # Baris Ata , 2013 # Ferhat Tunctan , 2012 # Ferhat Tunctan , 2012 -# Muhammet Kara , 2014. # Necdet Yücel , 2015. # Simge Sezgin , 2015. -# Emin Tufan Çetin , 2016. +# Muhammet Kara , 2014, 2016. +# Emin Tufan Çetin , 2016, 2017. # msgid "" msgstr "" "Project-Id-Version: geary-0.4.1\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" -"product=geary&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2016-06-23 18:28+0000\n" -"PO-Revision-Date: 2016-06-22 10:25+0300\n" +"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" +"product=geary&keywords=I18N+L10N&component=internationalization\n" +"POT-Creation-Date: 2017-09-28 14:35+0000\n" +"PO-Revision-Date: 2017-09-30 15:06+0300\n" "Last-Translator: Emin Tufan Çetin \n" "Language-Team: Türkçe \n" "Language: tr\n" @@ -27,34 +27,112 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 1.8.7.1\n" +"X-Generator: Gtranslator 2.91.7\n" "X-POOTLE-MTIME: 1423290848.000000\n" -#: ../desktop/geary.desktop.in.h:1 ../desktop/geary-autostart.desktop.in.h:1 +#. Translators: The application name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:2 +#: ../desktop/org.gnome.Geary.desktop.in.h:1 +#: ../desktop/geary-autostart.desktop.in.h:1 msgid "Geary" msgstr "Geary" -#: ../desktop/geary.desktop.in.h:2 ../desktop/geary-autostart.desktop.in.h:2 -#: ../src/client/application/geary-application.vala:18 -msgid "Mail Client" -msgstr "Posta İstemcisi" +#. Translators: The development team's name +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:4 +msgid "Geary Development Team" +msgstr "Geary Geliştirme Takımı" + +#. Translators: The application's summary / tagline +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:6 +#: ../desktop/org.gnome.Geary.desktop.in.h:4 +#: ../desktop/geary-autostart.desktop.in.h:4 +#: ../src/client/application/geary-application.vala:22 +msgid "Send and receive email" +msgstr "E-posta gönder ve al" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:7 +msgid "" +"Geary is an email application built around conversations, for the GNOME 3 " +"desktop. It allows you to read, find and send email with a straightforward, " +"modern interface." +msgstr "" +"Geary, GNOME 3 masaüstü için konuşmalar etrafında inşa edilmiş bir e-posta " +"uygulamasıdır. Dolambaçsız çağdaş bir arayüzle e-posta okumanızı, bulmanızı " +"ve göndermenizi sağlar." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:8 +msgid "" +"Conversations allow you to read a complete discussion without having to find " +"and click from message to message." +msgstr "" +"Konuşmalar, arayıp bulmanızı ve iletiden iletiye tıklamanızı gerektirmeden " +"tüm tartışmayı okumanızı sağlar." + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:9 +msgid "Geary’s features include:" +msgstr "Geary’nin özellikleri şunlardır:" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:10 +msgid "Quick email account setup" +msgstr "Hızlı e-posta hesabı kurulumu" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:11 +msgid "Shows related messages together in conversations" +msgstr "İlişkili iletileri konuşmalarda bir arada gösterir" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:12 +msgid "Fast, full text and keyword search" +msgstr "Hızlı, tam metin ve anahtar sözcük arama" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:13 +msgid "Full-featured HTML and plain text message composer" +msgstr "Tam donanımlı HTML ve düz metin ileti oluşturucu" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:14 +msgid "Desktop notification of new mail" +msgstr "Yeni postanın masaüstü bildirimi" + +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:15 +msgid "Compatible with GMail, Yahoo! Mail, Outlook.com and other IMAP servers" +msgstr "GMail, Yahoo! Mail, Outlook.com ve diğer IMAP sunucularıyla uyumludur" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:17 +#| msgid "_Display conversation preview" +msgid "Geary displaying a conversation" +msgstr "Geary bir konuşmayı gösteriyor" + +#. Translators: A screenshot description. +#: ../desktop/org.gnome.Geary.appdata.xml.in.h:19 +msgid "Geary showing the rich text composer" +msgstr "Geary zengin metin oluşturucusunu gösteriyor" + +#: ../desktop/org.gnome.Geary.desktop.in.h:2 +#: ../desktop/geary-autostart.desktop.in.h:2 +msgid "Email" +msgstr "E-posta" + +#: ../desktop/org.gnome.Geary.desktop.in.h:3 +msgid "Geary Email" +msgstr "Geary E-posta" + +#. Translators: These are desktop search terms. Do not translate semicolons, end line with a semicolon. +#: ../desktop/org.gnome.Geary.desktop.in.h:6 +msgid "Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" +msgstr "Posta;E-posta;Mail;E-mail;IMAP;GMail;Yahoo;Hotmail;Outlook;" -#: ../desktop/geary.desktop.in.h:3 ../desktop/geary-autostart.desktop.in.h:3 +#: ../desktop/org.gnome.Geary.desktop.in.h:7 ../ui/gtk/menus.ui.h:1 +msgid "Compose Message" +msgstr "İleti Oluştur" + +#: ../desktop/geary-autostart.desktop.in.h:3 msgid "Geary Mail" msgstr "Geary Posta" -#: ../desktop/geary.desktop.in.h:4 ../desktop/geary-autostart.desktop.in.h:4 -msgid "Send and receive email" -msgstr "E-posta gönder ve al" - -#: ../desktop/geary.desktop.in.h:5 ../desktop/geary-autostart.desktop.in.h:5 +#: ../desktop/geary-autostart.desktop.in.h:5 msgid "Email;E-mail;Mail;" msgstr "Eposta;E-posta;Posta;E Posta;Elektronik Posta;Mektup;" -#: ../desktop/geary.desktop.in.h:6 -msgid "Compose Message" -msgstr "İleti oluştur" - #: ../desktop/geary-attach.contract.in.h:1 msgid "Send by email" msgstr "E-posta ile gönder" @@ -65,6 +143,7 @@ #: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:31 +#: ../ui/conversation-email-menus.ui.h:10 msgid "_Save" msgstr "_Kaydet" @@ -74,7 +153,7 @@ msgstr "_Ekle" #. reset/clear widgets -#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:120 #, c-format msgid "Additional addresses for %s" msgstr "%s için ek adresler" @@ -95,111 +174,127 @@ msgid "First Last" msgstr "Ad Soyad" -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Welcome to Geary." -msgstr "Geary'e hoş geldiniz." +msgstr "Geary’e hoş geldiniz." -#: ../src/client/accounts/add-edit-page.vala:233 +#: ../src/client/accounts/add-edit-page.vala:235 msgid "Enter your account information to get started." msgstr "Başlamak için hesap bilginizi giriniz." -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "2 weeks back" msgstr "2 hafta öncesinden" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:254 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "1 month back" msgstr "1 ay öncesinden" -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "3 months back" msgstr "3 ay öncesinden" -#: ../src/client/accounts/add-edit-page.vala:256 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "6 months back" msgstr "6 ay öncesinden" -#: ../src/client/accounts/add-edit-page.vala:257 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "1 year back" msgstr "1 yıl öncesinden" -#: ../src/client/accounts/add-edit-page.vala:258 +#: ../src/client/accounts/add-edit-page.vala:260 msgid "2 years back" msgstr "2 yıl öncesinden" -#: ../src/client/accounts/add-edit-page.vala:259 +#: ../src/client/accounts/add-edit-page.vala:261 msgid "4 years back" msgstr "4 yıl öncesinden" #. Separator -#: ../src/client/accounts/add-edit-page.vala:261 +#: ../src/client/accounts/add-edit-page.vala:263 msgid "Everything" msgstr "Her şey" -#: ../src/client/accounts/add-edit-page.vala:280 +#: ../src/client/accounts/add-edit-page.vala:283 msgid "Edit" msgstr "Düzenle" -#: ../src/client/accounts/add-edit-page.vala:282 +#: ../src/client/accounts/add-edit-page.vala:285 msgid "Preview" -msgstr "Önizle" +msgstr "Ön izle" -#: ../src/client/accounts/add-edit-page.vala:723 +#: ../src/client/accounts/add-edit-page.vala:751 msgid "Remem_ber passwords" -msgstr "Parolaları _hatırla" +msgstr "Parolaları _anımsa" -#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:6 +#: ../src/client/accounts/add-edit-page.vala:758 ../ui/login.glade.h:7 msgid "Remem_ber password" -msgstr "Parolayı _hatırla" +msgstr "Parolayı _anımsa" -#: ../src/client/accounts/add-edit-page.vala:764 +#: ../src/client/accounts/add-edit-page.vala:792 msgid "Unable to validate:\n" msgstr "Doğrulanamadı:\n" -#: ../src/client/accounts/add-edit-page.vala:766 -msgid " • Invalid account nickname.\n" -msgstr " • Geçersiz hesap takma adı.\n" - -#: ../src/client/accounts/add-edit-page.vala:769 -msgid " • Email address already added to Geary.\n" -msgstr " • E-posta adresi zaten Geary'e eklenmiş.\n" - -#: ../src/client/accounts/add-edit-page.vala:773 -msgid " • IMAP connection error.\n" -msgstr " • IMAP bağlantı hatası.\n" - -#: ../src/client/accounts/add-edit-page.vala:776 -msgid " • IMAP username or password incorrect.\n" -msgstr " • IMAP kullanıcı adı veya parola hatalı.\n" - -#: ../src/client/accounts/add-edit-page.vala:779 -msgid " • SMTP connection error.\n" -msgstr " • SMTP bağlantı hatası.\n" - -#: ../src/client/accounts/add-edit-page.vala:782 -msgid " • SMTP username or password incorrect.\n" -msgstr " • SMTP kullanıcı adı veya parola hatalı.\n" - -#: ../src/client/accounts/add-edit-page.vala:786 -msgid " • Connection error.\n" -msgstr " • Bağlantı hatası.\n" - -#: ../src/client/accounts/add-edit-page.vala:790 -msgid " • Username or password incorrect.\n" -msgstr " • Kullanıcı adı veya parola hatalı.\n" +#: ../src/client/accounts/add-edit-page.vala:794 +msgid " • Invalid account nickname.\n" +msgstr " • Geçersiz hesap takma adı.\n" + +#: ../src/client/accounts/add-edit-page.vala:797 +msgid " • Email address already added to Geary.\n" +msgstr " • E-posta adresi zaten Geary’e eklenmiş.\n" + +#: ../src/client/accounts/add-edit-page.vala:801 +msgid " • IMAP connection error.\n" +msgstr " • IMAP bağlantı hatası.\n" + +#: ../src/client/accounts/add-edit-page.vala:804 +msgid " • IMAP username or password incorrect.\n" +msgstr " • IMAP kullanıcı adı veya parola hatalı.\n" + +#: ../src/client/accounts/add-edit-page.vala:807 +msgid " • SMTP connection error.\n" +msgstr " • SMTP bağlantı hatası.\n" + +#: ../src/client/accounts/add-edit-page.vala:810 +msgid " • SMTP username or password incorrect.\n" +msgstr " • SMTP kullanıcı adı veya parola hatalı.\n" + +#: ../src/client/accounts/add-edit-page.vala:814 +msgid " • Connection error.\n" +msgstr " • Bağlantı hatası.\n" + +#: ../src/client/accounts/add-edit-page.vala:818 +msgid " • Username or password incorrect.\n" +msgstr " • Kullanıcı adı veya parola hatalı.\n" -#: ../src/client/application/geary-application.vala:19 +#: ../src/client/application/geary-application.vala:21 msgid "Copyright 2016 Software Freedom Conservancy Inc." msgstr "Telif Hakkı 2016 Software Freedom Conservancy Inc." -#: ../src/client/application/geary-application.vala:21 +#: ../src/client/application/geary-application.vala:24 msgid "Visit the Geary web site" -msgstr "Geary web sitesini ziyaret edin" +msgstr "Geary web sitesini ziyaret et" + +#: ../src/client/application/geary-application.vala:464 +#, c-format +msgid "About %s" +msgstr "%s hakkında" + +#. Translators: add your name and email address to receive +#. credit in the About dialog For example: Yamada Taro +#. +#: ../src/client/application/geary-application.vala:468 +msgid "translator-credits" +msgstr "" +"Ferhat TUNÇTAN \n" +"Yunus Burak TUNÇTAN \n" +"Muhammet Kara \n" +"Emin Tufan Çetin " #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" -msgstr "Geary'i ana pencere gizlenmiş olarak başlatın" +msgstr "Geary’i ana pencere gizlenmiş olarak başlat" #: ../src/client/application/geary-args.vala:11 msgid "Output debugging information" @@ -235,7 +330,7 @@ #: ../src/client/application/geary-args.vala:22 msgid "Log database queries (generates lots of messages)" -msgstr "Veritabanı sorgularını kayda al (bir çok ileti oluşturur)" +msgstr "Veri tabanı sorgularını kayda al (birçok ileti oluşturur)" #. / "Normalization" can also be called "synchronization" #: ../src/client/application/geary-args.vala:24 @@ -248,220 +343,194 @@ #: ../src/client/application/geary-args.vala:26 msgid "Revoke all server certificates with TLS warnings" -msgstr "TLS uyarıları ile bütün sertifikaları iptal et" +msgstr "TLS uyarılı sunucu sertifikalarının tümünü iptal et" #: ../src/client/application/geary-args.vala:27 +msgid "Perform a graceful quit" +msgstr "Hoş bir çıkış gerçekleştir" + +#: ../src/client/application/geary-args.vala:28 msgid "Display program version" msgstr "Uygulama sürümünü göster" #. This gives a command-line hint on how to open new composer windows with mailto: -#: ../src/client/application/geary-args.vala:51 +#: ../src/client/application/geary-args.vala:53 #, c-format msgid "Use %s to open a new composer window" -msgstr "Yeni bir düzenleyici pencere açmak için %s kullan" +msgstr "Yeni bir oluşturucu pencere açmak için %s kullan" -#: ../src/client/application/geary-args.vala:52 +#: ../src/client/application/geary-args.vala:54 msgid "Please report comments, suggestions and bugs to:" msgstr "Lütfen yorumlarınızı, önerilerinizi ve hataları bildirin:" #. i18n: Command line arguments are invalid -#: ../src/client/application/geary-args.vala:59 +#: ../src/client/application/geary-args.vala:61 #, c-format msgid "Failed to parse command line options: %s\n" msgstr "Komut satırı seçenekleri ayrıştırılamadı: %s\n" -#: ../src/client/application/geary-args.vala:70 +#: ../src/client/application/geary-args.vala:72 #, c-format -msgid "Unrecognized command line option \"%s\"\n" -msgstr "Tanınmayan komut satırı seçeneği \"%s\"\n" +msgid "Unrecognized command line option “%s”\n" +msgstr "Tanınmayan komut satırı seçeneği “%s”\n" -#: ../src/client/application/geary-controller.vala:60 +#: ../src/client/application/geary-controller.vala:57 msgid "Delete conversation" msgstr "Konuşmayı sil" -#: ../src/client/application/geary-controller.vala:61 +#: ../src/client/application/geary-controller.vala:58 msgid "Delete conversation (Shift+Delete)" msgstr "Konuşmayı sil (Shift+Delete)" -#: ../src/client/application/geary-controller.vala:62 +#: ../src/client/application/geary-controller.vala:59 msgid "Delete conversations (Shift+Delete)" msgstr "Konuşmaları sil (Shift+Delete)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:66 +#: ../src/client/application/geary-controller.vala:63 msgid "Move conversation to Trash (Delete, Backspace)" msgstr "Konuşmayı çöpe taşı (Delete, Backspace)" -#: ../src/client/application/geary-controller.vala:67 +#: ../src/client/application/geary-controller.vala:64 msgid "Move conversations to Trash (Delete, Backspace)" msgstr "Konuşmaları çöpe taşı (Delete, Backspace, A)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:71 +#: ../src/client/application/geary-controller.vala:68 msgid "_Archive" msgstr "_Arşivle" -#: ../src/client/application/geary-controller.vala:72 +#: ../src/client/application/geary-controller.vala:69 msgid "Archive conversation (A)" msgstr "Konuşmayı arşivle (A)" -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:70 msgid "Archive conversations (A)" msgstr "Konuşmaları arşivle (A)" -#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:73 msgid "Mark as S_pam" -msgstr "İ_stenmeyen olarak İşaretle" +msgstr "İ_stenmeyen olarak imle" -#: ../src/client/application/geary-controller.vala:77 +#: ../src/client/application/geary-controller.vala:74 msgid "Mark as not S_pam" -msgstr "İ_stenen olarak İşaretle" +msgstr "İ_stenen olarak imle" -#: ../src/client/application/geary-controller.vala:79 -#: ../src/client/application/geary-controller.vala:393 +#: ../src/client/application/geary-controller.vala:76 +#: ../src/client/application/geary-controller.vala:448 msgid "Mark conversation" -msgstr "Konuşmayı işaretle" +msgstr "Konuşmayı imle" -#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark conversations" -msgstr "Konuşmaları işaretle" +msgstr "Konuşmaları imle" -#: ../src/client/application/geary-controller.vala:81 +#: ../src/client/application/geary-controller.vala:78 msgid "Add label to conversation" msgstr "Konuşmayı etiketle" -#: ../src/client/application/geary-controller.vala:82 +#: ../src/client/application/geary-controller.vala:79 msgid "Add label to conversations" msgstr "Konuşmaları etiketle" -#: ../src/client/application/geary-controller.vala:83 -#: ../src/client/application/geary-controller.vala:432 +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:487 msgid "Move conversation" -msgstr "Daha fazla konuşma" +msgstr "Daha çok konuşma" -#: ../src/client/application/geary-controller.vala:84 +#: ../src/client/application/geary-controller.vala:81 msgid "Move conversations" -msgstr "Daha fazla konuşma" - -#: ../src/client/application/geary-controller.vala:373 -#: ../ui/app_menu.interface.h:1 -msgid "A_ccounts" -msgstr "_Hesaplar" +msgstr "Daha çok konuşma" -#: ../src/client/application/geary-controller.vala:378 -#: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 -msgid "_Preferences" -msgstr "_Tercihler" - -#: ../src/client/application/geary-controller.vala:382 -#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:3 -msgid "_Help" -msgstr "_Yardım" +#: ../src/client/application/geary-controller.vala:450 +msgid "_Mark as…" +msgstr "…olarak _imle" -#: ../src/client/application/geary-controller.vala:386 -#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:4 -msgid "_About" -msgstr "_Hakkında" - -#: ../src/client/application/geary-controller.vala:390 -#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:5 -msgid "_Quit" -msgstr "_Çık" - -#: ../src/client/application/geary-controller.vala:395 -msgid "_Mark as..." -msgstr "_... olarak işaretle" - -#: ../src/client/application/geary-controller.vala:401 +#: ../src/client/application/geary-controller.vala:456 msgid "Mark as _Read" -msgstr "Okundu Olarak İşa_retle" +msgstr "_Okundu olarak imle" -#: ../src/client/application/geary-controller.vala:407 +#: ../src/client/application/geary-controller.vala:462 msgid "Mark as _Unread" -msgstr "Ok_unmamış Olarak İşaretle" +msgstr "Ok_unmamış olarak imle" -#: ../src/client/application/geary-controller.vala:413 +#: ../src/client/application/geary-controller.vala:468 msgid "_Star" msgstr "_Yıldızla" -#: ../src/client/application/geary-controller.vala:418 +#: ../src/client/application/geary-controller.vala:473 msgid "U_nstar" -msgstr "Y_ıldızı Kaldır" +msgstr "Y_ıldızı kaldır" -#: ../src/client/application/geary-controller.vala:428 +#: ../src/client/application/geary-controller.vala:483 msgid "Add label" msgstr "Etiket ekle" -#: ../src/client/application/geary-controller.vala:429 +#: ../src/client/application/geary-controller.vala:484 msgid "_Label" msgstr "_Etiketle" -#: ../src/client/application/geary-controller.vala:433 +#: ../src/client/application/geary-controller.vala:488 msgid "_Move" msgstr "_Taşı" -#: ../src/client/application/geary-controller.vala:437 +#: ../src/client/application/geary-controller.vala:492 msgid "Compose new message (Ctrl+N, N)" msgstr "Yeni ileti oluştur (Ctrl+N, N)" -#. Reply to a message. -#: ../src/client/application/geary-controller.vala:441 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1884 +#: ../src/client/application/geary-controller.vala:496 +#: ../ui/conversation-email-menus.ui.h:1 msgid "_Reply" msgstr "_Yanıtla" -#: ../src/client/application/geary-controller.vala:442 +#: ../src/client/application/geary-controller.vala:497 msgid "Reply (Ctrl+R, R)" msgstr "Yanıtla (Ctrl+R, R)" -#: ../src/client/application/geary-controller.vala:446 +#: ../src/client/application/geary-controller.vala:501 msgid "R_eply All" msgstr "Tümüne _Yanıtla" -#: ../src/client/application/geary-controller.vala:447 +#: ../src/client/application/geary-controller.vala:502 msgid "Reply all (Ctrl+Shift+R, Shift+R)" msgstr "Tümünü yanıtla (Ctrl+Shift+R, Shift+R)" -#. Forward a message. -#: ../src/client/application/geary-controller.vala:452 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1894 +#: ../src/client/application/geary-controller.vala:507 +#: ../ui/conversation-email-menus.ui.h:3 msgid "_Forward" msgstr "_Yönlendir" -#: ../src/client/application/geary-controller.vala:453 +#: ../src/client/application/geary-controller.vala:508 msgid "Forward (Ctrl+L, F)" msgstr "Yönlendir (Ctrl+L, F)" -#: ../src/client/application/geary-controller.vala:492 -msgid "Empty" -msgstr "Boşalt" - -#: ../src/client/application/geary-controller.vala:493 -msgid "Empty Spam or Trash folders" -msgstr "İstenmeyen ya da Çöp klasörlerini boşalt" - -#: ../src/client/application/geary-controller.vala:497 +#: ../src/client/application/geary-controller.vala:538 msgid "Empty _Spam…" -msgstr "_İstenmeyeni Boşalt..." +msgstr "_İstenmeyeni boşalt…" -#: ../src/client/application/geary-controller.vala:501 +#: ../src/client/application/geary-controller.vala:542 msgid "Empty _Trash…" -msgstr "_Çöpü Boşalt..." +msgstr "_Çöpü boşalt…" #. No callback is connected, since we bind the toggle button to the search bar visibility -#: ../src/client/application/geary-controller.vala:530 +#: ../src/client/application/geary-controller.vala:574 msgid "Toggle search bar" msgstr "Arama çubuğunu aç" -#: ../src/client/application/geary-controller.vala:725 +#. No callback is connected, since we bind the toggle button to the find bar visibility +#: ../src/client/application/geary-controller.vala:579 +msgid "Toggle find bar" +msgstr "Bulma çubuğunu aç" + +#: ../src/client/application/geary-controller.vala:757 msgid "Unable to store server trust exception" -msgstr "Sunucu güven istisnası depolanamadı" +msgstr "Sunucu güven ayrıcalığı depolanamadı" -#: ../src/client/application/geary-controller.vala:962 +#: ../src/client/application/geary-controller.vala:992 msgid "Your settings are insecure" -msgstr "Ayarlarınız emniyetsiz" +msgstr "Ayarlarınız güvensiz" -#: ../src/client/application/geary-controller.vala:963 +#: ../src/client/application/geary-controller.vala:993 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -469,19 +538,31 @@ msgstr "" "IMAP ve/veya SMTP ayarlarınız SSL veya TLS belirtmiyor. Bunun anlamı " "kullanıcı adınız ve parolanız ağdaki başka biri tarafından okunabilir " -"demektir. Bunu yapmak istediğinizden emin misiniz?" +"demektir. Bunu yapmak istediğinize emin misiniz?" -#: ../src/client/application/geary-controller.vala:964 +#: ../src/client/application/geary-controller.vala:994 msgid "Co_ntinue" msgstr "Devam _et" -#. / Displayed in the space-limited status bar when a message fails to be sent due to error. +#: ../src/client/application/geary-controller.vala:1041 +msgid "Error connecting to the server" +msgstr "Sunucuya bağlanma hatası" + #: ../src/client/application/geary-controller.vala:1042 +msgid "" +"Geary encountered an error while connecting to the server. Please try again " +"in a few moments." +msgstr "" +"Geary, sunucuya bağlanırken bir hatayla karşılaştı. Lütfen bir süre sonra " +"yeniden deneyin." + +#. / Displayed in the space-limited status bar when a message fails to be sent due to error. +#: ../src/client/application/geary-controller.vala:1079 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "E-posta gönderme hatası" -#: ../src/client/application/geary-controller.vala:1043 +#: ../src/client/application/geary-controller.vala:1080 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." @@ -491,12 +572,12 @@ #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:1047 +#: ../src/client/application/geary-controller.vala:1084 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "Gönderilmiş posta kaydedilirken hata" -#: ../src/client/application/geary-controller.vala:1048 +#: ../src/client/application/geary-controller.vala:1085 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." @@ -504,19 +585,19 @@ "Geary, Gönderilmiş Postaya gönderilmiş iletiyi kaydederken bir hata ile " "karşılaştı. İleti, siz silene kadar Giden klasörünüzde kalacak." -#: ../src/client/application/geary-controller.vala:1117 +#: ../src/client/application/geary-controller.vala:1154 msgid "Labels" msgstr "Etiketler" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1129 +#: ../src/client/application/geary-controller.vala:1166 #, c-format msgid "Unable to open the database for %s" -msgstr "%s için veritabanı açılamadı" +msgstr "%s için veri tabanı açılamadı" -#: ../src/client/application/geary-controller.vala:1130 +#: ../src/client/application/geary-controller.vala:1167 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -529,30 +610,31 @@ "Rebuilding the database will destroy all local email and its attachments. " "The mail on the your server will not be affected." msgstr "" -"Bu hesap için yerel posta veritabanı açılırken bir hata oluştu. Hatanın " -"sebebi muhtemelen bu dizindeki veritabanı dosyasının bozulmuş olmasıdır:\n" +"Bu hesap için yerel posta veri tabanı açılırken bir hata oluştu. Hatanın " +"nedeni görünüşe bakılırsa bu dizindeki veri tabanı dosyasının bozulmuş " +"olmasıdır:\n" "\n" "%s\n" "\n" -"Geary, veritabanını yeniden oluşturabilir ve sunucuyla yeniden eşitleyebilir " -"ya da çıkabilir.\n" -"Veritabanının yeniden inşa edilmesi bütün yerel e-postaları ve eklerini yok " +"Geary, veri tabanını yeniden oluşturabilir ve sunucuyla yeniden " +"eşitleyebilir ya da çıkabilir.\n" +"Veri tabanının yeniden inşa edilmesi tüm yerel e-postaları ve eklerini yok " "edecektir.Sizin sunucunuzdaki postalar etkilenmeyecektir." -#: ../src/client/application/geary-controller.vala:1132 +#: ../src/client/application/geary-controller.vala:1169 msgid "_Rebuild" msgstr "_Yeniden oluştur" -#: ../src/client/application/geary-controller.vala:1132 +#: ../src/client/application/geary-controller.vala:1169 msgid "E_xit" msgstr "Ç_ık" -#: ../src/client/application/geary-controller.vala:1141 +#: ../src/client/application/geary-controller.vala:1178 #, c-format -msgid "Unable to rebuild database for \"%s\"" -msgstr "\"%s\" için veritabanı yeniden oluşturulamadı" +msgid "Unable to rebuild database for “%s”" +msgstr "“%s” için veri tabanı yeniden oluşturulamadı" -#: ../src/client/application/geary-controller.vala:1142 +#: ../src/client/application/geary-controller.vala:1179 #, c-format msgid "" "Error during rebuild:\n" @@ -565,14 +647,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1164 -#: ../src/client/application/geary-controller.vala:1174 -#: ../src/client/application/geary-controller.vala:1185 +#: ../src/client/application/geary-controller.vala:1201 +#: ../src/client/application/geary-controller.vala:1211 +#: ../src/client/application/geary-controller.vala:1222 #, c-format msgid "Unable to open local mailbox for %s" msgstr "%s için yerel posta kutusu açılamadı" -#: ../src/client/application/geary-controller.vala:1165 +#: ../src/client/application/geary-controller.vala:1202 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -583,65 +665,49 @@ "\n" "%s" msgstr "" -"Bu hesap için yerel posta veritabanı açılırken bir hata oluştu. Hata " -"muhtemelen dosya izin sorunlarından kaynaklanmaktadır.\n" +"Bu hesap için yerel posta veri tabanı açılırken bir hata oluştu. Hata " +"görünüşe bakılırsa dosya izin sorunlarından kaynaklanmaktadır.\n" "\n" -"Lütfen bu dizindeki tüm dosyalar için okuma/yazma iznine sahip olup " -"olmadığınızı denetleyin:\n" +"Lütfen bu dizindeki tüm dosyalar için okuma/yazma izniniz olup olmadığınızı " +"denetleyin:\n" "\n" "%s" -#: ../src/client/application/geary-controller.vala:1175 +#: ../src/client/application/geary-controller.vala:1212 msgid "" "The version number of the local mail database is formatted for a newer " -"version of Geary. Unfortunately, the database cannot be \"rolled back\" to " +"version of Geary. Unfortunately, the database cannot be “rolled back” to " "work with this version of Geary.\n" "\n" "Please install the latest version of Geary and try again." msgstr "" -"Yerel posta veritabanı sürüm numarası daha yeni bir Geary sürümü için " -"biçimlendirildi. Ne yazık ki, veritabanı, Geary uygulamasının bu sürümü ile " -"çalışabilmesi için \"geri alınır\" durumda değildir.\n" +"Yerel posta veri tabanı sürüm numarası daha yeni bir Geary sürümü için " +"biçimlendirildi. Ne yazık ki; veri tabanı, Geary uygulamasının bu sürümü ile " +"çalışabilmesi için “geri alınır” durumda değildir.\n" "\n" -"Lütfen Geary uygulamasının son sürümünü kurun ve tekrar deneyin." +"Lütfen Geary uygulamasının son sürümünü kurun ve yeniden deneyin." -#: ../src/client/application/geary-controller.vala:1186 +#: ../src/client/application/geary-controller.vala:1223 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" "\n" "Please check your network connection and restart Geary." msgstr "" -"Yerel hesap açılırken bir hata oluştu. Hata muhtemelen bağlantı sorunları " -"nedeniyle oluştu.\n" +"Yerel hesap açılırken bir hata oluştu. Hata görünüşe bakılırsa bağlantı " +"sorunları nedeniyle oluştu.\n" "\n" "Lütfen ağ bağlantılarınızı denetleyin ve Geary uygulamasını yeniden başlatın." -#: ../src/client/application/geary-controller.vala:1698 -#, c-format -msgid "About %s" -msgstr "%s hakkında" - -#. / Translators: add your name and email address to receive credit in the About dialog -#. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1701 -msgid "translator-credits" -msgstr "" -"Ferhat TUNÇTAN \n" -"Yunus Burak TUNÇTAN \n" -"Muhammet Kara \n" -"Emin Tufan Çetin " - -#: ../src/client/application/geary-controller.vala:1958 +#: ../src/client/application/geary-controller.vala:1999 msgid "Undo move (Ctrl+Z)" msgstr "Taşımayı geri al (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:1968 -#, c-format -msgid "Are you sure you want to open \"%s\"?" -msgstr "\"%s\" dosyasını açmak istediğinizden emin misiniz?" +#: ../src/client/application/geary-controller.vala:2009 +msgid "Are you sure you want to open these attachments?" +msgstr "Bu ekleri açmak istediğinize emin misiniz?" -#: ../src/client/application/geary-controller.vala:1969 +#: ../src/client/application/geary-controller.vala:2010 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -649,115 +715,103 @@ "Eklerin açılması sisteminizin zarar görmesine neden olabilir. Yalnızca " "güvendiğiniz kaynaklardan gelen dosyaları açın." -#: ../src/client/application/geary-controller.vala:1970 -msgid "Don't _ask me again" -msgstr "Tekrar _sorma" +#: ../src/client/application/geary-controller.vala:2011 +msgid "Don’t _ask me again" +msgstr "Yeniden _sorma" -#: ../src/client/application/geary-controller.vala:1988 +#: ../src/client/application/geary-controller.vala:2121 #, c-format -msgid "A file named \"%s\" already exists. Do you want to replace it?" -msgstr "\"%s\" isimli bir dosya zaten var. Değiştirmek istiyor musunuz?" +msgid "A file named “%s” already exists. Do you want to replace it?" +msgstr "“%s” adlı bir dosya zaten var. Değiştirmek istiyor musunuz?" -#: ../src/client/application/geary-controller.vala:1990 +#: ../src/client/application/geary-controller.vala:2123 #, c-format msgid "" -"The file already exists in \"%s\". Replacing it will overwrite its contents." +"The file already exists in “%s”. Replacing it will overwrite its contents." msgstr "" -"Dosya \"%s\"'in içinde zaten var. Bunu varolanla değiştirmek, içeriğini " +"Dosya “%s”’in içinde zaten var. Bunu var olanla değiştirmek, içeriğini " "üzerine yazacak." -#: ../src/client/application/geary-controller.vala:1993 +#: ../src/client/application/geary-controller.vala:2126 msgid "_Replace" msgstr "_Değiştir" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2291 +#: ../src/client/application/geary-controller.vala:2374 msgid "Close open draft messages?" msgstr "Açık taslak iletiler kapatılsın mı?" -#: ../src/client/application/geary-controller.vala:2421 +#: ../src/client/application/geary-controller.vala:2496 #, c-format msgid "Empty all email from your %s folder?" msgstr "%s klasörünüzdeki tüm e-postaları boşalt?" -#: ../src/client/application/geary-controller.vala:2422 +#: ../src/client/application/geary-controller.vala:2497 msgid "This removes the email from Geary and your email server." -msgstr "Bu işlem e-postayı Geary'den ve e-posta sunucunuzdan kaldırır." +msgstr "Bu işlem e-postayı Geary’den ve e-posta sunucunuzdan kaldırır." -#: ../src/client/application/geary-controller.vala:2423 +#: ../src/client/application/geary-controller.vala:2498 msgid "This cannot be undone." msgstr "Bu geri alınamaz." -#: ../src/client/application/geary-controller.vala:2424 +#: ../src/client/application/geary-controller.vala:2499 #, c-format msgid "Empty %s" -msgstr "%s Boşalt" +msgstr "%s boşalt" -#: ../src/client/application/geary-controller.vala:2441 +#: ../src/client/application/geary-controller.vala:2516 #, c-format msgid "Error emptying %s" msgstr "%s boşaltılırken hata" -#: ../src/client/application/geary-controller.vala:2471 +#: ../src/client/application/geary-controller.vala:2546 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "Bu ileti(ler)i kalıcı olarak silmek istiyor musunuz?" -#: ../src/client/application/geary-controller.vala:2473 +#: ../src/client/application/geary-controller.vala:2548 msgid "Delete" msgstr "Sil" -#: ../src/client/application/geary-controller.vala:2504 +#: ../src/client/application/geary-controller.vala:2580 msgid "Undo archive (Ctrl+Z)" msgstr "Arşivden geri al (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2519 +#: ../src/client/application/geary-controller.vala:2595 msgid "Undo trash (Ctrl+Z)" msgstr "Çöpten geri al (Ctrl+Z)" -#: ../src/client/application/geary-controller.vala:2572 +#: ../src/client/application/geary-controller.vala:2649 msgid "Undo (Ctrl+Z)" msgstr "Geri al (Ctrl+Z)" -#: ../src/client/components/conversation-find-bar.vala:214 -#, c-format -msgid "%i match" -msgid_plural "%i matches" -msgstr[0] "%i eşleşme" - -#: ../src/client/components/conversation-find-bar.vala:216 -#, c-format -msgid "%i match (wrapped)" -msgid_plural "%i matches (wrapped)" -msgstr[0] "%i eşleşme (sarılı)" - -#: ../src/client/components/conversation-find-bar.vala:218 -msgid "not found" -msgstr "bulunamadı" +#: ../src/client/application/geary-controller.vala:2780 +msgid "Failed to open default text editor." +msgstr "Öntanımlı metin düzenleyici açılamadı." -#: ../src/client/components/main-window.vala:359 +#: ../src/client/components/main-window.vala:389 #, c-format msgid "%s (%d)" msgstr "%s (%d)" -#: ../src/client/components/search-bar.vala:10 +#: ../src/client/components/search-bar.vala:8 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "Ara" #. Search entry. -#: ../src/client/components/search-bar.vala:25 +#: ../src/client/components/search-bar.vala:23 msgid "Search all mail in account for keywords (Ctrl+S)" -msgstr "Anahtar kelimeler için hesaptaki bütün postaları ara (Ctrl+S)" +msgstr "Anahtar sözcükler için hesaptaki tüm postaları ara (Ctrl+S)" -#: ../src/client/components/search-bar.vala:118 +#: ../src/client/components/search-bar.vala:100 #, c-format msgid "Indexing %s account" msgstr "%s hesabı dizinleniyor" -#: ../src/client/components/search-bar.vala:129 +#: ../src/client/components/search-bar.vala:111 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" @@ -765,8 +819,8 @@ #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 -msgid "Sending..." -msgstr "Gönderiliyor..." +msgid "Sending…" +msgstr "Gönderiliyor…" #: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 msgid "_OK" @@ -777,6 +831,10 @@ msgid "_Cancel" msgstr "_İptal et" +#: ../src/client/components/stock.vala:21 ../ui/gtk/menus.ui.h:6 +msgid "_About" +msgstr "_Hakkında" + #: ../src/client/components/stock.vala:23 msgid "_Close" msgstr "_Kapat" @@ -785,51 +843,71 @@ msgid "_Discard" msgstr "_At" -#: ../src/client/components/stock.vala:26 +#: ../src/client/components/stock.vala:25 ../ui/gtk/menus.ui.h:5 +msgid "_Help" +msgstr "_Yardım" + +#: ../src/client/components/stock.vala:26 ../ui/conversation-email-menus.ui.h:9 msgid "_Open" msgstr "_Aç" -#: ../src/client/components/stock.vala:28 -msgid "_Print..." -msgstr "_Yazdır..." +#: ../src/client/components/stock.vala:27 ../ui/gtk/menus.ui.h:3 +msgid "_Preferences" +msgstr "_Tercihler" + +#: ../src/client/components/stock.vala:28 ../ui/conversation-email-menus.ui.h:7 +msgid "_Print…" +msgstr "_Yazdır…" + +#: ../src/client/components/stock.vala:29 ../ui/gtk/menus.ui.h:7 +msgid "_Quit" +msgstr "_Çık" #: ../src/client/components/stock.vala:30 ../ui/remove_confirm.glade.h:6 msgid "_Remove" msgstr "_Kaldır" -#. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1350 -msgid "Select _All" -msgstr "Hepsini S_eç" - -#: ../src/client/components/stock.vala:33 msgid "_Keep" msgstr "_Sakla" -#: ../src/client/composer/composer-widget.vala:73 +#: ../src/client/composer/composer-link-popover.vala:150 +msgid "Link URL is not correctly formatted, e.g. http://example.com" +msgstr "Bağlantı URL’si doğru biçimlendirilmemiş, örn. http://ornek.com" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid link URL" +msgstr "Geçersiz bağlantı URL’si" + +#: ../src/client/composer/composer-link-popover.vala:157 +msgid "Invalid email address" +msgstr "Geçersiz e-posta adresi" + +#: ../src/client/composer/composer-widget.vala:154 msgid "Saved" msgstr "Kaydedildi" -#: ../src/client/composer/composer-widget.vala:74 +#: ../src/client/composer/composer-widget.vala:155 msgid "Saving" msgstr "Kaydediliyor" -#: ../src/client/composer/composer-widget.vala:75 +#: ../src/client/composer/composer-widget.vala:156 msgid "Error saving" msgstr "Kaydedilirken hata" -#: ../src/client/composer/composer-widget.vala:76 +#: ../src/client/composer/composer-widget.vala:157 msgid "Press Backspace to delete quote" msgstr "Alıntıyı silmek için Geri tuşuna basın" -#: ../src/client/composer/composer-widget.vala:77 +#: ../src/client/composer/composer-widget.vala:158 msgid "New Message" msgstr "Yeni İleti" -#. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since -#. this is full-word checking, include all variants of each word. No spaces are allowed. -#: ../src/client/composer/composer-widget.vala:138 +#. Translators: This is list of keywords, separated by pipe ("|") +#. characters, that suggest an attachment; since this is full-word +#. checking, include all variants of each word. No spaces are +#. allowed. +#: ../src/client/composer/composer-widget.vala:167 msgid "" "attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" "enclosing|encloses|enclosure|enclosures" @@ -837,275 +915,185 @@ "ekle|ekleniyor|ekler|ek|ekler|eklendi|içer|içerdi|içeriyor|içerir|koruncak|" "koruncaklar" -#: ../src/client/composer/composer-widget.vala:1114 -#: ../src/client/composer/composer-widget.vala:1118 +#: ../src/client/composer/composer-widget.vala:1122 +#: ../src/client/composer/composer-widget.vala:1141 msgid "Do you want to discard this message?" msgstr "Bu iletiyi atmak istiyor musunuz?" -#: ../src/client/composer/composer-widget.vala:1274 +#: ../src/client/composer/composer-widget.vala:1245 msgid "Send message with an empty subject and body?" msgstr "İleti konusu ve gövdesi olmadan gönderilsin mi?" -#: ../src/client/composer/composer-widget.vala:1276 +#: ../src/client/composer/composer-widget.vala:1247 msgid "Send message with an empty subject?" msgstr "İleti konusu olmadan gönderilsin mi?" -#: ../src/client/composer/composer-widget.vala:1278 +#: ../src/client/composer/composer-widget.vala:1249 msgid "Send message with an empty body?" msgstr "İleti, ileti gövdesi olmadan gönderilsin mi?" -#: ../src/client/composer/composer-widget.vala:1280 +#: ../src/client/composer/composer-widget.vala:1253 msgid "Send message without an attachment?" msgstr "İleti eki olmadan gönderilsin mi?" -#: ../src/client/composer/composer-widget.vala:1542 -msgid "Cannot add attachment" -msgstr "Eklenti eklenemiyor" +#: ../src/client/composer/composer-widget.vala:1515 +#, c-format +msgid "“%s” already attached for delivery." +msgstr "“%s” gönderim için zaten eklendi." -#: ../src/client/composer/composer-widget.vala:1553 +#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" +#. Translators: The first argument will be a +#. description of the document type, the second will +#. be a human-friendly size string. For example: +#. Document (100.9MB) +#: ../src/client/composer/composer-widget.vala:1523 +#: ../src/client/conversation-viewer/conversation-email.vala:138 #, c-format -msgid "\"%s\" could not be found." -msgstr "\"%s\" bulunamadı." +msgid "%s (%s)" +msgstr "%s (%s)" #: ../src/client/composer/composer-widget.vala:1560 #, c-format -msgid "\"%s\" is a folder." -msgstr "\"%s\" bir klasör." +msgid "“%s” could not be found." +msgstr "“%s” bulunamadı." -#: ../src/client/composer/composer-widget.vala:1567 +#: ../src/client/composer/composer-widget.vala:1566 #, c-format -msgid "\"%s\" is an empty file." -msgstr "\"%s\" boş bir dosya." +msgid "“%s” is a folder." +msgstr "“%s” bir klasör." -#: ../src/client/composer/composer-widget.vala:1581 +#: ../src/client/composer/composer-widget.vala:1572 #, c-format -msgid "\"%s\" could not be opened for reading." -msgstr "\"%s\" okuma için açılamadı." +msgid "“%s” is an empty file." +msgstr "“%s” boş bir dosya." -#: ../src/client/composer/composer-widget.vala:1588 +#: ../src/client/composer/composer-widget.vala:1585 #, c-format -msgid "\"%s\" already attached for delivery." -msgstr "\"%s\" gönderim için zaten eklendi." +msgid "“%s” could not be opened for reading." +msgstr "“%s” okuma için açılamadı." -#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-widget.vala:1597 -#, c-format -msgid "%s (%s)" -msgstr "%s (%s)" +#: ../src/client/composer/composer-widget.vala:1593 +msgid "Cannot add attachment" +msgstr "Eklenti eklenemiyor" -#: ../src/client/composer/composer-widget.vala:1658 +#: ../src/client/composer/composer-widget.vala:1645 msgid "To: " msgstr "Kime: " -#: ../src/client/composer/composer-widget.vala:1661 +#: ../src/client/composer/composer-widget.vala:1648 msgid "Cc: " msgstr "Cc: " -#: ../src/client/composer/composer-widget.vala:1664 +#: ../src/client/composer/composer-widget.vala:1651 msgid "Bcc: " msgstr "Bcc:" -#: ../src/client/composer/composer-widget.vala:1667 +#: ../src/client/composer/composer-widget.vala:1654 msgid "Reply-To: " msgstr "Yanıtla: " -#: ../src/client/composer/composer-widget.vala:1900 +#: ../src/client/composer/composer-widget.vala:1786 msgid "Select Color" msgstr "Renk Seç" #. Displayed in the From dropdown to indicate an "alternate email address" #. for an account. The first printf argument will be the alternate email #. address, and the second will be the account's primary email address. -#: ../src/client/composer/composer-widget.vala:2347 +#: ../src/client/composer/composer-widget.vala:1986 #, c-format msgid "%1$s via %2$s" msgstr "%2$s aracılığıyla %1$s" #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:2389 +#: ../src/client/composer/composer-widget.vala:2028 msgid "_From:" msgstr "_Gönderen:" -#: ../src/client/composer/spell-check-popover.vala:210 +#. Translators: This is the name of the file chooser filter +#. when inserting an image in the composer. +#: ../src/client/composer/composer-widget.vala:2252 +msgid "Images" +msgstr "Resimler" + +#: ../src/client/composer/spell-check-popover.vala:117 +msgid "Remove this language from the preferred list" +msgstr "Bu dili tercih edilenler listesinden kaldır" + +#: ../src/client/composer/spell-check-popover.vala:121 +msgid "Add this language to the preferred list" +msgstr "Bu dili tercih edilenler listesine ekle" + +#: ../src/client/composer/spell-check-popover.vala:217 msgid "Search for more languages" -msgstr "Daha fazla dil için ara" +msgstr "Daha çok dil için ara" #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Ben" -#: ../src/client/conversation-viewer/conversation-viewer.vala:413 -msgid "No conversations selected." -msgstr "Hiçbir konuşma seçilmedi." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:415 -#, c-format -msgid "%u conversation selected." -msgid_plural "%u conversations selected." -msgstr[0] "%u konuşma seçildi." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:444 -msgid "No search results found." -msgstr "Hiç arama sonucu bulunamadı." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:446 -msgid "No conversations in folder." -msgstr "Klasörde hiç konuşma yok." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:713 -msgid "This message contains remote images." -msgstr "Bu iletide uzak resimler bulunuyor." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:713 -msgid "Show Images" -msgstr "Resimleri Göster" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:714 -msgid "Always Show From Sender" -msgstr "Gönderenden Her Zaman Göster" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:738 -msgid "Edit Draft" -msgstr "Taslağı Düzenle" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:831 -msgid "From:" -msgstr "Gönderen:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:834 -msgid "To:" -msgstr "Kime:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:837 -msgid "Cc:" -msgstr "Cc:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:840 -msgid "Bcc:" -msgstr "Bcc:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:843 -msgid "Subject:" -msgstr "Konu:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:846 -msgid "Date:" -msgstr "Tarih:" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1165 -#, c-format -msgid "%u read message" -msgid_plural "%u read messages" -msgstr[0] "%u okunmuş ileti" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1297 -#, c-format -msgid "This message was sent successfully, but could not be saved to %s." -msgstr "Bu ileti başarıyla gönderildi, fakat %s'e kaydedilemedi." - -#. Add a menu item for copying the current selection. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1323 -#: ../ui/composer.glade.h:4 -msgid "_Copy" -msgstr "_Kopyala" - -#. Add a menu item for copying the address. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1331 -msgid "Copy _Email Address" -msgstr "_E-posta Adresini Kopyala" - -#. Add a menu item for copying the link. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1336 -#: ../ui/composer.glade.h:17 -msgid "Copy _Link" -msgstr "_Bağlantıyı Kopyala" - -#. Select message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1344 -msgid "Select _Message" -msgstr "_İletiyi Seç" - -#. Inspect. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1356 -msgid "_Inspect" -msgstr "_Denetle" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1583 -msgid "This link appears to go to" -msgstr "Bu bağlantı şuraya gitmek için görünür" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1584 -msgid "but actually goes to" -msgstr "aslında şuraya gider" - -#. If href doesn't look like a URL, something is fishy, so warn the user -#: ../src/client/conversation-viewer/conversation-viewer.vala:1639 -msgid " (Invalid?)" -msgstr " (Geçersiz?)" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1745 -msgid "_Save Image As..." -msgstr "Görüntüyü Farklı _Kaydet..." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1849 -msgid "_Save As..." -msgstr "_... Olarak Kaydet" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1854 -msgid "Save All A_ttachments..." -msgstr "Tüm E_klentileri Kaydet..." - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1874 -msgid "Save A_ttachment..." -msgid_plural "Save All A_ttachments..." -msgstr[0] "E_klentiyi kaydet..." - -#. Reply to all on a message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1889 -msgid "Reply to _All" -msgstr "Tümüne _Yanıt Ver" - -#. Mark as read/unread. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1906 -msgid "_Mark as Read" -msgstr "_Okunmuş olarak işaretle" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1910 -msgid "_Mark as Unread" -msgstr "_Okunmamış olarak işaretle" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1916 -msgid "Mark Unread From _Here" -msgstr "_Buradan Okunmamış İşaretle" - -#. Separator. -#. View original message source. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1931 -msgid "_View Source" -msgstr "_Kaynağı İncele" +#. Translators: This is the file type displayed for +#. attachments with unknown file types. +#: ../src/client/conversation-viewer/conversation-email.vala:124 +msgid "Unknown" +msgstr "Bilinmiyor" + +#. Preview headers +#. Translators: This is displayed in place of the from address +#. when the message has no from address. +#: ../src/client/conversation-viewer/conversation-message.vala:331 +msgid "No sender" +msgstr "Gönderen yok" + +#. Translators: This separates multiple 'from' +#. addresses in the header preview for a message. +#: ../src/client/conversation-viewer/conversation-message.vala:586 +msgid ", " +msgstr ", " + +#. Translators: This string is used as the HTML IMG ALT +#. attribute value when displaying an inline image in an email +#. that did not specify a file name. E.g. Image" +msgstr "Kimden " + +#: ../ui/conversation-message.ui.h:2 +msgid "1/1/1970\t" +msgstr "1/1/1970\t" + +#: ../ui/conversation-message.ui.h:3 +msgid "Preview body text." +msgstr "Gövde metnini ön izle." + +#: ../ui/conversation-message.ui.h:4 +msgid "Sent by:" +msgstr "Gönderen:" + +#: ../ui/conversation-message.ui.h:5 +msgid "Reply to:" +msgstr "Yanıtla:" + +#: ../ui/conversation-message.ui.h:6 +msgid "Subject" +msgstr "Konu" + +#: ../ui/conversation-message.ui.h:7 +msgid "To:" +msgstr "Kime:" + +#: ../ui/conversation-message.ui.h:8 +msgid "Cc:" +msgstr "Cc:" + +#: ../ui/conversation-message.ui.h:9 +msgid "Bcc:" +msgstr "Bcc:" + +#: ../ui/conversation-message.ui.h:10 +msgid "Show Images" +msgstr "Resimleri Göster" + +#: ../ui/conversation-message.ui.h:11 +msgid "Always Show From Sender" +msgstr "Gönderenden Her Zaman Göster" + +#: ../ui/conversation-message.ui.h:12 +msgid "Remote images not shown" +msgstr "Uzaktaki resimler gösterilmiyor" + +#: ../ui/conversation-message.ui.h:13 +msgid "Only show remote images from senders you trust." +msgstr "Yalnızca güvendiğiniz göndericilerden gelen uzak resimleri göster." + +#: ../ui/conversation-message.ui.h:14 +msgid "But actually goes to:" +msgstr "Aslında şuraya gider:" + +#: ../ui/conversation-message.ui.h:15 +msgid "The link appears to go to:" +msgstr "Bağlantı şuraya gidiyor gibi görünür:" + +#: ../ui/conversation-message.ui.h:16 +msgid "Deceptive link found" +msgstr "Aldatıcı bağlantı bulundu" + +#: ../ui/conversation-message.ui.h:17 +msgid "The email sender may be leading you to the wrong web site." +msgstr "E-posta göndericisi sizi yanlış web sitesine yönlendiriyor olabilir." + +#: ../ui/conversation-message.ui.h:18 +msgid "If unsure, contact the sender and ask before continuing." +msgstr "" +"Emin değilseniz, devam etmeden önce göndericiyle iletişime geçin ve sorun." + +#: ../ui/conversation-viewer.ui.h:1 +msgid "Find in conversation" +msgstr "Konuşmada bul" + +#: ../ui/conversation-viewer.ui.h:2 +msgid "Find the previous occurrence of the search string." +msgstr "Arama dizisinin önceki olayını bul" + +#: ../ui/conversation-viewer.ui.h:3 +msgid "Find the next occurrence of the search string." +msgstr "Arama dizisinin sonraki olayını bul" + #: ../ui/edit_alternate_emails.glade.h:1 msgid "Remove email address" msgstr "E-posta adresini kaldır" @@ -2017,7 +2152,7 @@ "server. Contact your email provider for more information." msgstr "" "Bazı e-posta hizmetleri ek adreslerin sunucuda kurulu olmasını gerektirir. " -"Daha fazla biligi için e-posta sağlayıcınıza başvurun." +"Daha çok bilgi için e-posta sağlayıcınıza başvurun." #: ../ui/edit_alternate_emails.glade.h:4 msgid "_Update" @@ -2043,138 +2178,395 @@ msgid "label" msgstr "etiket" -#: ../ui/login.glade.h:1 ../ui/password-dialog.glade.h:3 +#: ../ui/gtk/help-overlay.ui.h:1 +msgid "Conversation Shortcuts" +msgstr "Konuşma Kısayolları" + +#: ../ui/gtk/help-overlay.ui.h:2 +msgctxt "shortcut window" +msgid "General" +msgstr "Genel" + +#: ../ui/gtk/help-overlay.ui.h:3 +msgctxt "shortcut window" +msgid "Move focus to the next/previous pane" +msgstr "Odağı önceki/sonraki bölmeye taşı" + +#: ../ui/gtk/help-overlay.ui.h:4 +msgctxt "shortcut window" +msgid "Move focus to conversation list" +msgstr "Odağı konuşma listesine taşı" + +#: ../ui/gtk/help-overlay.ui.h:5 +msgctxt "shortcut window" +msgid "Detach composer window" +msgstr "Oluşturucu penceresini ayır" + +#: ../ui/gtk/help-overlay.ui.h:6 +msgctxt "shortcut window" +msgid "Close composer window" +msgstr "Oluşturucu penceresini kapat" + +#: ../ui/gtk/help-overlay.ui.h:7 +msgctxt "shortcut window" +msgid "Show keyboard shortcuts" +msgstr "Klavye kısayollarını göster" + +#: ../ui/gtk/help-overlay.ui.h:8 +msgctxt "shortcut window" +msgid "Show help" +msgstr "Yardımı göster" + +#: ../ui/gtk/help-overlay.ui.h:9 +msgctxt "shortcut window" +msgid "Quit the application" +msgstr "Uygulamadan çık" + +#: ../ui/gtk/help-overlay.ui.h:10 +msgctxt "shortcut window" +msgid "Search" +msgstr "Ara" + +#: ../ui/gtk/help-overlay.ui.h:11 +msgctxt "shortcut window" +msgid "Jump to search box" +msgstr "Arama kutusuna atla" + +#: ../ui/gtk/help-overlay.ui.h:12 +msgctxt "shortcut window" +msgid "Find in current conversation" +msgstr "Şimdiki konuşmada bul" + +#: ../ui/gtk/help-overlay.ui.h:13 +msgctxt "shortcut window" +msgid "Find next/previous in current conversation" +msgstr "Şimdiki konuşmada öncekini/sonrakini bul" + +#: ../ui/gtk/help-overlay.ui.h:14 +msgctxt "shortcut window" +msgid "Actions" +msgstr "Eylemler" + +#: ../ui/gtk/help-overlay.ui.h:15 +msgctxt "shortcut window" +msgid "Compose a new message" +msgstr "Yeni bir ileti yaz" + +#: ../ui/gtk/help-overlay.ui.h:16 +msgctxt "shortcut window" +msgid "Reply to sender " +msgstr "Göndereni yanıtla" + +#: ../ui/gtk/help-overlay.ui.h:17 +msgctxt "shortcut window" +msgid "Reply to all" +msgstr "Tümünü yanıtla" + +#: ../ui/gtk/help-overlay.ui.h:18 +msgctxt "shortcut window" +msgid "Forward" +msgstr "Yönlendir" + +#: ../ui/gtk/help-overlay.ui.h:19 +msgctxt "shortcut window" +msgid "Archive" +msgstr "Arşiv" + +#: ../ui/gtk/help-overlay.ui.h:20 +msgctxt "shortcut window" +msgid "Move to trash" +msgstr "Çöpe taşı" + +#: ../ui/gtk/help-overlay.ui.h:21 +msgctxt "shortcut window" +msgid "Toggle spam" +msgstr "Gereksizleri aç" + +#: ../ui/gtk/help-overlay.ui.h:22 +msgctxt "shortcut window" +msgid "Move the conversation" +msgstr "Konuşmayı taşı" + +#: ../ui/gtk/help-overlay.ui.h:23 +msgctxt "shortcut window" +msgid "Label the conversation" +msgstr "Konuşmayı etiketle" + +#: ../ui/gtk/help-overlay.ui.h:24 +msgctxt "shortcut window" +msgid "Mark read" +msgstr "Okunmuş olarak imle" + +#: ../ui/gtk/help-overlay.ui.h:25 +msgctxt "shortcut window" +msgid "Mark unread" +msgstr "Okunmadı olarak imle" + +#: ../ui/gtk/help-overlay.ui.h:26 +msgctxt "shortcut window" +msgid "View" +msgstr "Görünüm" + +#: ../ui/gtk/help-overlay.ui.h:27 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Yakınlaştır" + +#: ../ui/gtk/help-overlay.ui.h:28 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Uzaklaştır" + +#: ../ui/gtk/help-overlay.ui.h:29 +msgctxt "shortcut window" +msgid "Reset zoom" +msgstr "Yakınlaştırmayı sıfırla" + +#: ../ui/gtk/help-overlay.ui.h:30 +msgctxt "shortcut window" +msgid "Additional Shortcuts" +msgstr "Ek Kısayollar" + +#: ../ui/gtk/help-overlay.ui.h:31 +msgctxt "shortcut window" +msgid "Star" +msgstr "Yıldızla" + +#: ../ui/gtk/help-overlay.ui.h:32 +msgctxt "shortcut window" +msgid "Unstar" +msgstr "Yıldızı kaldır" + +#: ../ui/gtk/help-overlay.ui.h:33 +msgctxt "shortcut window" +msgid "Delete" +msgstr "Sil" + +#: ../ui/gtk/help-overlay.ui.h:34 +msgctxt "shortcut window" +msgid "Jump to next (older) conversation" +msgstr "Sonraki (eski) konuşmaya atla" + +#: ../ui/gtk/help-overlay.ui.h:35 +msgctxt "shortcut window" +msgid "Jump to previous (newer) conversation" +msgstr "Önceki (yeni) konuşmaya atla" + +#: ../ui/gtk/help-overlay.ui.h:36 +msgid "Composer Shortcuts" +msgstr "Oluşturucu Kısayolları" + +#: ../ui/gtk/help-overlay.ui.h:37 +msgctxt "shortcut window" +msgid "Quote text" +msgstr "Metni alıntıla" + +#: ../ui/gtk/help-overlay.ui.h:38 +msgctxt "shortcut window" +msgid "Unquote text" +msgstr "Metni alıntılama" + +#: ../ui/gtk/help-overlay.ui.h:39 +msgctxt "shortcut window" +msgid "Send" +msgstr "Gönder" + +#: ../ui/gtk/help-overlay.ui.h:40 +msgctxt "shortcut window" +msgid "Add attachment" +msgstr "Ek ekle" + +#: ../ui/gtk/help-overlay.ui.h:41 +msgctxt "shortcut window" +msgid "Rich text mode" +msgstr "Zengin metin kipi" + +#: ../ui/gtk/help-overlay.ui.h:42 +msgctxt "shortcut window" +msgid "Bold text" +msgstr "Kalın yazı" + +#: ../ui/gtk/help-overlay.ui.h:43 +msgctxt "shortcut window" +msgid "Italicize text" +msgstr "Eğik metin" + +#: ../ui/gtk/help-overlay.ui.h:44 +msgctxt "shortcut window" +msgid "Underline text" +msgstr "Metnin altını çiz" + +#: ../ui/gtk/help-overlay.ui.h:45 +msgctxt "shortcut window" +msgid "Strike text" +msgstr "Çizgili metin" + +#: ../ui/gtk/help-overlay.ui.h:46 +msgctxt "shortcut window" +msgid "Insert a link" +msgstr "Bir bağlantı yerleştir" + +#: ../ui/gtk/help-overlay.ui.h:47 +msgctxt "shortcut window" +msgid "Remove formatting" +msgstr "Biçimlendirmeyi kaldır" + +#: ../ui/gtk/menus.ui.h:2 +msgid "A_ccounts" +msgstr "_Hesaplar" + +#: ../ui/gtk/menus.ui.h:4 +msgid "_Keyboard Shortcuts" +msgstr "_Klavye Kısayolları" + +#: ../ui/login.glade.h:1 +msgid "email@example.com" +msgstr "eposta@ornek.com" + +#: ../ui/login.glade.h:2 ../ui/password-dialog.glade.h:3 msgid "Password" msgstr "Parola" -#: ../ui/login.glade.h:2 +#: ../ui/login.glade.h:3 msgid "E_mail address" msgstr "E-_posta adresi" -#: ../ui/login.glade.h:3 +#: ../ui/login.glade.h:4 msgid "_Password" msgstr "_Parola" -#: ../ui/login.glade.h:4 +#: ../ui/login.glade.h:5 msgid "S_ervice" msgstr "H_izmet" -#: ../ui/login.glade.h:5 +#: ../ui/login.glade.h:6 msgid "N_ame" -msgstr "İ_sim" +msgstr "_Ad" -#: ../ui/login.glade.h:7 +#: ../ui/login.glade.h:8 msgid "N_ickname" msgstr "_Takma Ad" -#: ../ui/login.glade.h:8 +#: ../ui/login.glade.h:9 msgid "Work, Home, etc." msgstr "İş, Ev, vs." -#: ../ui/login.glade.h:9 +#: ../ui/login.glade.h:10 msgid "_Save sent mail" msgstr "Gönderilmiş postayı _kaydet" -#: ../ui/login.glade.h:10 +#: ../ui/login.glade.h:11 msgid "Addi_tional email addresses…" -msgstr "E_k e-posta adresleri..." +msgstr "E_k e-posta adresleri…" -#: ../ui/login.glade.h:11 +#: ../ui/login.glade.h:12 msgid "IMAP settings" msgstr "IMAP ayarları" -#: ../ui/login.glade.h:12 +#: ../ui/login.glade.h:13 msgid "Se_rver" msgstr "Su_nucu" -#: ../ui/login.glade.h:13 +#: ../ui/login.glade.h:14 +msgid "imap.example.com" +msgstr "imap.ornek.com" + +#: ../ui/login.glade.h:15 msgid "P_ort" -msgstr "P_ort" +msgstr "Bağlantı N_oktası" -#: ../ui/login.glade.h:14 +#: ../ui/login.glade.h:16 +msgid "smtp.example.com" +msgstr "smtp.ornek.com" + +#: ../ui/login.glade.h:17 msgid "Ser_ver" msgstr "Sun_ucu" -#: ../ui/login.glade.h:15 +#: ../ui/login.glade.h:18 msgid "Por_t" -msgstr "Por_t" +msgstr "Bağlan_tı Noktası" -#: ../ui/login.glade.h:16 +#: ../ui/login.glade.h:19 msgid "SMTP settings" msgstr "SMTP ayarları" -#: ../ui/login.glade.h:17 +#: ../ui/login.glade.h:20 msgid "User_name" msgstr "Kullanıcı _adı" -#: ../ui/login.glade.h:18 +#: ../ui/login.glade.h:21 msgid "Pass_word" msgstr "Paro_la" -#: ../ui/login.glade.h:19 +#: ../ui/login.glade.h:22 msgid "SMTP username" msgstr "SMTP kullanıcı adı" -#: ../ui/login.glade.h:20 +#: ../ui/login.glade.h:23 msgid "SMTP password" msgstr "SMTP parola" -#: ../ui/login.glade.h:21 +#: ../ui/login.glade.h:24 msgid "_Username" msgstr "_Kullanıcı adı" -#: ../ui/login.glade.h:22 +#: ../ui/login.glade.h:25 msgid "IMAP username" msgstr "IMAP kullanıcı adı" -#: ../ui/login.glade.h:23 +#: ../ui/login.glade.h:26 msgid "IMAP password" msgstr "IMAP parola" -#: ../ui/login.glade.h:24 +#: ../ui/login.glade.h:27 msgid "Encr_yption" msgstr "Şif_releme" -#: ../ui/login.glade.h:25 +#: ../ui/login.glade.h:28 msgid "Encrypt_ion" msgstr "Şifrele_me" -#: ../ui/login.glade.h:27 +#: ../ui/login.glade.h:30 msgid "SSL/TLS" msgstr "SSL/TLS" -#: ../ui/login.glade.h:28 +#: ../ui/login.glade.h:31 msgid "STARTTLS" msgstr "STARTTLS" -#: ../ui/login.glade.h:29 +#: ../ui/login.glade.h:32 msgid "No authentication re_quired" msgstr "Kimlik doğrulama ge_rekli değil" -#: ../ui/login.glade.h:30 +#: ../ui/login.glade.h:33 msgid "Use IMAP cre_dentials" msgstr "IMAP kim_liğini kullan" -#: ../ui/login.glade.h:31 ../ui/preferences.glade.h:5 +#: ../ui/login.glade.h:34 msgid "Composer" -msgstr "Yazar" +msgstr "Oluşturucu" -#: ../ui/login.glade.h:32 +#: ../ui/login.glade.h:35 msgid "Save dra_fts on server" msgstr "Tas_lakları sunucuya kaydet" -#: ../ui/login.glade.h:33 +#: ../ui/login.glade.h:36 msgid "Si_gn emails (HTML allowed):" msgstr "E-postaları im_zala (HTML izinli):" -#: ../ui/login.glade.h:34 +#: ../ui/login.glade.h:37 msgid "Storage" msgstr "Depolama" -#: ../ui/login.glade.h:35 +#: ../ui/login.glade.h:38 msgid "_Download mail" msgstr "Posta _indir" +#: ../ui/main-toolbar.ui.h:1 +msgid "Empty Spam or Trash folders" +msgstr "İstenmeyen ya da Çöp klasörlerini boşalt" + #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" msgstr "SMTP Kimliği" @@ -2185,53 +2577,49 @@ #: ../ui/password-dialog.glade.h:4 msgid "_Remember password" -msgstr "Parolayı _hatırla" +msgstr "Parolayı _anımsa" #: ../ui/password-dialog.glade.h:6 msgid "_Authenticate" msgstr "_Kimlik Doğrula" -#: ../ui/preferences.glade.h:1 +#: ../ui/preferences-dialog.ui.h:1 msgid "Reading" msgstr "Okunuyor" -#: ../ui/preferences.glade.h:2 +#: ../ui/preferences-dialog.ui.h:2 msgid "_Automatically select next message" -msgstr "_Kendiliğinden bir sonraki mesajı seç" +msgstr "Bir sonraki iletiyi _kendiliğinden seç" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences-dialog.ui.h:3 msgid "_Display conversation preview" -msgstr "Konuşma önizlemesini _göster" +msgstr "Konuşma ön izlemesini _göster" -#: ../ui/preferences.glade.h:4 +#: ../ui/preferences-dialog.ui.h:4 msgid "Use _three pane view" msgstr "_Üç bölmeli görünümü kullan" -#: ../ui/preferences.glade.h:6 -msgid "Enable _spell checking" -msgstr "_Yazım denetimini etkinleştir" - -#: ../ui/preferences.glade.h:7 +#: ../ui/preferences-dialog.ui.h:5 msgid "Notifications" msgstr "Bildirimler" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences-dialog.ui.h:6 msgid "_Play notification sounds" msgstr "Bildirim seslerini _oynat" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences-dialog.ui.h:7 msgid "Show _notifications for new mail" msgstr "Yeni postalar için _bildirimleri göster" -#: ../ui/preferences.glade.h:10 +#: ../ui/preferences-dialog.ui.h:8 msgid "Always _watch for new mail" -msgstr "Yeni posta için her zaman g_özetle" +msgstr "Yeni postalar için her zaman g_özetle" -#: ../ui/preferences.glade.h:11 +#: ../ui/preferences-dialog.ui.h:9 msgid "Geary will run in the background and notify of new mail" msgstr "Geary arka planda çalışacak ve yeni postayı bildirecek" -#: ../ui/preferences.glade.h:12 +#: ../ui/preferences-dialog.ui.h:10 msgid "Preferences" msgstr "Tercihler" @@ -2240,8 +2628,8 @@ "Are you sure you want to remove this " "account? " msgstr "" -"Bu hesabı kaldırmak istediğinizden " -"emin misiniz? " +"Bu hesabı kaldırmak istediğinize emin " +"misiniz? " #: ../ui/remove_confirm.glade.h:2 msgid "" @@ -2263,6 +2651,143 @@ msgid "Geary update in progress…" msgstr "Geary güncellemesi devam ediyor…" +#~ msgid "Mail Client" +#~ msgstr "Posta İstemcisi" + +#~ msgid "_Inspect" +#~ msgstr "_Denetle" + +#~| msgid "%s - Composer Inspector" +#~ msgid "%s — Composer Inspector" +#~ msgstr "%s — Düzenleyici Denetçisi" + +#~ msgid " (Invalid?)" +#~ msgstr " (Geçersiz?)" + +#~| msgid "%s - Conversation Inspector" +#~ msgid "%s — Conversation Inspector" +#~ msgstr "%s — Konuşma Denetçisi" + +#~ msgid "none" +#~ msgstr "hiçbiri" + +#~ msgid "Copy _Link" +#~ msgstr "_Bağlantıyı Kopyala" + +#~ msgid "Link (Ctrl+L)" +#~ msgstr "Bağlantı (Ctrl+L)" + +#~ msgid "Enable _spell checking" +#~ msgstr "_Yazım denetimini etkinleştir" + +#~ msgid "_Inspect..." +#~ msgstr "_Denetle..." + +#~ msgid "Empty" +#~ msgstr "Boşalt" + +#~ msgid "%i match" +#~ msgid_plural "%i matches" +#~ msgstr[0] "%i eşleşme" + +#~ msgid "%i match (wrapped)" +#~ msgid_plural "%i matches (wrapped)" +#~ msgstr[0] "%i eşleşme (sarılı)" + +#~ msgid "not found" +#~ msgstr "bulunamadı" + +#~ msgid "No search results found." +#~ msgstr "Hiç arama sonucu bulunamadı." + +#~ msgid "From:" +#~ msgstr "Gönderen:" + +#~ msgid "Date:" +#~ msgstr "Tarih:" + +#~ msgid "Select _Message" +#~ msgstr "_İletiyi Seç" + +#~ msgid "_Save As..." +#~ msgstr "_... Olarak Kaydet" + +#~ msgid "Save A_ttachment..." +#~ msgid_plural "Save All A_ttachments..." +#~ msgstr[0] "E_klentiyi kaydet..." + +#~ msgid "_Left" +#~ msgstr "_Sol" + +#~ msgid "_Right" +#~ msgstr "_Sağ" + +#~ msgid "_Center" +#~ msgstr "_Orta" + +#~ msgid "_Justify" +#~ msgstr "_Doğrula" + +#~ msgid "More options" +#~ msgstr "Daha fazla seçenek" + +#~ msgctxt "Label" +#~ msgid "Close and Save" +#~ msgstr "Kapat ve Kaydet" + +#~ msgctxt "Short Label" +#~ msgid "Close and Save" +#~ msgstr "Kapat ve Kaydet" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Save" +#~ msgstr "Kapat ve Kaydet" + +#~ msgctxt "Label" +#~ msgid "Close and Discard" +#~ msgstr "Kapat ve At" + +#~ msgctxt "Short Label" +#~ msgid "Close and Discard" +#~ msgstr "Kapat ve At" + +#~ msgctxt "Tooltip" +#~ msgid "Close and Discard" +#~ msgstr "Kapat ve At" + +#~ msgid "Large" +#~ msgstr "Büyük" + +#~ msgid "Medium" +#~ msgstr "Orta" + +#~ msgid "Small" +#~ msgstr "Küçük" + +#~ msgid "Sans Serif" +#~ msgstr "Sans Serif" + +#~ msgid "Serif" +#~ msgstr "Serif" + +#~ msgid "Fixed Width" +#~ msgstr "Sabit Genişlik" + +#~ msgid "Detach" +#~ msgstr "Ayır" + +#~ msgid "_Attach File" +#~ msgstr "Dosya _Ekle" + +#~ msgid "Attach File" +#~ msgstr "Dosya Ekle" + +#~ msgid "_Include Original Attachments" +#~ msgstr "Özgün Ekleri _İçer" + +#~ msgid "Spelling language" +#~ msgstr "Yazım dili" + #~ msgid "Copyright 2011-2014 Yorba Foundation" #~ msgstr "Telif Hakkı 2011-2014 Yorba Foundation" diff -Nru geary-0.11.4/po/uk.po geary-0.12.0/po/uk.po --- geary-0.11.4/po/uk.po 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/po/uk.po 2017-10-02 11:25:21.000000000 +0000 @@ -6,13 +6,14 @@ # kosivantsov , 2012 # furyruf , 2013 # sp4rr0w , 2012 -# Daniel Korostil , 2014. +# Daniel Korostil , 2014, 2016. msgid "" msgstr "" "Project-Id-Version: geary-0.4.1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-30 00:37+0300\n" -"PO-Revision-Date: 2014-08-30 01:05+0300\n" +"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=geary&k" +"eywords=I18N+L10N&component=general\n" +"POT-Creation-Date: 2016-05-21 02:50+0000\n" +"PO-Revision-Date: 2016-06-01 23:42+0300\n" "Last-Translator: Daniel Korostil \n" "Language-Team: linux.org.ua\n" "Language: uk\n" @@ -49,22 +50,37 @@ msgid "Compose Message" msgstr "Скласти лист" -#: ../src/client/accounts/account-dialog-add-edit-pane.vala:48 +#: ../desktop/geary-attach.contract.in.h:1 +#| msgid "Send and receive email" +msgid "Send by email" +msgstr "Надіслати поштою" + +#: ../desktop/geary-attach.contract.in.h:2 +msgid "Send files using Geary" +msgstr "Надіслати файли через Geary" + +#: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:31 msgid "_Save" msgstr "З_берегти" -#: ../src/client/accounts/account-dialog-add-edit-pane.vala:48 +#: ../src/client/accounts/account-dialog-add-edit-pane.vala:51 #: ../src/client/components/stock.vala:22 msgid "_Add" msgstr "_Додати" +#. reset/clear widgets +#: ../src/client/accounts/account-dialog-edit-alternate-emails-pane.vala:124 +#, c-format +msgid "Additional addresses for %s" +msgstr "Додаткові адреси для %s" + #. Sets min size. -#: ../src/client/accounts/account-dialog.vala:19 +#: ../src/client/accounts/account-dialog.vala:21 msgid "Accounts" msgstr "Облікові записи" -#. Copyright 2011-2014 Yorba Foundation +#. Copyright 2016 Software Freedom Conservancy Inc. #. * #. * This software is licensed under the GNU Lesser General Public License #. * (version 2.1 or later). See the COPYING file in this distribution. @@ -75,99 +91,109 @@ msgid "First Last" msgstr "Повне ім'я" -#: ../src/client/accounts/add-edit-page.vala:228 +#: ../src/client/accounts/add-edit-page.vala:233 msgid "Welcome to Geary." msgstr "Ласкаво просимо до Geary." -#: ../src/client/accounts/add-edit-page.vala:228 +#: ../src/client/accounts/add-edit-page.vala:233 msgid "Enter your account information to get started." msgstr "Введіть інформацію про ваш обліковий запис." -#: ../src/client/accounts/add-edit-page.vala:247 +#: ../src/client/accounts/add-edit-page.vala:253 msgid "2 weeks back" msgstr "2 тижні тому" #. IDs are # of days -#: ../src/client/accounts/add-edit-page.vala:248 +#: ../src/client/accounts/add-edit-page.vala:254 msgid "1 month back" msgstr "1 місяць тому" -#: ../src/client/accounts/add-edit-page.vala:249 +#: ../src/client/accounts/add-edit-page.vala:255 msgid "3 months back" msgstr "3 місяці тому" -#: ../src/client/accounts/add-edit-page.vala:250 +#: ../src/client/accounts/add-edit-page.vala:256 msgid "6 months back" msgstr "6 місяців тому" -#: ../src/client/accounts/add-edit-page.vala:251 +#: ../src/client/accounts/add-edit-page.vala:257 msgid "1 year back" msgstr "1 рік тому" -#: ../src/client/accounts/add-edit-page.vala:252 +#: ../src/client/accounts/add-edit-page.vala:258 msgid "2 years back" msgstr "2 роки тому" -#: ../src/client/accounts/add-edit-page.vala:253 +#: ../src/client/accounts/add-edit-page.vala:259 msgid "4 years back" msgstr "4 роки тому" #. Separator -#: ../src/client/accounts/add-edit-page.vala:255 +#: ../src/client/accounts/add-edit-page.vala:261 msgid "Everything" msgstr "Загалом" -#: ../src/client/accounts/add-edit-page.vala:686 +#: ../src/client/accounts/add-edit-page.vala:280 +msgid "Edit" +msgstr "Редагувати" + +#: ../src/client/accounts/add-edit-page.vala:282 +#| msgid "_Previous" +msgid "Preview" +msgstr "Переглянути" + +#: ../src/client/accounts/add-edit-page.vala:723 msgid "Remem_ber passwords" msgstr "Запа_м'ятати паролі" -#: ../src/client/accounts/add-edit-page.vala:693 ../ui/login.glade.h:6 +#: ../src/client/accounts/add-edit-page.vala:730 ../ui/login.glade.h:6 msgid "Remem_ber password" msgstr "Запа_м'ятати пароль" -#: ../src/client/accounts/add-edit-page.vala:727 +#: ../src/client/accounts/add-edit-page.vala:764 msgid "Unable to validate:\n" msgstr "Неможливо підтвердити:\n" -#: ../src/client/accounts/add-edit-page.vala:729 +#: ../src/client/accounts/add-edit-page.vala:766 msgid " • Invalid account nickname.\n" msgstr " • Неправильний псевдонім облікового запису.\n" -#: ../src/client/accounts/add-edit-page.vala:732 +#: ../src/client/accounts/add-edit-page.vala:769 msgid " • Email address already added to Geary.\n" msgstr " • Електрону адресу вже додано до Geary.\n" -#: ../src/client/accounts/add-edit-page.vala:736 +#: ../src/client/accounts/add-edit-page.vala:773 msgid " • IMAP connection error.\n" msgstr " • Помилка з'єднання IMAP.\n" -#: ../src/client/accounts/add-edit-page.vala:739 +#: ../src/client/accounts/add-edit-page.vala:776 msgid " • IMAP username or password incorrect.\n" msgstr " • Неправильний користувач або пароль IMAP.\n" -#: ../src/client/accounts/add-edit-page.vala:742 +#: ../src/client/accounts/add-edit-page.vala:779 msgid " • SMTP connection error.\n" msgstr " • Помилка з'єднання SMTP.\n" -#: ../src/client/accounts/add-edit-page.vala:745 +#: ../src/client/accounts/add-edit-page.vala:782 msgid " • SMTP username or password incorrect.\n" msgstr " • Неправильний користувач або пароль SMTP.\n" -#: ../src/client/accounts/add-edit-page.vala:749 +#: ../src/client/accounts/add-edit-page.vala:786 msgid " • Connection error.\n" msgstr " • Помилка з'єднання.\n" -#: ../src/client/accounts/add-edit-page.vala:753 +#: ../src/client/accounts/add-edit-page.vala:790 msgid " • Username or password incorrect.\n" msgstr " • Неправильний користувач або пароль.\n" #: ../src/client/application/geary-application.vala:19 -msgid "Copyright 2011-2014 Yorba Foundation" -msgstr "© 2011-2014 Yorba Foundation" +msgid "Copyright 2016 Software Freedom Conservancy Inc." +msgstr "© 2016 Software Freedom Conservancy Inc." #: ../src/client/application/geary-application.vala:21 -msgid "Visit the Yorba web site" -msgstr "Відвідати сайт Yorba" +#| msgid "Visit the Yorba web site" +msgid "Visit the Geary web site" +msgstr "Відвідати сайт Geary" #: ../src/client/application/geary-args.vala:10 msgid "Start Geary with hidden main window" @@ -248,179 +274,196 @@ msgid "Unrecognized command line option \"%s\"\n" msgstr "Невідомий параметр командного рядка «%s»\n" -#: ../src/client/application/geary-controller.vala:56 -msgid "_Delete" -msgstr "_Вилучити" +#: ../src/client/application/geary-controller.vala:61 +#| msgid "Move conversation" +msgid "Delete conversation" +msgstr "Вилучити розмову" -#: ../src/client/application/geary-controller.vala:57 +#: ../src/client/application/geary-controller.vala:62 msgid "Delete conversation (Shift+Delete)" msgstr "Вилучити розмову (Shift+Delete)" -#: ../src/client/application/geary-controller.vala:58 +#: ../src/client/application/geary-controller.vala:63 msgid "Delete conversations (Shift+Delete)" msgstr "Вилучити розмови (Shift+Delete)" #. This refers to the action ("move email to the trash"), not the Trash folder itself -#: ../src/client/application/geary-controller.vala:62 -msgid "_Trash" -msgstr "_Смітник" - -#: ../src/client/application/geary-controller.vala:63 -msgid "Move conversation to trash (Delete, Backspace)" -msgstr "Перенести розмову в смітник (Delete, Backspace)" +#: ../src/client/application/geary-controller.vala:67 +#| msgid "Move conversation to trash (Delete, Backspace)" +msgid "Move conversation to Trash (Delete, Backspace)" +msgstr "Перенести розмову у смітник (Delete, Backspace)" -#: ../src/client/application/geary-controller.vala:64 -msgid "Move conversations to trash (Delete, Backspace)" -msgstr "Перенести розмови в смітник (Delete, Backspace)" +#: ../src/client/application/geary-controller.vala:68 +#| msgid "Move conversations to trash (Delete, Backspace)" +msgid "Move conversations to Trash (Delete, Backspace)" +msgstr "Перенести розмови у смітник (Delete, Backspace)" #. This refers to the action ("archive an email"), not the Archive folder itself -#: ../src/client/application/geary-controller.vala:68 +#: ../src/client/application/geary-controller.vala:72 msgid "_Archive" msgstr "_Архівувати" -#: ../src/client/application/geary-controller.vala:69 +#: ../src/client/application/geary-controller.vala:73 msgid "Archive conversation (A)" msgstr "Архівувати розмову (А)" -#: ../src/client/application/geary-controller.vala:70 +#: ../src/client/application/geary-controller.vala:74 msgid "Archive conversations (A)" msgstr "Архівувати розмови (А)" -#: ../src/client/application/geary-controller.vala:73 +#: ../src/client/application/geary-controller.vala:77 msgid "Mark as S_pam" msgstr "Зазначити як _спам" -#: ../src/client/application/geary-controller.vala:74 +#: ../src/client/application/geary-controller.vala:78 msgid "Mark as not S_pam" msgstr "Зазначити не як _спам" -#: ../src/client/application/geary-controller.vala:76 -#: ../src/client/application/geary-controller.vala:295 +#: ../src/client/application/geary-controller.vala:80 +#: ../src/client/application/geary-controller.vala:394 msgid "Mark conversation" msgstr "Зазначити розмову" -#: ../src/client/application/geary-controller.vala:77 +#: ../src/client/application/geary-controller.vala:81 msgid "Mark conversations" msgstr "Зазначити розмови" -#: ../src/client/application/geary-controller.vala:78 +#: ../src/client/application/geary-controller.vala:82 msgid "Add label to conversation" msgstr "Додати мітку до розмови" -#: ../src/client/application/geary-controller.vala:79 +#: ../src/client/application/geary-controller.vala:83 msgid "Add label to conversations" msgstr "Додати мітку до розмов" -#: ../src/client/application/geary-controller.vala:80 -#: ../src/client/application/geary-controller.vala:334 +#: ../src/client/application/geary-controller.vala:84 +#: ../src/client/application/geary-controller.vala:433 msgid "Move conversation" msgstr "Перенести розмову" -#: ../src/client/application/geary-controller.vala:81 +#: ../src/client/application/geary-controller.vala:85 msgid "Move conversations" msgstr "Перенести розмови" -#: ../src/client/application/geary-controller.vala:271 +#: ../src/client/application/geary-controller.vala:374 +#: ../ui/app_menu.interface.h:1 msgid "A_ccounts" msgstr "_Облікові записи" -#: ../src/client/application/geary-controller.vala:276 -#: ../src/client/components/stock.vala:27 +#: ../src/client/application/geary-controller.vala:379 +#: ../src/client/components/stock.vala:27 ../ui/app_menu.interface.h:2 msgid "_Preferences" msgstr "П_араметри" -#: ../src/client/application/geary-controller.vala:280 -#: ../src/client/components/stock.vala:25 +#: ../src/client/application/geary-controller.vala:383 +#: ../src/client/components/stock.vala:25 ../ui/app_menu.interface.h:3 msgid "_Help" msgstr "_Довідка" -#: ../src/client/application/geary-controller.vala:284 -#: ../src/client/components/stock.vala:21 +#: ../src/client/application/geary-controller.vala:387 +#: ../src/client/components/stock.vala:21 ../ui/app_menu.interface.h:4 msgid "_About" msgstr "_Про програму" -#: ../src/client/application/geary-controller.vala:288 -msgid "_Donate" -msgstr "По_жертвувати" - -#: ../src/client/application/geary-controller.vala:292 -#: ../src/client/components/stock.vala:29 +#: ../src/client/application/geary-controller.vala:391 +#: ../src/client/components/stock.vala:29 ../ui/app_menu.interface.h:5 msgid "_Quit" msgstr "Ви_йти" -#: ../src/client/application/geary-controller.vala:297 +#: ../src/client/application/geary-controller.vala:396 msgid "_Mark as..." msgstr "_Зазначити як…" -#: ../src/client/application/geary-controller.vala:303 +#: ../src/client/application/geary-controller.vala:402 msgid "Mark as _Read" msgstr "Зазначити як _прочитане" -#: ../src/client/application/geary-controller.vala:309 +#: ../src/client/application/geary-controller.vala:408 msgid "Mark as _Unread" msgstr "Зазначити як _непрочитане" -#: ../src/client/application/geary-controller.vala:315 +#: ../src/client/application/geary-controller.vala:414 msgid "_Star" msgstr "_Із зіркою" -#: ../src/client/application/geary-controller.vala:320 +#: ../src/client/application/geary-controller.vala:419 msgid "U_nstar" msgstr "_Без зірки" -#: ../src/client/application/geary-controller.vala:330 +#: ../src/client/application/geary-controller.vala:429 msgid "Add label" msgstr "Додати мітку" -#: ../src/client/application/geary-controller.vala:331 +#: ../src/client/application/geary-controller.vala:430 msgid "_Label" msgstr "_Мітка" -#: ../src/client/application/geary-controller.vala:335 +#: ../src/client/application/geary-controller.vala:434 msgid "_Move" msgstr "_Перенести" -#: ../src/client/application/geary-controller.vala:339 +#: ../src/client/application/geary-controller.vala:438 msgid "Compose new message (Ctrl+N, N)" msgstr "Скласти новий лист (Ctrl+N, N)" #. Reply to a message. -#: ../src/client/application/geary-controller.vala:343 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1579 +#: ../src/client/application/geary-controller.vala:442 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1875 msgid "_Reply" msgstr "_Відповісти" -#: ../src/client/application/geary-controller.vala:344 +#: ../src/client/application/geary-controller.vala:443 msgid "Reply (Ctrl+R, R)" msgstr "Відповісти (Ctrl+R, R)" -#: ../src/client/application/geary-controller.vala:348 +#: ../src/client/application/geary-controller.vala:447 msgid "R_eply All" msgstr "В_ідповісти всім" -#: ../src/client/application/geary-controller.vala:349 +#: ../src/client/application/geary-controller.vala:448 msgid "Reply all (Ctrl+Shift+R, Shift+R)" msgstr "Відповісти всім (Ctrl+Shift+R, Shift+R)" #. Forward a message. -#: ../src/client/application/geary-controller.vala:354 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1589 +#: ../src/client/application/geary-controller.vala:453 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1885 msgid "_Forward" msgstr "_Переслати" -#: ../src/client/application/geary-controller.vala:355 +#: ../src/client/application/geary-controller.vala:454 msgid "Forward (Ctrl+L, F)" msgstr "Переслати (Ctrl+L, F)" -#: ../src/client/application/geary-controller.vala:623 +#: ../src/client/application/geary-controller.vala:493 +msgid "Empty" +msgstr "Спорожнити" + +#: ../src/client/application/geary-controller.vala:494 +msgid "Empty Spam or Trash folders" +msgstr "Спорожнити спам і теку смітника" + +#: ../src/client/application/geary-controller.vala:498 +msgid "Empty _Spam…" +msgstr "Спорожнити _спам…" + +#: ../src/client/application/geary-controller.vala:502 +msgid "Empty _Trash…" +msgstr "Спорожнити _смітник…" + +#. No callback is connected, since we bind the toggle button to the search bar visibility +#: ../src/client/application/geary-controller.vala:535 +msgid "Toggle search bar" +msgstr "Перемкнути панель пошуку" + +#: ../src/client/application/geary-controller.vala:734 msgid "Unable to store server trust exception" msgstr "Неможливо зберегти виняток довіри до сервера" -#: ../src/client/application/geary-controller.vala:860 +#: ../src/client/application/geary-controller.vala:971 msgid "Your settings are insecure" msgstr "Ваші параметри — незахищені" -#: ../src/client/application/geary-controller.vala:861 +#: ../src/client/application/geary-controller.vala:972 msgid "" "Your IMAP and/or SMTP settings do not specify SSL or TLS. This means your " "username and password could be read by another person on the network. Are " @@ -430,17 +473,17 @@ "Таким чином ваші пароль та користувач можуть стати доступними для інших " "людей у мережі. Ви впевнені в своєму виборі?" -#: ../src/client/application/geary-controller.vala:862 +#: ../src/client/application/geary-controller.vala:973 msgid "Co_ntinue" msgstr "Про_довжити" #. / Displayed in the space-limited status bar when a message fails to be sent due to error. -#: ../src/client/application/geary-controller.vala:940 +#: ../src/client/application/geary-controller.vala:1051 #: ../src/client/components/status-bar.vala:29 msgid "Error sending email" msgstr "Помилка надсилання пошти" -#: ../src/client/application/geary-controller.vala:941 +#: ../src/client/application/geary-controller.vala:1052 msgid "" "Geary encountered an error sending an email. If the problem persists, " "please manually delete the email from your Outbox folder." @@ -450,12 +493,12 @@ #. Displayed in the space-limited status bar when a message fails to be uploaded #. to Sent Mail after being sent. -#: ../src/client/application/geary-controller.vala:945 +#: ../src/client/application/geary-controller.vala:1056 #: ../src/client/components/status-bar.vala:33 msgid "Error saving sent mail" msgstr "Помилка збереження надісланої пошти" -#: ../src/client/application/geary-controller.vala:946 +#: ../src/client/application/geary-controller.vala:1057 msgid "" "Geary encountered an error saving a sent message to Sent Mail. The message " "will stay in your Outbox folder until you delete it." @@ -463,19 +506,19 @@ "Geary зіткнувся з помилкою збереження надісланої пошти. Лист залишиться в " "теці «Вихідні», поки ви його не вилучите." -#: ../src/client/application/geary-controller.vala:1015 +#: ../src/client/application/geary-controller.vala:1126 msgid "Labels" msgstr "Мітки" #. give the user two options: reset the Account local store, or exit Geary. A third #. could be done to leave the Account in an unopened state, but we don't currently #. have provisions for that. -#: ../src/client/application/geary-controller.vala:1027 +#: ../src/client/application/geary-controller.vala:1138 #, c-format msgid "Unable to open the database for %s" msgstr "Неможливо відкрити базу даних для %s" -#: ../src/client/application/geary-controller.vala:1028 +#: ../src/client/application/geary-controller.vala:1139 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -500,20 +543,20 @@ "Перезбирання бази даних знищить всю локальну пошту та її долучень. На " "пошту на вашому сервері це не поширюється." -#: ../src/client/application/geary-controller.vala:1030 +#: ../src/client/application/geary-controller.vala:1141 msgid "_Rebuild" msgstr "_Перебудувати" -#: ../src/client/application/geary-controller.vala:1030 +#: ../src/client/application/geary-controller.vala:1141 msgid "E_xit" msgstr "В_ийти" -#: ../src/client/application/geary-controller.vala:1039 +#: ../src/client/application/geary-controller.vala:1150 #, c-format msgid "Unable to rebuild database for \"%s\"" msgstr "Неможливо перезібрати базу даних для «%s»" -#: ../src/client/application/geary-controller.vala:1040 +#: ../src/client/application/geary-controller.vala:1151 #, c-format msgid "" "Error during rebuild:\n" @@ -526,14 +569,14 @@ #. some other problem opening the account ... as with other flow path, can't run #. Geary today with an account in unopened state, so have to exit -#: ../src/client/application/geary-controller.vala:1062 -#: ../src/client/application/geary-controller.vala:1072 -#: ../src/client/application/geary-controller.vala:1083 +#: ../src/client/application/geary-controller.vala:1173 +#: ../src/client/application/geary-controller.vala:1183 +#: ../src/client/application/geary-controller.vala:1194 #, c-format msgid "Unable to open local mailbox for %s" msgstr "Неможливо відкрити локальну пошту для %s" -#: ../src/client/application/geary-controller.vala:1063 +#: ../src/client/application/geary-controller.vala:1174 #, c-format msgid "" "There was an error opening the local mail database for this account. This is " @@ -552,7 +595,7 @@ "\n" "%s" -#: ../src/client/application/geary-controller.vala:1073 +#: ../src/client/application/geary-controller.vala:1184 msgid "" "The version number of the local mail database is formatted for a newer " "version of Geary. Unfortunately, the database cannot be \"rolled back\" to " @@ -566,7 +609,7 @@ "\n" "Встановіть останню версію Geary та спробуйте ще раз." -#: ../src/client/application/geary-controller.vala:1084 +#: ../src/client/application/geary-controller.vala:1195 msgid "" "There was an error opening the local account. This is probably due to " "connectivity issues.\n" @@ -578,23 +621,28 @@ "\n" "Перевірте мережевий зв'язок і перезапустіть Geary." -#: ../src/client/application/geary-controller.vala:1591 +#: ../src/client/application/geary-controller.vala:1706 #, c-format msgid "About %s" msgstr "Інформація про %s" #. / Translators: add your name and email address to receive credit in the About dialog #. / For example: Yamada Taro -#: ../src/client/application/geary-controller.vala:1594 +#: ../src/client/application/geary-controller.vala:1709 msgid "translator-credits" msgstr "Daniel Korostil " -#: ../src/client/application/geary-controller.vala:1858 +#: ../src/client/application/geary-controller.vala:1967 +#| msgid "Underline (Ctrl+U)" +msgid "Undo move (Ctrl+Z)" +msgstr "Повернути рух (Ctrl+Z)" + +#: ../src/client/application/geary-controller.vala:1977 #, c-format msgid "Are you sure you want to open \"%s\"?" msgstr "Відкрити «%s»?" -#: ../src/client/application/geary-controller.vala:1859 +#: ../src/client/application/geary-controller.vala:1978 msgid "" "Attachments may cause damage to your system if opened. Only open files from " "trusted sources." @@ -602,42 +650,82 @@ "Долучення можуть зашкодити вашій системі. Відкривайте файли лише з надійних " "джерел." -#: ../src/client/application/geary-controller.vala:1860 +#: ../src/client/application/geary-controller.vala:1979 msgid "Don't _ask me again" msgstr "Більше не _запитувати" -#: ../src/client/application/geary-controller.vala:1878 +#: ../src/client/application/geary-controller.vala:1997 #, c-format msgid "A file named \"%s\" already exists. Do you want to replace it?" msgstr "Файл з назвою «%s» вже існує. Перезаписати його?" -#: ../src/client/application/geary-controller.vala:1880 +#: ../src/client/application/geary-controller.vala:1999 #, c-format msgid "" "The file already exists in \"%s\". Replacing it will overwrite its contents." msgstr "У «%s» вже існує такий файл. Його вміст буде переписано при заміні." -#: ../src/client/application/geary-controller.vala:1883 +#: ../src/client/application/geary-controller.vala:2002 msgid "_Replace" msgstr "_Замінити" #. Find out what to do with the inline composers. #. TODO: Remove this in favor of automatically saving drafts -#: ../src/client/application/geary-controller.vala:2150 +#: ../src/client/application/geary-controller.vala:2300 msgid "Close open draft messages?" msgstr "Закрити відкриту чернетку листа?" -#: ../src/client/application/geary-controller.vala:2259 +#: ../src/client/application/geary-controller.vala:2430 +#, c-format +msgid "Empty all email from your %s folder?" +msgstr "Спорожнити всі листи з теки %s?" + +#: ../src/client/application/geary-controller.vala:2431 +msgid "This removes the email from Geary and your email server." +msgstr "Це вилучить всі листи з Geary і з вашого сервера." + +#: ../src/client/application/geary-controller.vala:2432 +#| msgid "\"%s\" could not be found." +msgid "This cannot be undone." +msgstr "Це неможливо повернути." + +#: ../src/client/application/geary-controller.vala:2433 +#, c-format +msgid "Empty %s" +msgstr "Спорожнити %s" + +#: ../src/client/application/geary-controller.vala:2450 +#, c-format +#| msgid "Error saving" +msgid "Error emptying %s" +msgstr "Помилка спорожнення %s" + +#: ../src/client/application/geary-controller.vala:2480 msgid "Do you want to permanently delete this message?" msgid_plural "Do you want to permanently delete these messages?" msgstr[0] "Остаточно вилучити цей лист?" msgstr[1] "Остаточно вилучити ці листи?" msgstr[2] "Остаточно вилучити ці листи?" -#: ../src/client/application/geary-controller.vala:2261 +#: ../src/client/application/geary-controller.vala:2482 msgid "Delete" msgstr "Вилучити" +#: ../src/client/application/geary-controller.vala:2513 +#| msgid "Underline (Ctrl+U)" +msgid "Undo archive (Ctrl+Z)" +msgstr "Повернути архів (Ctrl+Z)" + +#: ../src/client/application/geary-controller.vala:2528 +#| msgid "Unquote text (Ctrl+[)" +msgid "Undo trash (Ctrl+Z)" +msgstr "Повернути смітник (Ctrl+Z)" + +#: ../src/client/application/geary-controller.vala:2581 +#| msgid "Underline (Ctrl+U)" +msgid "Undo (Ctrl+Z)" +msgstr "Повернути (Ctrl+Z)" + #: ../src/client/components/conversation-find-bar.vala:214 #, c-format msgid "%i match" @@ -658,49 +746,48 @@ msgid "not found" msgstr "не знайдено" -#: ../src/client/components/main-toolbar.vala:11 +#: ../src/client/components/main-window.vala:397 +#, c-format +msgid "%s (%d)" +msgstr "%s (%d)" + +#: ../src/client/components/search-bar.vala:10 #: ../src/client/folder-list/folder-list-search-branch.vala:38 #: ../src/engine/api/geary-special-folder-type.vala:51 msgid "Search" msgstr "Пошук" -#. Search bar. -#: ../src/client/components/main-toolbar.vala:78 +#. Search entry. +#: ../src/client/components/search-bar.vala:25 msgid "Search all mail in account for keywords (Ctrl+S)" msgstr "Шукати всю пошту в обліковому запису за ключовим словом (Ctrl+S)" -#: ../src/client/components/main-toolbar.vala:212 +#: ../src/client/components/search-bar.vala:118 #, c-format msgid "Indexing %s account" msgstr "Індексування облікового запису %s" -#: ../src/client/components/main-toolbar.vala:223 +#: ../src/client/components/search-bar.vala:129 #: ../src/client/folder-list/folder-list-search-branch.vala:39 #, c-format msgid "Search %s account" msgstr "Пошук облікового запису %s" -#: ../src/client/components/main-window.vala:323 -#, c-format -msgid "%s (%d)" -msgstr "%s (%d)" - #. / Displayed in the space-limited status bar while a message is in the process of being sent. #: ../src/client/components/status-bar.vala:26 msgid "Sending..." msgstr "Надсилання…" -#: ../src/client/components/stock.vala:18 -#: ../ui/account_cannot_remove.glade.h:3 +#: ../src/client/components/stock.vala:18 ../ui/account_cannot_remove.glade.h:3 msgid "_OK" msgstr "_Гаразд" -#: ../src/client/components/stock.vala:19 ../ui/remove_confirm.glade.h:5 +#: ../src/client/components/stock.vala:19 ../ui/edit_alternate_emails.glade.h:3 +#: ../ui/password-dialog.glade.h:5 ../ui/remove_confirm.glade.h:5 msgid "_Cancel" msgstr "_Скасувати" -#: ../src/client/components/stock.vala:23 ../ui/account_list.glade.h:4 -#: ../ui/preferences.glade.h:2 +#: ../src/client/components/stock.vala:23 msgid "_Close" msgstr "_Закрити" @@ -722,7 +809,7 @@ #. Select all. #: ../src/client/components/stock.vala:32 -#: ../src/client/conversation-viewer/conversation-viewer.vala:1047 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1341 msgid "Select _All" msgstr "Вибрати _все" @@ -730,132 +817,136 @@ msgid "_Keep" msgstr "_Зберегти" -#: ../src/client/composer/composer-widget.vala:57 +#: ../src/client/composer/composer-widget.vala:72 msgid "Saved" msgstr "Збережено" -#: ../src/client/composer/composer-widget.vala:58 +#: ../src/client/composer/composer-widget.vala:73 msgid "Saving" msgstr "Зберігання" -#: ../src/client/composer/composer-widget.vala:59 +#: ../src/client/composer/composer-widget.vala:74 msgid "Error saving" msgstr "Помилка зберігання" -#. / A list of keywords, separated by pipe ("|") characters, that suggest an attachment -#: ../src/client/composer/composer-widget.vala:106 -msgid "attach|enclosed|enclosing|cover letter" -msgstr "долуч|вклад|файл" - -#: ../src/client/composer/composer-widget.vala:823 -msgid "Do you want to discard the unsaved message?" -msgstr "Відкинути незбережений лист?" +#: ../src/client/composer/composer-widget.vala:75 +msgid "Press Backspace to delete quote" +msgstr "Натисніть Backspace, щоб вилучити цитату" -#: ../src/client/composer/composer-widget.vala:826 -#: ../src/client/composer/composer-widget.vala:830 +#: ../src/client/composer/composer-widget.vala:76 +msgid "New Message" +msgstr "Створити лист" + +#. A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since +#. this is full-word checking, include all variants of each word. No spaces are allowed. +#: ../src/client/composer/composer-widget.vala:137 +msgid "" +"attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|" +"enclosing|encloses|enclosure|enclosures" +msgstr "" +"долучення|долучень|долучив|долучила|долучили|долучити|долучено|вкладення|вкл" +"адень|вклав|влала|вклали|власти|вкладено" + +#: ../src/client/composer/composer-widget.vala:1101 +#: ../src/client/composer/composer-widget.vala:1105 msgid "Do you want to discard this message?" msgstr "Відкинути цей лист?" -#: ../src/client/composer/composer-widget.vala:911 +#: ../src/client/composer/composer-widget.vala:1261 msgid "Send message with an empty subject and body?" msgstr "Надіслати лист без теми і текстом листа?" -#: ../src/client/composer/composer-widget.vala:913 +#: ../src/client/composer/composer-widget.vala:1263 msgid "Send message with an empty subject?" msgstr "Надіслати лист без теми?" -#: ../src/client/composer/composer-widget.vala:915 +#: ../src/client/composer/composer-widget.vala:1265 msgid "Send message with an empty body?" msgstr "Надіслати лист без тексту?" -#: ../src/client/composer/composer-widget.vala:917 +#: ../src/client/composer/composer-widget.vala:1267 msgid "Send message without an attachment?" msgstr "Надіслати лист без долучень?" -#: ../src/client/composer/composer-widget.vala:1100 +#: ../src/client/composer/composer-widget.vala:1529 msgid "Cannot add attachment" msgstr "Неможливо додати долучення" -#: ../src/client/composer/composer-widget.vala:1111 +#: ../src/client/composer/composer-widget.vala:1540 #, c-format msgid "\"%s\" could not be found." msgstr "«%s» неможливо знайти." -#: ../src/client/composer/composer-widget.vala:1118 +#: ../src/client/composer/composer-widget.vala:1547 #, c-format msgid "\"%s\" is a folder." msgstr "«%s» — тека." -#: ../src/client/composer/composer-widget.vala:1125 +#: ../src/client/composer/composer-widget.vala:1554 #, c-format msgid "\"%s\" is an empty file." msgstr "«%s» — порожній файл." -#: ../src/client/composer/composer-widget.vala:1139 +#: ../src/client/composer/composer-widget.vala:1568 #, c-format msgid "\"%s\" could not be opened for reading." msgstr "«%s» неможливо відкрити, щоб прочитати." -#: ../src/client/composer/composer-widget.vala:1146 +#: ../src/client/composer/composer-widget.vala:1575 #, c-format msgid "\"%s\" already attached for delivery." msgstr "«%s» уже долучено для доставлення." #. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" -#: ../src/client/composer/composer-widget.vala:1155 +#: ../src/client/composer/composer-widget.vala:1584 #, c-format msgid "%s (%s)" msgstr "%s (%s)" -#: ../src/client/composer/composer-widget.vala:1215 +#: ../src/client/composer/composer-widget.vala:1645 msgid "To: " msgstr "Кому: " -#: ../src/client/composer/composer-widget.vala:1218 +#: ../src/client/composer/composer-widget.vala:1648 msgid "Cc: " msgstr "Копія: " -#: ../src/client/composer/composer-widget.vala:1221 +#: ../src/client/composer/composer-widget.vala:1651 msgid "Bcc: " msgstr "Потайна копія: " -#: ../src/client/composer/composer-widget.vala:1438 +#: ../src/client/composer/composer-widget.vala:1654 +#| msgid "_Reply" +msgid "Reply-To: " +msgstr "Відповісти:" + +#: ../src/client/composer/composer-widget.vala:1887 msgid "Select Color" msgstr "Вибрати колір" +#. Displayed in the From dropdown to indicate an "alternate email address" +#. for an account. The first printf argument will be the alternate email +#. address, and the second will be the account's primary email address. +#: ../src/client/composer/composer-widget.vala:2322 +#, c-format +msgid "%1$s via %2$s" +msgstr "%1$s через %2$s" + #. Composer label (with mnemonic underscore) for the account selector #. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:1884 +#: ../src/client/composer/composer-widget.vala:2364 msgid "_From:" msgstr "_Від:" -#. For other types of messages, just show the from account. -#. Composer label (without mnemonic underscore) for the account selector -#. when choosing what address to send a message from. -#: ../src/client/composer/composer-widget.vala:1900 -#: ../src/client/conversation-viewer/conversation-viewer.vala:637 -msgid "From:" -msgstr "Від:" - -#. Copyright 2011-2014 Yorba Foundation -#. * -#. * This software is licensed under the GNU Lesser General Public License -#. * (version 2.1 or later). See the COPYING file in this distribution. -#. -#. Window for sending messages. -#: ../src/client/composer/composer-window.vala:10 -msgid "New Message" -msgstr "Створити лист" - #: ../src/client/conversation-list/formatted-conversation-data.vala:11 msgid "Me" msgstr "Я" -#: ../src/client/conversation-viewer/conversation-viewer.vala:262 +#: ../src/client/conversation-viewer/conversation-viewer.vala:413 msgid "No conversations selected." msgstr "Жодну розмову не вибрано." -#: ../src/client/conversation-viewer/conversation-viewer.vala:264 +#: ../src/client/conversation-viewer/conversation-viewer.vala:415 #, c-format msgid "%u conversation selected." msgid_plural "%u conversations selected." @@ -863,51 +954,55 @@ msgstr[1] "%u розмови вибрано." msgstr[2] "%u розмов вибрано." -#: ../src/client/conversation-viewer/conversation-viewer.vala:293 +#: ../src/client/conversation-viewer/conversation-viewer.vala:444 msgid "No search results found." msgstr "Не знайдено жодного результату." -#: ../src/client/conversation-viewer/conversation-viewer.vala:295 +#: ../src/client/conversation-viewer/conversation-viewer.vala:446 msgid "No conversations in folder." msgstr "Немає розмов у теці." -#: ../src/client/conversation-viewer/conversation-viewer.vala:536 +#: ../src/client/conversation-viewer/conversation-viewer.vala:708 msgid "This message contains remote images." msgstr "Цей лист містить віддалені зображення." -#: ../src/client/conversation-viewer/conversation-viewer.vala:536 +#: ../src/client/conversation-viewer/conversation-viewer.vala:708 msgid "Show Images" msgstr "Показати зображення" -#: ../src/client/conversation-viewer/conversation-viewer.vala:537 +#: ../src/client/conversation-viewer/conversation-viewer.vala:709 msgid "Always Show From Sender" msgstr "Завжди показувати від відправника" -#: ../src/client/conversation-viewer/conversation-viewer.vala:561 +#: ../src/client/conversation-viewer/conversation-viewer.vala:733 msgid "Edit Draft" msgstr "Редагувати чернетку" -#: ../src/client/conversation-viewer/conversation-viewer.vala:640 +#: ../src/client/conversation-viewer/conversation-viewer.vala:826 +msgid "From:" +msgstr "Від:" + +#: ../src/client/conversation-viewer/conversation-viewer.vala:829 msgid "To:" msgstr "Кому:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:643 +#: ../src/client/conversation-viewer/conversation-viewer.vala:832 msgid "Cc:" msgstr "Копія:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:646 +#: ../src/client/conversation-viewer/conversation-viewer.vala:835 msgid "Bcc:" msgstr "Потайна копія:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:649 +#: ../src/client/conversation-viewer/conversation-viewer.vala:838 msgid "Subject:" msgstr "Тема:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:652 +#: ../src/client/conversation-viewer/conversation-viewer.vala:841 msgid "Date:" msgstr "Дата:" -#: ../src/client/conversation-viewer/conversation-viewer.vala:862 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1156 #, c-format msgid "%u read message" msgid_plural "%u read messages" @@ -915,64 +1010,64 @@ msgstr[1] "%u прочитаних листів" msgstr[2] "%u прочитаних листів" -#: ../src/client/conversation-viewer/conversation-viewer.vala:994 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1288 #, c-format msgid "This message was sent successfully, but could not be saved to %s." msgstr "Цей лист успішно надіслано, проте його неможливо зберегти в %s." #. Add a menu item for copying the current selection. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1020 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1314 #: ../ui/composer.glade.h:4 msgid "_Copy" msgstr "_Копіювати" #. Add a menu item for copying the address. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1028 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1322 msgid "Copy _Email Address" msgstr "Копіювати _поштову адресу" #. Add a menu item for copying the link. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1033 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1327 #: ../ui/composer.glade.h:17 msgid "Copy _Link" msgstr "Копіювати _посилання" #. Select message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1041 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1335 msgid "Select _Message" msgstr "Вибрати _лист" #. Inspect. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1053 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1347 msgid "_Inspect" msgstr "_Дослідити" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1279 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1574 msgid "This link appears to go to" msgstr "Це посилання начебто веде" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1280 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1575 msgid "but actually goes to" msgstr "але насправді веде" #. If href doesn't look like a URL, something is fishy, so warn the user -#: ../src/client/conversation-viewer/conversation-viewer.vala:1335 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1630 msgid " (Invalid?)" msgstr " (Неправильно?)" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1527 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1736 +msgid "_Save Image As..." +msgstr "_Зберегти зображення як…" + +#: ../src/client/conversation-viewer/conversation-viewer.vala:1840 msgid "_Save As..." msgstr "_Зберегти як…" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1532 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1845 msgid "Save All A_ttachments..." msgstr "Зберегти всі _долучення…" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1546 -msgid "_Save Image As..." -msgstr "_Зберегти зображення як…" - -#: ../src/client/conversation-viewer/conversation-viewer.vala:1569 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1865 msgid "Save A_ttachment..." msgid_plural "Save All A_ttachments..." msgstr[0] "Зберегти долучення…" @@ -980,41 +1075,41 @@ msgstr[2] "Зберегти всі долучення…" #. Reply to all on a message. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1584 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1880 msgid "Reply to _All" msgstr "Відповісти в_сім" #. Mark as read/unread. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1601 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1897 msgid "_Mark as Read" msgstr "_Зазначити як прочитане" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1605 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1901 msgid "_Mark as Unread" msgstr "_Зазначити як непрочитане" -#: ../src/client/conversation-viewer/conversation-viewer.vala:1611 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1907 msgid "Mark Unread From _Here" msgstr "Зазначити непрочитаним _звідси" #. Separator. #. View original message source. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1626 +#: ../src/client/conversation-viewer/conversation-viewer.vala:1922 msgid "_View Source" msgstr "_Глянути код" #. Generate the attachment table. #. / Placeholder filename for attachments with no filename. -#: ../src/client/conversation-viewer/conversation-viewer.vala:1940 -#: ../src/engine/rfc822/rfc822-utils.vala:327 +#: ../src/client/conversation-viewer/conversation-viewer.vala:2246 +#: ../src/engine/rfc822/rfc822-utils.vala:378 msgid "none" msgstr "немає" -#: ../src/client/conversation-viewer/conversation-viewer.vala:2070 +#: ../src/client/conversation-viewer/conversation-viewer.vala:2381 msgid "Failed to open default text editor." msgstr "Не вдалося відкрити типовий текстовий редактор." -#: ../src/client/conversation-viewer/conversation-web-view.vala:321 +#: ../src/client/conversation-viewer/conversation-web-view.vala:322 #, c-format msgid "%s - Conversation Inspector" msgstr "%s — ревізор розмов" @@ -1055,7 +1150,7 @@ #: ../src/client/dialogs/certificate-warning-dialog.vala:54 msgid "Geary will not add or update this email account." -msgstr "Geary не додаватиме і не оновлятиме цей поштовий обліковий запис." +msgstr "Geary не додаватиме і не оновлюватиме цей поштовий обліковий запис." #: ../src/client/dialogs/certificate-warning-dialog.vala:59 msgid "" @@ -1111,8 +1206,8 @@ #. strings, and Glade doesn't support the "larger" size attribute. See this bug report for #. details: https://bugzilla.gnome.org/show_bug.cgi?id=679006 #: ../src/client/dialogs/password-dialog.vala:16 -msgid "Please enter your password" -msgstr "Уведіть ваш пароль" +msgid "Geary requires your email password to continue" +msgstr "Вкажіть ваш пароль для продовження" #. Label displaying total number of email messages in a folder #: ../src/client/folder-list/folder-list-folder-entry.vala:32 @@ -1278,7 +1373,7 @@ msgstr "%A" #: ../src/client/util/util-email.vala:30 -#: ../src/engine/rfc822/rfc822-message.vala:741 +#: ../src/engine/rfc822/rfc822-message.vala:773 msgid "(no subject)" msgstr "(без теми)" @@ -1306,14 +1401,6 @@ msgid "KB" msgstr "КБ" -#: ../src/engine/api/geary-service.vala:20 -msgid "IMAP" -msgstr "IMAP" - -#: ../src/engine/api/geary-service.vala:23 -msgid "SMTP" -msgstr "SMTP" - #: ../src/engine/api/geary-service-provider.vala:52 msgid "Gmail" msgstr "Gmail" @@ -1330,6 +1417,14 @@ msgid "Other" msgstr "Інше" +#: ../src/engine/api/geary-service.vala:20 +msgid "IMAP" +msgstr "IMAP" + +#: ../src/engine/api/geary-service.vala:23 +msgid "SMTP" +msgstr "SMTP" + #: ../src/engine/api/geary-special-folder-type.vala:24 msgid "Inbox" msgstr "Вхідні" @@ -1370,75 +1465,107 @@ msgid "Archive" msgstr "Архів" -#: ../src/engine/api/geary-special-folder-type.vala:58 ../ui/login.glade.h:25 +#: ../src/engine/api/geary-special-folder-type.vala:58 ../ui/login.glade.h:26 msgid "None" msgstr "Немає" #. Map of user-supplied search field names to column names. #. / Can be typed in the search box like attachment:file.txt to find -#. / messages with attachments with a particular name. -#: ../src/engine/imap-db/imap-db-account.vala:662 +#. / messages with attachments with a particular name. The translated +#. / string must match the string in Geary's help documentation. +#: ../src/engine/imap-db/imap-db-account.vala:705 msgid "attachment" msgstr "долучення" #. / Can be typed in the search box like bcc:johndoe@example.com to find -#. / messages bcc'd to a particular person. +#. / messages bcc'd to a particular person. The translated +#. / string must match the string in Geary's help documentation. #. Fields we allow the token to be "me" as in from:me. -#: ../src/engine/imap-db/imap-db-account.vala:665 -#: ../src/engine/imap-db/imap-db-account.vala:684 +#: ../src/engine/imap-db/imap-db-account.vala:709 +#: ../src/engine/imap-db/imap-db-account.vala:737 msgid "bcc" msgstr "bcc" #. / Can be typed in the search box like body:word to find the word only -#. / if it occurs in the body of a message. -#: ../src/engine/imap-db/imap-db-account.vala:668 +#. / if it occurs in the body of a message. The translated +#. / string must match the string in Geary's help documentation. +#: ../src/engine/imap-db/imap-db-account.vala:713 msgid "body" msgstr "тіло" #. / Can be typed in the search box like cc:johndoe@example.com to find -#. / messages cc'd to a particular person. -#: ../src/engine/imap-db/imap-db-account.vala:671 -#: ../src/engine/imap-db/imap-db-account.vala:684 +#. / messages cc'd to a particular person. The translated +#. / string must match the string in Geary's help documentation. +#: ../src/engine/imap-db/imap-db-account.vala:717 +#: ../src/engine/imap-db/imap-db-account.vala:737 msgid "cc" msgstr "cc" #. / Can be typed in the search box like from:johndoe@example.com to -#. / find messages from a particular sender. -#: ../src/engine/imap-db/imap-db-account.vala:674 -#: ../src/engine/imap-db/imap-db-account.vala:684 +#. / find messages from a particular sender. The translated +#. / string must match the string in Geary's help documentation. +#: ../src/engine/imap-db/imap-db-account.vala:721 +#: ../src/engine/imap-db/imap-db-account.vala:737 msgid "from" msgstr "from" #. / Can be typed in the search box like subject:word to find the word -#. / only if it occurs in the subject of a message. -#: ../src/engine/imap-db/imap-db-account.vala:677 +#. / only if it occurs in the subject of a message. The translated +#. / string must match the string in Geary's help documentation. +#: ../src/engine/imap-db/imap-db-account.vala:725 msgid "subject" msgstr "subject" #. / Can be typed in the search box like to:johndoe@example.com to find -#. / messages received by a particular person. -#: ../src/engine/imap-db/imap-db-account.vala:680 -#: ../src/engine/imap-db/imap-db-account.vala:684 +#. / messages received by a particular person. The translated +#. / string must match the string in Geary's help documentation. +#: ../src/engine/imap-db/imap-db-account.vala:729 +#: ../src/engine/imap-db/imap-db-account.vala:737 msgid "to" msgstr "to" +#. / Can be typed in the search box like is:read, is:unread or is:starred +#. / to find messages that are read, unread, or starred. The translated +#. / string must match the string in Geary's help documentation. +#: ../src/engine/imap-db/imap-db-account.vala:733 +msgid "is" +msgstr "є" + #. "me" can be typed like from:me or cc:me, etc. as a shorthand -#. to find mail to or from yourself in search. -#: ../src/engine/imap-db/imap-db-account.vala:699 +#. to find mail to or from yourself in search. The translated +#. string must match the string in Geary's help documentation. +#: ../src/engine/imap-db/imap-db-account.vala:753 msgid "me" -msgstr "Я" +msgstr "я" + +#: ../src/engine/imap-db/imap-db-account.vala:1207 +#| msgid "%d unread" +#| msgid_plural "%d unread" +msgid "read" +msgstr "прочитаний" + +#: ../src/engine/imap-db/imap-db-account.vala:1209 +#| msgid "%d unread" +#| msgid_plural "%d unread" +msgid "unread" +msgstr "непрочитаний" + +#: ../src/engine/imap-db/imap-db-account.vala:1211 +#| msgid "Starred" +msgid "starred" +msgstr "зірка" #. List of folder names to match for Drafts, separated by |. Please add localized common #. names for the Drafts folder, leaving in the English names as well. The first in the list #. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:535 +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:575 msgid "Drafts | Draft" msgstr "Чернетки | Чернетка | Draft | Drafts" #. List of folder names to match for Sent Mail, separated by |. Please add localized common #. names for the Sent Mail folder, leaving in the English names as well. The first in the list #. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:540 +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:580 msgid "Sent | Sent Mail | Sent Email | Sent E-Mail" msgstr "" "Надіслано | Надіслане | Надіслана пошта | Надісланий лист | Sent | Sent Mail " @@ -1447,7 +1574,7 @@ #. List of folder names to match for Spam, separated by |. Please add localized common #. names for the Spam folder, leaving in the English names as well. The first in the list #. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:545 +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:585 msgid "" "Junk | Spam | Junk Mail | Junk Email | Junk E-Mail | Bulk Mail | Bulk Email " "| Bulk E-Mail" @@ -1458,63 +1585,70 @@ #. List of folder names to match for Trash, separated by |. Please add localized common #. names for the Trash folder, leaving in the English names as well. The first in the list #. will be the default, so please add the most common localized name to the front. -#: ../src/engine/imap-engine/imap-engine-generic-account.vala:550 +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:590 msgid "Trash | Rubbish | Rubbish Bin" msgstr "Сміття | Смітник | Кошик | TTrash | Rubbish | Rubbish Bin" +#. List of folder names to match for Archive, separated by |. Please add localized common +#. names for the Trash folder, leaving in the English names as well. The first in the list +#. will be the default, so please add the most common localized name to the front. +#: ../src/engine/imap-engine/imap-engine-generic-account.vala:595 +msgid "Archive | Archives" +msgstr "Архів | Архіви | Archive | Archives" + #. / Format for the datetime that a message being replied to was received #. / See http://developer.gnome.org/glib/2.32/glib-GDateTime.html#g-date-time-format -#: ../src/engine/rfc822/rfc822-utils.vala:165 +#: ../src/engine/rfc822/rfc822-utils.vala:215 msgid "%a, %b %-e, %Y at %-l:%M %p" msgstr "%a, %b %-e, %Y at %-l:%M %p" #. / The quoted header for a message being replied to. #. / %1$s will be substituted for the date, and %2$s will be substituted for #. / the original sender. -#: ../src/engine/rfc822/rfc822-utils.vala:171 +#: ../src/engine/rfc822/rfc822-utils.vala:221 #, c-format msgid "On %1$s, %2$s wrote:" msgstr "Написано %1$s, %2$s:" #. / The quoted header for a message being replied to (in case the date is not known). #. / %s will be replaced by the original sender. -#: ../src/engine/rfc822/rfc822-utils.vala:178 +#: ../src/engine/rfc822/rfc822-utils.vala:228 #, c-format msgid "%s wrote:" msgstr "%s:" #. / The quoted header for a message being replied to (in case the sender is not known). #. / %s will be replaced by the original date -#: ../src/engine/rfc822/rfc822-utils.vala:184 +#: ../src/engine/rfc822/rfc822-utils.vala:234 #, c-format msgid "On %s:" msgstr "Написано %s:" -#: ../src/engine/rfc822/rfc822-utils.vala:211 +#: ../src/engine/rfc822/rfc822-utils.vala:263 msgid "---------- Forwarded message ----------" msgstr "---------- Пересланий лист ----------" -#: ../src/engine/rfc822/rfc822-utils.vala:215 +#: ../src/engine/rfc822/rfc822-utils.vala:267 #, c-format msgid "From: %s\n" msgstr "Від: %s\n" -#: ../src/engine/rfc822/rfc822-utils.vala:216 +#: ../src/engine/rfc822/rfc822-utils.vala:268 #, c-format msgid "Subject: %s\n" msgstr "Тема: %s\n" -#: ../src/engine/rfc822/rfc822-utils.vala:217 +#: ../src/engine/rfc822/rfc822-utils.vala:269 #, c-format msgid "Date: %s\n" msgstr "Дата: %s\n" -#: ../src/engine/rfc822/rfc822-utils.vala:220 +#: ../src/engine/rfc822/rfc822-utils.vala:272 #, c-format msgid "To: %s\n" msgstr "Кому: %s\n" -#: ../src/engine/rfc822/rfc822-utils.vala:223 +#: ../src/engine/rfc822/rfc822-utils.vala:275 #, c-format msgid "Cc: %s\n" msgstr "Копія: %s\n" @@ -1647,111 +1781,177 @@ msgstr "_Форматований текст" #: ../ui/composer.glade.h:23 +msgid "Show Extended Fields" +msgstr "Показати додаткові поля" + +#: ../ui/composer.glade.h:24 +msgctxt "Label" +msgid "Close and Save" +msgstr "Закрити і зберегти" + +#: ../ui/composer.glade.h:25 +msgctxt "Short Label" +msgid "Close and Save" +msgstr "Закрити і зберегти" + +#: ../ui/composer.glade.h:26 +msgctxt "Tooltip" +msgid "Close and Save" +msgstr "Закрити і зберегти" + +#: ../ui/composer.glade.h:27 +msgctxt "Label" +msgid "Close and Discard" +msgstr "Закрити і відкинути" + +#: ../ui/composer.glade.h:28 +msgctxt "Short Label" +msgid "Close and Discard" +msgstr "Закрити і відкинути" + +#: ../ui/composer.glade.h:29 +msgctxt "Tooltip" +msgid "Close and Discard" +msgstr "Закрити і відкинути" + +#: ../ui/composer.glade.h:30 msgid "Lar_ge" msgstr "Ве_ликий" -#: ../ui/composer.glade.h:24 +#: ../ui/composer.glade.h:31 msgid "Large" msgstr "Великий" -#: ../ui/composer.glade.h:25 +#: ../ui/composer.glade.h:32 msgid "_Medium" msgstr "_Середній" -#: ../ui/composer.glade.h:26 +#: ../ui/composer.glade.h:33 msgid "Medium" msgstr "Середній" -#: ../ui/composer.glade.h:27 +#: ../ui/composer.glade.h:34 msgid "_Small" msgstr "_Малий" -#: ../ui/composer.glade.h:28 +#: ../ui/composer.glade.h:35 msgid "Small" msgstr "Малий" -#: ../ui/composer.glade.h:29 +#: ../ui/composer.glade.h:36 msgid "S_ans Serif" msgstr "_Без засічок" -#: ../ui/composer.glade.h:30 +#: ../ui/composer.glade.h:37 msgid "Sans Serif" msgstr "Без засічок" -#: ../ui/composer.glade.h:31 +#: ../ui/composer.glade.h:38 msgid "S_erif" msgstr "_З засічками" -#: ../ui/composer.glade.h:32 +#: ../ui/composer.glade.h:39 msgid "Serif" msgstr "З засічками" -#: ../ui/composer.glade.h:33 +#: ../ui/composer.glade.h:40 msgid "_Fixed Width" msgstr "_Фіксованої ширини" -#: ../ui/composer.glade.h:34 +#: ../ui/composer.glade.h:41 msgid "Fixed Width" msgstr "Фіксована ширина" -#: ../ui/composer.glade.h:35 +#: ../ui/composer.glade.h:42 msgid "Detach" msgstr "Викинути" -#: ../ui/composer.glade.h:36 +#: ../ui/composer.glade.h:43 +#| msgid "Italic (Ctrl+I)" +msgid "Detach (Ctrl+D)" +msgstr "Від'єднати (Ctrl+D)" + +#: ../ui/composer.glade.h:44 msgid "_Send" msgstr "_Надіслати" -#: ../ui/composer.glade.h:37 +#: ../ui/composer.glade.h:45 msgid "Send" msgstr "Надіслати" -#: ../ui/composer.glade.h:38 +#: ../ui/composer.glade.h:46 +#| msgid "Bold (Ctrl+B)" +msgid "Send (Ctrl+Enter)" +msgstr "Надіслати (Ctrl+Enter)" + +#: ../ui/composer.glade.h:47 msgid "_Attach File" msgstr "_Долучити файл" -#: ../ui/composer.glade.h:39 +#: ../ui/composer.glade.h:48 msgid "Attach File" msgstr "Долучити файл" -#: ../ui/composer.glade.h:40 +#: ../ui/composer.glade.h:49 msgid "_Include Original Attachments" msgstr "_Вкласти початкові долучення" -#: ../ui/composer.glade.h:41 +#: ../ui/composer.glade.h:50 msgid "Include Original Attachments" msgstr "Вкласти початкові долучення" #. Address(es) e-mail is to be sent to -#: ../ui/composer.glade.h:43 +#: ../ui/composer.glade.h:52 msgid "_To" msgstr "_Кому" -#: ../ui/composer.glade.h:44 +#: ../ui/composer.glade.h:53 msgid "_Cc" msgstr "Ко_пія" -#: ../ui/composer.glade.h:45 +#: ../ui/composer.glade.h:54 msgid "_Subject" msgstr "_Тема" -#: ../ui/composer.glade.h:46 +#: ../ui/composer.glade.h:55 msgid "_Bcc" msgstr "По_тайна копія" +#: ../ui/composer.glade.h:56 +#| msgid "_Reply" +msgid "_Reply-To" +msgstr "_Відповісти" + #. Geary account mail will be sent from -#: ../ui/composer.glade.h:48 +#: ../ui/composer.glade.h:58 msgid "From" msgstr "Від" -#: ../ui/composer.glade.h:49 +#: ../ui/composer.glade.h:59 msgid "Drop files here" msgstr "Перетягніть файли сюди" -#: ../ui/composer.glade.h:50 +#: ../ui/composer.glade.h:60 msgid "To add them as attachments" msgstr "Щоб додати їх як долучення" +#: ../ui/edit_alternate_emails.glade.h:1 +#| msgid "E_mail address" +msgid "Remove email address" +msgstr "Вилучити поштову адресу" + +#: ../ui/edit_alternate_emails.glade.h:2 +msgid "" +"Some email services require additional addresses be configured on the " +"server. Contact your email provider for more information." +msgstr "" +"Деякі поштові служби вимагають налаштувати додаткові адреси на сервері. " +"Зв'яться з вашим постачальником за подробицями." + +#: ../ui/edit_alternate_emails.glade.h:4 +msgid "_Update" +msgstr "_Оновити" + #: ../ui/find_bar.glade.h:1 msgid "Find:" msgstr "Знайти:" @@ -1772,7 +1972,7 @@ msgid "label" msgstr "мітка" -#: ../ui/login.glade.h:1 +#: ../ui/login.glade.h:1 ../ui/password-dialog.glade.h:3 msgid "Password" msgstr "Пароль" @@ -1805,152 +2005,167 @@ msgstr "З_берегти надіслану пошту" #: ../ui/login.glade.h:10 +msgid "Addi_tional email addresses…" +msgstr "_Додактові поштові адреси…" + +#: ../ui/login.glade.h:11 msgid "IMAP settings" msgstr "Параметри IMAP" -#: ../ui/login.glade.h:11 +#: ../ui/login.glade.h:12 msgid "Se_rver" msgstr "Се_рвер" -#: ../ui/login.glade.h:12 +#: ../ui/login.glade.h:13 msgid "P_ort" msgstr "Пор_т" -#: ../ui/login.glade.h:13 +#: ../ui/login.glade.h:14 msgid "Ser_ver" msgstr "Се_рвер" -#: ../ui/login.glade.h:14 +#: ../ui/login.glade.h:15 msgid "Por_t" msgstr "Пор_т" -#: ../ui/login.glade.h:15 +#: ../ui/login.glade.h:16 msgid "SMTP settings" msgstr "Параметри SMTP" -#: ../ui/login.glade.h:16 +#: ../ui/login.glade.h:17 msgid "User_name" msgstr "_Користувач" -#: ../ui/login.glade.h:17 +#: ../ui/login.glade.h:18 msgid "Pass_word" msgstr "Па_роль" -#: ../ui/login.glade.h:18 +#: ../ui/login.glade.h:19 msgid "SMTP username" msgstr "Користувач SMTP" -#: ../ui/login.glade.h:19 +#: ../ui/login.glade.h:20 msgid "SMTP password" msgstr "Пароль SMTP" -#: ../ui/login.glade.h:20 +#: ../ui/login.glade.h:21 msgid "_Username" msgstr "_Користувач" -#: ../ui/login.glade.h:21 +#: ../ui/login.glade.h:22 msgid "IMAP username" msgstr "Користувач IMAP" -#: ../ui/login.glade.h:22 +#: ../ui/login.glade.h:23 msgid "IMAP password" msgstr "Пароль IMAP" -#: ../ui/login.glade.h:23 +#: ../ui/login.glade.h:24 msgid "Encr_yption" msgstr "_Шифрування" -#: ../ui/login.glade.h:24 +#: ../ui/login.glade.h:25 msgid "Encrypt_ion" msgstr "_Шифрування" -#: ../ui/login.glade.h:26 +#: ../ui/login.glade.h:27 msgid "SSL/TLS" msgstr "SSL/TLS" -#: ../ui/login.glade.h:27 +#: ../ui/login.glade.h:28 msgid "STARTTLS" msgstr "STARTTLS" -#: ../ui/login.glade.h:28 +#: ../ui/login.glade.h:29 msgid "No authentication re_quired" msgstr "Не потрібно за_свідчення" -#: ../ui/login.glade.h:29 +#: ../ui/login.glade.h:30 msgid "Use IMAP cre_dentials" msgstr "Використовувати _реєстраційні дані IMAP" -#: ../ui/login.glade.h:30 -msgid "Storage" -msgstr "Пам'ять" - -#: ../ui/login.glade.h:31 -msgid "_Download mail" -msgstr "_Звантажити пошту" - -#: ../ui/login.glade.h:32 ../ui/preferences.glade.h:6 +#: ../ui/login.glade.h:31 ../ui/preferences.glade.h:5 msgid "Composer" msgstr "Редактор" -#: ../ui/login.glade.h:33 +#: ../ui/login.glade.h:32 msgid "Save dra_fts on server" msgstr "Зберігати _черевики на сервері" +#: ../ui/login.glade.h:33 +#| msgid "Si_gn emails:" +msgid "Si_gn emails (HTML allowed):" +msgstr "_Підписати пошту (дозволено HTML):" + #: ../ui/login.glade.h:34 -msgid "Si_gn emails:" -msgstr "_Підписати пошту:" +msgid "Storage" +msgstr "Пам'ять" + +#: ../ui/login.glade.h:35 +msgid "_Download mail" +msgstr "_Звантажити пошту" #: ../ui/password-dialog.glade.h:1 msgid "SMTP Credentials" msgstr "Реєстраційні дані SMTP" #: ../ui/password-dialog.glade.h:2 -msgid "Username:" -msgstr "Користувач:" - -#: ../ui/password-dialog.glade.h:3 -msgid "Password:" -msgstr "Пароль:" +#| msgid "_Username" +msgid "Username" +msgstr "Користувач" #: ../ui/password-dialog.glade.h:4 msgid "_Remember password" msgstr "_Запам'ятати пароль" -#: ../ui/preferences.glade.h:1 -msgid "Preferences" -msgstr "Параметри" +#: ../ui/password-dialog.glade.h:6 +msgid "_Authenticate" +msgstr "_Засвідчення" -#: ../ui/preferences.glade.h:3 +#: ../ui/preferences.glade.h:1 msgid "Reading" msgstr "Читання" -#: ../ui/preferences.glade.h:4 +#: ../ui/preferences.glade.h:2 msgid "_Automatically select next message" msgstr "_Автоматично вибирати наступний лист" -#: ../ui/preferences.glade.h:5 +#: ../ui/preferences.glade.h:3 msgid "_Display conversation preview" msgstr "_Показувати попередній огляд розмови" -#: ../ui/preferences.glade.h:7 +#: ../ui/preferences.glade.h:4 +msgid "Use _three pane view" +msgstr "Використовувати _ієрархію" + +#: ../ui/preferences.glade.h:6 msgid "Enable _spell checking" msgstr "Перевіряти _орфографію" -#: ../ui/preferences.glade.h:8 +#: ../ui/preferences.glade.h:7 msgid "Notifications" msgstr "Сповіщення" -#: ../ui/preferences.glade.h:9 +#: ../ui/preferences.glade.h:8 msgid "_Play notification sounds" msgstr "Про_гравати звукові сповіщення " -#: ../ui/preferences.glade.h:10 +#: ../ui/preferences.glade.h:9 msgid "Show _notifications for new mail" msgstr "Показувати _сповіщення про нову пошту" +#: ../ui/preferences.glade.h:10 +#| msgid "Show _notifications for new mail" +msgid "Always _watch for new mail" +msgstr "Завжди _дивитись за новими листами" + #: ../ui/preferences.glade.h:11 -msgid "Notify of new mail at start_up" -msgstr "Сповіщати про нову пошту під час _запуску" +msgid "Geary will run in the background and notify of new mail" +msgstr "Geary буде запущено на тлі і сповіщати про нові листи" + +#: ../ui/preferences.glade.h:12 +msgid "Preferences" +msgstr "Параметри" #: ../ui/remove_confirm.glade.h:1 msgid "" @@ -1976,8 +2191,39 @@ msgstr "Електрона адреса:" #: ../ui/upgrade_dialog.glade.h:1 -msgid "Geary upgrade in progress." -msgstr "Оновлення Geary." +#| msgid "Geary upgrade in progress." +msgid "Geary update in progress…" +msgstr "Виконується оновлення…" + +#~ msgid "Copyright 2011-2014 Yorba Foundation" +#~ msgstr "© 2011-2014 Yorba Foundation" + +#~ msgid "_Delete" +#~ msgstr "_Вилучити" + +#~ msgid "_Trash" +#~ msgstr "_Смітник" + +#~ msgid "_Donate" +#~ msgstr "По_жертвувати" + +#~ msgid "attach|enclosed|enclosing|cover letter" +#~ msgstr "долуч|вклад|файл" + +#~ msgid "Do you want to discard the unsaved message?" +#~ msgstr "Відкинути незбережений лист?" + +#~ msgid "Please enter your password" +#~ msgstr "Уведіть ваш пароль" + +#~ msgid "Username:" +#~ msgstr "Користувач:" + +#~ msgid "Password:" +#~ msgstr "Пароль:" + +#~ msgid "Notify of new mail at start_up" +#~ msgstr "Сповіщати про нову пошту під час _запуску" #~ msgid "C_lose" #~ msgstr "_Закрити" diff -Nru geary-0.11.4/README geary-0.12.0/README --- geary-0.11.4/README 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/README 2017-10-02 11:25:21.000000000 +0000 @@ -1,38 +1,36 @@ - Geary Email Client - ------------------ +Geary: Send and receive email +============================= - * Introduction +Geary is an email application built around conversations, for the +GNOME 3 desktop. It allows you to read, find and send email with a +straightforward, modern interface. - Geary is an IMAP email client built for the GNOME desktop environment. It - allows you to read and send email with a simple, modern interface. +Visit https://wiki.gnome.org/Apps/Geary for more information. - Visit https://wiki.gnome.org/Apps/Geary to read about the current state of - Geary's development and to make sure you're running the latest version. +Installation & Licensing +------------------------ +Please consult the INSTALL and COPYING files for more information. - * Installation & Licensing +Getting in Touch +---------------- - Please consult the INSTALL and COPYING files for more information. + * Found a bug? Please report it! + https://wiki.gnome.org/Apps/Geary/ReportingABug + * Mailing list: http://mail.gnome.org/mailman/listinfo/geary-list + * IRC Channel: #geary on irc.gimp.org +Contributing to Geary +--------------------- - * Quick Start +Want to help improve Geary? Here are some ways to contribute: - The first time Geary is launched, it will prompt for your account - information. Note that your email password is stored securely in the - Gnome Keyring. - - Geary will then begin downloading messages in your inbox and other - folders. - - * Contacting Geary Developers - - Geary wiki: https://wiki.gnome.org/Apps/Geary - - We also encourage you to join the Geary mailing list. See - https://mail.gnome.org/mailman/listinfo/geary-list for details. - - - - Copyright 2016 Software Freedom Conservancy Inc. + * Bug reporting: https://wiki.gnome.org/Apps/Geary/ReportingABug + * Development: https://wiki.gnome.org/Apps/Geary/Development + * Translating: https://wiki.gnome.org/Apps/Geary/Translating + * Join the mailing list or IRC channel and join in the discussion +--- +Copyright 2016 Software Freedom Conservancy Inc. +Copyright 2017 Michael Gratton diff -Nru geary-0.11.4/README.md geary-0.12.0/README.md --- geary-0.11.4/README.md 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/README.md 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,43 @@ + +Geary: Send and receive email +============================= + +Geary is an email application built around conversations, for the +GNOME 3 desktop. It allows you to read, find and send email with a +straightforward, modern interface. + +Visit https://wiki.gnome.org/Apps/Geary for more information. + +**GitHub users please note**: Bug reports, code contributions and +translations are managed using GNOME's infrastructure, so we cannot +accept tickets or pull requests on GitHub. Please see the links below +for more information. + +![Geary displaying a conversation](https://wiki.gnome.org/Apps/Geary?action=AttachFile&do=get&target=geary-conversation-0.12.png) + +Installation & Licensing +------------------------ + +Please consult the [INSTALL](./INSTALL) and [COPYING](./COPYING) files +for more information. + +Contributing to Geary +--------------------- + +Want to help improve Geary? Here are some ways to contribute: + + * Bug reporting: https://wiki.gnome.org/Apps/Geary/ReportingABug + * Development: https://wiki.gnome.org/Apps/Geary/Development + * Translating: https://wiki.gnome.org/Apps/Geary/Translating + * Join the mailing list or IRC channel and join in the discussion + +Getting in Touch +---------------- + + * Geary wiki: https://wiki.gnome.org/Apps/Geary + * Mailing list: http://mail.gnome.org/mailman/listinfo/geary-list + * IRC Channel: [#geary on irc.gimp.org](irc://irc.gimp.org/%23geary) + +--- +Copyright 2016 Software Freedom Conservancy Inc. +Copyright 2017 Michael Gratton diff -Nru geary-0.11.4/src/client/accounts/account-dialog-account-list-pane.vala geary-0.12.0/src/client/accounts/account-dialog-account-list-pane.vala --- geary-0.11.4/src/client/accounts/account-dialog-account-list-pane.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/accounts/account-dialog-account-list-pane.vala 2017-10-02 11:25:21.000000000 +0000 @@ -7,21 +7,22 @@ // List of accounts. Used with AccountDialog. public class AccountDialogAccountListPane : AccountDialogPane { public enum Column { - ACCOUNT_NICKNAME = 0, + ACCOUNT_ID = 0, + ACCOUNT_NAME, ACCOUNT_ADDRESS; } - + private Gtk.TreeView list_view; - private Gtk.ListStore list_model = new Gtk.ListStore(2, typeof (string), typeof (string)); + private Gtk.ListStore list_model = new Gtk.ListStore(3, typeof(string), typeof(string), typeof(string)); private Gtk.Action edit_action; private Gtk.Action delete_action; public signal void add_account(); - - public signal void edit_account(string email_address); - - public signal void delete_account(string email_address); - + + public signal void edit_account(string id); + + public signal void delete_account(string id); + public AccountDialogAccountListPane(Gtk.Stack stack) { base(stack); Gtk.Builder builder = GearyApplication.instance.create_builder("account_list.glade"); @@ -33,14 +34,14 @@ // Set up list. list_view = (Gtk.TreeView) builder.get_object("account_list"); list_view.set_model(list_model); - list_view.insert_column_with_attributes(-1, "Nickname", new Gtk.CellRendererText(), "text", - Column.ACCOUNT_NICKNAME); - list_view.get_column(Column.ACCOUNT_NICKNAME).set_expand(true); - list_view.insert_column_with_attributes(-1, "Address", new Gtk.CellRendererText(), "text", + list_view.insert_column_with_attributes(-1, "Name", new Gtk.CellRendererText(), "text", + Column.ACCOUNT_NAME); + list_view.get_column(0).set_expand(true); + list_view.insert_column_with_attributes(-1, "Email", new Gtk.CellRendererText(), "text", Column.ACCOUNT_ADDRESS); - list_view.get_column(Column.ACCOUNT_ADDRESS).set_expand(true); + list_view.get_column(1).set_expand(true); list_view.reorderable = true; - + // Get all accounts and add them to a list. Gee.LinkedList account_list = new Gee.LinkedList(); @@ -102,8 +103,8 @@ notify_edit_account(); return true; } - - // Returns the email address of the selected account. Returns null if no account is selected. + + // Returns the id of the selected account. Returns null if no account is selected. private string? get_selected_account() { if (list_view.get_selection().count_selected_rows() != 1) return null; @@ -115,7 +116,7 @@ return null; string? account = null; - list_model.get(iter, Column.ACCOUNT_ADDRESS, out account); + list_model.get(iter, Column.ACCOUNT_ID, out account); return account; } @@ -126,18 +127,18 @@ } private void on_account_added(Geary.AccountInformation account) { - Gtk.TreeIter? iter = list_contains(account.email); + Gtk.TreeIter? iter = list_contains(account.id); if (iter != null) return; // Already listed. - - add_account_to_list(account.nickname, account.email); + + add_account_to_list(account); account.notify.connect(on_account_changed); update_buttons(); update_ordinals(); } private void on_account_removed(Geary.AccountInformation account) { - remove_account_from_list(account.email); + remove_account_from_list(account.id); account.notify.disconnect(on_account_changed); update_buttons(); update_ordinals(); @@ -145,44 +146,49 @@ // Adds an account to the list. // Note: does NOT check if the account is already listed. - private void add_account_to_list(string nickname, string address) { + private void add_account_to_list(Geary.AccountInformation account) { Gtk.TreeIter iter; list_model.append(out iter); - list_model.set(iter, Column.ACCOUNT_NICKNAME, nickname); - list_model.set(iter, Column.ACCOUNT_ADDRESS, address); + list_model.set(iter, Column.ACCOUNT_ID, account.id); + list_model.set(iter, Column.ACCOUNT_NAME, account.display_name); + list_model.set(iter, Column.ACCOUNT_ADDRESS, account.primary_mailbox.address); } // Removes an account on the list. - private void remove_account_from_list(string address) { - Gtk.TreeIter? iter = list_contains(address); + private void remove_account_from_list(string id) { + Gtk.TreeIter? iter = list_contains(id); if (iter == null) return; +#if VALA_0_36 + list_model.remove(ref iter); +#else list_model.remove(iter); +#endif } private void on_account_changed(Object object, ParamSpec p) { Geary.AccountInformation account = (Geary.AccountInformation) object; - Gtk.TreeIter? iter = list_contains(account.email); + Gtk.TreeIter? iter = list_contains(account.id); if (iter == null) return; - - // Since nickname is the only column that can change, just set it. - list_model.set_value(iter, Column.ACCOUNT_NICKNAME, account.nickname); - } - - // Returns TreeIter of the address in the account list, else null. - private Gtk.TreeIter? list_contains(string address) { + + list_model.set_value(iter, Column.ACCOUNT_NAME, account.display_name); + list_model.set_value(iter, Column.ACCOUNT_ADDRESS, account.primary_mailbox.address); + } + + // Returns TreeIter of the id in the account list, else null. + private Gtk.TreeIter? list_contains(string id) { Gtk.TreeIter iter; if (!list_model.get_iter_first(out iter)) return null; do { - string list_address = ""; - list_model.get(iter, Column.ACCOUNT_ADDRESS, out list_address); - if (list_address == address) + string list_id = ""; + list_model.get(iter, Column.ACCOUNT_ID, out list_id); + if (list_id == id) return iter; } while (list_model.iter_next(ref iter)); @@ -206,11 +212,11 @@ int i = 0; do { - string? list_address = null; - list_model.get(iter, Column.ACCOUNT_ADDRESS, out list_address); - if (list_address != null) { - Geary.AccountInformation account = all_accounts.get(list_address); - + string? list_id = null; + list_model.get(iter, Column.ACCOUNT_ID, out list_id); + if (list_id != null) { + Geary.AccountInformation account = all_accounts.get(list_id); + // To prevent unnecessary work, only set ordinal if there's a change. if (i != account.ordinal) { account.ordinal = i; diff -Nru geary-0.11.4/src/client/accounts/account-dialog-add-edit-pane.vala geary-0.12.0/src/client/accounts/account-dialog-add-edit-pane.vala --- geary-0.11.4/src/client/accounts/account-dialog-add-edit-pane.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/accounts/account-dialog-add-edit-pane.vala 2017-10-02 11:25:21.000000000 +0000 @@ -17,7 +17,7 @@ public signal void size_changed(); - public signal void edit_alternate_emails(string email_address); + public signal void edit_alternate_emails(string id); public AccountDialogAddEditPane(Gtk.Stack stack) { base(stack); @@ -38,7 +38,7 @@ cancel_button.clicked.connect(() => { cancel(); }); add_edit_page.size_changed.connect(() => { size_changed(); }); - add_edit_page.edit_alternate_emails.connect(() => { edit_alternate_emails(add_edit_page.email_address); }); + add_edit_page.edit_alternate_emails.connect(() => { edit_alternate_emails(add_edit_page.id); }); pack_start(add_edit_page); pack_start(button_box, false, false); diff -Nru geary-0.11.4/src/client/accounts/account-dialog-edit-alternate-emails-pane.vala geary-0.12.0/src/client/accounts/account-dialog-edit-alternate-emails-pane.vala --- geary-0.11.4/src/client/accounts/account-dialog-edit-alternate-emails-pane.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/accounts/account-dialog-edit-alternate-emails-pane.vala 2017-10-02 11:25:21.000000000 +0000 @@ -17,9 +17,7 @@ GtkUtil.set_label_xalign(this, 0.0f); } } - - public string? email { get; private set; default = null; } - + public bool changed { get; private set; default = false; } private Gtk.Label title_label; @@ -114,18 +112,16 @@ public void set_account(Geary.AccountInformation account_info) { this.account_info = account_info; - - email = account_info.email; - primary_mailbox = account_info.get_primary_mailbox_address(); - mailboxes.clear(); - changed = false; - + this.primary_mailbox = account_info.primary_mailbox; + this.mailboxes.clear(); + this.changed = false; + // reset/clear widgets - title_label.label = _("Additional addresses for %s").printf(account_info.email); - email_entry.text = ""; - + this.title_label.label = _("Additional addresses for %s").printf(this.account_info.display_name); + this.email_entry.text = ""; + // clear listbox - foreach (Gtk.Widget widget in address_listbox.get_children()) + foreach (Gtk.Widget widget in this.address_listbox.get_children()) address_listbox.remove(widget); // Add all email addresses; add_email_address() silently drops the primary address diff -Nru geary-0.11.4/src/client/accounts/account-dialog-remove-confirm-pane.vala geary-0.12.0/src/client/accounts/account-dialog-remove-confirm-pane.vala --- geary-0.11.4/src/client/accounts/account-dialog-remove-confirm-pane.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/accounts/account-dialog-remove-confirm-pane.vala 2017-10-02 11:25:21.000000000 +0000 @@ -27,11 +27,11 @@ actions.get_action("cancel_action").activate.connect(() => { cancel(); }); actions.get_action("remove_action").activate.connect(() => { ok(account); }); } - + public void set_account(Geary.AccountInformation a) { - account = a; - account_nickname_label.label = account.nickname; - email_address_label.label = account.email; + this.account = a; + account_nickname_label.label = a.nickname; + email_address_label.label = a.primary_mailbox.address; } } diff -Nru geary-0.11.4/src/client/accounts/account-dialog.vala geary-0.12.0/src/client/accounts/account-dialog.vala --- geary-0.11.4/src/client/accounts/account-dialog.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/accounts/account-dialog.vala 2017-10-02 11:25:21.000000000 +0000 @@ -24,8 +24,8 @@ set_modal(true); set_titlebar (headerbar); get_content_area().margin_top = MARGIN; - get_content_area().margin_left = MARGIN; - get_content_area().margin_right = MARGIN; + get_content_area().margin_start = MARGIN; + get_content_area().margin_end = MARGIN; get_content_area().margin_bottom = MARGIN; // Add pages to stack. @@ -66,7 +66,7 @@ // Grab the account info. While the addresses passed into this method should *always* be // available in Geary, we double-check to be defensive. - private Geary.AccountInformation? get_account_info_for_email(string email_address) { + private Geary.AccountInformation? get_account_info(string id) { Gee.Map accounts; try { accounts = Geary.Engine.instance.get_accounts(); @@ -76,21 +76,21 @@ return null; } - if (!accounts.has_key(email_address)) { - debug("Unable to get account info for: %s", email_address); + if (!accounts.has_key(id)) { + debug("No such account: %s", id); return null; } - return accounts.get(email_address); + return accounts.get(id); } - private void on_edit_account(string email_address) { - on_edit_account_async.begin(email_address); + private void on_edit_account(string id) { + on_edit_account_async.begin(id); } - private async void on_edit_account_async(string email_address) { - Geary.AccountInformation? account = get_account_info_for_email(email_address); + private async void on_edit_account_async(string id) { + Geary.AccountInformation? account = get_account_info(id); if (account == null) return; @@ -105,8 +105,8 @@ add_edit_pane.present(); } - private void on_delete_account(string email_address) { - Geary.AccountInformation? account = get_account_info_for_email(email_address); + private void on_delete_account(string id) { + Geary.AccountInformation? account = get_account_info(id); if (account == null) return; @@ -136,8 +136,8 @@ } } - private void on_edit_alternate_emails(string email_address) { - Geary.AccountInformation? account_info = get_account_info_for_email(email_address); + private void on_edit_alternate_emails(string id) { + Geary.AccountInformation? account_info = get_account_info(id); if (account_info == null) return; diff -Nru geary-0.11.4/src/client/accounts/add-edit-page.vala geary-0.12.0/src/client/accounts/add-edit-page.vala --- geary-0.11.4/src/client/accounts/add-edit-page.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/accounts/add-edit-page.vala 2017-10-02 11:25:21.000000000 +0000 @@ -14,7 +14,9 @@ ADD, EDIT } - + + public string? id { get; private set; default = null; } + public string real_name { get { return entry_real_name.text; } set { entry_real_name.text = value; } @@ -176,8 +178,8 @@ private Gtk.CheckButton check_use_email_signature; private Gtk.Stack signature_stack; private Gtk.TextView textview_email_signature; - private StylishWebView preview_webview; - + private ClientWebView preview_webview; + private Gtk.Alignment other_info; // IMAP info widgets @@ -269,13 +271,14 @@ edit_window.set_shadow_type(Gtk.ShadowType.IN); textview_email_signature = new Gtk.TextView(); edit_window.add(textview_email_signature); - + + preview_webview = new ClientWebView(GearyApplication.instance.config); + Gtk.ScrolledWindow preview_window = new Gtk.ScrolledWindow(null, null); preview_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC); preview_window.set_shadow_type(Gtk.ShadowType.IN); - preview_webview = new StylishWebView(); preview_window.add(preview_webview); - + signature_stack = new Gtk.Stack(); signature_stack.add_titled(edit_window, "edit_window", _("Edit")); signature_stack.child_set_property(edit_window, "icon-name", "text-editor-symbolic"); @@ -357,9 +360,11 @@ // Sets the account information to display on this page. public void set_account_information(Geary.AccountInformation info, Geary.Engine.ValidationResult result) { - set_all_info(info.real_name, + set_all_info( + info.id, + info.primary_mailbox.name, info.nickname, - info.email, + info.primary_mailbox.address, info.imap_credentials.user, info.imap_credentials.pass, info.imap_remember_password && info.smtp_remember_password, @@ -387,6 +392,7 @@ // Can use this instead of set_account_information(), both do the same thing. public void set_all_info( + string? initial_id = null, string? initial_real_name = null, string? initial_nickname = null, string? initial_email = null, @@ -413,60 +419,61 @@ bool initial_use_email_signature = false, string? initial_email_signature = null, Geary.Engine.ValidationResult result = Geary.Engine.ValidationResult.OK) { - + // Set defaults - real_name = initial_real_name ?? ""; - nickname = initial_nickname ?? ""; - email_address = initial_email ?? ""; - password = initial_imap_password != null ? initial_imap_password : ""; - remember_password = initial_remember_password; - save_sent_mail = initial_save_sent_mail; - check_save_sent_mail.sensitive = allow_save_sent_mail; - set_service_provider((Geary.ServiceProvider) initial_service_provider); - combo_imap_encryption.active = Encryption.NONE; // Must be default; set to real value below. - combo_smtp_encryption.active = Encryption.NONE; - use_email_signature = initial_use_email_signature; - email_signature = initial_email_signature; - signature_stack.set_visible_child_name("edit_window"); - + this.id = initial_id; + this.real_name = initial_real_name ?? ""; + this.nickname = initial_nickname ?? ""; + this.email_address = initial_email ?? ""; + this.password = initial_imap_password != null ? initial_imap_password : ""; + this.remember_password = initial_remember_password; + this.save_sent_mail = initial_save_sent_mail; + this.check_save_sent_mail.sensitive = allow_save_sent_mail; + this.set_service_provider((Geary.ServiceProvider) initial_service_provider); + this.combo_imap_encryption.active = Encryption.NONE; // Must be default; set to real value below. + this.combo_smtp_encryption.active = Encryption.NONE; + this.use_email_signature = initial_use_email_signature; + this.email_signature = initial_email_signature; + this.signature_stack.set_visible_child_name("edit_window"); + // Set defaults for IMAP info - imap_host = initial_default_imap_host ?? ""; - imap_port = initial_default_imap_port; - imap_username = initial_imap_username ?? ""; - imap_password = initial_imap_password ?? ""; - imap_ssl = initial_default_imap_ssl; - imap_starttls = initial_default_imap_starttls; - + this.imap_host = initial_default_imap_host ?? ""; + this.imap_port = initial_default_imap_port; + this.imap_username = initial_imap_username ?? ""; + this.imap_password = initial_imap_password ?? ""; + this.imap_ssl = initial_default_imap_ssl; + this.imap_starttls = initial_default_imap_starttls; + // Set defaults for SMTP info - smtp_host = initial_default_smtp_host ?? ""; - smtp_port = initial_default_smtp_port; - smtp_username = initial_smtp_username ?? ""; - smtp_password = initial_smtp_password ?? ""; - smtp_ssl = initial_default_smtp_ssl; - smtp_starttls = initial_default_smtp_starttls; - smtp_use_imap_credentials = initial_default_smtp_use_imap_credentials; - smtp_noauth = initial_default_smtp_noauth; - - save_drafts = initial_save_drafts; - + this.smtp_host = initial_default_smtp_host ?? ""; + this.smtp_port = initial_default_smtp_port; + this.smtp_username = initial_smtp_username ?? ""; + this.smtp_password = initial_smtp_password ?? ""; + this.smtp_ssl = initial_default_smtp_ssl; + this.smtp_starttls = initial_default_smtp_starttls; + this.smtp_use_imap_credentials = initial_default_smtp_use_imap_credentials; + this.smtp_noauth = initial_default_smtp_noauth; + + this.save_drafts = initial_save_drafts; + set_validation_result(result); - + set_storage_length(prefetch_period_days); } - + public void set_validation_result(Geary.Engine.ValidationResult result) { last_validation_result = result; } - + // Resets all fields to their defaults. public void reset_all() { // Take advantage of set_all_info()'s defaults. - set_all_info(get_default_real_name()); - + set_all_info(null, get_default_real_name()); + edited_imap_port = false; edited_smtp_port = false; } - + /** Puts this page into one of three different modes: * WELCOME: The first screen when Geary is started. * ADD: Add account screen is like the Welcome screen, but without the welcome message. @@ -590,7 +597,7 @@ private void on_signature_stack_changed() { if (signature_stack.visible_child_name == "preview_window") - preview_webview.load_html_string(smart_escape(email_signature, true), ""); + preview_webview.load_html(Geary.HTML.smart_escape(email_signature, true), null); } private uint16 get_default_smtp_port() { @@ -608,10 +615,14 @@ } public bool is_complete() { + if (Geary.String.is_empty_or_whitespace(email_address) || + !Geary.RFC822.MailboxAddress.is_valid_address(email_address)) { + return false; + } + switch (get_service_provider()) { case Geary.ServiceProvider.OTHER: if (Geary.String.is_empty_or_whitespace(nickname) || - Geary.String.is_empty_or_whitespace(email_address) || Geary.String.is_empty_or_whitespace(imap_host) || Geary.String.is_empty_or_whitespace(imap_port.to_string()) || Geary.String.is_empty_or_whitespace(imap_username) || @@ -628,7 +639,6 @@ // GMAIL, YAHOO, and OUTLOOK default: if (Geary.String.is_empty_or_whitespace(nickname) || - Geary.String.is_empty_or_whitespace(email_address) || Geary.String.is_empty_or_whitespace(password)) return false; break; @@ -636,62 +646,80 @@ return true; } - + public Geary.AccountInformation? get_account_information() { - Geary.AccountInformation account_information; fix_credentials_for_supported_provider(); - - Geary.Credentials imap_credentials = new Geary.Credentials(imap_username.strip(), imap_password.strip()); + + Geary.Credentials imap_credentials = new Geary.Credentials( + imap_username.strip(), imap_password.strip()); Geary.Credentials smtp_credentials = new Geary.Credentials( (smtp_use_imap_credentials ? imap_username.strip() : smtp_username.strip()), (smtp_use_imap_credentials ? imap_password.strip() : smtp_password.strip())); - - try { - Geary.AccountInformation original_account = Geary.Engine.instance.get_accounts().get(email_address); - if (original_account == null) { - // New account. - account_information = Geary.Engine.instance.create_orphan_account(email_address); - } else { - // Existing account: create a copy so we don't mess up the original. - account_information = new Geary.AccountInformation.temp_copy(original_account); + + Geary.AccountInformation? info = null; + if (this.id != null) { + // The id will be null in the case of adding a new + // account, but it won't be null and yet the account won't + // be accessible via Engine.get_account() in the case of + // an orphan account - i.e. when adding an account + // encountered validation errors. So we need to deal with + // both cases. + try { + info = Geary.Engine.instance.get_account(this.id); + } catch (Error err) { + // id was for an orphan account } - } catch (Error err) { - debug("Unable to open account information for %s: %s", email_address, err.message); - - return null; } - - account_information.real_name = real_name.strip(); - account_information.nickname = nickname.strip(); - account_information.imap_credentials = imap_credentials; - account_information.smtp_credentials = smtp_credentials; - account_information.imap_remember_password = remember_password; - account_information.smtp_remember_password = remember_password; - account_information.service_provider = get_service_provider(); - account_information.save_sent_mail = save_sent_mail; - account_information.default_imap_server_host = imap_host; - account_information.default_imap_server_port = imap_port; - account_information.default_imap_server_ssl = imap_ssl; - account_information.default_imap_server_starttls = imap_starttls; - account_information.default_smtp_server_host = smtp_host.strip(); - account_information.default_smtp_server_port = smtp_port; - account_information.default_smtp_server_ssl = smtp_ssl; - account_information.default_smtp_server_starttls = smtp_starttls; - account_information.default_smtp_use_imap_credentials = smtp_use_imap_credentials; - account_information.default_smtp_server_noauth = smtp_noauth; - account_information.prefetch_period_days = get_storage_length(); - account_information.save_drafts = save_drafts; - account_information.use_email_signature = use_email_signature; - account_information.email_signature = email_signature; - - if (smtp_noauth) - account_information.smtp_credentials = null; - - on_changed(); - - return account_information; + + if (info == null) { + // New account + try { + info = Geary.Engine.instance.create_orphan_account(); + } catch (Error err) { + debug("Unable to create account %s for %s: %s", + this.id, this.email_address, err.message); + } + } else { + // Existing account: create a copy so we don't mess up the + // original. + info = new Geary.AccountInformation.temp_copy(info); + } + + if (info != null) { + info.primary_mailbox = new Geary.RFC822.MailboxAddress( + this.real_name.strip(), this.email_address.strip() + ); + info.nickname = this.nickname.strip(); + info.imap_credentials = imap_credentials; + info.smtp_credentials = smtp_credentials; + info.imap_remember_password = this.remember_password; + info.smtp_remember_password = this.remember_password; + info.service_provider = this.get_service_provider(); + info.save_sent_mail = this.save_sent_mail; + info.default_imap_server_host = this.imap_host; + info.default_imap_server_port = this.imap_port; + info.default_imap_server_ssl = this.imap_ssl; + info.default_imap_server_starttls = this.imap_starttls; + info.default_smtp_server_host = this.smtp_host.strip(); + info.default_smtp_server_port = this.smtp_port; + info.default_smtp_server_ssl = this.smtp_ssl; + info.default_smtp_server_starttls = this.smtp_starttls; + info.default_smtp_use_imap_credentials = this.smtp_use_imap_credentials; + info.default_smtp_server_noauth = this.smtp_noauth; + info.prefetch_period_days = get_storage_length(); + info.save_drafts = this.save_drafts; + info.use_email_signature = this.use_email_signature; + info.email_signature = this.email_signature; + + if (smtp_noauth) + info.smtp_credentials = null; + + on_changed(); + } + + return info; } - + // Assembles credentials for supported providers. private void fix_credentials_for_supported_provider() { if (get_service_provider() != Geary.ServiceProvider.OTHER) { @@ -763,31 +791,31 @@ string error_string = _("Unable to validate:\n"); if (last_validation_result.is_all_set(Geary.Engine.ValidationResult.INVALID_NICKNAME)) - error_string += _(" • Invalid account nickname.\n"); + error_string += _(" • Invalid account nickname.\n"); if (last_validation_result.is_all_set(Geary.Engine.ValidationResult.EMAIL_EXISTS)) - error_string += _(" • Email address already added to Geary.\n"); + error_string += _(" • Email address already added to Geary.\n"); if (get_service_provider() == Geary.ServiceProvider.OTHER) { if (last_validation_result.is_all_set(Geary.Engine.ValidationResult.IMAP_CONNECTION_FAILED)) - error_string += _(" • IMAP connection error.\n"); + error_string += _(" • IMAP connection error.\n"); if (last_validation_result.is_all_set(Geary.Engine.ValidationResult.IMAP_CREDENTIALS_INVALID)) - error_string += _(" • IMAP username or password incorrect.\n"); + error_string += _(" • IMAP username or password incorrect.\n"); if (last_validation_result.is_all_set(Geary.Engine.ValidationResult.SMTP_CONNECTION_FAILED)) - error_string += _(" • SMTP connection error.\n"); + error_string += _(" • SMTP connection error.\n"); if (last_validation_result.is_all_set(Geary.Engine.ValidationResult.SMTP_CREDENTIALS_INVALID)) - error_string += _(" • SMTP username or password incorrect.\n"); + error_string += _(" • SMTP username or password incorrect.\n"); } else { if (last_validation_result.is_all_set(Geary.Engine.ValidationResult.IMAP_CONNECTION_FAILED) || last_validation_result.is_all_set(Geary.Engine.ValidationResult.SMTP_CONNECTION_FAILED)) - error_string += _(" • Connection error.\n"); + error_string += _(" • Connection error.\n"); if (last_validation_result.is_all_set(Geary.Engine.ValidationResult.IMAP_CREDENTIALS_INVALID) || last_validation_result.is_all_set(Geary.Engine.ValidationResult.SMTP_CREDENTIALS_INVALID)) - error_string += _(" • Username or password incorrect.\n"); + error_string += _(" • Username or password incorrect.\n"); } label_error.label = "" + error_string + ""; diff -Nru geary-0.11.4/src/client/application/geary-action-adapter.vala geary-0.12.0/src/client/application/geary-action-adapter.vala --- geary-0.11.4/src/client/application/geary-action-adapter.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/application/geary-action-adapter.vala 1970-01-01 00:00:00.000000000 +0000 @@ -1,67 +0,0 @@ -/* Copyright 2016 Software Freedom Conservancy Inc. - * - * This software is licensed under the GNU Lesser General Public License - * (version 2.1 or later). See the COPYING file in this distribution. - */ - -/** - * A bridge between Gtk.Action and GLib.Action. Doesn't handle stateful - * Actions. Also, assumes most properties of the Gtk.Action won't change - * during its life. - * - * NOTE: this *should* be subclassing SimpleAction, but trying that causes - * GCC to throw errors at compile time. See bug #720159. Also *should* be at - * least implementing Action, but trying that causes a whole different set of - * compile-time errors. :'( - */ -public class Geary.ActionAdapter : BaseObject { - private delegate void RecursionGuardFunc(); - - public Action action { get { return _action; } } - public Gtk.Action gtk_action { get; private set; } - - private SimpleAction _action; - private bool recursing = false; - - public ActionAdapter(Gtk.Action gtk_action) { - _action = new SimpleAction(gtk_action.name, null); - this.gtk_action = gtk_action; - - _action.activate.connect(on_activated); - _action.notify["enabled"].connect(on_enabled_changed); - - gtk_action.activate.connect(on_gtk_activated); - gtk_action.notify["sensitive"].connect(on_gtk_sensitive_changed); - } - - private void guard_recursion(RecursionGuardFunc f) { - if (recursing) - return; - - recursing = true; - f(); - recursing = false; - } - - private void on_activated() { - guard_recursion(() => gtk_action.activate()); - } - - private void on_enabled_changed() { - guard_recursion(() => { - if (gtk_action.sensitive != _action.enabled) - gtk_action.sensitive = _action.enabled; - }); - } - - private void on_gtk_activated() { - guard_recursion(() => _action.activate(null)); - } - - private void on_gtk_sensitive_changed() { - guard_recursion(() => { - if (_action.enabled != gtk_action.sensitive) - _action.set_enabled(gtk_action.sensitive); - }); - } -} diff -Nru geary-0.11.4/src/client/application/geary-application.vala geary-0.12.0/src/client/application/geary-application.vala --- geary-0.11.4/src/client/application/geary-application.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/application/geary-application.vala 2017-10-02 11:25:21.000000000 +0000 @@ -5,27 +5,32 @@ */ // Defined by CMake build script. -extern const string _VERSION; extern const string _INSTALL_PREFIX; extern const string _GSETTINGS_DIR; extern const string _SOURCE_ROOT_DIR; +extern const string _BUILD_ROOT_DIR; extern const string GETTEXT_PACKAGE; +/** + * The interface between Geary and the desktop environment. + */ public class GearyApplication : Gtk.Application { public const string NAME = "Geary"; public const string PRGNAME = "geary"; - public const string APP_ID = "org.yorba.geary"; - public const string DESCRIPTION = _("Mail Client"); - public const string COPYRIGHT = _("Copyright 2016 Software Freedom Conservancy Inc."); + public const string APP_ID = "org.gnome.Geary"; + public const string DESCRIPTION = _("Send and receive email"); + public const string COPYRIGHT_1 = _("Copyright 2016 Software Freedom Conservancy Inc."); + public const string COPYRIGHT_2 = _("Copyright 2016-2017 Geary Development Team."); public const string WEBSITE = "https://wiki.gnome.org/Apps/Geary"; public const string WEBSITE_LABEL = _("Visit the Geary web site"); public const string BUGREPORT = "https://wiki.gnome.org/Apps/Geary/ReportingABug"; - - public const string VERSION = _VERSION; + + public const string VERSION = Geary.Version.GEARY_VERSION; public const string INSTALL_PREFIX = _INSTALL_PREFIX; public const string GSETTINGS_DIR = _GSETTINGS_DIR; public const string SOURCE_ROOT_DIR = _SOURCE_ROOT_DIR; - + public const string BUILD_ROOT_DIR = _BUILD_ROOT_DIR; + public const string[] AUTHORS = { "Jim Nelson ", "Eric Gregory ", @@ -33,18 +38,33 @@ "Matthew Pirocchi ", "Charles Lindsay ", "Robert Schroll ", + "Michael Gratton ", null }; - - private const string ACTION_ENTRY_COMPOSE = "compose"; - - public const ActionEntry[] action_entries = { - {ACTION_ENTRY_COMPOSE, activate_compose, "s"}, + + private const string ACTION_ABOUT = "about"; + private const string ACTION_ACCOUNTS = "accounts"; + private const string ACTION_COMPOSE = "compose"; + private const string ACTION_MAILTO = "mailto"; + private const string ACTION_HELP = "help"; + private const string ACTION_PREFERENCES = "preferences"; + private const string ACTION_QUIT = "quit"; + + private const ActionEntry[] action_entries = { + {ACTION_ABOUT, on_activate_about}, + {ACTION_ACCOUNTS, on_activate_accounts}, + {ACTION_COMPOSE, on_activate_compose}, + {ACTION_MAILTO, on_activate_mailto, "s"}, + {ACTION_HELP, on_activate_help}, + {ACTION_PREFERENCES, on_activate_preferences}, + {ACTION_QUIT, on_activate_quit}, }; - + private const int64 USEC_PER_SEC = 1000000; private const int64 FORCE_SHUTDOWN_USEC = 5 * USEC_PER_SEC; - + + + [Deprecated] public static GearyApplication instance { get { return _instance; } private set { @@ -53,53 +73,79 @@ _instance = value; } } - + private static GearyApplication _instance = null; + + /** - * Signal that is activated when 'exit' is called, but before the application actually exits. + * The global UI controller for this app instance. + */ + public GearyController controller { + get; + private set; + default = new GearyController(this); + } + + /** + * The global email subsystem controller for this app instance. + */ + public Geary.Engine engine { + get { + // XXX We should be managing the engine's lifecycle here, + // but until that happens provide this property to + // encourage access via the application anyway + return Geary.Engine.instance; + } + } + + /** + * The user's desktop-wide settings for the application. + */ + public Configuration config { get; private set; } + + /** + * Determines if Geary configured to run as as a background service. * - * To cancel an exit, a callback should return GearyApplication.cancel_exit(). To procede with - * an exit, a callback should return true. + * If this returns `true`, then the primary application instance + * will continue to run in the background after the last window is + * closed, instead of existing as usual. */ - public virtual signal bool exiting(bool panicked) { - return true; + public bool is_background_service { + get { return Args.hidden_startup || this.config.startup_notifications; } } - - public GearyController controller { get; private set; default = new GearyController(); } - + public Gtk.ActionGroup actions { get; private set; default = new Gtk.ActionGroup("GearyActionGroup"); } - public Gee.Collection action_adapters { - get; private set; default = new Gee.ArrayList(); - } - + public Gtk.UIManager ui_manager { get; private set; default = new Gtk.UIManager(); } - - public Configuration config { get; private set; } - - /** - * Indicates application is running under Ubuntu's Unity shell. - */ - public bool is_running_unity { get; private set; } - - private static GearyApplication _instance = null; - + private string bin; private File exec_dir; private bool exiting_fired = false; private int exitcode = 0; private bool is_destroyed = false; - + + + /** + * Signal that is activated when 'exit' is called, but before the application actually exits. + * + * To cancel an exit, a callback should return GearyApplication.cancel_exit(). To procede with + * an exit, a callback should return true. + */ + public virtual signal bool exiting(bool panicked) { + return true; + } + + public GearyApplication() { - Object(application_id: APP_ID); - + Object( + application_id: APP_ID + ); _instance = this; - - is_running_unity = Geary.String.stri_equal(Environment.get_variable("XDG_CURRENT_DESKTOP"), "Unity"); } - + // Application.run() calls this as an entry point. public override bool local_command_line(ref unowned string[] args, out int exit_status) { bin = args[0]; @@ -115,13 +161,26 @@ exit_status = 1; return true; } - - activate(); - foreach (unowned string arg in args) { - if (arg != null && arg.has_prefix(Geary.ComposedEmail.MAILTO_SCHEME)) - activate_action(ACTION_ENTRY_COMPOSE, new Variant.string(arg)); + + if (!Args.quit) { + // Normal application startup or activation + activate(); + foreach (unowned string arg in args) { + if (arg != null) { + if (arg == Geary.ComposedEmail.MAILTO_SCHEME) + activate_action(ACTION_COMPOSE, null); + else if (arg.has_prefix(Geary.ComposedEmail.MAILTO_SCHEME)) + activate_action(ACTION_MAILTO, new Variant.string(arg)); + } + } + } else { + // User requested quit, only try to if we aren't running + // already. + if (this.is_remote) { + activate_action(ACTION_QUIT, null); + } } - + exit_status = 0; return true; } @@ -135,10 +194,9 @@ Geary.Logging.init(); Date.init(); - WebKit.set_cache_model(WebKit.CacheModel.DOCUMENT_BROWSER); - + base.startup(); - + add_action_entries(action_entries, this); } @@ -149,13 +207,6 @@ create_async.begin(); } - public void activate_compose(SimpleAction action, Variant? param) { - if (param == null) - return; - - compose(param.get_string()); - } - public bool present() { if (controller == null) return false; @@ -208,15 +259,7 @@ is_destroyed = true; } - - public bool compose(string mailto) { - if (controller == null) - return false; - - controller.compose_mailto(mailto); - return true; - } - + // NOTE: This assert()'s if the Gtk.Action is not present in the default action group public Gtk.Action get_action(string name) { Gtk.Action? action = actions.get_action(name); @@ -228,7 +271,11 @@ public File get_user_data_directory() { return File.new_for_path(Environment.get_user_data_dir()).get_child("geary"); } - + + public File get_user_cache_directory() { + return File.new_for_path(Environment.get_user_cache_dir()).get_child("geary"); + } + public File get_user_config_directory() { return File.new_for_path(Environment.get_user_config_dir()).get_child("geary"); } @@ -245,17 +292,32 @@ else return File.new_for_path(SOURCE_ROOT_DIR); } - - // Returns the directory the application is currently executing from. + + /** Returns the directory the application is currently executing from. */ public File get_exec_dir() { - return exec_dir; + return this.exec_dir; } - + + /** + * Returns the directory containing the application's WebExtension libs. + * + * If the application is installed, this will be + * `$INSTALL_PREFIX/lib/geary/web-extension`, else it will be + */ + public File get_web_extensions_dir() { + File? dir = get_install_dir(); + if (dir != null) + dir = dir.get_child("lib").get_child("geary").get_child("web-extensions"); + else + dir = File.new_for_path(BUILD_ROOT_DIR).get_child("src"); + return dir; + } + public File? get_desktop_file() { File? install_dir = get_install_dir(); File desktop_file = (install_dir != null) - ? install_dir.get_child("share").get_child("applications").get_child("geary.desktop") - : File.new_for_path(SOURCE_ROOT_DIR).get_child("build").get_child("desktop").get_child("geary.desktop"); + ? install_dir.get_child("share").get_child("applications").get_child("org.gnome.Geary.desktop") + : File.new_for_path(SOURCE_ROOT_DIR).get_child("build").get_child("desktop").get_child("org.gnome.Geary.desktop"); return desktop_file.query_exists() ? desktop_file : null; } @@ -277,50 +339,60 @@ return exec_dir.has_prefix(prefix_dir) ? prefix_dir : null; } - - // Creates a GTK builder given the name of a GResource. + + /** + * Creates a GTK builder given the name of a GResource. + * + * @deprecated Use {@link GioUtil.create_builder} instead. + */ + [Deprecated] public Gtk.Builder create_builder(string name) { - Gtk.Builder builder = new Gtk.Builder(); - try { - builder.add_from_resource("/org/gnome/Geary/" + name); - } catch(GLib.Error error) { - warning("Unable to create Gtk.Builder: %s".printf(error.message)); - } - - return builder; + return GioUtil.create_builder(name); } - public string? read_theme_file(string filename) { - try { - File file = get_resource_directory().get_child("theming").get_child(filename); - DataInputStream data_input_stream = new DataInputStream(file.read()); - - size_t length; - return data_input_stream.read_upto("\0", 1, out length); - } catch(Error error) { - debug("Unable to load text from theme file: %s", error.message); - return null; - } - } - - public File get_ui_file(string filename) { - return get_resource_directory().get_child("ui").get_child(filename); + /** + * Loads a GResource as a string. + * + * @deprecated Use {@link GioUtil.read_resource} instead. + */ + [Deprecated] + public string read_resource(string name) throws Error { + return GioUtil.read_resource(name); } - - // Loads a UI GResource into the specified UI manager. - public void load_ui_resource_for_manager(Gtk.UIManager ui, string name) { + + /** + * Loads a UI GResource into the UI manager. + */ + [Deprecated] + public void load_ui_resource(string name) { try { - ui.add_ui_from_resource("/org/gnome/Geary/" + name); + this.ui_manager.add_ui_from_resource("/org/gnome/Geary/" + name); } catch(GLib.Error error) { - warning("Unable to create Gtk.UIManager: %s".printf(error.message)); + critical("Unable to load \"%s\" for Gtk.UIManager: %s".printf( + name, error.message + )); } } - - // Loads a UI GResource into the UI manager. - public void load_ui_resource(string name) { - load_ui_resource_for_manager(ui_manager, name); + + /** + * Displays a URI on the current active window, if any. + */ + public void show_uri(string uri) throws Error { + Gtk.Window? window = get_active_window(); +#if !GTK_3_22 + bool success = Gtk.show_uri( + window != null ? window.get_screen() : null, uri, Gdk.CURRENT_TIME + ); + if (!success) { + throw new IOError.FAILED("gtk_show_uri() returned false"); + } +#else + if (!Gtk.show_uri_on_window(window, uri, Gdk.CURRENT_TIME)) { + throw new IOError.FAILED("gtk_show_uri_on_window() returned false"); + } +#endif } - + // This call will fire "exiting" only if it's not already been fired. public void exit(int exitcode = 0) { if (exiting_fired) @@ -379,5 +451,89 @@ Posix.exit(1); } -} + private void on_activate_about() { + Gtk.show_about_dialog(get_active_window(), + "program-name", NAME, + "comments", DESCRIPTION, + "authors", AUTHORS, + "copyright", string.join("\n", COPYRIGHT_1, COPYRIGHT_2), + "license-type", Gtk.License.LGPL_2_1, + "logo-icon-name", "geary", + "version", VERSION, + "website", WEBSITE, + "website-label", WEBSITE_LABEL, + "title", _("About %s").printf(NAME), + // Translators: add your name and email address to receive + // credit in the About dialog For example: Yamada Taro + // + "translator-credits", _("translator-credits") + ); + } + + private void on_activate_accounts() { + AccountDialog dialog = new AccountDialog(get_active_window()); + dialog.show_all(); + dialog.run(); + dialog.destroy(); + } + + private void on_activate_compose() { + if (this.controller != null) { + this.controller.compose(); + } + } + + private void on_activate_mailto(SimpleAction action, Variant? param) { + if (this.controller != null && param != null) { + this.controller.compose_mailto(param.get_string()); + } + } + + private void on_activate_preferences() { + PreferencesDialog dialog = new PreferencesDialog(get_active_window(), this); + dialog.run(); + } + + private void on_activate_quit() { + exit(); + } + + private void on_activate_help() { + try { + if (is_installed()) { + show_uri("ghelp:geary"); + } else { + Pid pid; + File exec_dir = get_exec_dir(); + string[] argv = new string[3]; + argv[0] = "gnome-help"; + argv[1] = GearyApplication.SOURCE_ROOT_DIR + "/help/C/"; + argv[2] = null; + if (!Process.spawn_async( + exec_dir.get_path(), + argv, + null, + SpawnFlags.SEARCH_PATH | SpawnFlags.STDERR_TO_DEV_NULL, + null, + out pid)) { + debug("Failed to launch help locally."); + } + } + } catch (Error error) { + debug("Error showing help: %s", error.message); + Gtk.Dialog dialog = new Gtk.Dialog.with_buttons( + "Error", + get_active_window(), + Gtk.DialogFlags.DESTROY_WITH_PARENT, + Stock._CLOSE, Gtk.ResponseType.CLOSE, null); + dialog.response.connect(() => { dialog.destroy(); }); + dialog.get_content_area().add( + new Gtk.Label("Error showing help: %s".printf(error.message)) + ); + dialog.show_all(); + dialog.run(); + } + } + +} diff -Nru geary-0.11.4/src/client/application/geary-args.vala geary-0.12.0/src/client/application/geary-args.vala --- geary-0.11.4/src/client/application/geary-args.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/application/geary-args.vala 2017-10-02 11:25:21.000000000 +0000 @@ -24,6 +24,7 @@ { "log-folder-normalization", 0, 0, OptionArg.NONE, ref log_folder_normalization, N_("Log folder normalization"), null }, { "inspector", 'i', 0, OptionArg.NONE, ref inspector, N_("Allow inspection of WebView"), null }, { "revoke-certs", 0, 0, OptionArg.NONE, ref revoke_certs, N_("Revoke all server certificates with TLS warnings"), null }, + { "quit", 'q', 0, OptionArg.NONE, ref quit, N_("Perform a graceful quit"), null }, { "version", 'V', 0, OptionArg.NONE, ref version, N_("Display program version"), null }, { null } }; @@ -39,6 +40,7 @@ public bool log_sql = false; public bool log_folder_normalization = false; public bool inspector = false; +public bool quit = false; public bool revoke_certs = false; public bool version = false; @@ -46,10 +48,12 @@ var context = new OptionContext("[%s...]".printf(Geary.ComposedEmail.MAILTO_SCHEME)); context.set_help_enabled(true); context.add_main_entries(options, null); - context.set_description("%s\n\n%s\n\n%s\n\t%s\n".printf( + context.set_description("%s\n\n%s\n%s\n\n%s\n\t%s\n".printf( // This gives a command-line hint on how to open new composer windows with mailto: _("Use %s to open a new composer window").printf(Geary.ComposedEmail.MAILTO_SCHEME), - GearyApplication.COPYRIGHT, _("Please report comments, suggestions and bugs to:"), + GearyApplication.COPYRIGHT_1, + GearyApplication.COPYRIGHT_2, + _("Please report comments, suggestions and bugs to:"), GearyApplication.BUGREPORT)); try { @@ -67,7 +71,7 @@ string arg = args[ctr]; if (!arg.has_prefix(Geary.ComposedEmail.MAILTO_SCHEME)) { - stdout.printf(_("Unrecognized command line option \"%s\"\n").printf(arg)); + stdout.printf(_("Unrecognized command line option “%s”\n").printf(arg)); stdout.printf("\n%s", context.get_help(true, null)); return false; diff -Nru geary-0.11.4/src/client/application/geary-config.vala geary-0.12.0/src/client/application/geary-config.vala --- geary-0.11.4/src/client/application/geary-config.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/application/geary-config.vala 2017-10-02 11:25:21.000000000 +0000 @@ -4,8 +4,13 @@ * (version 2.1 or later). See the COPYING file in this distribution. */ -// Wrapper class for GSettings. +/** + * Provides convenience properties to current Geary GSettings values. + */ public class Configuration { + + public const string ATTACHMENTS_DIR_KEY = "attachments-directory"; + public const string PRINT_DIR_KEY = "print-directory"; public const string WINDOW_WIDTH_KEY = "window-width"; public const string WINDOW_HEIGHT_KEY = "window-height"; public const string WINDOW_MAXIMIZE_KEY = "window-maximize"; @@ -14,21 +19,61 @@ public const string FOLDER_LIST_PANE_POSITION_VERTICAL_KEY = "folder-list-pane-position-vertical"; public const string FOLDER_LIST_PANE_HORIZONTAL_KEY = "folder-list-pane-horizontal"; public const string MESSAGES_PANE_POSITION_KEY = "messages-pane-position"; - public const string COMPOSER_PANE_POSITION_KEY = "composer-pane-position"; public const string AUTOSELECT_KEY = "autoselect"; public const string DISPLAY_PREVIEW_KEY = "display-preview"; - public const string SPELL_CHECK_KEY = "spell-check"; public const string PLAY_SOUNDS_KEY = "play-sounds"; public const string SHOW_NOTIFICATIONS_KEY = "show-notifications"; public const string STARTUP_NOTIFICATIONS_KEY = "startup-notifications"; public const string ASK_OPEN_ATTACHMENT_KEY = "ask-open-attachment"; public const string COMPOSE_AS_HTML_KEY = "compose-as-html"; - + public const string SPELL_CHECK_VISIBLE_LANGUAGES = "spell-check-visible-languages"; + public const string SPELL_CHECK_LANGUAGES = "spell-check-languages"; + public const string SEARCH_STRATEGY_KEY = "search-strategy"; + public const string CONVERSATION_VIEWER_ZOOM_KEY = "conversation-viewer-zoom"; + + + public enum DesktopEnvironment { + UNKNOWN = 0, + UNITY; + } + + + // is_installed: set to true if installed, else false. + // schema_dir: MUST be set if not installed. Directory where GSettings schema is located. + public static void init(bool is_installed, string? schema_dir = null) { + if (!is_installed) { + assert(schema_dir != null); + // If not installed, set an environment variable pointing to where the GSettings schema + // is to be found. + GLib.Environment.set_variable("GSETTINGS_SCHEMA_DIR", schema_dir, true); + } + } + + public Settings settings { get; private set; } - - public Settings gnome_interface; - private Settings? indicator_datetime; - + public Settings gnome_interface { get; private set; } + + public DesktopEnvironment desktop_environment { + get { + switch (Environment.get_variable("XDG_CURRENT_DESKTOP")) { + case "Unity": + return DesktopEnvironment.UNITY; + default: + return DesktopEnvironment.UNKNOWN; + } + } + } + + public string? attachments_dir { + owned get { return settings.get_string(ATTACHMENTS_DIR_KEY); } + set { settings.set_string(ATTACHMENTS_DIR_KEY, value); } + } + + public string? print_dir { + owned get { return settings.get_string(PRINT_DIR_KEY); } + set { settings.set_string(PRINT_DIR_KEY, value); } + } + public int window_width { get { return settings.get_int(WINDOW_WIDTH_KEY); } } @@ -63,10 +108,6 @@ set { settings.set_int(MESSAGES_PANE_POSITION_KEY, value); } } - public int composer_pane_position { - get { return settings.get_int(COMPOSER_PANE_POSITION_KEY); } - } - public bool autoselect { get { return settings.get_boolean(AUTOSELECT_KEY); } } @@ -74,9 +115,23 @@ public bool display_preview { get { return settings.get_boolean(DISPLAY_PREVIEW_KEY); } } - - public bool spell_check { - get { return settings.get_boolean(SPELL_CHECK_KEY); } + + public string[] spell_check_languages { + owned get { + return settings.get_strv(SPELL_CHECK_LANGUAGES); + } + set { settings.set_strv(SPELL_CHECK_LANGUAGES, value); } + } + + public string[] spell_check_visible_languages { + owned get { + string[] langs = settings.get_strv(SPELL_CHECK_VISIBLE_LANGUAGES); + if (langs.length == 0) { + langs = International.get_user_preferred_languages(); + } + return langs; + } + set { settings.set_strv(SPELL_CHECK_VISIBLE_LANGUAGES, value); } } public bool play_sounds { @@ -93,20 +148,8 @@ } private const string CLOCK_FORMAT_KEY = "clock-format"; - private const string TIME_FORMAT_KEY = "time-format"; public Date.ClockFormat clock_format { get { - if (GearyApplication.instance.is_running_unity && indicator_datetime != null) { - string format = indicator_datetime.get_string(TIME_FORMAT_KEY); - if (format == "12-hour") - return Date.ClockFormat.TWELVE_HOURS; - else if (format == "24-hour") - return Date.ClockFormat.TWENTY_FOUR_HOURS; - else { - // locale-default or custom - return Date.ClockFormat.LOCALE_DEFAULT; - } - } if (gnome_interface.get_string(CLOCK_FORMAT_KEY) == "12h") return Date.ClockFormat.TWELVE_HOURS; else @@ -123,33 +166,24 @@ get { return settings.get_boolean(COMPOSE_AS_HTML_KEY); } set { set_boolean(COMPOSE_AS_HTML_KEY, value); } } - + + public double conversation_viewer_zoom { + get { return settings.get_double(CONVERSATION_VIEWER_ZOOM_KEY); } + set { settings.set_double(CONVERSATION_VIEWER_ZOOM_KEY, value); } + } + + // Creates a configuration object. public Configuration(string schema_id) { // Start GSettings. settings = new Settings(schema_id); gnome_interface = new Settings("org.gnome.desktop.interface"); - foreach(unowned string schema in GLib.Settings.list_schemas()) { - if (schema == "com.canonical.indicator.datetime") { - indicator_datetime = new Settings("com.canonical.indicator.datetime"); - break; - } - } - } - - // is_installed: set to true if installed, else false. - // schema_dir: MUST be set if not installed. Directory where GSettings schema is located. - public static void init(bool is_installed, string? schema_dir = null) { - if (!is_installed) { - assert(schema_dir != null); - // If not installed, set an environment variable pointing to where the GSettings schema - // is to be found. - GLib.Environment.set_variable("GSETTINGS_SCHEMA_DIR", schema_dir, true); - } + + Migrate.old_app_config(settings); } - + public void bind(string key, Object object, string property, - SettingsBindFlags flags = SettingsBindFlags.DEFAULT) { + SettingsBindFlags flags = GLib.SettingsBindFlags.DEFAULT) { settings.bind(key, object, property, flags); } @@ -159,7 +193,7 @@ } public Geary.SearchQuery.Strategy get_search_strategy() { - switch (settings.get_string("search-strategy").down()) { + switch (settings.get_string(SEARCH_STRATEGY_KEY).down()) { case "exact": return Geary.SearchQuery.Strategy.EXACT; @@ -178,20 +212,20 @@ public void set_search_strategy(Geary.SearchQuery.Strategy strategy) { switch (strategy) { case Geary.SearchQuery.Strategy.EXACT: - settings.set_string("search-strategy", "exact"); + settings.set_string(SEARCH_STRATEGY_KEY, "exact"); break; case Geary.SearchQuery.Strategy.AGGRESSIVE: - settings.set_string("search-strategy", "aggressive"); + settings.set_string(SEARCH_STRATEGY_KEY, "aggressive"); break; case Geary.SearchQuery.Strategy.HORIZON: - settings.set_string("search-strategy", "horizon"); + settings.set_string(SEARCH_STRATEGY_KEY, "horizon"); break; case Geary.SearchQuery.Strategy.CONSERVATIVE: default: - settings.set_string("search-strategy", "conservative"); + settings.set_string(SEARCH_STRATEGY_KEY, "conservative"); break; } } diff -Nru geary-0.11.4/src/client/application/geary-controller.vala geary-0.12.0/src/client/application/geary-controller.vala --- geary-0.11.4/src/client/application/geary-controller.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/application/geary-controller.vala 2017-10-02 11:25:21.000000000 +0000 @@ -1,7 +1,9 @@ -/* Copyright 2016 Software Freedom Conservancy Inc. +/* + * Copyright 2016 Software Freedom Conservancy Inc. + * Copyright 2016 Michael Gratton * * This software is licensed under the GNU Lesser General Public License - * (version 2.1 or later). See the COPYING file in this distribution. + * (version 2.1 or later). See the COPYING file in this distribution. */ // Required because Gcr's VAPI is behind-the-times @@ -14,33 +16,27 @@ extern bool gcr_trust_remove_pinned_certificate(Gcr.Certificate cert, string purpose, string peer, Cancellable? cancellable) throws Error; -// Primary controller object for Geary. +/** + * Primary controller for a Geary application instance. + */ public class GearyController : Geary.BaseObject { // Named actions. // // NOTE: Some actions with accelerators need to also be added to ui/accelerators.ui - public const string ACTION_HELP = "GearyHelp"; - public const string ACTION_ABOUT = "GearyAbout"; - public const string ACTION_QUIT = "GearyQuit"; public const string ACTION_NEW_MESSAGE = "GearyNewMessage"; public const string ACTION_REPLY_TO_MESSAGE = "GearyReplyToMessage"; public const string ACTION_REPLY_ALL_MESSAGE = "GearyReplyAllMessage"; public const string ACTION_FORWARD_MESSAGE = "GearyForwardMessage"; - public const string ACTION_ARCHIVE_MESSAGE = "GearyArchiveMessage"; - public const string ACTION_TRASH_MESSAGE = "GearyTrashMessage"; - public const string ACTION_DELETE_MESSAGE = "GearyDeleteMessage"; - public const string ACTION_EMPTY_MENU = "GearyEmptyMenu"; + public const string ACTION_ARCHIVE_CONVERSATION = "GearyArchiveConversation"; + public const string ACTION_TRASH_CONVERSATION = "GearyTrashConversation"; + public const string ACTION_DELETE_CONVERSATION = "GearyDeleteConversation"; public const string ACTION_EMPTY_SPAM = "GearyEmptySpam"; public const string ACTION_EMPTY_TRASH = "GearyEmptyTrash"; public const string ACTION_UNDO = "GearyUndo"; public const string ACTION_FIND_IN_CONVERSATION = "GearyFindInConversation"; - public const string ACTION_FIND_NEXT_IN_CONVERSATION = "GearyFindNextInConversation"; - public const string ACTION_FIND_PREVIOUS_IN_CONVERSATION = "GearyFindPreviousInConversation"; public const string ACTION_ZOOM_IN = "GearyZoomIn"; public const string ACTION_ZOOM_OUT = "GearyZoomOut"; public const string ACTION_ZOOM_NORMAL = "GearyZoomNormal"; - public const string ACTION_ACCOUNTS = "GearyAccounts"; - public const string ACTION_PREFERENCES = "GearyPreferences"; public const string ACTION_MARK_AS_MENU = "GearyMarkAsMenuButton"; public const string ACTION_MARK_AS_READ = "GearyMarkAsRead"; public const string ACTION_MARK_AS_UNREAD = "GearyMarkAsUnread"; @@ -49,30 +45,30 @@ public const string ACTION_MARK_AS_SPAM = "GearyMarkAsSpam"; public const string ACTION_COPY_MENU = "GearyCopyMenuButton"; public const string ACTION_MOVE_MENU = "GearyMoveMenuButton"; - public const string ACTION_GEAR_MENU = "GearyGearMenuButton"; public const string ACTION_SEARCH = "GearySearch"; public const string ACTION_CONVERSATION_LIST = "GearyConversationList"; public const string ACTION_TOGGLE_SEARCH = "GearyToggleSearch"; - + public const string ACTION_TOGGLE_FIND = "GearyToggleFind"; + public const string PROP_CURRENT_CONVERSATION ="current-conversations"; public const int MIN_CONVERSATION_COUNT = 50; - private const string DELETE_MESSAGE_LABEL = _("Delete conversation"); - private const string DELETE_MESSAGE_TOOLTIP_SINGLE = _("Delete conversation (Shift+Delete)"); - private const string DELETE_MESSAGE_TOOLTIP_MULTIPLE = _("Delete conversations (Shift+Delete)"); - private const string DELETE_MESSAGE_ICON_NAME = "edit-delete-symbolic"; + private const string DELETE_CONVERSATION_LABEL = _("Delete conversation"); + private const string DELETE_CONVERSATION_TOOLTIP_SINGLE = _("Delete conversation (Shift+Delete)"); + private const string DELETE_CONVERSATION_TOOLTIP_MULTIPLE = _("Delete conversations (Shift+Delete)"); + private const string DELETE_CONVERSATION_ICON_NAME = "edit-delete-symbolic"; // This refers to the action ("move email to the trash"), not the Trash folder itself - private const string TRASH_MESSAGE_TOOLTIP_SINGLE = _("Move conversation to Trash (Delete, Backspace)"); - private const string TRASH_MESSAGE_TOOLTIP_MULTIPLE = _("Move conversations to Trash (Delete, Backspace)"); - private const string TRASH_MESSAGE_ICON_NAME = "user-trash-symbolic"; + private const string TRASH_CONVERSATION_TOOLTIP_SINGLE = _("Move conversation to Trash (Delete, Backspace)"); + private const string TRASH_CONVERSATION_TOOLTIP_MULTIPLE = _("Move conversations to Trash (Delete, Backspace)"); + private const string TRASH_CONVERSATION_ICON_NAME = "user-trash-symbolic"; // This refers to the action ("archive an email"), not the Archive folder itself - private const string ARCHIVE_MESSAGE_LABEL = _("_Archive"); - private const string ARCHIVE_MESSAGE_TOOLTIP_SINGLE = _("Archive conversation (A)"); - private const string ARCHIVE_MESSAGE_TOOLTIP_MULTIPLE = _("Archive conversations (A)"); - private const string ARCHIVE_MESSAGE_ICON_NAME = "mail-archive-symbolic"; + private const string ARCHIVE_CONVERSATION_LABEL = _("_Archive"); + private const string ARCHIVE_CONVERSATION_TOOLTIP_SINGLE = _("Archive conversation (A)"); + private const string ARCHIVE_CONVERSATION_TOOLTIP_MULTIPLE = _("Archive conversations (A)"); + private const string ARCHIVE_CONVERSATION_ICON_NAME = "mail-archive-symbolic"; private const string MARK_AS_SPAM_LABEL = _("Mark as S_pam"); private const string MARK_AS_NOT_SPAM_LABEL = _("Mark as not S_pam"); @@ -85,10 +81,11 @@ private const string MOVE_MESSAGE_TOOLTIP_MULTIPLE = _("Move conversations"); private const int SELECT_FOLDER_TIMEOUT_USEC = 100 * 1000; - private const int SEARCH_TIMEOUT_MSEC = 250; private const string PROP_ATTEMPT_OPEN_ACCOUNT = "attempt-open-account"; - + + public weak GearyApplication application { get; private set; } // circular ref + public MainWindow main_window { get; private set; } public Geary.App.ConversationMonitor? current_conversations { get; private set; default = null; } @@ -96,9 +93,10 @@ public AutostartManager? autostart_manager { get; private set; default = null; } public LoginDialog? login_dialog { get; private set; default = null; } - - public MenuModel app_menu { get; private set; } - + + public Soup.Session? avatar_session { get; private set; default = null; } + private Soup.Cache? avatar_cache = null; + private Geary.Account? current_account = null; private Gee.HashMap email_stores = new Gee.HashMap(); @@ -114,18 +112,15 @@ private Gee.Set selected_conversations = new Gee.HashSet(); private Geary.App.Conversation? last_deleted_conversation = null; private Gee.LinkedList composer_widgets = new Gee.LinkedList(); - private File? last_save_directory = null; private NewMessagesMonitor? new_messages_monitor = null; private NewMessagesIndicator? new_messages_indicator = null; private UnityLauncher? unity_launcher = null; private Libnotify? libnotify = null; private uint select_folder_timeout_id = 0; private int64 next_folder_select_allowed_usec = 0; - private Geary.Folder? folder_to_select = null; private Geary.Nonblocking.Mutex select_folder_mutex = new Geary.Nonblocking.Mutex(); private Geary.Account? account_to_select = null; private Geary.Folder? previous_non_search_folder = null; - private uint search_timeout_id = 0; private UpgradeDialog upgrade_dialog; private Gee.List pending_mailtos = new Gee.ArrayList(); private Geary.Nonblocking.Mutex untrusted_host_prompt_mutex = new Geary.Nonblocking.Mutex(); @@ -146,12 +141,6 @@ public signal void folder_selected(Geary.Folder? folder); /** - * Fired when the currently selected conversation(s) has/have changed. - */ - public signal void conversations_selected(Gee.Set? conversations, - Geary.Folder? current_folder); - - /** * Fired when the number of conversations changes. */ public signal void conversation_count_changed(int count); @@ -161,14 +150,18 @@ * for a brief typmatic delay. */ public signal void search_text_changed(string keywords); - - public GearyController() { + + /** + * Constructs a new instance of the controller. + */ + public GearyController(GearyApplication application) { + this.application = application; } - + ~GearyController() { assert(current_account == null); } - + /** * Starts the controller and brings up Geary. */ @@ -181,19 +174,54 @@ // Ensure all geary windows have an icon Gtk.Window.set_default_icon_name("geary"); + apply_app_menu_fix(); + // Setup actions. setup_actions(); - GearyApplication.instance.load_ui_resource("accelerators.ui"); - + this.application.load_ui_resource("accelerators.ui"); + // Listen for attempts to close the application. - GearyApplication.instance.exiting.connect(on_application_exiting); - + this.application.exiting.connect(on_application_exiting); + // Create DB upgrade dialog. upgrade_dialog = new UpgradeDialog(); upgrade_dialog.notify[UpgradeDialog.PROP_VISIBLE_NAME].connect(display_main_window_if_ready); - + + // Initialise WebKit and WebViews + ClientWebView.init_web_context( + this.application.config, + this.application.get_web_extensions_dir(), + this.application.get_user_cache_directory().get_child("web-resources"), + Args.log_debug + ); + try { + ClientWebView.load_scripts(); + ComposerWebView.load_resources(); + ConversationWebView.load_resources( + this.application.get_user_config_directory() + ); + } catch (Error err) { + error("Error loading web resources: %s", err.message); + } + + // Use a global avatar session because a cache must be used + // per-session, and we don't want to have to load the cache + // for each conversation load. + File avatar_cache_dir = this.application.get_user_cache_directory() + .get_child("avatars"); + this.avatar_cache = new Soup.Cache( + avatar_cache_dir.get_path(), + Soup.CacheType.SINGLE_USER + ); + this.avatar_cache.load(); + this.avatar_cache.set_max_size(10 * 1024 * 1024); // 4MB + this.avatar_session = new Soup.Session.with_options( + Soup.SESSION_USER_AGENT, "Geary/" + GearyApplication.VERSION + ); + this.avatar_session.add_feature(avatar_cache); + // Create the main window (must be done after creating actions.) - main_window = new MainWindow(GearyApplication.instance); + main_window = new MainWindow(this.application); main_window.on_shift_key.connect(on_shift_key); main_window.notify["has-toplevel-focus"].connect(on_has_toplevel_focus); @@ -214,20 +242,13 @@ main_window.folder_list.move_conversation.connect(on_move_conversation); main_window.main_toolbar.copy_folder_menu.folder_selected.connect(on_copy_conversation); main_window.main_toolbar.move_folder_menu.folder_selected.connect(on_move_conversation); - main_window.search_bar.search_text_changed.connect(on_search_text_changed); - main_window.conversation_viewer.link_selected.connect(on_link_selected); - main_window.conversation_viewer.reply_to_message.connect(on_reply_to_message); - main_window.conversation_viewer.reply_all_message.connect(on_reply_all_message); - main_window.conversation_viewer.forward_message.connect(on_forward_message); - main_window.conversation_viewer.mark_messages.connect(on_conversation_viewer_mark_messages); - main_window.conversation_viewer.open_attachment.connect(on_open_attachment); - main_window.conversation_viewer.save_attachments.connect(on_save_attachments); - main_window.conversation_viewer.save_buffer_to_file.connect(on_save_buffer_to_file); - main_window.conversation_viewer.edit_draft.connect(on_edit_draft); - + main_window.search_bar.search_text_changed.connect((text) => { do_search(text); }); + main_window.conversation_viewer.conversation_added.connect( + on_conversation_view_added + ); new_messages_monitor = new NewMessagesMonitor(should_notify_new_messages); main_window.folder_list.set_new_messages_monitor(new_messages_monitor); - + // New messages indicator (Ubuntuism) new_messages_indicator = NewMessagesIndicator.create(new_messages_monitor); new_messages_indicator.application_activated.connect(on_indicator_activated_application); @@ -242,19 +263,31 @@ // This is fired after the accounts are ready. Geary.Engine.instance.opened.connect(on_engine_opened); - - main_window.conversation_list_view.grab_focus(); - + + this.main_window.conversation_list_view.grab_focus(); + // instantiate here to ensure that Config is initialized and ready autostart_manager = new AutostartManager(); // initialize revokable save_revokable(null, null); - + + // Migrate configuration if necessary. + try { + Migrate.xdg_config_dir(this.application.get_user_data_directory(), + this.application.get_user_config_directory()); + } catch (Error e) { + error("Error migrating configuration directories: %s", e.message); + } + // Start Geary. try { - yield Geary.Engine.instance.open_async(GearyApplication.instance.get_user_data_directory(), - GearyApplication.instance.get_resource_directory(), new SecretMediator()); + yield Geary.Engine.instance.open_async( + this.application.get_user_config_directory(), + this.application.get_user_data_directory(), + this.application.get_resource_directory(), + new SecretMediator() + ); if (Geary.Engine.instance.get_accounts().size == 0) { create_account(); } @@ -271,8 +304,8 @@ Geary.Engine.instance.account_available.disconnect(on_account_available); Geary.Engine.instance.account_unavailable.disconnect(on_account_unavailable); Geary.Engine.instance.untrusted_host.disconnect(on_untrusted_host); - - // Connect to various UI signals. + + // Disconnect from various UI signals. main_window.conversation_list_view.conversations_selected.disconnect(on_conversations_selected); main_window.conversation_list_view.conversation_activated.disconnect(on_conversation_activated); main_window.conversation_list_view.load_more.disconnect(on_load_more); @@ -283,17 +316,10 @@ main_window.folder_list.move_conversation.disconnect(on_move_conversation); main_window.main_toolbar.copy_folder_menu.folder_selected.disconnect(on_copy_conversation); main_window.main_toolbar.move_folder_menu.folder_selected.disconnect(on_move_conversation); - main_window.search_bar.search_text_changed.disconnect(on_search_text_changed); - main_window.conversation_viewer.link_selected.disconnect(on_link_selected); - main_window.conversation_viewer.reply_to_message.disconnect(on_reply_to_message); - main_window.conversation_viewer.reply_all_message.disconnect(on_reply_all_message); - main_window.conversation_viewer.forward_message.disconnect(on_forward_message); - main_window.conversation_viewer.mark_messages.disconnect(on_conversation_viewer_mark_messages); - main_window.conversation_viewer.open_attachment.disconnect(on_open_attachment); - main_window.conversation_viewer.save_attachments.disconnect(on_save_attachments); - main_window.conversation_viewer.save_buffer_to_file.disconnect(on_save_buffer_to_file); - main_window.conversation_viewer.edit_draft.disconnect(on_edit_draft); - + main_window.conversation_viewer.conversation_added.disconnect( + on_conversation_view_added + ); + // hide window while shutting down, as this can take a few seconds under certain conditions main_window.hide(); @@ -352,7 +378,11 @@ } main_window.destroy(); - + + debug("Flushing avatar cache..."); + avatar_cache.flush(); + avatar_cache.dump(); + // Turn off the lights and lock the door behind you try { debug("Closing Engine..."); @@ -362,40 +392,62 @@ message("Error closing Geary Engine instance: %s", err.message); } } - + + /** + * Opens a new, blank composer. + */ + public void compose() { + create_compose_widget(ComposerWidget.ComposeType.NEW_MESSAGE); + } + + /** + * Opens or queues a new composer addressed to a specific email address. + */ + public void compose_mailto(string mailto) { + if (current_account == null) { + // Schedule the send for after we have an account open. + pending_mailtos.add(mailto); + } else { + create_compose_widget(ComposerWidget.ComposeType.NEW_MESSAGE, null, null, mailto); + } + } + private void add_accelerator(string accelerator, string action) { - GtkUtil.add_accelerator(GearyApplication.instance.ui_manager, GearyApplication.instance.actions, + GtkUtil.add_accelerator(this.application.ui_manager, this.application.actions, accelerator, action); } + // Fix for clients having both: + // * disabled Gtk/ShellShowsAppMenu setting + // * no 'menu' setting in Gtk/DecorationLayout + // See https://bugzilla.gnome.org/show_bug.cgi?id=770617 + private void apply_app_menu_fix() { + Gtk.Settings? settings = Gtk.Settings.get_default(); + + if (settings == null) { + warning("Couldn't fetch Gtk default settings"); + return ; + } + + string? decoration_layout = settings.gtk_decoration_layout; + + if (decoration_layout == null) decoration_layout = ""; + + if (!decoration_layout.contains("menu")) { + string prefix = "menu:"; + if (decoration_layout.contains(":")) { + prefix = (decoration_layout.has_prefix(":")) ? "menu" : "menu,"; + } + settings.gtk_decoration_layout = prefix + settings.gtk_decoration_layout; + } + } + private Gtk.ActionEntry[] create_actions() { Gtk.ActionEntry[] entries = new Gtk.ActionEntry[0]; - - Gtk.ActionEntry accounts = { ACTION_ACCOUNTS, null, TRANSLATABLE, "M", - null, on_accounts }; - accounts.label = _("A_ccounts"); - entries += accounts; - - Gtk.ActionEntry prefs = { ACTION_PREFERENCES, Stock._PREFERENCES, TRANSLATABLE, "E", - null, on_preferences }; - prefs.label = _("_Preferences"); - entries += prefs; - - Gtk.ActionEntry help = { ACTION_HELP, Stock._HELP, TRANSLATABLE, "F1", null, on_help }; - help.label = _("_Help"); - entries += help; - - Gtk.ActionEntry about = { ACTION_ABOUT, Stock._ABOUT, TRANSLATABLE, null, null, on_about }; - about.label = _("_About"); - entries += about; - - Gtk.ActionEntry quit = { ACTION_QUIT, Stock._QUIT, TRANSLATABLE, "Q", null, on_quit }; - quit.label = _("_Quit"); - entries += quit; - + Gtk.ActionEntry mark_menu = { ACTION_MARK_AS_MENU, null, TRANSLATABLE, null, _("Mark conversation"), on_show_mark_menu }; - mark_menu.label = _("_Mark as..."); + mark_menu.label = _("_Mark as…"); mark_menu.tooltip = MARK_MESSAGE_MENU_TOOLTIP_SINGLE; entries += mark_menu; @@ -461,40 +513,26 @@ null, on_find_in_conversation_action }; entries += find_in_conversation; add_accelerator("slash", ACTION_FIND_IN_CONVERSATION); - - Gtk.ActionEntry find_next_in_conversation = { ACTION_FIND_NEXT_IN_CONVERSATION, null, null, - "G", null, on_find_next_in_conversation_action }; - entries += find_next_in_conversation; - - Gtk.ActionEntry find_previous_in_conversation = { ACTION_FIND_PREVIOUS_IN_CONVERSATION, - null, null, "G", null, on_find_previous_in_conversation_action }; - entries += find_previous_in_conversation; - - Gtk.ActionEntry archive_message = { ACTION_ARCHIVE_MESSAGE, ARCHIVE_MESSAGE_ICON_NAME, - ARCHIVE_MESSAGE_LABEL, "A", null, on_archive_message }; - archive_message.tooltip = ARCHIVE_MESSAGE_TOOLTIP_SINGLE; - entries += archive_message; + + Gtk.ActionEntry archive_conversation = { ACTION_ARCHIVE_CONVERSATION, ARCHIVE_CONVERSATION_ICON_NAME, + ARCHIVE_CONVERSATION_LABEL, "A", null, on_archive_conversation }; + archive_conversation.tooltip = ARCHIVE_CONVERSATION_TOOLTIP_SINGLE; + entries += archive_conversation; // although this action changes according to the account's capabilities, set to Delete // until they're known so the "translatable" string doesn't first appear - Gtk.ActionEntry trash_message = { ACTION_TRASH_MESSAGE, TRASH_MESSAGE_ICON_NAME, - null, "Delete", null, on_trash_message }; - trash_message.tooltip = TRASH_MESSAGE_TOOLTIP_SINGLE; - entries += trash_message; - add_accelerator("BackSpace", ACTION_TRASH_MESSAGE); - - Gtk.ActionEntry delete_message = { ACTION_DELETE_MESSAGE, DELETE_MESSAGE_ICON_NAME, - null, "Delete", null, on_delete_message }; - delete_message.label = DELETE_MESSAGE_LABEL; - delete_message.tooltip = DELETE_MESSAGE_TOOLTIP_SINGLE; - entries += delete_message; - add_accelerator("BackSpace", ACTION_DELETE_MESSAGE); - - Gtk.ActionEntry empty_menu = { ACTION_EMPTY_MENU, "edit-clear-all-symbolic", null, null, - null, null }; - empty_menu.label = _("Empty"); - empty_menu.tooltip = _("Empty Spam or Trash folders"); - entries += empty_menu; + Gtk.ActionEntry trash_conversation = { ACTION_TRASH_CONVERSATION, TRASH_CONVERSATION_ICON_NAME, + null, "Delete", null, on_trash_conversation }; + trash_conversation.tooltip = TRASH_CONVERSATION_TOOLTIP_SINGLE; + entries += trash_conversation; + add_accelerator("BackSpace", ACTION_TRASH_CONVERSATION); + + Gtk.ActionEntry delete_conversation = { ACTION_DELETE_CONVERSATION, DELETE_CONVERSATION_ICON_NAME, + null, "Delete", null, on_delete_conversation }; + delete_conversation.label = DELETE_CONVERSATION_LABEL; + delete_conversation.tooltip = DELETE_CONVERSATION_TOOLTIP_SINGLE; + entries += delete_conversation; + add_accelerator("BackSpace", ACTION_DELETE_CONVERSATION); Gtk.ActionEntry empty_spam = { ACTION_EMPTY_SPAM, null, null, null, null, on_empty_spam }; empty_spam.label = _("Empty _Spam…"); @@ -521,32 +559,32 @@ null, on_zoom_normal }; entries += zoom_normal; add_accelerator("0", ACTION_ZOOM_NORMAL); - - // Can't use the Action's "natural" accelerator because this Action is not tied to any - // widget - Gtk.ActionEntry search = { ACTION_SEARCH, null, null, null, null, on_search }; + + Gtk.ActionEntry search = { + ACTION_SEARCH, null, null, "S", null, + () => { show_search_bar(); } + }; entries += search; - add_accelerator("S", ACTION_SEARCH); - - Gtk.ActionEntry conversation_list = { ACTION_CONVERSATION_LIST, null, null, null, null, on_conversation_list }; + + Gtk.ActionEntry conversation_list = { ACTION_CONVERSATION_LIST, null, null, "B", null, on_conversation_list }; entries += conversation_list; - add_accelerator("B", ACTION_CONVERSATION_LIST); - + // No callback is connected, since we bind the toggle button to the search bar visibility Gtk.ActionEntry toggle_search = { ACTION_TOGGLE_SEARCH, null, null, null, _("Toggle search bar"), null }; entries += toggle_search; - + + // No callback is connected, since we bind the toggle button to the find bar visibility + Gtk.ActionEntry toggle_find = { ACTION_TOGGLE_FIND, null, null, null, + _("Toggle find bar"), null }; + entries += toggle_find; + return entries; } - + private Gtk.ToggleActionEntry[] create_toggle_actions() { Gtk.ToggleActionEntry[] entries = new Gtk.ToggleActionEntry[0]; - Gtk.ToggleActionEntry gear_menu = { ACTION_GEAR_MENU, null, null, "F10", - null, null, false }; - entries += gear_menu; - return entries; } @@ -556,20 +594,12 @@ ACTION_REPLY_TO_MESSAGE, ACTION_REPLY_ALL_MESSAGE, ACTION_FORWARD_MESSAGE, - ACTION_ARCHIVE_MESSAGE, - ACTION_TRASH_MESSAGE, - ACTION_DELETE_MESSAGE, - }; - const string[] exported_actions = { - ACTION_ACCOUNTS, - ACTION_PREFERENCES, - ACTION_HELP, - ACTION_ABOUT, - ACTION_QUIT, + ACTION_ARCHIVE_CONVERSATION, + ACTION_TRASH_CONVERSATION, + ACTION_DELETE_CONVERSATION, }; - - Gtk.ActionGroup action_group = GearyApplication.instance.actions; - + Gtk.ActionGroup action_group = this.application.actions; + Gtk.ActionEntry[] action_entries = create_actions(); action_group.add_actions(action_entries, this); foreach (Gtk.ActionEntry e in action_entries) { @@ -578,30 +608,13 @@ if (e.name in important_actions) action.is_important = true; - GearyApplication.instance.action_adapters.add(new Geary.ActionAdapter(action)); } - + Gtk.ToggleActionEntry[] toggle_action_entries = create_toggle_actions(); action_group.add_toggle_actions(toggle_action_entries, this); - - foreach (Geary.ActionAdapter a in GearyApplication.instance.action_adapters) { - if (a.action.name in exported_actions) - GearyApplication.instance.add_action(a.action); - } - GearyApplication.instance.ui_manager.insert_action_group(action_group, 0); - - Gtk.Builder builder = GearyApplication.instance.create_builder("app_menu.interface"); - app_menu = (MenuModel) builder.get_object("app-menu"); - - // We'd *like* to always export an app menu and just let the shell - // decide whether to display it or not. Unfortunately Mint (Cinnamon, - // I believe) and maybe others will insert a menu bar for your - // application, even if you didn't have one otherwise, if you export - // the app menu. So, we only export it if the shell claims to show it. - if (Gtk.Settings.get_default().gtk_shell_shows_app_menu) - GearyApplication.instance.set_app_menu(app_menu); + this.application.ui_manager.insert_action_group(action_group, 0); } - + private void open_account(Geary.Account account) { account.report_problem.connect(on_report_problem); account.email_removed.connect(on_account_email_removed); @@ -751,7 +764,7 @@ // close the account; can't go any further w/o offline mode try { - if (Geary.Engine.instance.get_accounts().has_key(account_information.email)) { + if (Geary.Engine.instance.get_accounts().has_key(account_information.id)) { Geary.Account account = Geary.Engine.instance.get_account_instance(account_information); close_account(account); } @@ -904,8 +917,8 @@ options, cancellable); } catch (Error err) { debug("Error validating account: %s", err.message); - GearyApplication.instance.exit(-1); // Fatal error - + this.application.exit(-1); // Fatal error + return result; } @@ -936,7 +949,7 @@ Geary.AccountInformation account_information) { if (account_information.is_copy()) { try { - return Geary.Engine.instance.get_accounts().get(account_information.email); + return Geary.Engine.instance.get_accounts().get(account_information.id); } catch (Error e) { error("Account information is out of sync: %s", e.message); } @@ -954,8 +967,7 @@ login_dialog = new LoginDialog(); } else if (!login_dialog.get_visible()) { // If the dialog has been dismissed, exit here. - GearyApplication.instance.exit(); - + this.application.exit(); return null; } @@ -967,8 +979,7 @@ login_dialog.show_spinner(false); if (login_dialog.run() != Gtk.ResponseType.OK) { debug("User refused to enter account information. Exiting..."); - GearyApplication.instance.exit(1); - + this.application.exit(1); return null; } @@ -1151,10 +1162,10 @@ // give the user two options: reset the Account local store, or exit Geary. A third // could be done to leave the Account in an unopened state, but we don't currently // have provisions for that. - AlertDialog dialog = new QuestionDialog(main_window, - _("Unable to open the database for %s").printf(account.information.email), + QuestionDialog dialog = new QuestionDialog(main_window, + _("Unable to open the database for %s").printf(account.information.id), _("There was an error opening the local mail database for this account. This is possibly due to corruption of the database file in this directory:\n\n%s\n\nGeary can rebuild the database and re-synchronize with the server or exit.\n\nRebuilding the database will destroy all local email and its attachments. The mail on the your server will not be affected.") - .printf(account.information.settings_dir.get_path()), + .printf(account.information.data_dir.get_path()), _("_Rebuild"), _("E_xit")); dialog.use_secondary_markup(true); switch (dialog.run()) { @@ -1163,10 +1174,10 @@ try { yield account.rebuild_async(); } catch (Error err) { - dialog = new ErrorDialog(main_window, - _("Unable to rebuild database for \"%s\"").printf(account.information.email), + ErrorDialog errdialog = new ErrorDialog(main_window, + _("Unable to rebuild database for “%s”").printf(account.information.id), _("Error during rebuild:\n\n%s").printf(err.message)); - dialog.run(); + errdialog.run(); retry = false; } @@ -1176,10 +1187,10 @@ retry = false; break; } - + if (!retry) - GearyApplication.instance.exit(1); - + this.application.exit(1); + return retry; } @@ -1187,34 +1198,34 @@ // some other problem opening the account ... as with other flow path, can't run // Geary today with an account in unopened state, so have to exit ErrorDialog dialog = new ErrorDialog(main_window, - _("Unable to open local mailbox for %s").printf(account.information.email), + _("Unable to open local mailbox for %s").printf(account.information.id), _("There was an error opening the local mail database for this account. This is possibly due to a file permissions problem.\n\nPlease check that you have read/write permissions for all files in this directory:\n\n%s") - .printf(account.information.settings_dir.get_path())); + .printf(account.information.data_dir.get_path())); dialog.run(); - - GearyApplication.instance.exit(1); + + this.application.exit(1); } - + private async void account_database_version_async(Geary.Account account) { ErrorDialog dialog = new ErrorDialog(main_window, - _("Unable to open local mailbox for %s").printf(account.information.email), - _("The version number of the local mail database is formatted for a newer version of Geary. Unfortunately, the database cannot be \"rolled back\" to work with this version of Geary.\n\nPlease install the latest version of Geary and try again.")); + _("Unable to open local mailbox for %s").printf(account.information.id), + _("The version number of the local mail database is formatted for a newer version of Geary. Unfortunately, the database cannot be “rolled back” to work with this version of Geary.\n\nPlease install the latest version of Geary and try again.")); dialog.run(); - - GearyApplication.instance.exit(1); + + this.application.exit(1); } - + private async void account_general_error_async(Geary.Account account) { // some other problem opening the account ... as with other flow path, can't run // Geary today with an account in unopened state, so have to exit ErrorDialog dialog = new ErrorDialog(main_window, - _("Unable to open local mailbox for %s").printf(account.information.email), + _("Unable to open local mailbox for %s").printf(account.information.id), _("There was an error opening the local account. This is probably due to connectivity issues.\n\nPlease check your network connection and restart Geary.")); dialog.run(); - - GearyApplication.instance.exit(1); + + this.application.exit(1); } - + public async void disconnect_account_async(Geary.Account account, Cancellable? cancellable = null) { cancel_inbox(account); @@ -1254,7 +1265,7 @@ // enter a password on their account.) try { if (get_num_open_accounts() == 0) - GearyApplication.instance.exit(); + this.application.exit(); } catch (Error e) { message("Error enumerating accounts: %s", e.message); } @@ -1281,8 +1292,10 @@ * Displays the main window if we're ready. Otherwise does nothing. */ private void display_main_window_if_ready() { - if (did_attempt_open_all_accounts() && !upgrade_dialog.visible && - !cancellable_open_account.is_cancelled() && !Args.hidden_startup) + if (did_attempt_open_all_accounts() && + !upgrade_dialog.visible && + !cancellable_open_account.is_cancelled() && + !Args.hidden_startup) main_window.show_all(); } @@ -1311,65 +1324,64 @@ return num; } - + // Update widgets and such to match capabilities of the current folder ... sensitivity is handled // by other utility methods private void update_ui() { update_tooltips(); - main_window.main_toolbar.update_trash_archive_buttons( - current_folder_supports_trash() || !(current_folder is Geary.FolderSupport.Remove), - current_account.can_support_archive); + main_window.main_toolbar.update_trash_button( + current_folder_supports_trash() || + !(current_folder is Geary.FolderSupport.Remove) + ); } - + private void on_folder_selected(Geary.Folder? folder) { debug("Folder %s selected", folder != null ? folder.to_string() : "(null)"); - - // If the folder is being unset, clear the message list and exit here. if (folder == null) { - current_folder = null; - main_window.conversation_list_store.clear(); + this.current_folder = null; + main_window.conversation_list_view.set_model(null); main_window.main_toolbar.folder = null; folder_selected(null); - - return; - } - - folder_to_select = folder; - - // To prevent the user from selecting folders too quickly, we prevent additional selection - // changes to occur until after a timeout has expired from the last one - int64 now = get_monotonic_time(); - int64 diff = now - next_folder_select_allowed_usec; - if (diff < SELECT_FOLDER_TIMEOUT_USEC) { - // only start timeout if another timeout is not running ... this means the user can - // click madly and will see the last clicked-on folder 100ms after the first one was - // clicked on - if (select_folder_timeout_id == 0) - select_folder_timeout_id = Timeout.add((uint) (diff / 1000), on_select_folder_timeout); - } else { - do_select_folder.begin(folder_to_select, on_select_folder_completed); - folder_to_select = null; - - next_folder_select_allowed_usec = now + SELECT_FOLDER_TIMEOUT_USEC; + } else if (folder != this.current_folder) { + this.main_window.conversation_viewer.show_loading(); + this.application.get_action( + ACTION_FIND_IN_CONVERSATION + ).set_sensitive(false); + enable_message_buttons(false); + + // To prevent the user from selecting folders too quickly, + // we prevent additional selection changes to occur until + // after a timeout has expired from the last one + int64 now = get_monotonic_time(); + int64 diff = now - this.next_folder_select_allowed_usec; + if (diff < SELECT_FOLDER_TIMEOUT_USEC) { + // only start timeout if another timeout is not + // running ... this means the user can click madly and + // will see the last clicked-on folder 100ms after the + // first one was clicked on + if (this.select_folder_timeout_id == 0) { + this.select_folder_timeout_id = Timeout.add( + (uint) (diff / 1000), + () => { + this.select_folder_timeout_id = 0; + this.next_folder_select_allowed_usec = 0; + if (folder != this.current_folder) { + do_select_folder.begin( + folder, on_select_folder_completed + ); + } + return false; + }); + } + } else { + do_select_folder.begin(folder, on_select_folder_completed); + this.next_folder_select_allowed_usec = + now + SELECT_FOLDER_TIMEOUT_USEC; + } } } - - private bool on_select_folder_timeout() { - select_folder_timeout_id = 0; - next_folder_select_allowed_usec = 0; - - if (folder_to_select != null) - do_select_folder.begin(folder_to_select, on_select_folder_completed); - - folder_to_select = null; - - return false; - } - + private async void do_select_folder(Geary.Folder folder) throws Error { - if (folder == current_folder) - return; - debug("Switching to %s...", folder.to_string()); closed_folder(); @@ -1448,7 +1460,7 @@ current_conversations.seed_completed.connect(on_conversation_count_changed); current_conversations.scan_completed.connect(on_conversation_count_changed); current_conversations.conversations_added.connect(on_conversation_count_changed); - current_conversations.conversation_removed.connect(on_conversation_count_changed); + current_conversations.conversations_removed.connect(on_conversation_count_changed); if (!current_conversations.is_monitoring) yield current_conversations.start_monitoring_async(conversation_cancellable); @@ -1457,7 +1469,7 @@ debug("Switched to %s", folder.to_string()); } - + private void on_scan_error(Error err) { debug("Scan error: %s", err.message); } @@ -1470,12 +1482,23 @@ on_load_more(); } } - + private void on_conversation_count_changed() { - if (current_conversations != null) - conversation_count_changed(current_conversations.get_conversation_count()); + if (this.current_conversations != null) { + int count = this.current_conversations.get_conversation_count(); + if (count == 0) { + // Let the user know if there's no available conversations + if (this.current_folder is Geary.SearchFolder) { + this.main_window.conversation_viewer.show_empty_search(); + } else { + this.main_window.conversation_viewer.show_empty_folder(); + } + enable_message_buttons(false); + } + conversation_count_changed(count); + } } - + private void on_libnotify_invoked(Geary.Folder? folder, Geary.Email? email) { new_messages_monitor.clear_all_new_messages(); @@ -1517,26 +1540,64 @@ debug("Unable to select folder: %s", err.message); } } - + private void on_conversations_selected(Gee.Set selected) { - selected_conversations = selected; - conversations_selected(selected_conversations, current_folder); + this.selected_conversations = selected; + this.application.get_action( + ACTION_FIND_IN_CONVERSATION + ).set_sensitive(false); + ConversationViewer viewer = this.main_window.conversation_viewer; + if (this.current_folder != null && !viewer.is_composer_visible) { + switch(selected.size) { + case 0: + enable_message_buttons(false); + viewer.show_none_selected(); + break; + + case 1: + // Cancel existing avatar loads before loading new + // convo since that will start loading more avatars + viewer.load_conversation.begin( + Geary.Collection.get_first(selected), + this.current_folder, + (obj, ret) => { + try { + viewer.load_conversation.end(ret); + enable_message_buttons(true); + this.application.get_action( + ACTION_FIND_IN_CONVERSATION + ).set_sensitive(true); + } catch (Error err) { + debug("Unable to load conversation: %s", + err.message); + } + } + ); + break; + + default: + enable_multiple_message_buttons(); + viewer.show_multiple_selected(); + break; + } + } } - + private void on_conversation_activated(Geary.App.Conversation activated) { // Currently activating a conversation is only available for drafts folders. if (current_folder == null || current_folder.special_folder_type != Geary.SpecialFolderType.DRAFTS) return; - + // TODO: Determine how to map between conversations and drafts correctly. - on_edit_draft(activated.get_latest_recv_email(Geary.App.Conversation.Location.IN_FOLDER)); - } - - private void on_edit_draft(Geary.Email draft) { - create_compose_widget(ComposerWidget.ComposeType.NEW_MESSAGE, draft, null, null, true); + Geary.Email draft = activated.get_latest_recv_email( + Geary.App.Conversation.Location.IN_FOLDER + ); + create_compose_widget( + ComposerWidget.ComposeType.NEW_MESSAGE, draft, null, null, true + ); } - + private void on_special_folder_type_changed(Geary.Folder folder, Geary.SpecialFolderType old_type, Geary.SpecialFolderType new_type) { main_window.folder_list.remove_folder(folder); @@ -1575,8 +1636,8 @@ return null; } - private void on_folders_available_unavailable(Gee.Collection? available, - Gee.Collection? unavailable) { + private void on_folders_available_unavailable(Gee.List? available, + Gee.List? unavailable) { if (available != null && available.size > 0) { foreach (Geary.Folder folder in available) { main_window.folder_list.add_folder(folder); @@ -1610,7 +1671,8 @@ } if (unavailable != null) { - foreach (Geary.Folder folder in unavailable) { + for (int i = (unavailable.size - 1); i >= 0; i--) { + Geary.Folder folder = unavailable[i]; main_window.folder_list.remove_folder(folder); if (folder.account == current_account) { if (main_window.main_toolbar.copy_folder_menu.has_folder(folder)) @@ -1654,14 +1716,14 @@ old_cancellable.cancel(); } - + private void cancel_search() { - Cancellable old_cancellable = cancellable_search; - cancellable_search = new Cancellable(); - + Cancellable old_cancellable = this.cancellable_search; + this.cancellable_search = new Cancellable(); + old_cancellable.cancel(); } - + private void cancel_context_dependent_buttons() { Cancellable old_cancellable = cancellable_context_dependent_buttons; cancellable_context_dependent_buttons = new Cancellable(); @@ -1677,83 +1739,21 @@ return sender.cancel_exit(); } - - private void on_quit() { - GearyApplication.instance.exit(); - } - - private void on_help() { - try { - if (GearyApplication.instance.is_installed()) { - Gtk.show_uri(null, "ghelp:geary", Gdk.CURRENT_TIME); - } else { - Pid pid; - File exec_dir = GearyApplication.instance.get_exec_dir(); - string[] argv = new string[3]; - argv[0] = "gnome-help"; - argv[1] = GearyApplication.SOURCE_ROOT_DIR + "/help/C/"; - argv[2] = null; - if (!Process.spawn_async(exec_dir.get_path(), argv, null, - SpawnFlags.SEARCH_PATH | SpawnFlags.STDERR_TO_DEV_NULL, null, out pid)) { - debug("Failed to launch help locally."); - } - } - } catch (Error error) { - debug("Error showing help: %s", error.message); - Gtk.Dialog dialog = new Gtk.Dialog.with_buttons("Error", null, - Gtk.DialogFlags.DESTROY_WITH_PARENT, Stock._CLOSE, Gtk.ResponseType.CLOSE, null); - dialog.response.connect(() => { dialog.destroy(); }); - dialog.get_content_area().add(new Gtk.Label("Error showing help: %s".printf(error.message))); - dialog.show_all(); - dialog.run(); - } - } - - private void on_about() { - Gtk.show_about_dialog(main_window, - "program-name", GearyApplication.NAME, - "comments", GearyApplication.DESCRIPTION, - "authors", GearyApplication.AUTHORS, - "copyright", GearyApplication.COPYRIGHT, - "license-type", Gtk.License.LGPL_2_1, - "logo-icon-name", "geary", - "version", GearyApplication.VERSION, - "website", GearyApplication.WEBSITE, - "website-label", GearyApplication.WEBSITE_LABEL, - "title", _("About %s").printf(GearyApplication.NAME), - /// Translators: add your name and email address to receive credit in the About dialog - /// For example: Yamada Taro - "translator-credits", _("translator-credits") - ); - } private void on_shift_key(bool pressed) { if (main_window != null && main_window.main_toolbar != null && current_account != null && current_folder != null) { - main_window.main_toolbar.update_trash_archive_buttons( - (!pressed && current_folder_supports_trash()) || !(current_folder is Geary.FolderSupport.Remove), - current_account.can_support_archive); + main_window.main_toolbar.update_trash_button( + (!pressed && current_folder_supports_trash()) || !(current_folder is Geary.FolderSupport.Remove)); } } - + // this signal does not necessarily indicate that the application previously didn't have // focus and now it does private void on_has_toplevel_focus() { clear_new_messages("on_has_toplevel_focus", null); } - - private void on_accounts() { - AccountDialog dialog = new AccountDialog(main_window); - dialog.show_all(); - dialog.run(); - dialog.destroy(); - } - - private void on_preferences() { - PreferencesDialog dialog = new PreferencesDialog(main_window); - dialog.run(); - } - + // latest_sent_only uses Email's Date: field, which corresponds to how they're sorted in the // ConversationViewer private Gee.ArrayList get_conversation_email_ids( @@ -1821,7 +1821,7 @@ unstarred_selected = true; } } - var actions = GearyApplication.instance.actions; + var actions = this.application.actions; actions.get_action(ACTION_MARK_AS_READ).set_visible(unread_selected); actions.get_action(ACTION_MARK_AS_UNREAD).set_visible(read_selected); actions.get_action(ACTION_MARK_AS_STARRED).set_visible(unstarred_selected); @@ -1885,7 +1885,7 @@ flags_to_add, flags_to_remove); } - private void on_conversation_viewer_mark_messages(Gee.Collection emails, + private void on_conversation_viewer_mark_emails(Gee.Collection emails, Geary.EmailFlags? flags_to_add, Geary.EmailFlags? flags_to_remove) { mark_email(emails, flags_to_add, flags_to_remove); } @@ -1896,9 +1896,13 @@ Gee.ArrayList ids = get_selected_email_ids(false); mark_email(ids, null, flags); - - foreach (Geary.EmailIdentifier id in ids) - main_window.conversation_viewer.mark_manual_read(id); + + ConversationListBox? list = + main_window.conversation_viewer.current_list; + if (list != null) { + foreach (Geary.EmailIdentifier id in ids) + list.mark_manual_read(id); + } } private void on_mark_as_unread() { @@ -1907,9 +1911,13 @@ Gee.ArrayList ids = get_selected_email_ids(true); mark_email(ids, flags, null); - - foreach (Geary.EmailIdentifier id in ids) - main_window.conversation_viewer.mark_manual_read(id); + + ConversationListBox? list = + main_window.conversation_viewer.current_list; + if (list != null) { + foreach (Geary.EmailIdentifier id in ids) + list.mark_manual_unread(id); + } } private void on_mark_as_starred() { @@ -1971,12 +1979,19 @@ Gee.List ids = get_selected_email_ids(false); if (ids.size == 0) return; - + + this.main_window.conversation_list_view.set_changing_selection(true); + Geary.FolderSupport.Move? supports_move = current_folder as Geary.FolderSupport.Move; if (supports_move != null) - move_conversation_async.begin(supports_move, ids, destination.path, cancellable_folder); + move_conversation_async.begin( + supports_move, ids, destination.path, cancellable_folder, + (obj, ret) => { + move_conversation_async.end(ret); + this.main_window.conversation_list_view.set_changing_selection(false); + }); } - + private async void move_conversation_async(Geary.FolderSupport.Move source_folder, Gee.List ids, Geary.FolderPath destination, Cancellable? cancellable) { try { @@ -1987,67 +2002,49 @@ err.message); } } - - private void on_open_attachment(Geary.Attachment attachment) { - if (GearyApplication.instance.config.ask_open_attachment) { + + private void on_attachments_activated(Gee.Collection attachments) { + if (this.application.config.ask_open_attachment) { QuestionDialog ask_to_open = new QuestionDialog.with_checkbox(main_window, - _("Are you sure you want to open \"%s\"?").printf(attachment.file.get_basename()), + _("Are you sure you want to open these attachments?"), _("Attachments may cause damage to your system if opened. Only open files from trusted sources."), - Stock._OPEN_BUTTON, Stock._CANCEL, _("Don't _ask me again"), false); - if (ask_to_open.run() != Gtk.ResponseType.OK) + Stock._OPEN_BUTTON, Stock._CANCEL, _("Don’t _ask me again"), false); + if (ask_to_open.run() != Gtk.ResponseType.OK) { return; - + } // only save checkbox state if OK was selected - GearyApplication.instance.config.ask_open_attachment = !ask_to_open.is_checked; + this.application.config.ask_open_attachment = !ask_to_open.is_checked; } - - // Open the attachment if we know what to do with it. - if (!open_uri(attachment.file.get_uri())) { - // Failing that, trigger a save dialog. - Gee.List attachment_list = new Gee.ArrayList(); - attachment_list.add(attachment); - on_save_attachments(attachment_list); + + foreach (Geary.Attachment attachment in attachments) { + string uri = attachment.file.get_uri(); + try { + this.application.show_uri(uri); + } catch (Error err) { + message("Unable to open attachment \"%s\": %s", uri, err.message); + } } } - - private bool do_overwrite_confirmation(File to_overwrite) { - string primary = _("A file named \"%s\" already exists. Do you want to replace it?").printf( - to_overwrite.get_basename()); - string secondary = _("The file already exists in \"%s\". Replacing it will overwrite its contents.").printf( - to_overwrite.get_parent().get_basename()); - - ConfirmationDialog dialog = new ConfirmationDialog(main_window, primary, secondary, _("_Replace")); - - return (dialog.run() == Gtk.ResponseType.OK); - } - - private Gtk.FileChooserConfirmation on_confirm_overwrite(Gtk.FileChooser chooser) { - // this is only called when choosing one file - return do_overwrite_confirmation(chooser.get_file()) ? Gtk.FileChooserConfirmation.ACCEPT_FILENAME - : Gtk.FileChooserConfirmation.SELECT_AGAIN; - } - - private void on_save_attachments(Gee.List attachments) { - if (attachments.size == 0) - return; - - Gtk.FileChooserAction action = (attachments.size == 1) - ? Gtk.FileChooserAction.SAVE - : Gtk.FileChooserAction.SELECT_FOLDER; - Gtk.FileChooserDialog dialog = new Gtk.FileChooserDialog(null, main_window, action, - Stock._CANCEL, Gtk.ResponseType.CANCEL, Stock._SAVE, Gtk.ResponseType.ACCEPT, null); - if (last_save_directory != null) - dialog.set_current_folder(last_save_directory.get_path()); - if (attachments.size == 1) { - dialog.set_current_name(attachments[0].file.get_basename()); - dialog.set_do_overwrite_confirmation(true); - // use custom overwrite confirmation so it looks consistent whether one or many - // attachments are being saved - dialog.confirm_overwrite.connect(on_confirm_overwrite); + + private async void save_attachment_to_file(Geary.Attachment attachment, + string? alt_text) { + string file_name = yield attachment.get_safe_file_name(alt_text); + try { + yield this.prompt_save_buffer( + file_name, new Geary.Memory.FileBuffer(attachment.file, true) + ); + } catch (Error err) { + message("Unable to save buffer to \"%s\": %s", file_name, err.message); } - dialog.set_create_folders(true); - dialog.set_local_only(false); - + } + + private async void save_attachments_to_file(Gee.Collection attachments) { +#if GTK_3_20 + Gtk.FileChooserNative dialog = new_save_chooser(Gtk.FileChooserAction.SELECT_FOLDER); +#else + Gtk.FileChooserDialog dialog = new_save_chooser(Gtk.FileChooserAction.SELECT_FOLDER); +#endif + bool accepted = (dialog.run() == Gtk.ResponseType.ACCEPT); string? filename = dialog.get_filename(); @@ -2056,100 +2053,126 @@ if (!accepted || Geary.String.is_empty(filename)) return; - File destination = File.new_for_path(filename); - - // Proceeding, save this as last destination directory - last_save_directory = (attachments.size == 1) ? destination.get_parent() : destination; - - debug("Saving attachments to %s", destination.get_path()); - - // Save each one, checking for overwrite only if multiple attachments are being written + File dest_dir = File.new_for_path(filename); + this.application.config.attachments_dir = dest_dir.get_path(); + + debug("Saving attachments to %s", dest_dir.get_path()); + foreach (Geary.Attachment attachment in attachments) { File source_file = attachment.file; - File dest_file = (attachments.size == 1) ? destination : destination.get_child(attachment.file.get_basename()); - - if (attachments.size > 1 && dest_file.query_exists() && !do_overwrite_confirmation(dest_file)) + File dest_file = dest_dir.get_child(yield attachment.get_safe_file_name()); + if (dest_file.query_exists() && !do_overwrite_confirmation(dest_file)) return; - - debug("Copying %s to %s...", source_file.get_path(), dest_file.get_path()); - - source_file.copy_async.begin(dest_file, FileCopyFlags.OVERWRITE, Priority.DEFAULT, null, - null, on_save_completed); - } - } - - private void on_save_completed(Object? source, AsyncResult result) { - try { - ((File) source).copy_async.end(result); - } catch (Error error) { - message("Failed to copy attachment %s to destination: %s", ((File) source).get_path(), - error.message); + + try { + yield write_buffer_to_file( + new Geary.Memory.FileBuffer(source_file, true), dest_file + ); + } catch (Error error) { + message( + "Failed to copy attachment %s to destination: %s", + source_file.get_path(), error.message + ); + } } } - - private void on_save_buffer_to_file(string? filename, Geary.Memory.Buffer buffer) { - Gtk.FileChooserDialog dialog = new Gtk.FileChooserDialog(null, main_window, Gtk.FileChooserAction.SAVE, - Stock._CANCEL, Gtk.ResponseType.CANCEL, Stock._SAVE, Gtk.ResponseType.ACCEPT, null); - if (last_save_directory != null) - dialog.set_current_folder(last_save_directory.get_path()); + + private async void prompt_save_buffer(string? filename, Geary.Memory.Buffer buffer) + throws Error { +#if GTK_3_20 + Gtk.FileChooserNative dialog = new_save_chooser(Gtk.FileChooserAction.SAVE); +#else + Gtk.FileChooserDialog dialog = new_save_chooser(Gtk.FileChooserAction.SAVE); +#endif if (!Geary.String.is_empty(filename)) dialog.set_current_name(filename); dialog.set_do_overwrite_confirmation(true); - dialog.confirm_overwrite.connect(on_confirm_overwrite); - dialog.set_create_folders(true); - dialog.set_local_only(false); - + dialog.confirm_overwrite.connect((chooser) => { + return do_overwrite_confirmation(chooser.get_file()) + ? Gtk.FileChooserConfirmation.ACCEPT_FILENAME + : Gtk.FileChooserConfirmation.SELECT_AGAIN; + }); bool accepted = (dialog.run() == Gtk.ResponseType.ACCEPT); string? accepted_filename = dialog.get_filename(); - + dialog.destroy(); - - if (!accepted || Geary.String.is_empty(accepted_filename)) - return; - - File destination = File.new_for_path(accepted_filename); - - // Proceeding, save this as last destination directory - last_save_directory = destination.get_parent(); - - debug("Saving buffer to %s", destination.get_path()); - - // Create the file where the image will be saved and get the output stream. - try { - FileOutputStream outs = destination.replace(null, false, FileCreateFlags.REPLACE_DESTINATION, - null); - outs.splice_async.begin(buffer.get_input_stream(), - OutputStreamSpliceFlags.CLOSE_SOURCE | OutputStreamSpliceFlags.CLOSE_TARGET, - Priority.DEFAULT, null, on_save_buffer_to_file_completed); - } catch (Error err) { - message("Unable to save buffer to \"%s\": %s", filename, err.message); + + if (accepted && !Geary.String.is_empty(accepted_filename)) { + File destination = File.new_for_path(accepted_filename); + this.application.config.attachments_dir = destination.get_parent().get_path(); + yield write_buffer_to_file(buffer, destination); } } - - private void on_save_buffer_to_file_completed(Object? source, AsyncResult result) { - try { - ((FileOutputStream) source).splice_async.end(result); - } catch (Error err) { - message("Failed to save buffer to file: %s", err.message); - } + + private async void write_buffer_to_file(Geary.Memory.Buffer buffer, File dest) + throws Error { + debug("Saving buffer to: %s", dest.get_path()); + FileOutputStream outs = dest.replace( + null, false, FileCreateFlags.REPLACE_DESTINATION, null + ); + yield outs.splice_async( + buffer.get_input_stream(), + OutputStreamSpliceFlags.CLOSE_SOURCE | OutputStreamSpliceFlags.CLOSE_TARGET, + Priority.DEFAULT, null + ); } - + + private bool do_overwrite_confirmation(File to_overwrite) { + string primary = _("A file named “%s” already exists. Do you want to replace it?").printf( + to_overwrite.get_basename()); + string secondary = _("The file already exists in “%s”. Replacing it will overwrite its contents.").printf( + to_overwrite.get_parent().get_basename()); + + ConfirmationDialog dialog = new ConfirmationDialog(main_window, primary, secondary, _("_Replace"), "destructive-action"); + + return (dialog.run() == Gtk.ResponseType.OK); + } + +#if GTK_3_20 + private inline Gtk.FileChooserNative new_save_chooser(Gtk.FileChooserAction action) { + Gtk.FileChooserNative dialog = new Gtk.FileChooserNative( + null, + this.main_window, + action, + Stock._SAVE, + Stock._CANCEL + ); +#else + private inline Gtk.FileChooserDialog new_save_chooser(Gtk.FileChooserAction action) { + Gtk.FileChooserDialog dialog = new Gtk.FileChooserDialog( + null, + this.main_window, + action, + Stock._CANCEL, Gtk.ResponseType.CANCEL, + Stock._SAVE, Gtk.ResponseType.ACCEPT, + null + ); +#endif + string? dir = this.application.config.attachments_dir; + if (!Geary.String.is_empty(dir)) + dialog.set_current_folder(dir); + dialog.set_create_folders(true); + dialog.set_local_only(false); + return dialog; + } + // Opens a link in an external browser. private bool open_uri(string _link) { string link = _link; - + // Support web URLs that ommit the protocol. if (!link.contains(":")) link = "http://" + link; - - bool ret = false; + + bool success = true; try { - ret = Gtk.show_uri(main_window.get_screen(), link, Gdk.CURRENT_TIME); + this.application.show_uri(link); } catch (Error err) { - debug("Unable to open URL. %s", err.message); + success = false; + debug("Unable to open URL: \"%s\" %s", link, err.message); } - - return ret; + + return success; } internal bool close_composition_windows(bool main_window_only = false) { @@ -2203,26 +2226,45 @@ // If we deleted all composer windows without the user cancelling, we can exit. return true; } - - // message is the email from whose menu this reply or forward was triggered. If null, - // this was triggered from the headerbar or shortcut. + + // View contains the email from whose menu this reply or forward + // was triggered. If null, this was triggered from the headerbar + // or shortcut. private void create_reply_forward_widget(ComposerWidget.ComposeType compose_type, - Geary.Email? message) { - string? quote; - Geary.Email? quote_message = main_window.conversation_viewer.get_selected_message(out quote); - if (message == null) - message = quote_message; - if (quote_message != message) - quote = null; - create_compose_widget(compose_type, message, quote); + owned ConversationEmail? email_view) { + if (email_view == null) { + ConversationListBox? list_view = + main_window.conversation_viewer.current_list; + if (list_view != null) { + email_view = list_view.get_reply_target(); + } + } + + if (email_view != null) { + email_view.get_selection_for_quoting.begin((obj, res) => { + string? quote = email_view.get_selection_for_quoting.end(res); + create_compose_widget(compose_type, email_view.email, quote); + }); + } else { + create_compose_widget(compose_type, email_view.email, null); + } } - + private void create_compose_widget(ComposerWidget.ComposeType compose_type, Geary.Email? referred = null, string? quote = null, string? mailto = null, bool is_draft = false) { create_compose_widget_async.begin(compose_type, referred, quote, mailto, is_draft); } - + + /** + * Creates a composer widget. Depending on the arguments, this can be inline in the + * conversation or as a new window. + * @param compose_type - Whether it's a new message, a reply, a forwarded mail, ... + * @param referred - The mail of which we should copy the from/to/... addresses + * @param quote - The quote after the mail body + * @param mailto - A "mailto:"-link + * @param is_draft - Whether we're starting from a draft (true) or a new mail (false) + */ private async void create_compose_widget_async(ComposerWidget.ComposeType compose_type, Geary.Email? referred = null, string? quote = null, string? mailto = null, bool is_draft = false) { @@ -2232,48 +2274,56 @@ bool inline; if (!should_create_new_composer(compose_type, referred, quote, is_draft, out inline)) return; - + ComposerWidget widget; if (mailto != null) { - widget = new ComposerWidget.from_mailto(current_account, mailto); + widget = new ComposerWidget.from_mailto(current_account, mailto, application.config); } else { - Geary.Email? full = null; - if (referred != null) { - try { - full = yield email_stores.get(current_folder.account).fetch_email_async( - referred.id, Geary.ComposedEmail.REQUIRED_REPLY_FIELDS, - Geary.Folder.ListFlags.NONE, cancellable_folder); - } catch (Error e) { - message("Could not load full message: %s", e.message); - } - } - - widget = new ComposerWidget(current_account, compose_type, full, quote, is_draft); - if (is_draft) { - yield widget.restore_draft_state_async(current_account); - main_window.conversation_viewer.blacklist_by_id(referred.id); - } + widget = new ComposerWidget(current_account, compose_type, application.config); } - widget.show_all(); - + widget.destroy.connect(on_composer_widget_destroy); + widget.link_activated.connect((uri) => { open_uri(uri); }); + // We want to keep track of the open composer windows, so we can allow the user to cancel // an exit without losing their data. composer_widgets.add(widget); debug(@"Creating composer of type $(widget.compose_type); $(composer_widgets.size) composers total"); - widget.destroy.connect(on_composer_widget_destroy); - + if (inline) { if (widget.state == ComposerWidget.ComposerState.NEW || - widget.state == ComposerWidget.ComposerState.PANED) - main_window.conversation_viewer.set_paned_composer(widget); - else - new ComposerEmbed(widget, main_window.conversation_viewer, referred); // is_draft + widget.state == ComposerWidget.ComposerState.PANED) { + main_window.conversation_viewer.do_compose(widget); + this.application.get_action( + ACTION_FIND_IN_CONVERSATION + ).set_sensitive(false); + } else { + main_window.conversation_viewer.do_compose_embedded( + widget, + referred, + is_draft + ); + } } else { new ComposerWindow(widget); widget.state = ComposerWidget.ComposerState.DETACHED; } + + // Load the widget's content + Geary.Email? full = null; + if (referred != null) { + try { + full = yield email_stores.get(current_folder.account).fetch_email_async( + referred.id, Geary.ComposedEmail.REQUIRED_REPLY_FIELDS, + Geary.Folder.ListFlags.NONE, cancellable_folder); + } catch (Error e) { + message("Could not load full message: %s", e.message); + } + } + yield widget.load(full, quote, is_draft); + + widget.set_focus(); } - + private bool should_create_new_composer(ComposerWidget.ComposeType? compose_type, Geary.Email? referred, string? quote, bool is_draft, out bool inline) { inline = true; @@ -2307,7 +2357,7 @@ if (compose_type == ComposerWidget.ComposeType.NEW_MESSAGE) { foreach (ComposerWidget cw in composer_widgets) { if (cw.state == ComposerWidget.ComposerState.NEW) { - if (!cw.blank) { + if (!cw.is_blank) { inline = false; return true; } else { @@ -2321,8 +2371,8 @@ // Find out what to do with the inline composers. // TODO: Remove this in favor of automatically saving drafts main_window.present(); - QuestionDialog dialog = new QuestionDialog(main_window, _("Close open draft messages?"), null, - Stock._CLOSE, Stock._CANCEL); + ConfirmationDialog dialog = new ConfirmationDialog(main_window, _("Close open draft messages?"), + null, Stock._CLOSE, "destructive-action"); if (dialog.run() == Gtk.ResponseType.OK) { Gee.List composers_to_destroy = new Gee.ArrayList(); foreach (ComposerWidget cw in composer_widgets) { @@ -2356,61 +2406,53 @@ if (waiting_to_close.remove((ComposerWidget) sender)) { // If we just removed the last window in the waiting to close list, it's time to exit! if (waiting_to_close.size == 0) - GearyApplication.instance.exit(); + this.application.exit(); } } private void on_new_message() { create_compose_widget(ComposerWidget.ComposeType.NEW_MESSAGE); } - - private void on_reply_to_message(Geary.Email message) { - create_reply_forward_widget(ComposerWidget.ComposeType.REPLY, message); + + private void on_reply_to_message(ConversationEmail target_view) { + create_reply_forward_widget(ComposerWidget.ComposeType.REPLY, target_view); } - + private void on_reply_to_message_action() { create_reply_forward_widget(ComposerWidget.ComposeType.REPLY, null); } - - private void on_reply_all_message(Geary.Email message) { - create_reply_forward_widget(ComposerWidget.ComposeType.REPLY_ALL, message); + + private void on_reply_all_message(ConversationEmail target_view) { + create_reply_forward_widget(ComposerWidget.ComposeType.REPLY_ALL, target_view); } - + private void on_reply_all_message_action() { create_reply_forward_widget(ComposerWidget.ComposeType.REPLY_ALL, null); } - - private void on_forward_message(Geary.Email message) { - create_reply_forward_widget(ComposerWidget.ComposeType.FORWARD, message); + + private void on_forward_message(ConversationEmail target_view) { + create_reply_forward_widget(ComposerWidget.ComposeType.FORWARD, target_view); } - + private void on_forward_message_action() { create_reply_forward_widget(ComposerWidget.ComposeType.FORWARD, null); } - + private void on_find_in_conversation_action() { - main_window.conversation_viewer.show_find_bar(); + this.main_window.conversation_viewer.conversation_find_bar.set_search_mode(true); } - - private void on_find_next_in_conversation_action() { - main_window.conversation_viewer.find(true); - } - - private void on_find_previous_in_conversation_action() { - main_window.conversation_viewer.find(false); - } - - private void on_archive_message() { + + private void on_archive_conversation() { archive_or_delete_selection_async.begin(true, false, cancellable_folder, on_archive_or_delete_selection_finished); } - private void on_trash_message() { + private void on_trash_conversation() { archive_or_delete_selection_async.begin(false, true, cancellable_folder, on_archive_or_delete_selection_finished); } - private void on_delete_message() { + private void on_delete_conversation() { archive_or_delete_selection_async.begin(false, false, cancellable_folder, on_archive_or_delete_selection_finished); } @@ -2454,7 +2496,7 @@ _("Empty all email from your %s folder?").printf(special_folder_type.get_display_name()), _("This removes the email from Geary and your email server.") + " " + _("This cannot be undone.") + "", - _("Empty %s").printf(special_folder_type.get_display_name())); + _("Empty %s").printf(special_folder_type.get_display_name()), "destructive-action"); dialog.use_secondary_markup(true); dialog.set_focus_response(Gtk.ResponseType.CANCEL); @@ -2500,10 +2542,10 @@ public bool confirm_delete(int num_messages) { main_window.present(); - AlertDialog dialog = new ConfirmationDialog(main_window, ngettext( + ConfirmationDialog dialog = new ConfirmationDialog(main_window, ngettext( "Do you want to permanently delete this message?", "Do you want to permanently delete these messages?", num_messages), - null, _("Delete")); + null, _("Delete"), "destructive-action"); return (dialog.run() == Gtk.ResponseType.OK); } @@ -2512,19 +2554,20 @@ Cancellable? cancellable) throws Error { if (!can_switch_conversation_view()) return; - - if (main_window.conversation_viewer.current_conversation != null - && main_window.conversation_viewer.current_conversation == last_deleted_conversation) { + + ConversationListBox list_view = + main_window.conversation_viewer.current_list; + if (list_view != null && + list_view.conversation == last_deleted_conversation) { debug("Not archiving/trashing/deleting; viewed conversation is last deleted conversation"); return; } - + last_deleted_conversation = selected_conversations.size > 0 ? Geary.traverse(selected_conversations).first() : null; - - // Return focus to the conversation list from the clicked toolbar button. - main_window.conversation_list_view.grab_focus(); - + + this.main_window.conversation_list_view.set_changing_selection(true); + Gee.List ids = get_selected_email_ids(false); if (archive) { debug("Archiving selected messages"); @@ -2579,6 +2622,7 @@ } catch (Error e) { debug("Unable to archive/trash/delete messages: %s", e.message); } + this.main_window.conversation_list_view.set_changing_selection(false); } private void save_revokable(Geary.Revokable? new_revokable, string? description) { @@ -2600,15 +2644,15 @@ revokable.notify[Geary.Revokable.PROP_IN_PROCESS].connect(update_revokable_action); revokable.committed.connect(on_revokable_committed); } - - Gtk.Action undo_action = GearyApplication.instance.get_action(ACTION_UNDO); + + Gtk.Action undo_action = this.application.get_action(ACTION_UNDO); undo_action.tooltip = (revokable != null && description != null) ? description : _("Undo (Ctrl+Z)"); - + update_revokable_action(); } private void update_revokable_action() { - Gtk.Action undo_action = GearyApplication.instance.get_action(ACTION_UNDO); + Gtk.Action undo_action = this.application.get_action(ACTION_UNDO); undo_action.sensitive = revokable != null && revokable.valid && !revokable.in_process; } @@ -2621,9 +2665,9 @@ private void on_revokable_committed(Geary.Revokable? committed_revokable) { if (committed_revokable == null) return; - + // use existing description - Gtk.Action undo_action = GearyApplication.instance.get_action(ACTION_UNDO); + Gtk.Action undo_action = this.application.get_action(ACTION_UNDO); save_revokable(committed_revokable, undo_action.tooltip); } @@ -2645,58 +2689,120 @@ debug("Unable to revoke operation: %s", err.message); } } - + private void on_zoom_in() { - main_window.conversation_viewer.web_view.zoom_in(); + ConversationListBox? view = + main_window.conversation_viewer.current_list; + if (view != null) { + view.zoom_in(); + } } private void on_zoom_out() { - main_window.conversation_viewer.web_view.zoom_out(); + ConversationListBox? view = + main_window.conversation_viewer.current_list; + if (view != null) { + view.zoom_out(); + } } private void on_zoom_normal() { - main_window.conversation_viewer.web_view.zoom_level = 1.0f; - } - - private void on_search() { - main_window.search_bar.give_search_focus(); + ConversationListBox? view = + main_window.conversation_viewer.current_list; + if (view != null) { + view.zoom_reset(); + } } - + private void on_conversation_list() { - main_window.conversation_list_view.grab_focus(); + this.main_window.conversation_list_view.grab_focus(); } - + private void on_sent(Geary.RFC822.Message rfc822) { Libnotify.play_sound("message-sent-email"); } - - private void on_link_selected(string link) { - if (link.down().has_prefix(Geary.ComposedEmail.MAILTO_SCHEME)) { - compose_mailto(link); - } else { - open_uri(link); + + private void on_conversation_view_added(ConversationListBox list) { + list.email_added.connect(on_conversation_viewer_email_added); + list.mark_emails.connect(on_conversation_viewer_mark_emails); + } + + private void on_conversation_viewer_email_added(ConversationEmail view) { + view.attachments_activated.connect(on_attachments_activated); + view.reply_to_message.connect(on_reply_to_message); + view.reply_all_message.connect(on_reply_all_message); + view.forward_message.connect(on_forward_message); + view.edit_draft.connect((draft_view) => { + create_compose_widget( + ComposerWidget.ComposeType.NEW_MESSAGE, + draft_view.email, null, null, true + ); + }); + foreach (ConversationMessage msg_view in view) { + msg_view.link_activated.connect((link) => { + if (link.down().has_prefix(Geary.ComposedEmail.MAILTO_SCHEME)) { + compose_mailto(link); + } else { + open_uri(link); + } + }); + msg_view.save_image.connect((url, alt_text, buf) => { + on_save_image_extended(view, url, alt_text, buf); + }); + msg_view.search_activated.connect((op, value) => { + string search = op + ":" + value; + show_search_bar(search); + }); + } + view.save_attachments.connect(on_save_attachments); + view.view_source.connect(on_view_source); + } + + private void on_view_source(ConversationEmail email_view) { + string source = (email_view.email.header.buffer.to_string() + + email_view.email.body.buffer.to_string()); + string temporary_filename; + try { + int temporary_handle = FileUtils.open_tmp("geary-message-XXXXXX.txt", + out temporary_filename); + FileUtils.set_contents(temporary_filename, source); + FileUtils.close(temporary_handle); + + // ensure this file is only readable by the user ... this + // needs to be done after the file is closed + FileUtils.chmod(temporary_filename, (int) (Posix.S_IRUSR | Posix.S_IWUSR)); + + string temporary_uri = Filename.to_uri(temporary_filename, null); + this.application.show_uri(temporary_uri); + } catch (Error error) { + ErrorDialog dialog = new ErrorDialog( + main_window, + _("Failed to open default text editor."), + error.message + ); + dialog.run(); } } // Disables all single-message buttons and enables all multi-message buttons. public void enable_multiple_message_buttons() { update_tooltips(); - + // Single message only buttons. - GearyApplication.instance.actions.get_action(ACTION_REPLY_TO_MESSAGE).sensitive = false; - GearyApplication.instance.actions.get_action(ACTION_REPLY_ALL_MESSAGE).sensitive = false; - GearyApplication.instance.actions.get_action(ACTION_FORWARD_MESSAGE).sensitive = false; + this.application.actions.get_action(ACTION_REPLY_TO_MESSAGE).sensitive = false; + this.application.actions.get_action(ACTION_REPLY_ALL_MESSAGE).sensitive = false; + this.application.actions.get_action(ACTION_FORWARD_MESSAGE).sensitive = false; // Mutliple message buttons. - GearyApplication.instance.actions.get_action(ACTION_MOVE_MENU).sensitive = + this.application.actions.get_action(ACTION_MOVE_MENU).sensitive = (current_folder is Geary.FolderSupport.Move); - GearyApplication.instance.actions.get_action(ACTION_ARCHIVE_MESSAGE).sensitive = + this.application.actions.get_action(ACTION_ARCHIVE_CONVERSATION).sensitive = (current_folder is Geary.FolderSupport.Archive); - GearyApplication.instance.actions.get_action(ACTION_TRASH_MESSAGE).sensitive = + this.application.actions.get_action(ACTION_TRASH_CONVERSATION).sensitive = current_folder_supports_trash(); - GearyApplication.instance.actions.get_action(ACTION_DELETE_MESSAGE).sensitive = + this.application.actions.get_action(ACTION_DELETE_CONVERSATION).sensitive = (current_folder is Geary.FolderSupport.Remove); - + cancel_context_dependent_buttons(); enable_context_dependent_buttons_async.begin(true, cancellable_context_dependent_buttons); } @@ -2709,19 +2815,19 @@ bool respond_sensitive = sensitive; if (current_folder != null && current_folder.special_folder_type == Geary.SpecialFolderType.DRAFTS) respond_sensitive = false; - - GearyApplication.instance.actions.get_action(ACTION_REPLY_TO_MESSAGE).sensitive = respond_sensitive; - GearyApplication.instance.actions.get_action(ACTION_REPLY_ALL_MESSAGE).sensitive = respond_sensitive; - GearyApplication.instance.actions.get_action(ACTION_FORWARD_MESSAGE).sensitive = respond_sensitive; - GearyApplication.instance.actions.get_action(ACTION_MOVE_MENU).sensitive = + + this.application.actions.get_action(ACTION_REPLY_TO_MESSAGE).sensitive = respond_sensitive; + this.application.actions.get_action(ACTION_REPLY_ALL_MESSAGE).sensitive = respond_sensitive; + this.application.actions.get_action(ACTION_FORWARD_MESSAGE).sensitive = respond_sensitive; + this.application.actions.get_action(ACTION_MOVE_MENU).sensitive = sensitive && (current_folder is Geary.FolderSupport.Move); - GearyApplication.instance.actions.get_action(ACTION_ARCHIVE_MESSAGE).sensitive = sensitive + this.application.actions.get_action(ACTION_ARCHIVE_CONVERSATION).sensitive = sensitive && (current_folder is Geary.FolderSupport.Archive); - GearyApplication.instance.actions.get_action(ACTION_TRASH_MESSAGE).sensitive = sensitive + this.application.actions.get_action(ACTION_TRASH_CONVERSATION).sensitive = sensitive && current_folder_supports_trash(); - GearyApplication.instance.actions.get_action(ACTION_DELETE_MESSAGE).sensitive = sensitive + this.application.actions.get_action(ACTION_DELETE_CONVERSATION).sensitive = sensitive && (current_folder is Geary.FolderSupport.Remove); - + cancel_context_dependent_buttons(); enable_context_dependent_buttons_async.begin(sensitive, cancellable_context_dependent_buttons); } @@ -2748,43 +2854,32 @@ Gee.HashSet supported_operations = new Gee.HashSet(); if (selected_operations != null) supported_operations.add_all(selected_operations.get_values()); - - GearyApplication.instance.actions.get_action(ACTION_MARK_AS_MENU).sensitive = + + this.application.actions.get_action(ACTION_MARK_AS_MENU).sensitive = sensitive && (supported_operations.contains(typeof(Geary.FolderSupport.Mark))); - GearyApplication.instance.actions.get_action(ACTION_COPY_MENU).sensitive = + this.application.actions.get_action(ACTION_COPY_MENU).sensitive = sensitive && (supported_operations.contains(typeof(Geary.FolderSupport.Copy))); } - + // Updates tooltip text depending on number of conversations selected. private void update_tooltips() { bool single = selected_conversations.size == 1; - - GearyApplication.instance.actions.get_action(ACTION_MARK_AS_MENU).tooltip = single ? + + this.application.actions.get_action(ACTION_MARK_AS_MENU).tooltip = single ? MARK_MESSAGE_MENU_TOOLTIP_SINGLE : MARK_MESSAGE_MENU_TOOLTIP_MULTIPLE; - GearyApplication.instance.actions.get_action(ACTION_COPY_MENU).tooltip = single ? + this.application.actions.get_action(ACTION_COPY_MENU).tooltip = single ? LABEL_MESSAGE_TOOLTIP_SINGLE : LABEL_MESSAGE_TOOLTIP_MULTIPLE; - GearyApplication.instance.actions.get_action(ACTION_MOVE_MENU).tooltip = single ? + this.application.actions.get_action(ACTION_MOVE_MENU).tooltip = single ? MOVE_MESSAGE_TOOLTIP_SINGLE : MOVE_MESSAGE_TOOLTIP_MULTIPLE; - - GearyApplication.instance.actions.get_action(ACTION_ARCHIVE_MESSAGE).tooltip = single ? - ARCHIVE_MESSAGE_TOOLTIP_SINGLE : ARCHIVE_MESSAGE_TOOLTIP_MULTIPLE; - GearyApplication.instance.actions.get_action(ACTION_TRASH_MESSAGE).tooltip = single ? - TRASH_MESSAGE_TOOLTIP_SINGLE : TRASH_MESSAGE_TOOLTIP_MULTIPLE; - GearyApplication.instance.actions.get_action(ACTION_DELETE_MESSAGE).tooltip = single ? - DELETE_MESSAGE_TOOLTIP_SINGLE : DELETE_MESSAGE_TOOLTIP_MULTIPLE; - } - - public void compose_mailto(string mailto) { - if (current_account == null) { - // Schedule the send for after we have an account open. - pending_mailtos.add(mailto); - - return; - } - - create_compose_widget(ComposerWidget.ComposeType.NEW_MESSAGE, null, null, mailto); + + this.application.actions.get_action(ACTION_ARCHIVE_CONVERSATION).tooltip = single ? + ARCHIVE_CONVERSATION_TOOLTIP_SINGLE : ARCHIVE_CONVERSATION_TOOLTIP_MULTIPLE; + this.application.actions.get_action(ACTION_TRASH_CONVERSATION).tooltip = single ? + TRASH_CONVERSATION_TOOLTIP_SINGLE : TRASH_CONVERSATION_TOOLTIP_MULTIPLE; + this.application.actions.get_action(ACTION_DELETE_CONVERSATION).tooltip = single ? + DELETE_CONVERSATION_TOOLTIP_SINGLE : DELETE_CONVERSATION_TOOLTIP_MULTIPLE; } - + // Returns a list of composer windows for an account, or null if none. public Gee.List? get_composer_widgets_for_account(Geary.AccountInformation account) { Gee.LinkedList ret = Geary.traverse(composer_widgets) @@ -2793,7 +2888,14 @@ return ret.size >= 1 ? ret : null; } - + + private void show_search_bar(string? text = null) { + main_window.search_bar.give_search_focus(); + if (text != null) { + main_window.search_bar.set_search_text(text); + } + } + private void do_search(string search_text) { Geary.SearchFolder? folder = null; try { @@ -2820,31 +2922,14 @@ return; cancel_search(); // Stop any search in progress. - - folder.search(search_text, GearyApplication.instance.config.get_search_strategy(), - cancellable_search); - + + folder.search(search_text, this.application.config.get_search_strategy(), + this.cancellable_search); + main_window.folder_list.set_search(folder); search_text_changed(main_window.search_bar.search_text); } - - private void on_search_text_changed(string search_text) { - // So we don't thrash the disk as the user types, we run the actual - // search after a quick delay when they finish typing. - if (search_timeout_id != 0) - Source.remove(search_timeout_id); - - search_timeout_id = Timeout.add(SEARCH_TIMEOUT_MSEC, on_search_timeout, Priority.LOW); - } - - private bool on_search_timeout() { - search_timeout_id = 0; - - do_search(main_window.search_bar.search_text); - - return false; - } - + /** * Returns a read-only set of currently selected conversations. */ @@ -2878,5 +2963,51 @@ debug("Could not locate inbox: %s", e.message); } } + + private void on_save_attachments(Gee.Collection attachments) { + if (attachments.size == 1) { + this.save_attachment_to_file.begin(attachments.to_array()[0], null); + } else { + this.save_attachments_to_file.begin(attachments); + } + } + + private void on_save_image_extended(ConversationEmail view, + string url, + string? alt_text, + Geary.Memory.Buffer resource_buf) { + // This is going to be either an inline image, or a remote + // image, so either treat it as an attachment ot assume we'll + // have a valid filename in the URL + + bool handled = false; + if (url.has_prefix(ClientWebView.CID_URL_PREFIX)) { + string cid = url.substring(ClientWebView.CID_URL_PREFIX.length); + Geary.Attachment? attachment = null; + try { + attachment = view.email.get_attachment_by_content_id(cid); + } catch (Error err) { + debug("Could not get attachment \"%s\": %s", cid, err.message); + } + if (attachment != null) { + this.save_attachment_to_file.begin(attachment, alt_text); + handled = true; + } + } + + if (!handled) { + File source = File.new_for_uri(url); + string filename = source.get_basename(); + this.prompt_save_buffer.begin( + filename, resource_buf, + (obj, res) => { + try { + this.prompt_save_buffer.end(res); + } catch (Error err) { + message("Unable to save buffer to \"%s\": %s", filename, err.message); + } + }); + } + } } diff -Nru geary-0.11.4/src/client/application/main.vala geary-0.12.0/src/client/application/main.vala --- geary-0.11.4/src/client/application/main.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/application/main.vala 2017-10-02 11:25:21.000000000 +0000 @@ -19,15 +19,23 @@ #if !DISABLE_POODLE Environment.set_variable("G_TLS_GNUTLS_PRIORITY", "NORMAL:%COMPAT:%LATEST_RECORD_VERSION:!VERS-SSL3.0", false); #endif - + + // Disable WebKit2 accelerated compositing here while we can't + // depend on there being an API to do it. AC isn't appropriate + // since Geary is likely to be doing anything that requires + // acceleration, and it is costs a lot in terms of performance + // and memory: + // https://lists.webkit.org/pipermail/webkit-gtk/2016-November/002863.html + Environment.set_variable("WEBKIT_DISABLE_COMPOSITING_MODE", "1", true); + GearyApplication app = new GearyApplication(); - + int ec = app.run(args); - + #if REF_TRACKING Geary.BaseObject.dump_refs(stdout); #endif - + return ec; } diff -Nru geary-0.11.4/src/client/application/secret-mediator.vala geary-0.12.0/src/client/application/secret-mediator.vala --- geary-0.11.4/src/client/application/secret-mediator.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/application/secret-mediator.vala 2017-10-02 11:25:21.000000000 +0000 @@ -4,110 +4,80 @@ * (version 2.1 or later). See the COPYING file in this distribution. */ -// LibSecret password adapter. +/** LibSecret password adapter. */ public class SecretMediator : Geary.CredentialsMediator, Object { - private const string OLD_GEARY_USERNAME_PREFIX = "org.yorba.geary username:"; - - private Geary.Nonblocking.Mutex dialog_mutex = new Geary.Nonblocking.Mutex(); - - private string get_key_name(Geary.Service service, string user) { - switch (service) { - case Geary.Service.IMAP: - return "org.yorba.geary imap_username:" + user; - - case Geary.Service.SMTP: - return "org.yorba.geary smtp_username:" + user; - - default: - assert_not_reached(); - } - } - private Geary.Credentials get_credentials(Geary.Service service, Geary.AccountInformation account_information) { - switch (service) { - case Geary.Service.IMAP: - return account_information.imap_credentials; + private const string ATTR_LOGIN = "login"; + private const string ATTR_HOST = "host"; + private const string ATTR_PROTO = "proto"; + + private static Secret.Schema schema = new Secret.Schema( + GearyApplication.APP_ID, + Secret.SchemaFlags.NONE, + ATTR_LOGIN, Secret.SchemaAttributeType.STRING, + ATTR_HOST, Secret.SchemaAttributeType.STRING, + ATTR_PROTO, Secret.SchemaAttributeType.STRING, + null + ); - case Geary.Service.SMTP: - return account_information.smtp_credentials; + private Geary.Nonblocking.Mutex dialog_mutex = new Geary.Nonblocking.Mutex(); - default: - assert_not_reached(); - } - } - private async string? migrate_old_password(string old_key, string new_key, Cancellable? cancellable) - throws Error { - string? password = yield Secret.password_lookup(Secret.SCHEMA_COMPAT_NETWORK, cancellable, - "user", old_key); - if (password != null) { - bool result = yield Secret.password_store(Secret.SCHEMA_COMPAT_NETWORK, - null, new_key, password, cancellable, "user", new_key); - if (result) - yield Secret.password_clear(Secret.SCHEMA_COMPAT_NETWORK, cancellable, "user", old_key); - } - - return password; - } - - public virtual async string? get_password_async( - Geary.Service service, Geary.AccountInformation account_information, Cancellable? cancellable = null) - throws Error { - string key_name = get_key_name(service, account_information.email); - string? password = yield Secret.password_lookup(Secret.SCHEMA_COMPAT_NETWORK, cancellable, - "user", key_name); - - // fallback to the old keyring key string for upgrading users + public virtual async string? get_password_async(Geary.Service service, + Geary.AccountInformation account, + Cancellable? cancellable = null) + throws Error { + string? password = yield Secret.password_lookupv( + SecretMediator.schema, new_attrs(service, account), cancellable + ); + if (password == null) { - Geary.Credentials creds = get_credentials(service, account_information); - - // <= 0.6 - password = yield migrate_old_password(get_key_name(service, creds.user), - key_name, cancellable); - - // 0.1 - if (password == null) { - password = yield migrate_old_password(OLD_GEARY_USERNAME_PREFIX + creds.user, - key_name, cancellable); - } + password = yield migrate_old_password(service, account, cancellable); } - + if (password == null) - debug("Unable to fetch password in libsecret keyring for %s", account_information.email); - + debug("Unable to fetch password in libsecret keyring for %s", account.id); + return password; } - - public virtual async void set_password_async( - Geary.Service service, Geary.AccountInformation account_information, - Cancellable? cancellable = null) throws Error { - string key_name = get_key_name(service, account_information.email); - Geary.Credentials credentials = get_credentials(service, account_information); + + public virtual async void set_password_async(Geary.Service service, + Geary.AccountInformation account, + Cancellable? cancellable = null) + throws Error { + Geary.Credentials credentials = get_credentials(service, account); try { - yield Secret.password_store(Secret.SCHEMA_COMPAT_NETWORK, - null, key_name, credentials.pass, cancellable, "user", key_name); + yield do_store(service, account, credentials.pass, cancellable); } catch (Error e) { - debug("Unable to store password for \"%s\" in libsecret keyring: %s", key_name, e.message); + debug("Unable to store password for \"%s\" %s in libsecret keyring: %s", + account.id, service.name(), e.message); } } - - public virtual async void clear_password_async( - Geary.Service service, Geary.AccountInformation account_information, Cancellable? cancellable = null) - throws Error { - // delete new-style and old-style locations - Geary.Credentials credentials = get_credentials(service, account_information); - // new-style - yield Secret.password_clear(Secret.SCHEMA_COMPAT_NETWORK, cancellable, "user", - get_key_name(service, account_information.email)); + public virtual async void clear_password_async(Geary.Service service, + Geary.AccountInformation account, + Cancellable? cancellable = null) + throws Error { + Geary.Credentials credentials = get_credentials(service, account); + yield Secret.password_clearv(SecretMediator.schema, + new_attrs(service, account), + cancellable); + + // Remove legacy formats + // <= 0.11 + yield Secret.password_clear( + Secret.SCHEMA_COMPAT_NETWORK, + cancellable, + "user", get_legacy_user(service, account.primary_mailbox.address) + ); // <= 0.6 - yield Secret.password_clear(Secret.SCHEMA_COMPAT_NETWORK, cancellable, "user", - get_key_name(service, credentials.user)); - // 0.1 - yield Secret.password_clear(Secret.SCHEMA_COMPAT_NETWORK, cancellable, "user", - OLD_GEARY_USERNAME_PREFIX + credentials.user); + yield Secret.password_clear( + Secret.SCHEMA_COMPAT_NETWORK, + cancellable, + "user", get_legacy_user(service, credentials.user) + ); } - + public virtual async bool prompt_passwords_async(Geary.ServiceFlag services, Geary.AccountInformation account_information, out string? imap_password, out string? smtp_password, @@ -157,4 +127,110 @@ } return true; } + + private async void do_store(Geary.Service service, + Geary.AccountInformation account, + string password, + Cancellable? cancellable) + throws Error { + yield Secret.password_storev( + SecretMediator.schema, + new_attrs(service, account), + Secret.COLLECTION_DEFAULT, + "Geary %s password".printf(service.name()), + password, + cancellable + ); + } + + private HashTable new_attrs(Geary.Service service, + Geary.AccountInformation account, + Cancellable? cancellable = null) { + string login = ""; + string host = ""; + switch (service) { + case Geary.Service.IMAP: + login = account.imap_credentials.user; + host = account.get_imap_endpoint().remote_address.get_hostname(); + break; + + case Geary.Service.SMTP: + login = account.smtp_credentials.user; + host = account.get_smtp_endpoint().remote_address.get_hostname(); + break; + + default: + warning("Unknown service type"); + break; + } + + HashTable table = new HashTable(str_hash, str_equal); + table.insert(ATTR_PROTO, service.name()); + table.insert(ATTR_HOST, host); + table.insert(ATTR_LOGIN, login); + return table; + } + + private Geary.Credentials get_credentials(Geary.Service service, Geary.AccountInformation account) { + switch (service) { + case Geary.Service.IMAP: + return account.imap_credentials; + + case Geary.Service.SMTP: + return account.smtp_credentials; + + default: + assert_not_reached(); + } + } + + private async string? migrate_old_password(Geary.Service service, + Geary.AccountInformation account, + Cancellable? cancellable = null) + throws Error { + // <= 0.11 + string? password = yield Secret.password_lookup( + Secret.SCHEMA_COMPAT_NETWORK, + cancellable, + "user", get_legacy_user(service, account.primary_mailbox.address) + ); + + // <= 0.6 + if (password == null) { + Geary.Credentials creds = get_credentials(service, account); + string user = get_legacy_user(service, creds.user); + password = yield Secret.password_lookup( + Secret.SCHEMA_COMPAT_NETWORK, + cancellable, + "user", user + ); + + // Clear the old password + if (password != null) { + yield Secret.password_clear( + Secret.SCHEMA_COMPAT_NETWORK, + cancellable, + "user", user + ); + } + } + + if (password != null) + yield do_store(service, account, password, cancellable); + + return password; + } + + private string get_legacy_user(Geary.Service service, string user) { + switch (service) { + case Geary.Service.IMAP: + return "org.yorba.geary imap_username:" + user; + case Geary.Service.SMTP: + return "org.yorba.geary smtp_username:" + user; + default: + warning("Unknown service type"); + return ""; + } + } + } diff -Nru geary-0.11.4/src/client/components/client-web-view.vala geary-0.12.0/src/client/components/client-web-view.vala --- geary-0.11.4/src/client/components/client-web-view.vala 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/src/client/components/client-web-view.vala 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,521 @@ +/* + * Copyright 2016 Software Freedom Conservancy Inc. + * Copyright 2016 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +/** + * Base class for all WebKit2 WebView instances used by the Geary client. + * + * This provides common functionality expected by the client for + * displaying HTML, such as common WebKit settings, desktop font + * integration, Inspector support, and remote and inline image + * handling. + */ +public class ClientWebView : WebKit.WebView { + + + /** URI Scheme and delimiter for internal resource loads. */ + public const string INTERNAL_URL_PREFIX = "geary:"; + + /** URI for internal message body page loads. */ + public const string INTERNAL_URL_BODY = INTERNAL_URL_PREFIX + "body"; + + /** URI Scheme and delimiter for images loaded by Content-ID. */ + public const string CID_URL_PREFIX = "cid:"; + private const string PREFERRED_HEIGHT_CHANGED = "preferredHeightChanged"; + private const string REMOTE_IMAGE_LOAD_BLOCKED = "remoteImageLoadBlocked"; + private const string SELECTION_CHANGED = "selectionChanged"; + + private const double ZOOM_DEFAULT = 1.0; + private const double ZOOM_FACTOR = 0.1; + + + // Workaround WK binding ctor not accepting any args + private class WebsiteDataManager : WebKit.WebsiteDataManager { + + public WebsiteDataManager(string base_cache_directory) { + // Use the cache dir for both cache and data since a) + // emails shouldn't be storing data anyway, and b) so WK + // doesn't use the default, shared data dir. + Object( + base_cache_directory: base_cache_directory, + base_data_directory: base_cache_directory + ); + } + + } + + + private static WebKit.WebContext? default_context = null; + + private static WebKit.UserScript? script = null; + private static WebKit.UserScript? allow_remote_images = null; + + /** + * Initialises WebKit.WebContext for use by the client. + */ + public static void init_web_context(Configuration config, + File web_extension_dir, + File cache_dir, + bool enable_logging) { + WebsiteDataManager data_manager = new WebsiteDataManager(cache_dir.get_path()); + WebKit.WebContext context = new WebKit.WebContext.with_website_data_manager(data_manager); + context.set_process_model(WebKit.ProcessModel.SHARED_SECONDARY_PROCESS); + context.set_cache_model(WebKit.CacheModel.DOCUMENT_BROWSER); + + context.register_uri_scheme("cid", (req) => { + ClientWebView? view = req.get_web_view() as ClientWebView; + if (view != null) { + view.handle_cid_request(req); + } + }); + context.register_uri_scheme("geary", (req) => { + ClientWebView? view = req.get_web_view() as ClientWebView; + if (view != null) { + view.handle_internal_request(req); + } + }); + context.initialize_web_extensions.connect((context) => { + context.set_web_extensions_directory( + web_extension_dir.get_path() + ); + context.set_web_extensions_initialization_user_data( + new Variant.boolean(enable_logging) + ); + }); + + update_spellcheck(context, config); + config.settings.changed[Configuration.SPELL_CHECK_LANGUAGES].connect(() => { + update_spellcheck(context, config); + }); + + ClientWebView.default_context = context; + } + + /** + * Loads static resources used by ClientWebView. + */ + public static void load_scripts() + throws Error { + ClientWebView.script = load_app_script( + "client-web-view.js" + ); + ClientWebView.allow_remote_images = load_app_script( + "client-web-view-allow-remote-images.js" + ); + } + + /** Loads an application-specific WebKit stylesheet. */ + protected static WebKit.UserStyleSheet load_app_stylesheet(string name) + throws Error { + return new WebKit.UserStyleSheet( + GioUtil.read_resource(name), + WebKit.UserContentInjectedFrames.TOP_FRAME, + WebKit.UserStyleLevel.USER, + null, + null + ); + } + + /** Loads a user stylesheet, if any. */ + protected static WebKit.UserStyleSheet? load_user_stylesheet(File name) { + WebKit.UserStyleSheet? user_stylesheet = null; + try { + Geary.Memory.FileBuffer buf = new Geary.Memory.FileBuffer(name, true); + user_stylesheet = new WebKit.UserStyleSheet( + buf.get_valid_utf8(), + WebKit.UserContentInjectedFrames.ALL_FRAMES, + WebKit.UserStyleLevel.USER, + null, + null + ); + } catch (IOError.NOT_FOUND err) { + debug("User CSS file does not exist: %s", err.message); + } catch (Error err) { + debug("Failed to load user CSS file: %s", err.message); + } + return user_stylesheet; + } + + /** Loads an application-specific WebKit JavaScript script. */ + protected static WebKit.UserScript load_app_script(string name) + throws Error { + return new WebKit.UserScript( + GioUtil.read_resource(name), + WebKit.UserContentInjectedFrames.TOP_FRAME, + WebKit.UserScriptInjectionTime.START, + null, + null + ); + } + + private static inline void update_spellcheck(WebKit.WebContext context, + Configuration config) { + context.set_spell_checking_enabled(config.spell_check_languages.length > 0); + context.set_spell_checking_languages(config.spell_check_languages); + } + + private static inline uint to_wk2_font_size(Pango.FontDescription font) { + Gdk.Screen? screen = Gdk.Screen.get_default(); + double dpi = screen != null ? screen.get_resolution() : 96.0; + double size = font.get_size(); + if (!font.get_size_is_absolute()) { + size = size / Pango.SCALE; + } + return (uint) (size * dpi / 72.0); + } + + + /** Delegate for UserContentManager message callbacks. */ + public delegate void JavaScriptMessageHandler(WebKit.JavascriptResult js_result); + + /** Determines if the view has any selected text */ + public bool has_selection { get; private set; default = false; } + + /** Determines if the view has started rendering the HTML */ + public bool has_valid_height { get; private set; default = false; } + + /** The HTML content's current preferred height. */ + public int preferred_height { get; private set; default = 0; } + + public string document_font { + get { + return _document_font; + } + set { + _document_font = value; + Pango.FontDescription font = Pango.FontDescription.from_string(value); + WebKit.Settings settings = get_settings(); + settings.default_font_family = font.get_family(); + settings.default_font_size = to_wk2_font_size(font); + set_settings(settings); + } + } + private string _document_font; + + public string monospace_font { + get { + return _monospace_font; + } + set { + _monospace_font = value; + Pango.FontDescription font = Pango.FontDescription.from_string(value); + WebKit.Settings settings = get_settings(); + settings.monospace_font_family = font.get_family(); + settings.default_monospace_font_size = to_wk2_font_size(font); + set_settings(settings); + } + } + private string _monospace_font; + + private weak string? body = null; + + private Gee.Map internal_resources = + new Gee.HashMap(); + + + /** Emitted when the view's selection has changed. */ + public signal void selection_changed(bool has_selection); + + /** Emitted when a user clicks a link in the view. */ + public signal void link_activated(string uri); + + /** Emitted when the view has loaded a resource added to it. */ + public signal void internal_resource_loaded(string name); + + /** Emitted when a remote image load was disallowed. */ + public signal void remote_image_load_blocked(); + + + public ClientWebView(Configuration config, + WebKit.UserContentManager? custom_manager = null) { + WebKit.Settings setts = new WebKit.Settings(); + setts.allow_modal_dialogs = false; + setts.default_charset = "UTF-8"; + setts.enable_developer_extras = Args.inspector; + setts.enable_fullscreen = false; + setts.enable_html5_database = false; + setts.enable_html5_local_storage = false; + setts.enable_java = false; + setts.enable_javascript = true; + setts.enable_media_stream = false; + setts.enable_offline_web_application_cache = false; + setts.enable_page_cache = false; + setts.enable_plugins = false; + setts.javascript_can_access_clipboard = true; + + WebKit.UserContentManager content_manager = + custom_manager ?? new WebKit.UserContentManager(); + content_manager.add_script(ClientWebView.script); + + Object( + web_context: ClientWebView.default_context, + user_content_manager: content_manager, + settings: setts + ); + + // XXX get the allow prefix from the extension somehow + + this.decide_policy.connect(on_decide_policy); + this.web_process_crashed.connect(() => { + debug("Web process crashed"); + return Gdk.EVENT_PROPAGATE; + }); + + register_message_handler( + PREFERRED_HEIGHT_CHANGED, on_preferred_height_changed + ); + register_message_handler( + REMOTE_IMAGE_LOAD_BLOCKED, on_remote_image_load_blocked + ); + register_message_handler( + SELECTION_CHANGED, on_selection_changed + ); + + // Manage zoom level + config.bind(Configuration.CONVERSATION_VIEWER_ZOOM_KEY, this, "zoom_level"); + this.scroll_event.connect(on_scroll_event); + + // Watch desktop font settings + Settings system_settings = config.gnome_interface; + system_settings.bind("document-font-name", this, + "document-font", SettingsBindFlags.DEFAULT); + system_settings.bind("monospace-font-name", this, + "monospace-font", SettingsBindFlags.DEFAULT); + } + + /** + * Loads a message HTML body into the view. + */ + public new void load_html(string? body, string? base_uri=null) { + this.body = body; + base.load_html(body, base_uri ?? INTERNAL_URL_BODY); + } + + /** + * Adds an resource that may be accessed from the view via a URL. + * + * Internal resources may be access via both the internal `geary` + * scheme (for resources such as an image inserted via the + * composer) or via the `cid` scheme (for standard HTML email IMG + * elements). + */ + public void add_internal_resource(string id, Geary.Memory.Buffer buf) { + this.internal_resources[id] = buf; + } + + /** + * Adds a set of internal resources to the view. + * + * @see add_internal_resource + */ + public void add_internal_resources(Gee.Map res) { + this.internal_resources.set_all(res); + } + + /** + * Allows loading any remote images found during page load. + * + * This must be called before HTML content is loaded to have any + * effect. + */ + public void allow_remote_image_loading() { + // Use a separate script here since we need to update the + // value of window.geary.allow_remote_image_loading after it + // was first created by client-web-view.js (which is loaded at + // the start of page load), but before the page load is + // started (so that any remote images present are actually + // loaded). + this.user_content_manager.add_script(ClientWebView.allow_remote_images); + } + + /** + * Load any remote images previously that were blocked. + */ + public void load_remote_images() { + this.call.begin(Geary.JS.callable("geary.loadRemoteImages"), null); + } + + /** + * Selects all content in the web view. + */ + public void select_all() { + execute_editing_command(WebKit.EDITING_COMMAND_SELECT_ALL); + } + + /** + * Copies selected content and sends it to the clipboard. + */ + public void copy_clipboard() { + execute_editing_command(WebKit.EDITING_COMMAND_COPY); + } + + public void reset_zoom() { + this.zoom_level == ZOOM_DEFAULT; + } + + public void zoom_in() { + this.zoom_level += (this.zoom_level * ZOOM_FACTOR); + } + + public void zoom_out() { + this.zoom_level -= (this.zoom_level * ZOOM_FACTOR); + } + + /** + * Invokes a {@link Geary.JS.Callable} on this web view. + */ + protected async WebKit.JavascriptResult call(Geary.JS.Callable target, + Cancellable? cancellable) + throws Error { + return yield run_javascript(target.to_string(), cancellable); + } + + /** + * Convenience function for registering and connecting JS messages. + */ + protected inline void register_message_handler(string name, + JavaScriptMessageHandler handler) { + // XXX cant use the delegate directly: b.g.o Bug 604781 + this.user_content_manager.script_message_received[name].connect( + (result) => { handler(result); } + ); + if (!get_user_content_manager().register_script_message_handler(name)) { + debug("Failed to register script message handler: %s", name); + } + } + + private void handle_cid_request(WebKit.URISchemeRequest request) { + if (!handle_internal_response(request)) { + request.finish_error(new FileError.NOENT("Unknown CID")); + } + } + + private void handle_internal_request(WebKit.URISchemeRequest request) { + if (request.get_uri() == INTERNAL_URL_BODY) { + Geary.Memory.Buffer buf = new Geary.Memory.StringBuffer(this.body); + request.finish(buf.get_input_stream(), buf.size, null); + } else if (!handle_internal_response(request)) { + request.finish_error(new FileError.NOENT("Unknown internal URL")); + } + } + + private bool handle_internal_response(WebKit.URISchemeRequest request) { + string name = soup_uri_decode(request.get_path()); + Geary.Memory.Buffer? buf = this.internal_resources[name]; + bool handled = false; + if (buf != null) { + request.finish(buf.get_input_stream(), buf.size, null); + internal_resource_loaded(name); + handled = true; + } + return handled; + } + + // This method is called only when determining if something should + // be loaded for display in the web view as the primary + // resource. It is not used to determine if sub-resources such as + // images or JS will be loaded. So we only allow geary:body loads, + // and notify but ignore if the user attempts to click on a link, + // and deny everything else. + private bool on_decide_policy(WebKit.WebView view, + WebKit.PolicyDecision policy, + WebKit.PolicyDecisionType type) { + if (type == WebKit.PolicyDecisionType.NAVIGATION_ACTION || + type == WebKit.PolicyDecisionType.NEW_WINDOW_ACTION) { + WebKit.NavigationPolicyDecision nav_policy = + (WebKit.NavigationPolicyDecision) policy; + switch (nav_policy.get_navigation_type()) { + case WebKit.NavigationType.OTHER: + if (nav_policy.request.uri == INTERNAL_URL_BODY) { + policy.use(); + } else { + policy.ignore(); + } + break; + + case WebKit.NavigationType.LINK_CLICKED: + // Let the app know a user activated a link, but don't + // try to load it ourselves. + link_activated(nav_policy.request.uri); + policy.ignore(); + break; + + default: + policy.ignore(); + break; + } + } else { + policy.ignore(); + } + return Gdk.EVENT_STOP; + } + + private bool on_scroll_event(Gdk.EventScroll event) { + if ((event.state & Gdk.ModifierType.CONTROL_MASK) != 0) { + double dir = 0; + if (event.direction == Gdk.ScrollDirection.UP) + dir = -1; + else if (event.direction == Gdk.ScrollDirection.DOWN) + dir = 1; + else if (event.direction == Gdk.ScrollDirection.SMOOTH) + dir = event.delta_y; + + if (dir < 0) { + zoom_in(); + return true; + } else if (dir > 0) { + zoom_out(); + return true; + } + } + return false; + } + + private void on_preferred_height_changed(WebKit.JavascriptResult result) { + try { + int height = (int) WebKitUtil.to_number(result); + // Avoid notifying if the values have not changed + if (this.preferred_height != height) { + // value has changed + this.preferred_height = height; + if (height >= 1) { + // value is valid + if (!this.has_valid_height) { + // validity has changed + this.has_valid_height = true; + } + queue_resize(); + } + } + } catch (Geary.JS.Error err) { + debug("Could not get preferred height: %s", err.message); + } + } + + private void on_remote_image_load_blocked(WebKit.JavascriptResult result) { + remote_image_load_blocked(); + } + + private void on_selection_changed(WebKit.JavascriptResult result) { + try { + bool has_selection = WebKitUtil.to_bool(result); + // Avoid firing multiple notifies if the value hasn't + // changed + if (this.has_selection != has_selection) { + this.has_selection = has_selection; + } + selection_changed(has_selection); + } catch (Geary.JS.Error err) { + debug("Could not get selection content: %s", err.message); + } + } + +} + +// XXX this needs to be moved into the libsoup bindings +extern string soup_uri_decode(string part); + diff -Nru geary-0.11.4/src/client/components/conversation-find-bar.vala geary-0.12.0/src/client/components/conversation-find-bar.vala --- geary-0.11.4/src/client/components/conversation-find-bar.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/components/conversation-find-bar.vala 1970-01-01 00:00:00.000000000 +0000 @@ -1,300 +0,0 @@ -/* Copyright 2016 Software Freedom Conservancy Inc. - * - * This software is licensed under the GNU Lesser General Public License - * (version 2.1 or later). See the COPYING file in this distribution. - */ - -public class ConversationFindBar : Gtk.Layout { - private const string entry_not_found_style = -""" -.geary-not-found { - color: white; - background-color: #FF6969; - background-image: none; -} -.geary-not-found:selected { - color: grey; - background-color: white; - background-image: none; -} -"""; - - private Gtk.Builder builder; - private Gtk.Box contents_box; - private Gtk.Entry entry; - private ConversationWebView web_view; - private Gtk.Label result_label; - private Gtk.CheckButton case_sensitive_check; - private Gtk.Button next_button; - private Gtk.Button prev_button; - private bool wrapped; - private uint matches; - private bool searching = false; - - public signal void close(); - - public ConversationFindBar(ConversationWebView web_view) { - this.web_view = web_view; - - builder = GearyApplication.instance.create_builder("find_bar.glade"); - - key_press_event.connect(on_key_press); - button_press_event.connect(on_button_press); - - contents_box = (Gtk.Box) builder.get_object("box: contents"); - add(contents_box); - - entry = (Gtk.Entry) builder.get_object("entry: find"); - entry.buffer.inserted_text.connect(on_entry_buffer_inserted_text); - entry.buffer.deleted_text.connect(on_entry_buffer_deleted_text); - entry.activate.connect(on_entry_activate); - - GtkUtil.apply_style(entry, entry_not_found_style); - - result_label = (Gtk.Label) builder.get_object("label: result"); - update_result_label(); - - prev_button = (Gtk.Button) builder.get_object("button: previous"); - prev_button.set_sensitive(false); - prev_button.clicked.connect(on_previous_button_clicked); - - next_button = (Gtk.Button) builder.get_object("button: next"); - next_button.set_sensitive(false); - next_button.clicked.connect(on_next_button_clicked); - - Gtk.Button close_button = (Gtk.Button) builder.get_object("button: close"); - close_button.clicked.connect(on_close_button_clicked); - - case_sensitive_check = (Gtk.CheckButton) builder.get_object("check: case_sensitive"); - case_sensitive_check.toggled.connect(on_case_sensitive_check_toggled); - } - - public override void show() { - // Make the width of the find bar completely obey its parent and the height fixed - int minimal_height, natural_height; - contents_box.get_preferred_height(out minimal_height, out natural_height); - set_size_request(-1, minimal_height); - - base.show(); - - fill_entry_with_web_view_selection(); - commence_search(); - } - - public override void hide() { - base.hide(); - - end_search(); - close(); - } - - public void focus_entry() { - entry.grab_focus(); - } - - private void highlight_text_matches() { - if (entry.buffer.text == "") - return; - - searching = true; - - web_view.unmark_text_matches(); - matches = web_view.mark_text_matches(entry.text, case_sensitive_check.active, 0); - web_view.set_highlight_text_matches(true); - - update_result_label(); - color_according_to_result(); - } - - public void commence_search() { - wrapped = false; - matches = 0; - - highlight_text_matches(); - } - - public void end_search() { - if (searching) { - web_view.unmark_text_matches(); - searching = false; - } - web_view.selection_changed.disconnect(on_web_view_selection_changed); - switch_to_usual_selection_color(); - } - - private void on_entry_buffer_inserted_text(uint position, string text, uint n_chars) { - highlight_text_matches(); - set_button_sensitivity(); - } - - private void color_according_to_result() { - Gtk.StyleContext entry_style_context = entry.get_style_context(); - - if (searching && matches == 0) - entry_style_context.add_class("geary-not-found"); - else - entry_style_context.remove_class("geary-not-found"); - } - - private void on_entry_buffer_deleted_text(uint position, uint n_chars) { - if (entry.text.length == 0) { - web_view.unmark_text_matches(); - searching = false; - } else { - highlight_text_matches(); - } - - update_result_label(); - color_according_to_result(); - set_button_sensitivity(); - } - - private bool on_key_press(Gdk.EventKey event) { - switch (event.keyval) { - case Gdk.Key.Escape: - hide(); - return true; - - case Gdk.Key.Return: - if ((event.state & Gdk.ModifierType.SHIFT_MASK) != 0) { - find(false); - return true; - } - return false; - } - - return false; - } - - public void find(bool forward) { - web_view.selection_changed.disconnect(on_web_view_selection_changed); - - bool first_result; - first_result = web_view.search_text(entry.buffer.text, case_sensitive_check.active, - forward, false); - - if (!first_result) { - wrapped = web_view.search_text(entry.buffer.text, case_sensitive_check.active, - forward, true); - } else { - wrapped = false; - } - - if (wrapped || first_result) { - // An item has been found. Switch the selection color so it is easily discernible - // from the surrounding unselected (but also highlighted) matches. - switch_to_search_selection_color(); - - // If the user selects something on their own, switch back to the original - // selection color. - web_view.selection_changed.connect(on_web_view_selection_changed); - } - - update_result_label(); - } - - private void set_button_sensitivity() { - bool sensitive = (matches != 0 && searching); - - prev_button.set_sensitive(sensitive); - next_button.set_sensitive(sensitive); - } - - private void update_result_label() { - string content = "| "; - - if (searching) { - result_label.show(); - } else { - result_label.hide(); - } - - if (matches > 0) { - if (!wrapped) - content += ngettext("%i match", "%i matches", matches).printf(matches); - else - content += ngettext("%i match (wrapped)", "%i matches (wrapped)", matches).printf(matches); - } else { - content += _("not found"); - } - - result_label.set_markup(content); - } - - private void fill_entry_with_web_view_selection() { - WebKit.DOM.Document document; - document = web_view.get_dom_document(); - - WebKit.DOM.DOMWindow window; - window = document.get_default_view(); - - WebKit.DOM.DOMSelection selection; - selection = window.get_selection(); - - if (selection.get_range_count() <= 0) - return; - - try { - WebKit.DOM.Range range = selection.get_range_at (0); - - if (range.get_text() != "") - entry.text = range.get_text(); - } catch (Error e) { - warning("Could not get selected text from web view: %s", e.message); - } - } - - private void on_web_view_selection_changed() { - web_view.selection_changed.disconnect(on_web_view_selection_changed); - switch_to_usual_selection_color(); - } - - private void switch_to_search_selection_color() { - try { - web_view.get_dom_document().get_body().get_class_list().add("search_coloring"); - } catch (Error error) { - warning("Error setting body class for search selection coloring: %s", error.message); - } - } - - private void switch_to_usual_selection_color() { - try { - web_view.get_dom_document().get_body().get_class_list().remove("search_coloring"); - } catch (Error error) { - warning("Error setting body class for search selection coloring: %s", error.message); - } - } - - public override void size_allocate(Gtk.Allocation allocation) { - // Fit the box to the actual width of the bar - contents_box.set_size_request(allocation.width, -1); - - base.size_allocate(allocation); - } - - private void on_entry_activate() { - find(true); - } - - private bool on_button_press(Gdk.EventButton event) { - focus_entry(); - return true; - } - - private void on_next_button_clicked() { - find(true); - } - - private void on_previous_button_clicked() { - find(false); - } - - private void on_close_button_clicked() { - hide(); - } - - private void on_case_sensitive_check_toggled() { - commence_search(); - set_button_sensitivity(); - } -} diff -Nru geary-0.11.4/src/client/components/empty-placeholder.vala geary-0.12.0/src/client/components/empty-placeholder.vala --- geary-0.11.4/src/client/components/empty-placeholder.vala 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/src/client/components/empty-placeholder.vala 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,38 @@ +/* + * Copyright 2016 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +/** + * A placeholder image and message for empty views. + */ +[GtkTemplate (ui = "/org/gnome/Geary/empty-placeholder.ui")] +public class EmptyPlaceholder : Gtk.Grid { + + public string image_name { + owned get { return this.placeholder_image.icon_name; } + set { this.placeholder_image.icon_name = value; } + } + + public string title { + get { return this.title_label.get_text(); } + set { this.title_label.set_text(value); } + } + + public string subtitle { + get { return this.subtitle_label.get_text(); } + set { this.subtitle_label.set_text(value); } + } + + [GtkChild] + private Gtk.Image placeholder_image; + + [GtkChild] + private Gtk.Label title_label; + + [GtkChild] + private Gtk.Label subtitle_label; + +} diff -Nru geary-0.11.4/src/client/components/folder-menu.vala geary-0.12.0/src/client/components/folder-menu.vala --- geary-0.11.4/src/client/components/folder-menu.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/components/folder-menu.vala 1970-01-01 00:00:00.000000000 +0000 @@ -1,74 +0,0 @@ -/* Copyright 2016 Software Freedom Conservancy Inc. - * - * This software is licensed under the GNU Lesser General Public License - * (version 2.1 or later). See the COPYING file in this distribution. - */ - -public class FolderMenu : Gtk.Menu { - private Gee.List folder_list = new Gee.ArrayList(); - - public signal void folder_selected(Geary.Folder folder); - - public FolderMenu() { - } - - public bool has_folder(Geary.Folder folder) { - return folder_list.contains(folder); - } - - public void add_folder(Geary.Folder folder) { - // don't allow multiples and don't allow folders that can't be opened (that means they - // support almost no operations and have no content) - if (folder_list.contains(folder) || folder.properties.is_openable.is_impossible()) - return; - - // also don't allow local-only or virtual folders, which also have a limited set of - // operations - if (folder.properties.is_local_only || folder.properties.is_virtual) - return; - - folder_list.add(folder); - folder_list.sort(folder_sort); - - int index = folder_list.index_of(folder); - insert(build_menu_item(folder), index); - - show_all(); - } - - public void enable_disable_folder(Geary.Folder folder, bool sensitive) { - int index = folder_list.index_of(folder); - if (index >= 0) - get_children().nth_data(index).sensitive = sensitive; - } - - public void remove_folder(Geary.Folder folder) { - int index = folder_list.index_of(folder); - folder_list.remove(folder); - - if (index >= 0) - remove(get_children().nth_data(index)); - - show_all(); - } - - public void clear() { - folder_list.clear(); - this.foreach((w) => remove(w)); - show_all(); - } - - private Gtk.MenuItem build_menu_item(Geary.Folder folder) { - Gtk.MenuItem menu_item = new Gtk.MenuItem.with_label(folder.path.to_string()); - menu_item.activate.connect(() => { - folder_selected(folder); - }); - - return menu_item; - } - - private static int folder_sort(Geary.Folder a, Geary.Folder b) { - return a.path.compare_to(b.path); - } -} - diff -Nru geary-0.11.4/src/client/components/folder-popover.vala geary-0.12.0/src/client/components/folder-popover.vala --- geary-0.11.4/src/client/components/folder-popover.vala 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/src/client/components/folder-popover.vala 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,131 @@ +/* Copyright 2016 Software Freedom Conservancy Inc. + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +[GtkTemplate (ui = "/org/gnome/Geary/folder-popover.ui")] +public class FolderPopover : Gtk.Popover { + + [GtkChild] + private Gtk.SearchEntry search_entry; + [GtkChild] + private Gtk.ListBox list_box; + + private int filtered_folder_count = 0; + + public signal void folder_selected(Geary.Folder folder); + + public FolderPopover() { + list_box.set_filter_func(row_filter); + list_box.set_sort_func(row_sort); + this.show.connect(() => search_entry.grab_focus()); + this.hide.connect(() => { + search_entry.set_text(""); + invalidate_filter(); + }); + } + + public bool has_folder(Geary.Folder folder) { + return get_row_with_folder(folder) != null; + } + + public void add_folder(Geary.Folder folder) { + // don't allow multiples and don't allow folders that can't be opened (that means they + // support almost no operations and have no content) + if (has_folder(folder) || folder.properties.is_openable.is_impossible()) + return; + + // also don't allow local-only or virtual folders, which also have a limited set of + // operations + if (folder.properties.is_local_only || folder.properties.is_virtual) + return; + + list_box.add(build_row(folder)); + list_box.invalidate_sort(); + } + + public void enable_disable_folder(Geary.Folder folder, bool sensitive) { + Gtk.ListBoxRow row = get_row_with_folder(folder); + if (row != null) + row.sensitive = sensitive; + } + + public void remove_folder(Geary.Folder folder) { + Gtk.ListBoxRow row = get_row_with_folder(folder); + if (row != null) + list_box.remove(row); + } + + public Gtk.ListBoxRow? get_row_with_folder(Geary.Folder folder) { + Gtk.ListBoxRow result = null; + list_box.foreach((row) => { + if (row.get_data("folder") == folder) + result = row as Gtk.ListBoxRow; + }); + return result; + } + + public void clear() { + list_box.foreach((row) => list_box.remove(row)); + } + + private Gtk.ListBoxRow build_row(Geary.Folder folder) { + Gtk.ListBoxRow row = new Gtk.ListBoxRow(); + row.get_style_context().add_class("geary-folder-popover-list-row"); + row.set_data("folder", folder); + + Gtk.Label label = new Gtk.Label(folder.path.to_string()); + label.set_halign(Gtk.Align.START); + row.add(label); + + return row; + } + + [GtkCallback] + private void on_row_activated(Gtk.ListBoxRow? row) { + if (row != null) { + Geary.Folder folder = row.get_data("folder"); + folder_selected(folder); + } + + this.hide(); + } + + [GtkCallback] + private void on_search_entry_activate() { + if (filtered_folder_count == 1) { + // Don't use get_row_at_index(0), or you will get the first row of the unfiltered list. + Gtk.ListBoxRow? row = list_box.get_row_at_y(0); + if (row != null) + on_row_activated(row); + } else if (filtered_folder_count > 0) { + list_box.get_row_at_y(0).grab_focus(); + } + } + + [GtkCallback] + private void on_search_entry_search_changed() { + invalidate_filter(); + } + + private void invalidate_filter() { + filtered_folder_count = 0; + list_box.invalidate_filter(); + } + + private bool row_filter(Gtk.ListBoxRow row) { + Gtk.Label label = row.get_child() as Gtk.Label; + if (label.label.down().contains(search_entry.text.down())) { + filtered_folder_count++; + return true; + } + return false; + } + + private int row_sort(Gtk.ListBoxRow row1, Gtk.ListBoxRow row2) { + Geary.Folder folder1 = row1.get_data("folder"); + Geary.Folder folder2 = row2.get_data("folder"); + return folder1.path.compare_to(folder2.path); + } +} diff -Nru geary-0.11.4/src/client/components/main-toolbar.vala geary-0.12.0/src/client/components/main-toolbar.vala --- geary-0.11.4/src/client/components/main-toolbar.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/components/main-toolbar.vala 2017-10-02 11:25:21.000000000 +0000 @@ -5,33 +5,58 @@ */ // Draws the main toolbar. +[GtkTemplate (ui = "/org/gnome/Geary/main-toolbar.ui")] public class MainToolbar : Gtk.Box { - public FolderMenu copy_folder_menu { get; private set; default = new FolderMenu(); } - public FolderMenu move_folder_menu { get; private set; default = new FolderMenu(); } + private Gtk.ActionGroup action_group; + public FolderPopover copy_folder_menu { get; private set; default = new FolderPopover(); } + public FolderPopover move_folder_menu { get; private set; default = new FolderPopover(); } public string account { get; set; } public string folder { get; set; } public bool show_close_button { get; set; default = false; } public bool show_close_button_left { get; private set; default = true; } public bool show_close_button_right { get; private set; default = true; } public bool search_open { get; set; default = false; } + public bool find_open { get; set; default = false; } public int left_pane_width { get; set; } - - private PillHeaderbar folder_header; - private PillHeaderbar conversation_header; + + // Folder header elements + [GtkChild] + private Gtk.HeaderBar folder_header; + [GtkChild] + private Gtk.Button compose_new_message_button; + [GtkChild] + private Gtk.MenuButton empty_menu_button; + [GtkChild] + private Gtk.ToggleButton search_conversations_button; + private Binding guest_header_binding; + + // Conversation header elements + [GtkChild] + private Gtk.HeaderBar conversation_header; + [GtkChild] + private Gtk.Button reply_sender_button; + [GtkChild] + private Gtk.Button reply_all_button; + [GtkChild] + private Gtk.Button forward_button; + [GtkChild] + private Gtk.MenuButton mark_message_button; + [GtkChild] + private Gtk.MenuButton copy_message_button; + [GtkChild] + private Gtk.MenuButton move_message_button; + [GtkChild] private Gtk.Button archive_button; + [GtkChild] private Gtk.Button trash_delete_button; - private Binding guest_header_binding; - - public MainToolbar() { - Object(orientation: Gtk.Orientation.HORIZONTAL, spacing: 0); - - folder_header = new PillHeaderbar(GearyApplication.instance.actions); - conversation_header = new PillHeaderbar(GearyApplication.instance.actions); - folder_header.get_style_context().add_class("titlebar"); - folder_header.get_style_context().add_class("geary-titlebar-left"); - conversation_header.get_style_context().add_class("titlebar"); - conversation_header.get_style_context().add_class("geary-titlebar-right"); - + [GtkChild] + private Gtk.Button undo_button; + [GtkChild] + private Gtk.ToggleButton find_button; + + public MainToolbar(Configuration config) { + this.action_group = GearyApplication.instance.actions; + // Instead of putting a separator between the two headerbars, as other applications do, // we put a separator at the right end of the left headerbar. This greatly improves // the appearance under the Ambiance theme (see bug #746171). To get this separator to @@ -44,8 +69,8 @@ target_value = left_pane_width + 6; return true; }); - - if (!GearyApplication.instance.is_running_unity) { + + if (config.desktop_environment != Configuration.DesktopEnvironment.UNITY) { this.bind_property("account", folder_header, "title", BindingFlags.SYNC_CREATE); this.bind_property("folder", folder_header, "subtitle", BindingFlags.SYNC_CREATE); } @@ -53,145 +78,68 @@ BindingFlags.SYNC_CREATE); this.bind_property("show-close-button-right", conversation_header, "show-close-button", BindingFlags.SYNC_CREATE); - - bool rtl = get_direction() == Gtk.TextDirection.RTL; - - // Assemble mark menu. - GearyApplication.instance.load_ui_resource("toolbar_mark_menu.ui"); - Gtk.Menu mark_menu = (Gtk.Menu) GearyApplication.instance.ui_manager.get_widget("/ui/ToolbarMarkMenu"); - mark_menu.foreach(GtkUtil.show_menuitem_accel_labels); - - // Toolbar setup. - Gee.List insert = new Gee.ArrayList(); - - // Compose. - insert.add(folder_header.create_toolbar_button("text-editor-symbolic", - GearyController.ACTION_NEW_MESSAGE)); - folder_header.add_start(folder_header.create_pill_buttons(insert, false)); - - // Assemble the empty menu + + // Assemble the empty/mark menus GearyApplication.instance.load_ui_resource("toolbar_empty_menu.ui"); Gtk.Menu empty_menu = (Gtk.Menu) GearyApplication.instance.ui_manager.get_widget("/ui/ToolbarEmptyMenu"); - empty_menu.foreach(GtkUtil.show_menuitem_accel_labels); - insert.clear(); - insert.add(folder_header.create_menu_button(null, empty_menu, - GearyController.ACTION_EMPTY_MENU)); - Gtk.Box empty = folder_header.create_pill_buttons(insert, false); - - // Search - insert.clear(); - Gtk.Button search_button = folder_header.create_toggle_button( - "preferences-system-search-symbolic", GearyController.ACTION_TOGGLE_SEARCH); - this.bind_property("search-open", search_button, "active", + GearyApplication.instance.load_ui_resource("toolbar_mark_menu.ui"); + Gtk.Menu mark_menu = (Gtk.Menu) GearyApplication.instance.ui_manager.get_widget("/ui/ToolbarMarkMenu"); + + // Setup folder header elements + setup_button(compose_new_message_button, GearyController.ACTION_NEW_MESSAGE); + empty_menu_button.popup = empty_menu; + + setup_button(search_conversations_button, GearyController.ACTION_TOGGLE_SEARCH); + this.bind_property("search-open", search_conversations_button, "active", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL); - insert.add(search_button); - Gtk.Box search = folder_header.create_pill_buttons(insert, false); - -#if !GTK_3_12 - folder_header.add_end(empty); - folder_header.add_end(search); - folder_header.add_end(new Gtk.Separator(Gtk.Orientation.VERTICAL)); -#else - folder_header.add_end(new Gtk.Separator(Gtk.Orientation.VERTICAL)); - folder_header.add_end(search); - folder_header.add_end(empty); -#endif - - // Reply buttons - insert.clear(); - insert.add(conversation_header.create_toolbar_button(rtl ? "mail-reply-sender-rtl-symbolic" - : "mail-reply-sender-symbolic", GearyController.ACTION_REPLY_TO_MESSAGE)); - insert.add(conversation_header.create_toolbar_button(rtl ? "mail-reply-all-rtl-symbolic" - : "mail-reply-all-symbolic", GearyController.ACTION_REPLY_ALL_MESSAGE)); - insert.add(conversation_header.create_toolbar_button(rtl ? "mail-forward-rtl-symbolic" - : "mail-forward-symbolic", GearyController.ACTION_FORWARD_MESSAGE)); - conversation_header.add_start(conversation_header.create_pill_buttons(insert)); - - // Mark, copy, move. - insert.clear(); - insert.add(conversation_header.create_menu_button("marker-symbolic", mark_menu, - GearyController.ACTION_MARK_AS_MENU)); - insert.add(conversation_header.create_menu_button(rtl ? "tag-rtl-symbolic" : "tag-symbolic", - copy_folder_menu, GearyController.ACTION_COPY_MENU)); - insert.add(conversation_header.create_menu_button("folder-symbolic", move_folder_menu, - GearyController.ACTION_MOVE_MENU)); - conversation_header.add_start(conversation_header.create_pill_buttons(insert)); - - insert.clear(); - insert.add(archive_button = conversation_header.create_toolbar_button(null, GearyController.ACTION_ARCHIVE_MESSAGE, true)); - insert.add(trash_delete_button = conversation_header.create_toolbar_button(null, GearyController.ACTION_TRASH_MESSAGE, false)); - Gtk.Box archive_trash_delete = conversation_header.create_pill_buttons(insert); - - insert.clear(); - insert.add(conversation_header.create_toolbar_button(null, GearyController.ACTION_UNDO, - false)); - Gtk.Box undo = conversation_header.create_pill_buttons(insert); - - // pack_end() ordering is reversed in GtkHeaderBar in 3.12 and above -#if !GTK_3_12 - conversation_header.add_end(archive_trash_delete); - conversation_header.add_end(undo); -#endif - // Application button. If we exported an app menu, we don't need this. - if (!Gtk.Settings.get_default().gtk_shell_shows_app_menu) { - insert.clear(); - Gtk.Menu application_menu = new Gtk.Menu.from_model( - GearyApplication.instance.controller.app_menu); - insert.add(conversation_header.create_menu_button("emblem-system-symbolic", - application_menu, GearyController.ACTION_GEAR_MENU)); - conversation_header.add_end(conversation_header.create_pill_buttons(insert)); - } -#if GTK_3_12 - conversation_header.add_end(undo); - conversation_header.add_end(archive_trash_delete); -#endif - - pack_start(folder_header, false, false); - pack_start(conversation_header, true, true); - -#if GTK_3_12 + + // Setup conversation header elements + setup_button(reply_sender_button, GearyController.ACTION_REPLY_TO_MESSAGE); + setup_button(reply_all_button, GearyController.ACTION_REPLY_ALL_MESSAGE); + setup_button(forward_button, GearyController.ACTION_FORWARD_MESSAGE); + + setup_menu_button(mark_message_button, mark_menu, GearyController.ACTION_MARK_AS_MENU); + setup_popover_button(copy_message_button, copy_folder_menu, GearyController.ACTION_COPY_MENU); + setup_popover_button(move_message_button, move_folder_menu, GearyController.ACTION_MOVE_MENU); + + setup_button(archive_button, GearyController.ACTION_ARCHIVE_CONVERSATION, true); + setup_button(trash_delete_button, GearyController.ACTION_TRASH_CONVERSATION); + setup_button(undo_button, GearyController.ACTION_UNDO); + + setup_button(find_button, GearyController.ACTION_TOGGLE_FIND); + this.bind_property("find-open", find_button, "active", + BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL); + Gtk.Settings.get_default().notify["gtk-decoration-layout"].connect(set_window_buttons); realize.connect(set_window_buttons); -#else - get_style_context().changed.connect(set_close_buttons_side); - realize.connect(set_close_buttons_side); -#endif - } - - /// Updates the trash button as trash or delete, and shows or hides the archive button. - public void update_trash_archive_buttons(bool trash, bool archive) { - string action_name = (trash ? GearyController.ACTION_TRASH_MESSAGE - : GearyController.ACTION_DELETE_MESSAGE); - conversation_header.setup_button(trash_delete_button, null, action_name, false); - - archive_button.visible = archive; } - + + public void update_trash_button(bool is_trash) { + string action_name = (is_trash ? GearyController.ACTION_TRASH_CONVERSATION + : GearyController.ACTION_DELETE_CONVERSATION); + setup_button(trash_delete_button, action_name, false); + } + public void set_conversation_header(Gtk.HeaderBar header) { conversation_header.hide(); - header.get_style_context().add_class("titlebar"); + header.get_style_context().add_class("geary-titlebar"); header.get_style_context().add_class("geary-titlebar-right"); guest_header_binding = bind_property("show-close-button-right", header, "show-close-button", BindingFlags.SYNC_CREATE); pack_start(header, true, true); -#if GTK_3_12 header.decoration_layout = conversation_header.decoration_layout; -#endif } - + public void remove_conversation_header(Gtk.HeaderBar header) { remove(header); - header.get_style_context().remove_class("titlebar"); + header.get_style_context().remove_class("geary-titlebar"); header.get_style_context().remove_class("geary-titlebar-right"); - GtkUtil.unbind(guest_header_binding); + guest_header_binding.unbind(); header.show_close_button = false; -#if GTK_3_12 header.decoration_layout = Gtk.Settings.get_default().gtk_decoration_layout; -#endif conversation_header.show(); } - -#if GTK_3_12 + private void set_window_buttons() { string[] buttons = Gtk.Settings.get_default().gtk_decoration_layout.split(":"); if (buttons.length != 2) { @@ -203,12 +151,72 @@ folder_header.decoration_layout = buttons[0] + ":"; conversation_header.decoration_layout = ":" + buttons[1]; } -#else - private void set_close_buttons_side() { - bool at_end = folder_header.close_button_at_end(); - show_close_button_left = show_close_button && !at_end; - show_close_button_right = show_close_button && at_end; + + private void setup_button(Gtk.Button b, string action_name, bool show_label = false) { + Gtk.Action related_action = action_group.get_action(action_name); + b.focus_on_click = false; + b.use_underline = true; + b.tooltip_text = related_action.tooltip; + related_action.notify["tooltip"].connect(() => { b.tooltip_text = related_action.tooltip; }); + b.related_action = related_action; + + // Load icon by name with this fallback order: specified icon name, the action's icon name, + // the action's stock ID ... although stock IDs are being deprecated, that's how we specify + // the icon in the GtkActionEntry (also being deprecated) and GTK+ 3.14 doesn't support that + // any longer + string? icon_to_load = b.related_action.icon_name; + if (icon_to_load == null) + icon_to_load = b.related_action.stock_id; + + // set pixel size to force GTK+ to load our images from our installed directory, not the theme + // directory + if (icon_to_load != null) { + Gtk.Image image = new Gtk.Image.from_icon_name(icon_to_load, Gtk.IconSize.MENU); + image.set_pixel_size(16); + b.image = image; + } + + b.always_show_image = true; + + if (show_label) + b.label = related_action.label; + else + b.label = null; + } + + /** + * Given an icon, menu, and action, creates a button that triggers the menu and the action. + */ + private void setup_menu_button(Gtk.MenuButton b, Gtk.Menu menu, string action_name) { + setup_button(b, action_name); + menu.foreach(GtkUtil.show_menuitem_accel_labels); + b.popup = menu; + + if (b.related_action != null) { + b.related_action.activate.connect(() => { + b.clicked(); + }); + // Null out the action since by connecting it to clicked + // above, invoking would cause an infinite loop otherwise. + b.related_action = null; + } + } + + /** + * Given an icon, popover, and action, creates a button that triggers the popover and the action. + */ + private void setup_popover_button(Gtk.MenuButton b, Gtk.Popover popover, string action_name) { + setup_button(b, action_name); + b.popover = popover; + b.clicked.connect(() => popover.show_all()); + + if (b.related_action != null) { + b.related_action.activate.connect(() => { + b.clicked(); + }); + // Null out the action since by connecting it to clicked + // above, invoking would cause an infinite loop otherwise. + b.related_action = null; + } } -#endif } - diff -Nru geary-0.11.4/src/client/components/main-window.vala geary-0.12.0/src/client/components/main-window.vala --- geary-0.11.4/src/client/components/main-window.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/components/main-window.vala 2017-10-02 11:25:21.000000000 +0000 @@ -1,55 +1,89 @@ -/* Copyright 2016 Software Freedom Conservancy Inc. +/* + * Copyright 2016 Software Freedom Conservancy Inc. + * Copyright 2016 Michael Gratton * * This software is licensed under the GNU Lesser General Public License - * (version 2.1 or later). See the COPYING file in this distribution. + * (version 2.1 or later). See the COPYING file in this distribution. */ +[GtkTemplate (ui = "/org/gnome/Geary/main-window.ui")] public class MainWindow : Gtk.ApplicationWindow { - private const int MESSAGE_LIST_WIDTH = 250; - private const int FOLDER_LIST_WIDTH = 100; private const int STATUS_BAR_HEIGHT = 18; - - /// Fired when the shift key is pressed or released. - public signal void on_shift_key(bool pressed); - - public FolderList.Tree folder_list { get; private set; default = new FolderList.Tree(); } - public ConversationListStore conversation_list_store { get; private set; default = new ConversationListStore(); } - public MainToolbar main_toolbar { get; private set; } - public SearchBar search_bar { get; private set; default = new SearchBar(); } - public ConversationListView conversation_list_view { get; private set; } - public ConversationViewer conversation_viewer { get; private set; default = new ConversationViewer(); } - public StatusBar status_bar { get; private set; default = new StatusBar(); } + + public new GearyApplication application { + get { return (GearyApplication) base.get_application(); } + set { base.set_application(value); } + } + public Geary.Folder? current_folder { get; private set; default = null; } - + + private Geary.AggregateProgressMonitor progress_monitor = new Geary.AggregateProgressMonitor(); + private Geary.ProgressMonitor? folder_progress = null; + + // Used to save/load the window state between sessions. public int window_width { get; set; } public int window_height { get; set; } public bool window_maximized { get; set; } - private Gtk.Paned folder_paned = new Gtk.Paned(Gtk.Orientation.HORIZONTAL); - private Gtk.Paned conversations_paned = new Gtk.Paned(Gtk.Orientation.HORIZONTAL); - - private Gtk.ScrolledWindow conversation_list_scrolled; + // Widget descendants + public FolderList.Tree folder_list { get; private set; default = new FolderList.Tree(); } + public MainToolbar main_toolbar { get; private set; } + public SearchBar search_bar { get; private set; default = new SearchBar(); } + public ConversationListView conversation_list_view { get; private set; default = new ConversationListView(); } + public ConversationViewer conversation_viewer { get; private set; default = new ConversationViewer(); } + public StatusBar status_bar { get; private set; default = new StatusBar(); } private MonitoredSpinner spinner = new MonitoredSpinner(); + [GtkChild] + private Gtk.Box main_layout; + [GtkChild] + private Gtk.Box search_bar_box; + [GtkChild] + private Gtk.Paned folder_paned; + [GtkChild] + private Gtk.Paned conversations_paned; + [GtkChild] private Gtk.Box folder_box; + [GtkChild] + private Gtk.ScrolledWindow folder_list_scrolled; + [GtkChild] private Gtk.Box conversation_box; - private Geary.AggregateProgressMonitor progress_monitor = new Geary.AggregateProgressMonitor(); - private Geary.ProgressMonitor? conversation_monitor_progress = null; - private Geary.ProgressMonitor? folder_progress = null; - + [GtkChild] + private Gtk.ScrolledWindow conversation_list_scrolled; + + + /** Fired when the shift key is pressed or released. */ + public signal void on_shift_key(bool pressed); + + public MainWindow(GearyApplication application) { Object(application: application); - - conversation_list_view = new ConversationListView(conversation_list_store); - - add_events(Gdk.EventMask.KEY_PRESS_MASK | Gdk.EventMask.KEY_RELEASE_MASK - | Gdk.EventMask.FOCUS_CHANGE_MASK); - - // This code both loads AND saves the pane positions with live - // updating. This is more resilient against crashes because - // the value in dconf changes *immediately*, and stays saved - // in the event of a crash. - Configuration config = GearyApplication.instance.config; - config.bind(Configuration.MESSAGES_PANE_POSITION_KEY, conversations_paned, "position"); + + // GTK+ 3.14 (and others?) ignores this property in the UI + // file, so set it explicitly here to avoid having a menubar + // appear when the desktop shell does not show the app menu + this.show_menubar = false; + + load_config(application.config); + restore_saved_window_state(); + + add_accel_group(application.ui_manager.get_accel_group()); + + application.controller.notify[GearyController.PROP_CURRENT_CONVERSATION] + .connect(on_conversation_monitor_changed); + application.controller.folder_selected.connect(on_folder_selected); + this.application.engine.account_available.connect(on_account_available); + this.application.engine.account_unavailable.connect(on_account_unavailable); + + set_styling(); + setup_layout(application.config); + on_change_orientation(); + } + + private void load_config(Configuration config) { + // This code both loads AND saves the pane positions with live updating. This is more + // resilient against crashes because the value in dconf changes *immediately*, and + // stays saved in the event of a crash. + config.bind(Configuration.MESSAGES_PANE_POSITION_KEY, this.conversations_paned, "position"); config.bind(Configuration.WINDOW_WIDTH_KEY, this, "window-width"); config.bind(Configuration.WINDOW_HEIGHT_KEY, this, "window-height"); config.bind(Configuration.WINDOW_MAXIMIZE_KEY, this, "window-maximized"); @@ -58,8 +92,11 @@ config.folder_list_pane_position_horizontal = config.folder_list_pane_position_old; config.messages_pane_position += config.folder_list_pane_position_old; } + config.settings.changed[Configuration.FOLDER_LIST_PANE_HORIZONTAL_KEY] + .connect(on_change_orientation); + } - // Restore saved window state + private void restore_saved_window_state() { Gdk.Screen? screen = get_screen(); if (screen != null && this.window_width <= screen.get_width() && @@ -69,63 +106,10 @@ if (this.window_maximized) { maximize(); } - set_position(Gtk.WindowPosition.CENTER); - - add_accel_group(GearyApplication.instance.ui_manager.get_accel_group()); - - spinner.set_progress_monitor(progress_monitor); - progress_monitor.add(conversation_list_store.preview_monitor); - - delete_event.connect(on_delete_event); - key_press_event.connect(on_key_press_event); - key_release_event.connect(on_key_release_event); - focus_in_event.connect(on_focus_event); - GearyApplication.instance.config.settings.changed[ - Configuration.FOLDER_LIST_PANE_HORIZONTAL_KEY].connect(on_change_orientation); - GearyApplication.instance.controller.notify[GearyController.PROP_CURRENT_CONVERSATION]. - connect(on_conversation_monitor_changed); - GearyApplication.instance.controller.folder_selected.connect(on_folder_selected); - Geary.Engine.instance.account_available.connect(on_account_available); - Geary.Engine.instance.account_unavailable.connect(on_account_unavailable); - - // Toolbar. - main_toolbar = new MainToolbar(); - main_toolbar.bind_property("search-open", search_bar, "search-mode-enabled", - BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL); - if (!GearyApplication.instance.is_running_unity) { - main_toolbar.show_close_button = true; - set_titlebar(main_toolbar); - title = GearyApplication.NAME; - } else { - BindingTransformFunc title_func = (binding, source, ref target) => { - string folder = current_folder != null ? current_folder.get_display_name() + " " : ""; - string account = main_toolbar.account != null ? "(%s)".printf(main_toolbar.account) : ""; - - target = "%s%s - %s".printf(folder, account, GearyApplication.NAME); - - return true; - }; - bind_property("current-folder", this, "title", BindingFlags.SYNC_CREATE, title_func); - main_toolbar.bind_property("account", this, "title", BindingFlags.SYNC_CREATE, title_func); - } - - set_styling(); - create_layout(); - on_change_orientation(); + this.window_position = Gtk.WindowPosition.CENTER; } - private bool on_delete_event() { - if (Args.hidden_startup || GearyApplication.instance.config.startup_notifications) { - if (GearyApplication.instance.controller.close_composition_windows(true)) { - hide(); - } - } else { - GearyApplication.instance.exit(); - } - return true; - } - - // Fired on [un]maximize and possibly others. Save maximized state + // Called on [un]maximize and possibly others. Save maximized state // for the next start. public override bool window_state_event(Gdk.EventWindowState event) { if ((event.new_window_state & Gdk.WindowState.WITHDRAWN) == 0) { @@ -139,7 +123,7 @@ return base.window_state_event(event); } - // Fired on window resize. Save window size for the next start. + // Called on window resize. Save window size for the next start. public override void size_allocate(Gtk.Allocation allocation) { base.size_allocate(allocation); @@ -166,279 +150,281 @@ Gtk.CssProvider provider = new Gtk.CssProvider(); Gtk.StyleContext.add_provider_for_screen(Gdk.Display.get_default().get_default_screen(), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); - // Gtk < 3.14: No borders along top or left side of window - string css = """ - .folder-frame { - border-left-width: 0px; - border-top-width: 0px; - } - .sidebar-pane-separator.horizontal .conversation-frame { - border-top-width: 0px; - border-bottom-width: 0px; - } - .sidebar-pane-separator.vertical .conversation-frame { - border-left-width: 0px; - } - ComposerBox { - border-left-width: 0px; - border-right-width: 0px; - border-bottom-width: 0px; - } - ComposerBox.full-pane { - border-top-width: 0px; - } - ComposerEmbed GtkHeaderBar, - ComposerBox GtkHeaderBar, - GtkBox.vertical GtkHeaderBar { - border-radius: 0px; - } - .geary-titlebar-left:dir(ltr), - .geary-titlebar-right:dir(rtl) { - border-top-right-radius: 0px; - } - .geary-titlebar-right:dir(ltr), - .geary-titlebar-left:dir(rtl) { - border-top-left-radius: 0px; - } - """; - - if(Gtk.MAJOR_VERSION > 3 || Gtk.MAJOR_VERSION == 3 && Gtk.MINOR_VERSION >= 14) { - // Gtk >= 3.14: Borders only along status bar - css += """ - .folder-frame { - border-right-width: 0px; - } - .sidebar-pane-separator.vertical .folder-frame { - border-bottom-width: 0px; - } - .conversation-frame { - border-top-width: 0px; - border-left-width: 0px; - border-right-width: 0px; - } - """; - } + provider.parsing_error.connect((section, error) => { + uint start = section.get_start_line(); + uint end = section.get_end_line(); + if (start == end) + debug("Error parsing css on line %u: %s", start, error.message); + else + debug("Error parsing css on lines %u-%u: %s", start, end, error.message); + }); try { - provider.load_from_data(css, -1); - } catch (Error error) { - debug("Could not load styling from data: %s", error.message); - } - } - - private void create_layout() { - Gtk.Box main_layout = new Gtk.Box(Gtk.Orientation.VERTICAL, 0); - - // folder list - Gtk.ScrolledWindow folder_list_scrolled = new Gtk.ScrolledWindow(null, null); - folder_list_scrolled.set_size_request(FOLDER_LIST_WIDTH, -1); - folder_list_scrolled.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC); - folder_list_scrolled.add(folder_list); - Gtk.Frame folder_frame = new Gtk.Frame(null); - folder_frame.shadow_type = Gtk.ShadowType.IN; - folder_frame.get_style_context ().add_class ("folder-frame"); - folder_frame.add(folder_list_scrolled); - folder_box = new Gtk.Box(Gtk.Orientation.VERTICAL, 0); - folder_box.pack_start(folder_frame, true, true); - - // message list - conversation_list_scrolled = new Gtk.ScrolledWindow(null, null); - conversation_list_scrolled.set_size_request(MESSAGE_LIST_WIDTH, -1); - conversation_list_scrolled.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC); - conversation_list_scrolled.add(conversation_list_view); - Gtk.Frame conversation_frame = new Gtk.Frame(null); - conversation_frame.shadow_type = Gtk.ShadowType.IN; - conversation_frame.get_style_context ().add_class ("conversation-frame"); - conversation_frame.add(conversation_list_scrolled); - conversation_box = new Gtk.Box(Gtk.Orientation.VERTICAL, 0); - conversation_box.pack_start(conversation_frame, true, true); - - // Three-pane display. - status_bar.set_size_request(-1, STATUS_BAR_HEIGHT); - status_bar.set_border_width(2); - spinner.set_size_request(STATUS_BAR_HEIGHT - 2, -1); - status_bar.add(spinner); - - folder_paned.get_style_context().add_class("sidebar-pane-separator"); - - Gtk.Frame viewer_frame = new Gtk.Frame(null); - viewer_frame.shadow_type = Gtk.ShadowType.NONE; - viewer_frame.add(conversation_viewer); - - // Folder list to the left of everything. - folder_paned.pack1(folder_box, false, false); - folder_paned.pack2(conversation_box, true, false); - - Gtk.Box search_bar_box = new Gtk.Box(Gtk.Orientation.VERTICAL, 0); - search_bar_box.pack_start(search_bar, false, false, 0); - search_bar_box.pack_start(folder_paned); - search_bar_box.get_style_context().add_class(Gtk.STYLE_CLASS_SIDEBAR); - - // Message list left of message viewer. - conversations_paned.pack1(search_bar_box, false, false); - conversations_paned.pack2(viewer_frame, true, true); - - if (GearyApplication.instance.is_running_unity) + File file = File.new_for_uri(@"resource:///org/gnome/Geary/geary.css"); + provider.load_from_file(file); + } catch (Error e) { + error("Could not load CSS: %s", e.message); + } + } + + private void setup_layout(Configuration config) { + // Toolbar + this.main_toolbar = new MainToolbar(config); + this.main_toolbar.bind_property("search-open", this.search_bar, "search-mode-enabled", + BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL); + this.main_toolbar.bind_property("find-open", this.conversation_viewer.conversation_find_bar, + "search-mode-enabled", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL); + if (config.desktop_environment == Configuration.DesktopEnvironment.UNITY) { + BindingTransformFunc title_func = (binding, source, ref target) => { + string folder = current_folder != null ? current_folder.get_display_name() + " " : ""; + string account = main_toolbar.account != null ? "(%s)".printf(main_toolbar.account) : ""; + + target = "%s%s - %s".printf(folder, account, GearyApplication.NAME); + + return true; + }; + bind_property("current-folder", this, "title", BindingFlags.SYNC_CREATE, title_func); + main_toolbar.bind_property("account", this, "title", BindingFlags.SYNC_CREATE, title_func); main_layout.pack_start(main_toolbar, false, true, 0); - - main_layout.pack_end(conversations_paned, true, true, 0); - - add(main_layout); + } else { + main_toolbar.show_close_button = true; + set_titlebar(main_toolbar); + } + + // Search bar + this.search_bar_box.pack_start(this.search_bar, false, false, 0); + // Folder list + this.folder_list_scrolled.add(this.folder_list); + // Conversation list + this.conversation_list_scrolled.add(this.conversation_list_view); + // Conversation viewer + this.conversations_paned.pack2(this.conversation_viewer, true, true); + + // Status bar + this.status_bar.set_size_request(-1, STATUS_BAR_HEIGHT); + this.status_bar.set_border_width(2); + this.spinner.set_size_request(STATUS_BAR_HEIGHT - 2, -1); + this.spinner.set_progress_monitor(progress_monitor); + this.status_bar.add(this.spinner); } - + // Returns true when there's a conversation list scrollbar visible, i.e. the list is tall // enough to need one. Otherwise returns false. public bool conversation_list_has_scrollbar() { - Gtk.Scrollbar? scrollbar = conversation_list_scrolled.get_vscrollbar() as Gtk.Scrollbar; + Gtk.Scrollbar? scrollbar = this.conversation_list_scrolled.get_vscrollbar() as Gtk.Scrollbar; return scrollbar != null && scrollbar.get_visible(); } - - private bool on_key_press_event(Gdk.EventKey event) { - if ((event.keyval == Gdk.Key.Shift_L || event.keyval == Gdk.Key.Shift_R) - && (event.state & Gdk.ModifierType.SHIFT_MASK) == 0 && !search_bar.search_entry_has_focus) - on_shift_key(true); - - // Check whether the focused widget wants to handle it, if not let the accelerators kick in - // via the default handling - return propagate_key_event(event); - } - - private bool on_key_release_event(Gdk.EventKey event) { - // FIXME: it's possible the user will press two shift keys. We want - // the shift key to report as released when they release ALL of them. - // There doesn't seem to be an easy way to do this in Gdk. - if ((event.keyval == Gdk.Key.Shift_L || event.keyval == Gdk.Key.Shift_R) - && !search_bar.search_entry_has_focus) - on_shift_key(false); - - return propagate_key_event(event); - } - - private bool on_focus_event() { - on_shift_key(false); - return false; + + public override bool key_press_event(Gdk.EventKey event) { + check_shift_event(event); + + /* Ensure that single-key command (SKC) shortcuts don't + * interfere with text input. + * + * The default GtkWindow::key_press_event implementation calls + * gtk_window_activate_key -- which would activate the SKC, + * before calling gtk_window_propagate_key_event -- which + * would send the event to any focused text entry control, so + * we need to override that. A quick hack is to just call + * gtk_window_propagate_key_event here, then chain up. But + * that means two calls to that method for every key press, + * which in the worst case means all widgets in the focus + * chain would be consulted to handle the press twice, which + * sucks. + * + * Worse however, is that due to WK2 Bug 136430[0], WebView + * instances duplicate any key events they don't handle. For + * the editor, that means simple key presses like 'a' will + * only result in a single event, since the web view adds the + * letter to the document. But if not handled, e.g. when the + * user presses Shift, Ctrl, or similar, then it also produces + * a second event. Combined with the + * gtk_window_propagate_key_event above, this leads to a + * cambrian explosion of key events - an exponential number + * are generated, which is bad. This problem also applies to + * ConversationWebView instances, since none of them handle + * events. + * + * The work around here is completely override the default + * implementation to reverse it. So if something related to + * key handling breaks in the future, this might be a good + * place to start looking. Better alternatives welcome. + * + * [0] - + */ + + bool handled = propagate_key_event(event); + if (!handled) { + handled = activate_key(event); + } + if (!handled) { + handled = Gtk.bindings_activate_event(this, event); + } + return handled; } - + private void on_conversation_monitor_changed() { - Geary.App.ConversationMonitor? conversation_monitor = - GearyApplication.instance.controller.current_conversations; - - // Remove existing progress monitor. - if (conversation_monitor_progress != null) { - progress_monitor.remove(conversation_monitor_progress); - conversation_monitor_progress = null; - } - - // Add new one. - if (conversation_monitor != null) { - conversation_monitor_progress = conversation_monitor.progress_monitor; - progress_monitor.add(conversation_monitor_progress); + ConversationListStore? old_model = this.conversation_list_view.get_model(); + if (old_model != null) { + this.progress_monitor.remove(old_model.preview_monitor); + this.progress_monitor.remove(old_model.conversations.progress_monitor); + } + + Geary.App.ConversationMonitor? conversations = + this.application.controller.current_conversations; + + if (conversations != null) { + ConversationListStore new_model = + new ConversationListStore(conversations); + this.progress_monitor.add(new_model.preview_monitor); + this.progress_monitor.add(conversations.progress_monitor); + this.conversation_list_view.set_model(new_model); + } + + if (old_model != null) { + // Must be destroyed, but only after it has been replaced. + old_model.destroy(); } } - + private void on_folder_selected(Geary.Folder? folder) { - if (folder_progress != null) { - progress_monitor.remove(folder_progress); - folder_progress = null; + if (this.folder_progress != null) { + this.progress_monitor.remove(this.folder_progress); + this.folder_progress = null; } - + if (folder != null) { - folder_progress = folder.opening_monitor; - progress_monitor.add(folder_progress); + this.folder_progress = folder.opening_monitor; + this.progress_monitor.add(this.folder_progress); } - + // disconnect from old folder - if (current_folder != null) - current_folder.properties.notify.disconnect(update_headerbar); - + if (this.current_folder != null) + this.current_folder.properties.notify.disconnect(update_headerbar); + // connect to new folder if (folder != null) folder.properties.notify.connect(update_headerbar); - + // swap it in - current_folder = folder; - + this.current_folder = folder; + update_headerbar(); } - + private void on_account_available(Geary.AccountInformation account) { try { - progress_monitor.add(Geary.Engine.instance.get_account_instance(account).opening_monitor); - progress_monitor.add(Geary.Engine.instance.get_account_instance(account).sending_monitor); + this.progress_monitor.add(this.application.engine.get_account_instance(account).opening_monitor); + this.progress_monitor.add(this.application.engine.get_account_instance(account).sending_monitor); } catch (Error e) { debug("Could not access account progress monitors: %s", e.message); } } - + private void on_account_unavailable(Geary.AccountInformation account) { try { - progress_monitor.remove(Geary.Engine.instance.get_account_instance(account).opening_monitor); - progress_monitor.remove(Geary.Engine.instance.get_account_instance(account).sending_monitor); + this.progress_monitor.remove(this.application.engine.get_account_instance(account).opening_monitor); + this.progress_monitor.remove(this.application.engine.get_account_instance(account).sending_monitor); } catch (Error e) { debug("Could not access account progress monitors: %s", e.message); } } - + private void on_change_orientation() { - bool horizontal = GearyApplication.instance.config.folder_list_pane_horizontal; + bool horizontal = this.application.config.folder_list_pane_horizontal; bool initial = true; - - if (status_bar.parent != null) { - status_bar.parent.remove(status_bar); + + if (this.status_bar.parent != null) { + this.status_bar.parent.remove(status_bar); initial = false; } - - GLib.Settings.unbind(folder_paned, "position"); - folder_paned.orientation = horizontal ? Gtk.Orientation.HORIZONTAL : + + GLib.Settings.unbind(this.folder_paned, "position"); + this.folder_paned.orientation = horizontal ? Gtk.Orientation.HORIZONTAL : Gtk.Orientation.VERTICAL; - + int folder_list_width = - GearyApplication.instance.config.folder_list_pane_position_horizontal; + this.application.config.folder_list_pane_position_horizontal; if (horizontal) { if (!initial) - conversations_paned.position += folder_list_width; - folder_box.pack_start(status_bar, false, false); + this.conversations_paned.position += folder_list_width; + this.folder_box.pack_start(status_bar, false, false); } else { if (!initial) - conversations_paned.position -= folder_list_width; - conversation_box.pack_start(status_bar, false, false); + this.conversations_paned.position -= folder_list_width; + this.conversation_box.pack_start(status_bar, false, false); } - - GearyApplication.instance.config.bind( + + this.application.config.bind( horizontal ? Configuration.FOLDER_LIST_PANE_POSITION_HORIZONTAL_KEY : Configuration.FOLDER_LIST_PANE_POSITION_VERTICAL_KEY, - folder_paned, "position"); + this.folder_paned, "position"); } - + private void update_headerbar() { - if (current_folder == null) { - main_toolbar.account = null; - main_toolbar.folder = null; - + if (this.current_folder == null) { + this.main_toolbar.account = null; + this.main_toolbar.folder = null; + return; } - - main_toolbar.account = current_folder.account.information.nickname; - + + this.main_toolbar.account = this.current_folder.account.information.nickname; + /// Current folder's name followed by its unread count, i.e. "Inbox (42)" // except for Drafts and Outbox, where we show total count int count; - switch (current_folder.special_folder_type) { + switch (this.current_folder.special_folder_type) { case Geary.SpecialFolderType.DRAFTS: case Geary.SpecialFolderType.OUTBOX: - count = current_folder.properties.email_total; + count = this.current_folder.properties.email_total; break; - + default: - count = current_folder.properties.email_unread; + count = this.current_folder.properties.email_unread; break; } - + if (count > 0) - main_toolbar.folder = _("%s (%d)").printf(current_folder.get_display_name(), count); + this.main_toolbar.folder = _("%s (%d)").printf(this.current_folder.get_display_name(), count); else - main_toolbar.folder = current_folder.get_display_name(); + this.main_toolbar.folder = this.current_folder.get_display_name(); } -} + private inline void check_shift_event(Gdk.EventKey event) { + // FIXME: it's possible the user will press two shift keys. We want + // the shift key to report as released when they release ALL of them. + // There doesn't seem to be an easy way to do this in Gdk. + if (event.keyval == Gdk.Key.Shift_L || event.keyval == Gdk.Key.Shift_R) { + Gtk.Widget? focus = get_focus(); + if (focus == null || + (!(focus is Gtk.Entry) && !(focus is ComposerWebView))) { + on_shift_key(event.type == Gdk.EventType.KEY_PRESS); + } + } + } + + [GtkCallback] + private bool on_key_release_event(Gdk.EventKey event) { + check_shift_event(event); + return Gdk.EVENT_PROPAGATE; + } + [GtkCallback] + private bool on_focus_event() { + on_shift_key(false); + return false; + } + + [GtkCallback] + private bool on_delete_event() { + if (this.application.is_background_service) { + if (this.application.controller.close_composition_windows(true)) { + hide(); + } + } else { + this.application.exit(); + } + return Gdk.EVENT_STOP; + } +} diff -Nru geary-0.11.4/src/client/components/pill-toolbar.vala geary-0.12.0/src/client/components/pill-toolbar.vala --- geary-0.11.4/src/client/components/pill-toolbar.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/components/pill-toolbar.vala 1970-01-01 00:00:00.000000000 +0000 @@ -1,171 +0,0 @@ -/* Copyright 2016 Software Freedom Conservancy Inc. - * - * This software is licensed under the GNU Lesser General Public License - * (version 2.1 or later). See the COPYING file in this distribution. - */ - -/** - * Interface for creating a Nautilus-style "pill" toolbar. Use only as directed. - * - * Subclasses should inherit from some Gtk.Container and provide pack_start() and - * pack_end() methods with the correct signature. They also need to have action_group - * and size properties and call initialize() in their constructors. - */ -public interface PillBar : Gtk.Container { - protected abstract Gtk.ActionGroup action_group { get; set; } - protected abstract Gtk.SizeGroup size { get; set; } - - public abstract void pack_start(Gtk.Widget widget); - public abstract void pack_end(Gtk.Widget widget); - - protected virtual void initialize(Gtk.ActionGroup toolbar_action_group) { - action_group = toolbar_action_group; - size = new Gtk.SizeGroup(Gtk.SizeGroupMode.VERTICAL); - } - - public virtual void add_start(Gtk.Widget widget) { - pack_start(widget); - size.add_widget(widget); - } - - public virtual void add_end(Gtk.Widget widget) { - pack_end(widget); - size.add_widget(widget); - } - - public virtual void setup_button(Gtk.Button b, string? icon_name, string action_name, - bool show_label = false) { - b.related_action = action_group.get_action(action_name); - b.tooltip_text = b.related_action.tooltip; - b.related_action.notify["tooltip"].connect(() => { b.tooltip_text = b.related_action.tooltip; }); - - // Load icon by name with this fallback order: specified icon name, the action's icon name, - // the action's stock ID ... although stock IDs are being deprecated, that's how we specify - // the icon in the GtkActionEntry (also being deprecated) and GTK+ 3.14 doesn't support that - // any longer - string? icon_to_load = icon_name ?? b.related_action.icon_name; - if (icon_to_load == null) - icon_to_load = b.related_action.stock_id; - - // set pixel size to force GTK+ to load our images from our installed directory, not the theme - // directory - if (icon_to_load != null) { - Gtk.Image image = new Gtk.Image.from_icon_name(icon_to_load, Gtk.IconSize.MENU); - image.set_pixel_size(16); - b.image = image; - } - - // Unity buttons are a bit tight - if (GearyApplication.instance.is_running_unity && b.image != null) - b.image.margin = b.image.margin + 4; - - b.always_show_image = true; - - if (!show_label) - b.label = null; - } - - /** - * Given an icon and action, creates a button that triggers the action. - */ - public virtual Gtk.Button create_toolbar_button(string? icon_name, string action_name, bool show_label = false) { - Gtk.Button b = new Gtk.Button(); - setup_button(b, icon_name, action_name, show_label); - - return b; - } - - /** - * Given an icon and action, creates a toggle button that triggers the action. - */ - public virtual Gtk.Button create_toggle_button(string? icon_name, string action_name) { - Gtk.ToggleButton b = new Gtk.ToggleButton(); - setup_button(b, icon_name, action_name); - - return b; - } - - /** - * Given an icon, menu, and action, creates a button that triggers the menu and the action. - */ - public virtual Gtk.MenuButton create_menu_button(string? icon_name, Gtk.Menu? menu, string action_name) { - Gtk.MenuButton b = new Gtk.MenuButton(); - setup_button(b, icon_name, action_name); - b.popup = menu; - - return b; - } - - /** - * Given a list of buttons, creates a "pill-style" tool item that can be appended to this - * toolbar. Optionally adds spacers "before" and "after" the buttons (those terms depending - * on Gtk.TextDirection) - */ - public virtual Gtk.Box create_pill_buttons(Gee.Collection buttons, - bool before_spacer = true, bool after_spacer = false) { - Gtk.Box box = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 0); - box.valign = Gtk.Align.CENTER; - box.halign = Gtk.Align.CENTER; - - if (buttons.size > 1) { - box.get_style_context().add_class(Gtk.STYLE_CLASS_RAISED); - box.get_style_context().add_class(Gtk.STYLE_CLASS_LINKED); - } - - foreach(Gtk.Button button in buttons) - box.add(button); - - return box; - } -} - -/** - * A pill-style header bar. - */ -public class PillHeaderbar : Gtk.HeaderBar, PillBar { - protected Gtk.ActionGroup action_group { get; set; } - protected Gtk.SizeGroup size { get; set; } - - public PillHeaderbar(Gtk.ActionGroup toolbar_action_group) { - initialize(toolbar_action_group); - } - - public bool close_button_at_end() { - string layout; - bool at_end = false; -#if GTK_3_12 - layout = Gtk.Settings.get_default().gtk_decoration_layout; -#else - get_toplevel().style_get("decoration-button-layout", out layout); -#endif - // Based on logic of close_button_at_end in gtkheaderbar.c: Close button appears - // at end iff "close" follows a colon in the layout string. - if (layout != null) { - int colon_ind = layout.index_of(":"); - at_end = (colon_ind >= 0 && layout.index_of("close", colon_ind) >= 0); - } - return at_end; - } -} - -/** - * A pill-style toolbar. - */ -public class PillToolbar : Gtk.Box, PillBar { - protected Gtk.ActionGroup action_group { get; set; } - protected Gtk.SizeGroup size { get; set; } - - public PillToolbar(Gtk.ActionGroup toolbar_action_group) { - Object(orientation: Gtk.Orientation.HORIZONTAL, spacing: 6); - initialize(toolbar_action_group); - } - - public new void pack_start(Gtk.Widget widget) { - base.pack_start(widget, false, false, 0); - } - - public new void pack_end(Gtk.Widget widget) { - base.pack_end(widget, false, false, 0); - } -} - diff -Nru geary-0.11.4/src/client/components/search-bar.vala geary-0.12.0/src/client/components/search-bar.vala --- geary-0.11.4/src/client/components/search-bar.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/components/search-bar.vala 2017-10-02 11:25:21.000000000 +0000 @@ -5,8 +5,6 @@ */ public class SearchBar : Gtk.SearchBar { - private const string ICON_CLEAR_NAME = "edit-clear-symbolic"; - private const string ICON_CLEAR_RTL_NAME = "edit-clear-rtl-symbolic"; private const string DEFAULT_SEARCH_TEXT = _("Search"); public string search_text { get { return search_entry.text; } } @@ -23,9 +21,12 @@ // Search entry. search_entry.width_chars = 28; search_entry.tooltip_text = _("Search all mail in account for keywords (Ctrl+S)"); - search_entry.changed.connect(on_search_entry_changed); - search_entry.key_press_event.connect(on_search_key_press); - on_search_entry_changed(); // set initial state + search_entry.search_changed.connect(() => { + search_text_changed(search_entry.text); + }); + search_entry.activate.connect(() => { + search_text_changed(search_entry.text); + }); search_entry.has_focus = true; // Search upgrade progress bar. @@ -54,25 +55,6 @@ search_entry.placeholder_text = placeholder; } - private void on_search_entry_changed() { - search_text_changed(search_entry.text); - // Enable/disable clear button. - search_entry.secondary_icon_name = search_entry.text != "" ? - (get_direction() == Gtk.TextDirection.RTL ? ICON_CLEAR_RTL_NAME : ICON_CLEAR_NAME) : null; - } - - private bool on_search_key_press(Gdk.EventKey event) { - // Clear box if user hits escape. - if (Gdk.keyval_name(event.keyval) == "Escape") - search_entry.text = ""; - - // Force search if user hits enter. - if (Gdk.keyval_name(event.keyval) == "Return") - on_search_entry_changed(); - - return false; - } - private void on_search_upgrade_start() { // Set the progress bar's width to match the search entry's width. int minimum_width = 0; diff -Nru geary-0.11.4/src/client/components/status-bar.vala geary-0.12.0/src/client/components/status-bar.vala --- geary-0.11.4/src/client/components/status-bar.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/components/status-bar.vala 2017-10-02 11:25:21.000000000 +0000 @@ -23,7 +23,7 @@ switch (this) { case Message.OUTBOX_SENDING: /// Displayed in the space-limited status bar while a message is in the process of being sent. - return _("Sending..."); + return _("Sending…"); case Message.OUTBOX_SEND_FAILURE: /// Displayed in the space-limited status bar when a message fails to be sent due to error. return _("Error sending email"); diff -Nru geary-0.11.4/src/client/components/stock.vala geary-0.12.0/src/client/components/stock.vala --- geary-0.11.4/src/client/components/stock.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/components/stock.vala 2017-10-02 11:25:21.000000000 +0000 @@ -25,11 +25,10 @@ public const string _HELP = _("_Help"); public const string _OPEN_BUTTON = _("_Open"); public const string _PREFERENCES = _("_Preferences"); -public const string _PRINT_MENU = _("_Print..."); +public const string _PRINT_MENU = _("_Print…"); public const string _QUIT = _("_Quit"); public const string _REMOVE = _("_Remove"); public const string _SAVE = _("_Save"); -public const string SELECT__ALL = _("Select _All"); public const string _KEEP = _("_Keep"); } diff -Nru geary-0.11.4/src/client/components/stylish-webview.vala geary-0.12.0/src/client/components/stylish-webview.vala --- geary-0.11.4/src/client/components/stylish-webview.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/components/stylish-webview.vala 1970-01-01 00:00:00.000000000 +0000 @@ -1,63 +0,0 @@ -/* Copyright 2016 Software Freedom Conservancy Inc. - * - * This software is licensed under the GNU Lesser General Public License - * (version 2.1 or later). See the COPYING file in this distribution. - */ - -public class StylishWebView : WebKit.WebView { - - private string _document_font; - public string document_font { - get { - return _document_font; - } - set { - _document_font = value; - Pango.FontDescription font = Pango.FontDescription.from_string(value); - WebKit.WebSettings config = settings; - config.default_font_family = font.get_family(); - config.default_font_size = font.get_size() / Pango.SCALE; - settings = config; - document_font_changed(); - } - } - - private string _monospace_font; - public string monospace_font { - get { - return _monospace_font; - } - set { - _monospace_font = value; - Pango.FontDescription font = Pango.FontDescription.from_string(value); - WebKit.WebSettings config = settings; - config.monospace_font_family = font.get_family(); - config.default_monospace_font_size = font.get_size() / Pango.SCALE; - settings = config; - monospace_font_changed(); - } - } - - private string _interface_font; - public string interface_font { - get { - return _interface_font; - } - set { - _interface_font = value; - interface_font_changed(); - } - } - - public signal void document_font_changed(); - public signal void monospace_font_changed(); - public signal void interface_font_changed(); - - public StylishWebView() { - Settings system_settings = GearyApplication.instance.config.gnome_interface; - system_settings.bind("document-font-name", this, "document-font", SettingsBindFlags.DEFAULT); - system_settings.bind("monospace-font-name", this, "monospace-font", SettingsBindFlags.DEFAULT); - system_settings.bind("font-name", this, "interface-font", SettingsBindFlags.DEFAULT); - } -} - diff -Nru geary-0.11.4/src/client/composer/composer-box.vala geary-0.12.0/src/client/composer/composer-box.vala --- geary-0.11.4/src/client/composer/composer-box.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/composer/composer-box.vala 2017-10-02 11:25:21.000000000 +0000 @@ -4,97 +4,67 @@ * (version 2.1 or later). See the COPYING file in this distribution. */ +/** + * A ComposerBox is a ComposerContainer that is used to compose mails in the main-window + * (i.e. not-detached), yet separate from a conversation. + */ public class ComposerBox : Gtk.Frame, ComposerContainer { - - private ComposerWidget composer; - private Gee.Set? prev_selection = null; - private bool has_accel_group = false; - - public Gtk.Window top_window { - get { return (Gtk.Window) get_toplevel(); } + + public Gtk.ApplicationWindow top_window { + get { return (Gtk.ApplicationWindow) get_toplevel(); } } - + + internal ComposerWidget composer { get; set; } + + protected Gee.MultiMap? old_accelerators { get; set; } + + private MainToolbar main_toolbar { get; private set; } + + + public signal void vanished(); + + public ComposerBox(ComposerWidget composer) { this.composer = composer; - - add(composer); - composer.editor.focus_in_event.connect(on_focus_in); - composer.editor.focus_out_event.connect(on_focus_out); + this.composer.free_header(); + + this.main_toolbar = GearyApplication.instance.controller.main_window.main_toolbar; + + get_style_context().add_class("geary-composer-box"); + this.halign = Gtk.Align.FILL; + this.vexpand = true; + this.vexpand_set = true; + + add(this.composer); + this.main_toolbar.set_conversation_header(composer.header); + this.composer.editor.focus_in_event.connect(on_focus_in); + this.composer.editor.focus_out_event.connect(on_focus_out); show(); - - if (composer.state == ComposerWidget.ComposerState.NEW) { - ConversationListView conversation_list_view = ((MainWindow) GearyApplication. - instance.controller.main_window).conversation_list_view; - prev_selection = conversation_list_view.get_selected_conversations(); - conversation_list_view.get_selection().unselect_all(); - - composer.free_header(); - GearyApplication.instance.controller.main_window.main_toolbar.set_conversation_header( - composer.header); - get_style_context().add_class("full-pane"); - } } - + public void remove_composer() { - if (composer.editor.has_focus) + if (this.composer.editor.has_focus) on_focus_out(); - composer.editor.focus_in_event.disconnect(on_focus_in); - composer.editor.focus_out_event.disconnect(on_focus_out); - - remove(composer); + this.composer.editor.focus_in_event.disconnect(on_focus_in); + this.composer.editor.focus_out_event.disconnect(on_focus_out); + + remove(this.composer); close_container(); } - - - private bool on_focus_in() { - // For some reason, on_focus_in gets called a bunch upon construction. - if (!has_accel_group) - top_window.add_accel_group(composer.ui.get_accel_group()); - has_accel_group = true; - return false; - } - - private bool on_focus_out() { - top_window.remove_accel_group(composer.ui.get_accel_group()); - has_accel_group = false; - return false; - } - - public void present() { - top_window.present(); - } - - public unowned Gtk.Widget get_focus() { - return top_window.get_focus(); - } - + public void vanish() { hide(); - parent.hide(); - if (get_style_context().has_class("full-pane")) - GearyApplication.instance.controller.main_window.main_toolbar.remove_conversation_header( - composer.header); - - composer.state = ComposerWidget.ComposerState.DETACHED; - composer.editor.focus_in_event.disconnect(on_focus_in); - composer.editor.focus_out_event.disconnect(on_focus_out); - - if (prev_selection != null) { - ConversationListView conversation_list_view = ((MainWindow) GearyApplication. - instance.controller.main_window).conversation_list_view; - if (prev_selection.is_empty) - // Need to trigger "No messages selected" - conversation_list_view.conversations_selected(prev_selection); - else - conversation_list_view.select_conversations(prev_selection); - prev_selection = null; - } + this.main_toolbar.remove_conversation_header(composer.header); + this.composer.state = ComposerWidget.ComposerState.DETACHED; + this.composer.editor.focus_in_event.disconnect(on_focus_in); + this.composer.editor.focus_out_event.disconnect(on_focus_out); + vanished(); } - + public void close_container() { - if (visible) + if (this.visible) vanish(); - parent.remove(this); + destroy(); } } diff -Nru geary-0.11.4/src/client/composer/composer-container.vala geary-0.12.0/src/client/composer/composer-container.vala --- geary-0.11.4/src/client/composer/composer-container.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/composer/composer-container.vala 2017-10-02 11:25:21.000000000 +0000 @@ -4,12 +4,130 @@ * (version 2.1 or later). See the COPYING file in this distribution. */ +/** + * A generic interface for widgets that have a single ComposerWidget-child. + */ public interface ComposerContainer { - public abstract Gtk.Window top_window { get; } - - public abstract void present(); - public abstract unowned Gtk.Widget get_focus(); - public abstract void vanish(); + + // The ComposerWidget-child. + internal abstract ComposerWidget composer { get; set; } + + // Workaround to retrieve all Gtk.Actions with conflicting accelerators + protected const string[] conflicting_actions = { + GearyController.ACTION_MARK_AS_UNREAD, + GearyController.ACTION_FORWARD_MESSAGE + }; + + // We use old_accelerators to keep track of the accelerators we temporarily disabled. + protected abstract Gee.MultiMap? old_accelerators { get; set; } + + // The toplevel window for the container. Note that it needs to be a GtkApplicationWindow. + public abstract Gtk.ApplicationWindow top_window { get; } + + public virtual void present() { + this.top_window.present(); + } + + public virtual unowned Gtk.Widget get_focus() { + return this.top_window.get_focus(); + } + public abstract void close_container(); + + /** + * Hides the widget (and possibly its parent). Usecase is when you don't want to close just yet + * but the composer should not be visible any longer (e.g. when you're still saving a draft). + */ + public abstract void vanish(); + + /** + * Removes the composer from this ComposerContainer (e.g. when detaching) + */ public abstract void remove_composer(); + + protected virtual bool on_focus_in() { + if (this.old_accelerators == null) { + this.old_accelerators = new Gee.HashMultiMap(); + add_accelerators(); + } + return false; + } + + protected virtual bool on_focus_out() { + if (this.old_accelerators != null) { + remove_accelerators(); + this.old_accelerators = null; + } + return false; + } + + /** + * Adds the accelerators for the child composer, and temporarily removes conflicting + * accelerators from existing actions. + */ + protected virtual void add_accelerators() { + GearyApplication app = GearyApplication.instance; + + // Check for actions with conflicting accelerators + foreach (string action in ComposerWidget.action_accelerators.get_keys()) { + foreach (string accelerator in ComposerWidget.action_accelerators[action]) { + string[] actions = app.get_actions_for_accel(accelerator); + + foreach (string conflicting_action in actions) { + remove_conflicting_accelerator(conflicting_action, accelerator); + this.old_accelerators[conflicting_action] = accelerator; + } + } + } + + // Very stupid workaround while we still use Gtk.Actions in the GearyController + foreach (string conflicting_action in conflicting_actions) + app.actions.get_action(conflicting_action).disconnect_accelerator(); + + // Now add our actions to the window and their accelerators + foreach (string action in ComposerWidget.action_accelerators.get_keys()) { + this.top_window.add_action(composer.get_action(action)); + app.set_accels_for_action("win." + action, + ComposerWidget.action_accelerators[action].to_array()); + } + } + + /** + * Removes the accelerators for the child composer, and restores previously removed accelerators. + */ + protected virtual void remove_accelerators() { + foreach (string action in ComposerWidget.action_accelerators.get_keys()) + GearyApplication.instance.set_accels_for_action("win." + action, {}); + + // Very stupid workaround while we still use Gtk.Actions in the GearyController + foreach (string conflicting_action in conflicting_actions) + GearyApplication.instance.actions.get_action(conflicting_action).connect_accelerator(); + + foreach (string action in old_accelerators.get_keys()) + foreach (string accelerator in this.old_accelerators[action]) + restore_conflicting_accelerator(action, accelerator); + } + + // Helper method. Removes the given conflicting accelerator from the action's accelerators. + private void remove_conflicting_accelerator(string action, string accelerator) { + GearyApplication app = GearyApplication.instance; + string[] accelerators = app.get_accels_for_action(action); + if (accelerators.length == 0) + return; + + string[] without_accel = new string[accelerators.length - 1]; + foreach (string a in accelerators) + if (a != accelerator) + without_accel += a; + + app.set_accels_for_action(action, without_accel); + } + + // Helper method. Adds the given accelerator back to the action's accelerators. + private void restore_conflicting_accelerator(string action, string accelerator) { + GearyApplication app = GearyApplication.instance; + string[] accelerators = app.get_accels_for_action(action); + accelerators += accelerator; + app.set_accels_for_action(action, accelerators); + } } diff -Nru geary-0.11.4/src/client/composer/composer-embed.vala geary-0.12.0/src/client/composer/composer-embed.vala --- geary-0.11.4/src/client/composer/composer-embed.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/composer/composer-embed.vala 2017-10-02 11:25:21.000000000 +0000 @@ -4,85 +4,53 @@ * (version 2.1 or later). See the COPYING file in this distribution. */ +/** + * A ComposerEmbed is a widget that is used to compose emails that are inlined into a + * conversation view, e.g. for reply or forward mails. + */ public class ComposerEmbed : Gtk.EventBox, ComposerContainer { - + private const int MIN_EDITOR_HEIGHT = 200; - - private ComposerWidget composer; - private ConversationViewer conversation_viewer; - private string embed_id; - private bool setting_inner_scroll; - private bool scrolled_to_bottom = false; - private double inner_scroll_adj_value; - private int inner_view_height; - private int min_height = MIN_EDITOR_HEIGHT; - private bool has_accel_group = false; - - public Gtk.Window top_window { - get { return (Gtk.Window) get_toplevel(); } + + public Geary.Email referred { get; private set; } + + public Gtk.ApplicationWindow top_window { + get { return (Gtk.ApplicationWindow) get_toplevel(); } } - - public ComposerEmbed(ComposerWidget composer, ConversationViewer conversation_viewer, - Geary.Email referred) { + + internal ComposerWidget composer { get; set; } + + protected Gee.MultiMap? old_accelerators { get; set; } + + private Gtk.ScrolledWindow outer_scroller; + + + public signal void vanished(); + + + public ComposerEmbed(Geary.Email referred, + ComposerWidget composer, + Gtk.ScrolledWindow outer_scroller) { + this.referred = referred; this.composer = composer; - this.conversation_viewer = conversation_viewer; - halign = Gtk.Align.FILL; - valign = Gtk.Align.FILL; - - WebKit.DOM.HTMLElement? email_element = null; - email_element = conversation_viewer.web_view.get_dom_document().get_element_by_id( - conversation_viewer.get_div_id(referred.id)) as WebKit.DOM.HTMLElement; - embed_id = referred.id.to_string() + "_reply"; - if (email_element == null) { - warning("Embedded composer could not find email to follow."); - email_element = conversation_viewer.web_view.get_dom_document().get_element_by_id( - "placeholder") as WebKit.DOM.HTMLElement; - } - - try { - email_element.insert_adjacent_html("afterend", - @"

"); - } catch (Error error) { - debug("Error creating embed element: %s", error.message); - return; - } - + this.outer_scroller = outer_scroller; + + get_style_context().add_class("geary-composer-embed"); + this.halign = Gtk.Align.FILL; + this.vexpand = true; + this.vexpand_set = true; + add(composer); realize.connect(on_realize); - composer.editor.focus_in_event.connect(on_focus_in); - composer.editor.focus_out_event.connect(on_focus_out); - composer.editor.document_load_finished.connect(on_loaded); - conversation_viewer.compose_overlay.add_overlay(this); + this.composer.editor.focus_in_event.connect(on_focus_in); + this.composer.editor.focus_out_event.connect(on_focus_out); show(); - present(); } - + private void on_realize() { - update_style(); - - Gtk.ScrolledWindow win = (Gtk.ScrolledWindow) composer.editor.parent; - win.get_vscrollbar().hide(); - - composer.editor.vadjustment.value_changed.connect(on_inner_scroll); - composer.editor.vadjustment.changed.connect(on_adjust_changed); - composer.editor.user_changed_contents.connect(on_inner_size_changed); - reroute_scroll_handling(this); } - - private void on_loaded() { - try { - composer.editor.get_dom_document().body.get_class_list().add("embedded"); - } catch (Error error) { - debug("Error setting class of editor: %s", error.message); - } - Idle.add(() => { - recalc_height(); - conversation_viewer.compose_overlay.queue_resize(); - return false; - }); - } - + private void reroute_scroll_handling(Gtk.Widget widget) { widget.add_events(Gdk.EventMask.SCROLL_MASK | Gdk.EventMask.SMOOTH_SCROLL_MASK); widget.scroll_event.connect(on_inner_scroll_event); @@ -92,7 +60,7 @@ reroute_scroll_handling(child); } } - + private void disable_scroll_reroute(Gtk.Widget widget) { widget.scroll_event.disconnect(on_inner_scroll_event); Gtk.Container? container = widget as Gtk.Container; @@ -101,181 +69,138 @@ disable_scroll_reroute(child); } } - - private void update_style() { - Gdk.RGBA window_background = top_window.get_style_context() - .get_background_color(Gtk.StateFlags.NORMAL); - Gdk.RGBA background = get_style_context().get_background_color(Gtk.StateFlags.NORMAL); - - if (background == window_background) - return; - - get_style_context().changed.disconnect(update_style); - override_background_color(Gtk.StateFlags.NORMAL, window_background); - get_style_context().changed.connect(update_style); - } - + public void remove_composer() { - if (composer.editor.has_focus) + if (this.composer.editor.has_focus) on_focus_out(); - composer.editor.focus_in_event.disconnect(on_focus_in); - composer.editor.focus_out_event.disconnect(on_focus_out); - composer.editor.vadjustment.value_changed.disconnect(on_inner_scroll); - composer.editor.user_changed_contents.disconnect(on_inner_size_changed); + + this.composer.editor.focus_in_event.disconnect(on_focus_in); + this.composer.editor.focus_out_event.disconnect(on_focus_out); + disable_scroll_reroute(this); - Gtk.ScrolledWindow win = (Gtk.ScrolledWindow) composer.editor.parent; - win.get_vscrollbar().show(); - - try { - composer.editor.get_dom_document().body.get_class_list().remove("embedded"); - } catch (Error error) { - debug("Error setting class of editor: %s", error.message); - } - - remove(composer); + + remove(this.composer); close_container(); } - - public bool set_position(ref Gdk.Rectangle allocation, double hscroll, double vscroll, - int view_height) { - WebKit.DOM.Element embed = conversation_viewer.web_view.get_dom_document().get_element_by_id(embed_id); - if (embed == null) - return false; - - int div_height = (int) embed.client_height; - int y_top = (int) (embed.offset_top + embed.client_top) - (int) vscroll; - int available_height = int.min(y_top + div_height, view_height) - int.max(y_top, 0); - - if (available_height < 0 || available_height == div_height) { - // It fits in the available space, or it doesn't fit at all - allocation.y = y_top; - // When offscreen, make it very small to ensure scrolling during any edit - allocation.height = (available_height < 0) ? 1 : div_height; - } else if (available_height > min_height) { - // There's enough room, so make sure we get the whole widget in - allocation.y = int.max(y_top, 0); - allocation.height = available_height; - } else { - // Minimum height widget, placed so as much as possible is visible - allocation.y = int.max(y_top, int.min(y_top + div_height - min_height, 0)); - allocation.height = min_height; - } - allocation.x = (int) (embed.offset_left + embed.client_left) - (int) hscroll; - allocation.width = (int) embed.client_width; - - // Work out adjustment of composer web view - setting_inner_scroll = true; - composer.editor.vadjustment.set_value(allocation.y - y_top); - setting_inner_scroll = false; - // This sets the scroll before the widget gets resized. Although the adjustment - // may be scrolled to the bottom right now, the current value may not do that - // once the widget is shrunk; for example, while scrolling down the page past - // the bottom of the editor. So if we're at the bottom, record that fact. When - // the limits of the adjustment are changed (watched by on_adjust_changed), we - // can keep it at the bottom. - scrolled_to_bottom = (y_top <= 0 && available_height < view_height); - - return true; - } - - private bool on_focus_in() { - // For some reason, on_focus_in gets called a bunch upon construction. - if (!has_accel_group) - top_window.add_accel_group(composer.ui.get_accel_group()); - has_accel_group = true; - return false; - } - - private bool on_focus_out() { - top_window.remove_accel_group(composer.ui.get_accel_group()); - has_accel_group = false; - return false; - } - - private void on_inner_scroll(Gtk.Adjustment adj) { - double delta = adj.value - inner_scroll_adj_value; - inner_scroll_adj_value = adj.value; - if (delta != 0 && !setting_inner_scroll) { - Gtk.Adjustment outer_adj = conversation_viewer.web_view.vadjustment; - outer_adj.set_value(outer_adj.value + delta); - } - } - - private void on_adjust_changed(Gtk.Adjustment adj) { - if (scrolled_to_bottom) { - setting_inner_scroll = true; - adj.set_value(adj.upper); - setting_inner_scroll = false; - } - } - - private void on_inner_size_changed() { - scrolled_to_bottom = false; // The inserted character may cause a desired scroll - Idle.add(recalc_height); // So that this runs after the character has been inserted - } - - private bool recalc_height() { - int view_height, - base_height = get_allocated_height() - composer.editor.get_allocated_height(); - try { - view_height = (int) composer.editor.get_dom_document() - .query_selector("#message-body").offset_height; - } catch (Error error) { - debug("Error getting height of editor: %s", error.message); - return false; - } - - if (view_height != inner_view_height || min_height != base_height + MIN_EDITOR_HEIGHT) { - inner_view_height = view_height; - min_height = base_height + MIN_EDITOR_HEIGHT; - // Calculate height widget should be to avoid scrolling in editor - int widget_height = int.max(view_height + base_height - 2, min_height); //? about 2 - WebKit.DOM.Element embed = conversation_viewer.web_view - .get_dom_document().get_element_by_id(embed_id); - if (embed != null) { - try { - embed.style.set_property("height", @"$widget_height", ""); - } catch (Error error) { - debug("Error setting height of composer widget"); + + // This method intercepts scroll events destined for the embedded + // composer and diverts them them to the conversation listbox's + // outer scrolled window or the composer's editor as appropriate. + // + // The aim is to let the user increase the height of the composer + // via scrolling when it it smaller than the current scrolled + // window, scroll through the conversation itself, and also scroll + // the composer's editor, in a reasonably natural way. + private bool on_inner_scroll_event(Gdk.EventScroll event) { + // Bugs & improvements: + // + // - Clamp top of embedded window to top/bottom of viewport a + // bit better, sometimes it will sit a few pixels below the + // toolbar will be or be half obscured by the top of the + // viewport, etc + // - Maybe let the user shrink the size of the composer down + // when scrolling up? + // - When window size changes, need to adjust size of composer + // window, although maybe that might be taken care of by + // allowing the user to scroll to shrink the size of the + // window? + + bool ret = Gdk.EVENT_STOP; + if (event.direction == Gdk.ScrollDirection.SMOOTH && + event.delta_y != 0.0) { + // Scrolling vertically + Gtk.Adjustment adj = this.outer_scroller.vadjustment; + Gtk.Allocation alloc; + get_allocation(out alloc); + + // Scroll unit calc taken from + // gtk_scrolled_window_scroll_event + double scroll_unit = Math.pow(adj.page_size, 2.0 / 3.0); + double scroll_delta = event.delta_y * scroll_unit; + double initial_value = adj.value; + + if (event.delta_y > 0.0) { + // Scrolling down + if (alloc.y > adj.value) { + // This embed isn't against the top of the visible + // area, so scroll the outer. Clamp the scroll + // delta to bring it to the top at most. + event.delta_y = ( + Math.fmin(scroll_delta, alloc.y - adj.value) / scroll_unit + ); + this.outer_scroller.scroll_event(event); + } + double remainder_delta = scroll_delta - (adj.value - initial_value); + + if (remainder_delta > 0.0001) { + // Outer scroller didn't use the complete delta, + // so work out what to do with the remainder. + + int editor_height = this.composer.editor.get_allocated_height(); + int editor_preferred = this.composer.editor.preferred_height; + int scrolled_height = this.outer_scroller.get_allocated_height(); + + if (alloc.height < scrolled_height && + editor_height < editor_preferred) { + // The editor is smaller than allowed/preferred, + // so make it bigger + int editor_delta = (int) Math.round(remainder_delta); + if (editor_delta + alloc.height > scrolled_height) { + editor_delta = scrolled_height - alloc.height; + } + if (editor_delta + editor_height > editor_preferred) { + editor_delta = editor_preferred - editor_height; + } + remainder_delta -= editor_delta; + set_size_request(-1, get_allocated_height() + editor_delta); + } else { + // Still some scroll distance unused, so let the + // editor have at it. + event.delta_y = (remainder_delta / scroll_unit); + ret = Gdk.EVENT_PROPAGATE; + } + } + } else if (event.delta_y < 0.0) { + // Scrolling up + double alloc_bottom = alloc.y + alloc.height; + double adj_bottom = adj.value + adj.page_size; + if (alloc_bottom < adj_bottom) { + // This embed isn't against the bottom of the + // scrolled window, so scroll the scroll the + // outer. Clamp the scroll delta to bring it to + // the bottom at most. + event.delta_y = ( + Math.fmax(scroll_delta, alloc_bottom - adj_bottom) / scroll_unit + ); + this.outer_scroller.scroll_event(event); + double remainder_delta = scroll_delta - (adj.value - initial_value); + if (Math.fabs(remainder_delta) > 0.0001) { + event.delta_y = (remainder_delta / scroll_unit); + ret = Gdk.EVENT_PROPAGATE; + } + } else { + ret = Gdk.EVENT_PROPAGATE; } } } - return false; - } - - private bool on_inner_scroll_event(Gdk.EventScroll event) { - conversation_viewer.web_view.scroll_event(event); - return true; + return ret; } - + public void present() { top_window.present(); - conversation_viewer.web_view.get_dom_document().get_element_by_id(embed_id) - .scroll_into_view_if_needed(false); - } - - public unowned Gtk.Widget get_focus() { - return top_window.get_focus(); } - + public void vanish() { hide(); - composer.state = ComposerWidget.ComposerState.DETACHED; - composer.editor.focus_in_event.disconnect(on_focus_in); - composer.editor.focus_out_event.disconnect(on_focus_out); - - WebKit.DOM.Element embed = conversation_viewer.web_view.get_dom_document().get_element_by_id(embed_id); - try{ - embed.parent_element.remove_child(embed); - } catch (Error error) { - warning("Could not remove embed from WebView: %s", error.message); - } + this.composer.state = ComposerWidget.ComposerState.DETACHED; + this.composer.editor.focus_in_event.disconnect(on_focus_in); + this.composer.editor.focus_out_event.disconnect(on_focus_out); + vanished(); } - + public void close_container() { - if (visible) + if (this.visible) vanish(); - conversation_viewer.compose_overlay.remove(this); + destroy(); } } - diff -Nru geary-0.11.4/src/client/composer/composer-headerbar.vala geary-0.12.0/src/client/composer/composer-headerbar.vala --- geary-0.11.4/src/client/composer/composer-headerbar.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/composer/composer-headerbar.vala 2017-10-02 11:25:21.000000000 +0000 @@ -4,137 +4,72 @@ * (version 2.1 or later). See the COPYING file in this distribution. */ -public class ComposerHeaderbar : PillHeaderbar { - +[GtkTemplate (ui = "/org/gnome/Geary/composer-headerbar.ui")] +public class ComposerHeaderbar : Gtk.HeaderBar { + + public Configuration config { get; set; } + public ComposerWidget.ComposerState state { get; set; } + public bool show_pending_attachments { get; set; default = false; } - public bool send_enabled { get; set; default = false; } - - private Gtk.Button recipients; - private Gtk.Label recipients_label; + + [GtkChild] + internal Gtk.Button save_and_close_button; // { get; private set; } + + [GtkChild] private Gtk.Box detach_start; + [GtkChild] private Gtk.Box detach_end; - - public ComposerHeaderbar(Gtk.ActionGroup action_group) { - base(action_group); - - show_close_button = false; - - bool rtl = (get_direction() == Gtk.TextDirection.RTL); - - // Toolbar setup. - Gee.List insert = new Gee.ArrayList(); - - // Window management. - detach_start = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 0); - Gtk.Button detach_button = create_toolbar_button(null, ComposerWidget.ACTION_DETACH); - detach_button.set_relief(Gtk.ReliefStyle.NONE); - if (rtl) - detach_button.set_margin_left(6); - else - detach_button.set_margin_right(6); - detach_start.pack_start(detach_button); - detach_start.pack_start(new Gtk.Separator(Gtk.Orientation.VERTICAL)); - - detach_end = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 0); - detach_button = create_toolbar_button(null, ComposerWidget.ACTION_DETACH); - detach_button.set_relief(Gtk.ReliefStyle.NONE); - if (rtl) - detach_button.set_margin_right(6); - else - detach_button.set_margin_left(6); - detach_end.pack_end(detach_button); - detach_end.pack_end(new Gtk.Separator(Gtk.Orientation.VERTICAL)); - - insert.add(create_toolbar_button(null, ComposerWidget.ACTION_CLOSE_DISCARD)); - insert.add(create_toolbar_button(null, ComposerWidget.ACTION_CLOSE_SAVE)); - Gtk.Box close_buttons = create_pill_buttons(insert, false); - insert.clear(); - - Gtk.Button send_button = create_toolbar_button(null, ComposerWidget.ACTION_SEND, true); - send_button.get_style_context().add_class("suggested-action"); - - Gtk.Box attach_buttons = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 0); - Gtk.Button attach_only = create_toolbar_button(null, ComposerWidget.ACTION_ADD_ATTACHMENT); - insert.add(create_toolbar_button(null, ComposerWidget.ACTION_ADD_ATTACHMENT)); - insert.add(create_toolbar_button(null, ComposerWidget.ACTION_ADD_ORIGINAL_ATTACHMENTS)); - Gtk.Box attach_pending = create_pill_buttons(insert, false); - attach_buttons.pack_start(attach_only); - attach_buttons.pack_start(attach_pending); - - recipients = new Gtk.Button(); - recipients.set_relief(Gtk.ReliefStyle.NONE); - recipients_label = new Gtk.Label(null); - recipients_label.set_ellipsize(Pango.EllipsizeMode.END); - recipients.add(recipients_label); - recipients.clicked.connect(() => { state = ComposerWidget.ComposerState.INLINE; }); - - bind_property("state", recipients, "visible", BindingFlags.SYNC_CREATE, - (binding, source_value, ref target_value) => { - target_value = (state == ComposerWidget.ComposerState.INLINE_COMPACT); - return true; + [GtkChild] + private Gtk.Button recipients_button; + [GtkChild] + private Gtk.Label recipients_label; + [GtkChild] + private Gtk.Button new_message_attach_button; + [GtkChild] + private Gtk.Box conversation_attach_buttons; + + /** Fired when the user wants to expand a compact composer. */ + public signal void expand_composer(); + + public ComposerHeaderbar(Configuration config, bool is_compact) { + this.config = config; + + this.recipients_button.set_visible(is_compact); + this.recipients_button.clicked.connect(() => { + this.recipients_button.hide(); + expand_composer(); }); - bind_property("show-pending-attachments", attach_only, "visible", + + bind_property("show-pending-attachments", new_message_attach_button, "visible", BindingFlags.SYNC_CREATE | BindingFlags.INVERT_BOOLEAN); - bind_property("show-pending-attachments", attach_pending, "visible", + bind_property("show-pending-attachments", conversation_attach_buttons, "visible", BindingFlags.SYNC_CREATE); - bind_property("send-enabled", send_button, "sensitive", BindingFlags.SYNC_CREATE); - - add_start(detach_start); - add_start(attach_buttons); - add_start(recipients); -#if !GTK_3_12 - add_end(send_button); - add_end(close_buttons); - add_end(detach_end); -#endif - // Application button for when taking over main header bar. If we exported an app menu, - // we don't need this. - if (!Gtk.Settings.get_default().gtk_shell_shows_app_menu) { - Gtk.Menu application_menu = new Gtk.Menu.from_model( - GearyApplication.instance.controller.app_menu); - Gtk.Button menu_button = create_menu_button(null, application_menu, - ComposerWidget.ACTION_GEAR_MENU); - add_end(menu_button); - bind_property("state", menu_button, "visible", BindingFlags.SYNC_CREATE, - (binding, source_value, ref target_value) => { - target_value = (state == ComposerWidget.ComposerState.NEW); - return true; - }); - } -#if GTK_3_12 - add_end(detach_end); - add_end(close_buttons); - add_end(send_button); -#endif -#if GTK_3_12 notify["decoration-layout"].connect(set_detach_button_side); -#else - get_style_context().changed.connect(set_detach_button_side); -#endif realize.connect(set_detach_button_side); - notify["state"].connect((s, p) => { - if (state == ComposerWidget.ComposerState.DETACHED) { -#if GTK_3_12 - notify["decoration-layout"].disconnect(set_detach_button_side); -#else - get_style_context().changed.disconnect(set_detach_button_side); -#endif - detach_start.visible = detach_end.visible = false; - } - }); } - + public void set_recipients(string label, string tooltip) { recipients_label.label = label; - recipients.tooltip_text = tooltip; + recipients_button.tooltip_text = tooltip; } - + + public void detached() { + notify["decoration-layout"].disconnect(set_detach_button_side); + this.recipients_button.hide(); + this.detach_start.visible = this.detach_end.visible = false; + } + private void set_detach_button_side() { - bool at_end = close_button_at_end(); - detach_start.visible = !at_end; - detach_end.visible = at_end; + if (config.desktop_environment == Configuration.DesktopEnvironment.UNITY) { + detach_start.visible = false; + detach_end.visible = true; + } else { + bool at_end = GtkUtil.close_button_at_end(); + detach_start.visible = !at_end; + detach_end.visible = at_end; + } } } diff -Nru geary-0.11.4/src/client/composer/composer-link-popover.vala geary-0.12.0/src/client/composer/composer-link-popover.vala --- geary-0.11.4/src/client/composer/composer-link-popover.vala 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/src/client/composer/composer-link-popover.vala 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,193 @@ +/* + * Copyright 2017 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + + +/** + * A popover for editing a link in the composer. + * + * The exact appearance of the popover will depend on the {@link + * Type} passed to the constructor: + * + * - For {@link Type.NEW_LINK}, the user will be presented with an + * insert button and an open button. + * - For {@link Type.EXISTING_LINK}, the user will be presented with + * an update, delete and open buttons. + */ +[GtkTemplate (ui = "/org/gnome/Geary/composer-link-popover.ui")] +public class ComposerLinkPopover : Gtk.Popover { + + private const string[] HTTP_SCHEMES = { "http", "https" }; + private const string[] OTHER_SCHEMES = { + "aim", "apt", "bitcoin", "cvs", "ed2k", "ftp", "file", "finger", + "git", "gtalk", "irc", "ircs", "irc6", "lastfm", "ldap", "ldaps", + "magnet", "news", "nntp", "rsync", "sftp", "skype", "smb", "sms", + "svn", "telnet", "tftp", "ssh", "webcal", "xmpp" + }; + + /** Determines which version of the UI is presented to the user. */ + public enum Type { + /** A new link is being created. */ + NEW_LINK, + + /** An existing link is being edited. */ + EXISTING_LINK, + } + + /** The URL displayed in the popover */ + public string link_uri { get { return this.url.get_text(); } } + + [GtkChild] + private Gtk.Entry url; + + [GtkChild] + private Gtk.Button insert; + + [GtkChild] + private Gtk.Button update; + + [GtkChild] + private Gtk.Button delete; + + [GtkChild] + private Gtk.Button open; + + private Geary.TimeoutManager validation_timeout; + + + /** Emitted when the link URL has changed. */ + public signal void link_changed(Soup.URI? uri, bool is_valid); + + /** Emitted when the link URL was activated. */ + public signal void link_activate(); + + /** Emitted when the open button was activated. */ + public signal void link_open(); + + /** Emitted when the delete button was activated. */ + public signal void link_delete(); + + + public ComposerLinkPopover(Type type) { + // GTK_ 3.18: Re-enable this + //set_default_widget(this.url); + set_focus_child(this.url); + switch (type) { + case Type.NEW_LINK: + this.update.hide(); + this.delete.hide(); + break; + case Type.EXISTING_LINK: + this.insert.hide(); + break; + } + this.validation_timeout = new Geary.TimeoutManager.milliseconds( + 150, () => { validate(); } + ); + } + + public override void show() { + base.show(); + this.url.grab_focus(); + } + + public override void destroy() { + this.validation_timeout.reset(); + base.destroy(); + } + + public void set_link_url(string url) { + this.url.set_text(url); + this.validation_timeout.reset(); // Don't update on manual set + } + + private void validate() { + string? text = this.url.get_text().strip(); + bool is_empty = Geary.String.is_empty(text); + bool is_valid = false; + bool is_nominal = false; + bool is_mailto = false; + Soup.URI? url = null; + if (!is_empty) { + url = new Soup.URI(text); + if (url != null) { + is_valid = true; + + string? scheme = url.get_scheme(); + string? path = url.get_path(); + if (scheme in HTTP_SCHEMES) { + is_nominal = Geary.Inet.is_valid_display_host(url.get_host()); + } else if (scheme == "mailto") { + is_mailto = true; + is_nominal = ( + !Geary.String.is_empty(path) && + Geary.RFC822.MailboxAddress.is_valid_address(path) + ); + } else if (scheme in OTHER_SCHEMES) { + is_nominal = !Geary.String.is_empty(path); + } + } else if (text == "http:/" || text == "https:/") { + // Don't let the URL entry switch to invalid and back + // between "http:" and "http://" + is_valid = true; + } + } + + // Don't let the user open invalid and mailto links, it's not + // terribly useful + this.open.set_sensitive(is_nominal && !is_mailto); + + Gtk.StyleContext style = this.url.get_style_context(); + Gtk.EntryIconPosition pos = Gtk.EntryIconPosition.SECONDARY; + if (!is_valid) { + style.add_class(Gtk.STYLE_CLASS_ERROR); + style.remove_class(Gtk.STYLE_CLASS_WARNING); + this.url.set_icon_from_icon_name(pos, "dialog-error-symbolic"); + this.url.set_tooltip_text( + _("Link URL is not correctly formatted, e.g. http://example.com") + ); + } else if (!is_nominal) { + style.remove_class(Gtk.STYLE_CLASS_ERROR); + style.add_class(Gtk.STYLE_CLASS_WARNING); + this.url.set_icon_from_icon_name(pos, "dialog-warning-symbolic"); + this.url.set_tooltip_text( + !is_mailto ? _("Invalid link URL") : _("Invalid email address") + ); + } else { + style.remove_class(Gtk.STYLE_CLASS_ERROR); + style.remove_class(Gtk.STYLE_CLASS_WARNING); + this.url.set_icon_from_icon_name(pos, null); + this.url.set_tooltip_text(""); + } + + link_changed(url, is_valid && is_nominal); + } + + [GtkCallback] + private void on_url_changed() { + this.validation_timeout.start(); + } + + [GtkCallback] + private void on_activate_popover() { + link_activate(); + // GTK+ 3.22/4: Change change this to popdown() + hide(); + } + + [GtkCallback] + private void on_delete_clicked() { + link_delete(); + // GTK+ 3.22/4: Change change this to popdown() + hide(); + } + + [GtkCallback] + private void on_open_clicked() { + link_open(); + } + +} diff -Nru geary-0.11.4/src/client/composer/composer-toolbar.vala geary-0.12.0/src/client/composer/composer-toolbar.vala --- geary-0.11.4/src/client/composer/composer-toolbar.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/composer/composer-toolbar.vala 1970-01-01 00:00:00.000000000 +0000 @@ -1,50 +0,0 @@ -/* Copyright 2016 Software Freedom Conservancy Inc. - * - * This software is licensed under the GNU Lesser General Public License - * (version 2.1 or later). See the COPYING file in this distribution. - */ - -public class ComposerToolbar : PillToolbar { - - public string label_text { get; set; } - - public ComposerToolbar(Gtk.ActionGroup toolbar_action_group, Gtk.Menu menu) { - base(toolbar_action_group); - - Gee.List insert = new Gee.ArrayList(); - - // Font formatting. - insert.add(create_toggle_button(null, ComposerWidget.ACTION_BOLD)); - insert.add(create_toggle_button(null, ComposerWidget.ACTION_ITALIC)); - insert.add(create_toggle_button(null, ComposerWidget.ACTION_UNDERLINE)); - insert.add(create_toggle_button(null, ComposerWidget.ACTION_STRIKETHROUGH)); - add_start(create_pill_buttons(insert, false, true)); - - // Indent level. - insert.clear(); - insert.add(create_toolbar_button(null, ComposerWidget.ACTION_INDENT)); - insert.add(create_toolbar_button(null, ComposerWidget.ACTION_OUTDENT)); - add_start(create_pill_buttons(insert, false)); - - // Link. - insert.clear(); - insert.add(create_toolbar_button(null, ComposerWidget.ACTION_INSERT_LINK)); - add_start(create_pill_buttons(insert)); - - // Remove formatting. - insert.clear(); - insert.add(create_toolbar_button(null, ComposerWidget.ACTION_REMOVE_FORMAT)); - add_start(create_pill_buttons(insert)); - - // Menu. - insert.clear(); - insert.add(create_menu_button(null, menu, ComposerWidget.ACTION_MENU)); - add_end(create_pill_buttons(insert)); - - Gtk.Label label = new Gtk.Label(null); - label.get_style_context().add_class("dim-label"); - bind_property("label-text", label, "label", BindingFlags.SYNC_CREATE); - add_end(label); - } -} - diff -Nru geary-0.11.4/src/client/composer/composer-web-view.vala geary-0.12.0/src/client/composer/composer-web-view.vala --- geary-0.11.4/src/client/composer/composer-web-view.vala 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/src/client/composer/composer-web-view.vala 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,544 @@ +/* + * Copyright 2016 Software Freedom Conservancy Inc. + * Copyright 2016 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +/** + * A WebView for editing messages in the composer. + */ +public class ComposerWebView : ClientWebView { + + + private const string COMMAND_STACK_CHANGED = "commandStackChanged"; + private const string CURSOR_CONTEXT_CHANGED = "cursorContextChanged"; + private const string DOCUMENT_MODIFIED = "documentModified"; + + /** + * Encapsulates editing-related state for a specific DOM node. + * + * This must be kept in sync with the JS object of the same name. + */ + public class EditContext : Object { + + private const uint LINK_MASK = 1 << 0; + + private const string[] SANS_FAMILY_NAMES = { + "sans", "arial", "trebuchet", "helvetica" + }; + private const string[] SERIF_FAMILY_NAMES = { + "serif", "georgia", "times" + }; + private const string[] MONO_FAMILY_NAMES = { + "monospace", "courier", "console" + }; + + private static Gee.HashMap font_family_map = + new Gee.HashMap(); + + static construct { + foreach (string name in SANS_FAMILY_NAMES) { + font_family_map[name] = "sans"; + } + foreach (string name in SERIF_FAMILY_NAMES) { + font_family_map[name] = "serif"; + } + foreach (string name in MONO_FAMILY_NAMES) { + font_family_map[name] = "monospace"; + } + } + + + public bool is_link { get { return (this.context & LINK_MASK) > 0; } } + public string link_url { get; private set; default = ""; } + public string font_family { get; private set; default = "sans"; } + public uint font_size { get; private set; default = 12; } + + private uint context = 0; + + public EditContext(string message) { + string[] values = message.split(","); + this.context = (uint) uint64.parse(values[0]); + + this.link_url = values[1]; + + string view_name = values[2].down(); + foreach (string specific_name in EditContext.font_family_map.keys) { + if (specific_name in view_name) { + this.font_family = EditContext.font_family_map[specific_name]; + break; + } + } + + this.font_size = (uint) uint64.parse(values[3]); + } + + } + + + private static WebKit.UserStyleSheet? app_style = null; + private static WebKit.UserScript? app_script = null; + + public static void load_resources() + throws Error { + ComposerWebView.app_style = ClientWebView.load_app_stylesheet( + "composer-web-view.css" + ); + ComposerWebView.app_script = ClientWebView.load_app_script( + "composer-web-view.js" + ); + } + + /** + * Determines if the body contains any non-boilerplate content. + * + * Currently, only a signatures are considered to be boilerplate. + * Any user-made changes or message body content from a + * forwarded/replied-to message present will make the view + * considered to be non-empty. + */ + public bool is_empty { get; private set; default = true; } + + /** Determines if the view is in rich text mode. */ + public bool is_rich_text { get; private set; default = true; } + + // Determines if signals should be sent, useful for e.g. stopping + // document_modified being sent when the editor content is being + // updated before sending. + private bool signals_enabled = true; + + + /** Emitted when the web view's content has changed. */ + public signal void document_modified(); + + /** Emitted when the web view's undo/redo stack state changes. */ + public signal void command_stack_changed(bool can_undo, bool can_redo); + + /** Emitted when the cursor's edit context has changed. */ + public signal void cursor_context_changed(EditContext cursor_context); + + /** Workaround for WebView eating the button event */ + internal signal bool button_release_event_done(Gdk.Event event); + + + public ComposerWebView(Configuration config) { + base(config); + + add_events(Gdk.EventMask.KEY_PRESS_MASK | Gdk.EventMask.KEY_RELEASE_MASK); + + this.user_content_manager.add_style_sheet(ComposerWebView.app_style); + this.user_content_manager.add_script(ComposerWebView.app_script); + + register_message_handler(COMMAND_STACK_CHANGED, on_command_stack_changed); + register_message_handler(CURSOR_CONTEXT_CHANGED, on_cursor_context_changed); + register_message_handler(DOCUMENT_MODIFIED, on_document_modified); + } + + /** + * Loads a message HTML body into the view. + */ + public new void load_html(string body, + string signature, + string quote, + bool top_posting, + bool is_draft) { + const string HTML_PRE = """"""; + const string HTML_POST = """"""; + const string BODY_PRE = """ +
"""; + const string BODY_POST = """
+"""; + const string SIGNATURE = """ +
%s
+"""; + const string QUOTE = """ +

%s
+"""; + const string CURSOR = "

"; + const string SPACER = "

"; + + StringBuilder html = new StringBuilder(); + html.append(HTML_PRE); + if (!is_draft) { + html.append(BODY_PRE); + bool have_body = !Geary.String.is_empty(body); + if (have_body) { + html.append(body); + html.append(SPACER); + } + + if (!top_posting && !Geary.String.is_empty(quote)) { + html.append(quote); + html.append(SPACER); + } + + html.append(CURSOR); + html.append(BODY_POST); + + if (!Geary.String.is_empty(signature)) { + html.append_printf(SIGNATURE, signature); + } + + if (top_posting && !Geary.String.is_empty(quote)) { + html.append_printf(QUOTE, quote); + } + } else { + html.append(quote); + } + html.append(HTML_POST); + base.load_html((string) html.data); + } + + /** + * Makes the view uneditable and stops signals from being sent. + */ + public void disable() { + set_sensitive(false); + this.signals_enabled = false; + } + + /** + * Sets whether the editor is in rich text or plain text mode. + */ + public void set_rich_text(bool enabled) { + this.is_rich_text = enabled; + this.call.begin(Geary.JS.callable("geary.setRichText").bool(enabled), null); + } + + /** + * Undoes the last edit operation. + */ + public void undo() { + this.call.begin(Geary.JS.callable("geary.undo"), null); + } + + /** + * Redoes the last undone edit operation. + */ + public void redo() { + this.call.begin(Geary.JS.callable("geary.redo"), null); + } + + /** + * Saves the current text selection so it can be restored later. + * + * Returns an id to be used to refer to the selection in + * subsequent calls. + */ + public async string save_selection() throws Error { + return WebKitUtil.to_string( + yield call(Geary.JS.callable("geary.saveSelection"), null) + ); + } + + /** + * Removes a saved selection. + */ + public void free_selection(string id) { + this.call.begin(Geary.JS.callable("geary.freeSelection").string(id), null); + } + + /** + * Cuts selected content and sends it to the clipboard. + */ + public void cut_clipboard() { + execute_editing_command(WebKit.EDITING_COMMAND_CUT); + } + + /** + * Pastes plain text from the clipboard into the view. + */ + public void paste_plain_text() { + get_clipboard(Gdk.SELECTION_CLIPBOARD).request_text((clipboard, text) => { + if (text != null) { + insert_text(text); + } + }); + } + + /** + * Pastes rich text from the clipboard into the view. + */ + public void paste_rich_text() { + execute_editing_command(WebKit.EDITING_COMMAND_PASTE); + } + + /** + * Inserts some text at the current text cursor location. + */ + public void insert_text(string text) { + execute_editing_command_with_argument("inserttext", text); + + // XXX scroll to insertion point: + + // The inserttext command will not scroll if needed, but we + // can't use the clipboard for plain text. WebKit allows us to + // scroll a node into view, but not an arbitrary position + // within a text node. So we add a placeholder node at the + // cursor position, scroll to that, then remove the + // placeholder node. + // try { + // WebKit.DOM.DOMSelection selection = document.default_view.get_selection(); + // WebKit.DOM.Node selection_base_node = selection.get_base_node(); + // long selection_base_offset = selection.get_base_offset(); + + // WebKit.DOM.NodeList selection_child_nodes = selection_base_node.get_child_nodes(); + // WebKit.DOM.Node ref_child = selection_child_nodes.item(selection_base_offset); + + // WebKit.DOM.Element placeholder = document.create_element("SPAN"); + // WebKit.DOM.Text placeholder_text = document.create_text_node("placeholder"); + // placeholder.append_child(placeholder_text); + + // if (selection_base_node.node_name == "#text") { + // WebKit.DOM.Node? left = get_left_text(selection_base_node, selection_base_offset); + + // WebKit.DOM.Node parent = selection_base_node.parent_node; + // if (left != null) + // parent.insert_before(left, selection_base_node); + // parent.insert_before(placeholder, selection_base_node); + // parent.remove_child(selection_base_node); + + // placeholder.scroll_into_view_if_needed(false); + // parent.insert_before(selection_base_node, placeholder); + // if (left != null) + // parent.remove_child(left); + // parent.remove_child(placeholder); + // selection.set_base_and_extent(selection_base_node, selection_base_offset, selection_base_node, selection_base_offset); + // } else { + // selection_base_node.insert_before(placeholder, ref_child); + // placeholder.scroll_into_view_if_needed(false); + // selection_base_node.remove_child(placeholder); + // } + // } catch (Error err) { + // debug("Error scrolling pasted text into view: %s", err.message); + // } + } + + // private WebKit.DOM.Node? get_left_text(WebKit.WebPage page, WebKit.DOM.Node node, long offset) { + // WebKit.DOM.Document document = page.get_dom_document(); + // string node_value = node.node_value; + + // // Offset is in unicode characters, but index is in bytes. We need to get the corresponding + // // byte index for the given offset. + // int char_count = node_value.char_count(); + // int index = offset > char_count ? node_value.length : node_value.index_of_nth_char(offset); + + // return offset > 0 ? document.create_text_node(node_value[0:index]) : null; + // } + + /** + * Inserts some HTML at the current text cursor location. + */ + public void insert_html(string markup) { + execute_editing_command_with_argument("insertHTML", markup); + } + + /** + * Inserts or updates an A element at the current text cursor location. + * + * If the cursor is located on an A element, the element's HREF + * will be updated, else if some text is selected, an A element + * will be inserted wrapping the selection. + */ + public void insert_link(string href, string selection_id) { + this.call.begin( + Geary.JS.callable("geary.insertLink").string(href).string(selection_id), + null + ); + } + + /** + * Removes any A element at the current text cursor location. + */ + public void delete_link() { + this.call.begin(Geary.JS.callable("geary.deleteLink"), null); + } + + /** + * Inserts an IMG element at the current text cursor location. + */ + public void insert_image(string src) { + // Use insertHTML instead of insertImage here so + // we can specify a max width inline, preventing + // large images from overflowing the view port. + execute_editing_command_with_argument( + "insertHTML", + @"" + ); + } + + /** + * Indents the line at the current text cursor location. + */ + public void indent_line() { + this.call.begin(Geary.JS.callable("geary.indentLine"), null); + } + + /** + * Updates the signature block if it has not been deleted. + */ + public new void update_signature(string signature) { + this.call.begin(Geary.JS.callable("geary.updateSignature").string(signature), null); + } + + /** + * Removes the quoted message (if any) from the composer. + */ + public void delete_quoted_message() { + this.call.begin(Geary.JS.callable("geary.deleteQuotedMessage"), null); + } + + /** + * Determines if the editor content contains an attachment keyword. + */ + public async bool contains_attachment_keywords(string keyword_spec, string subject) { + try { + return WebKitUtil.to_bool( + yield call( + Geary.JS.callable("geary.containsAttachmentKeyword") + .string(keyword_spec) + .string(subject), + null) + ); + } catch (Error err) { + debug("Error checking or attchment keywords: %s", err.message); + return false; + } + } + + /** + * Cleans the editor content ready for sending. + * + * This modifies the DOM, so there's no going back after calling + * this. + */ + public async void clean_content() throws Error { + this.call.begin(Geary.JS.callable("geary.cleanContent"), null); + } + + /** + * Returns the editor content as an HTML string. + */ + public async string? get_html() throws Error { + return WebKitUtil.to_string( + yield call(Geary.JS.callable("geary.getHtml"), null) + ); + } + + /** + * Returns the editor text as RFC 3676 format=flowed text. + */ + public async string? get_text() throws Error { + const int MAX_BREAKABLE_LEN = 72; // F=F recommended line limit + const int MAX_UNBREAKABLE_LEN = 998; // SMTP line limit + + string body_text = WebKitUtil.to_string( + yield call(Geary.JS.callable("geary.getText"), null) + ); + string[] lines = body_text.split("\n"); + GLib.StringBuilder flowed = new GLib.StringBuilder.sized(body_text.length); + foreach (string line in lines) { + // Strip trailing whitespace, so it doesn't look like a + // flowed line. But the signature separator "-- " is + // special, so leave that alone. + if (line != "-- ") + line = line.chomp(); + + // Determine quoting depth by counting the the number of + // QUOTE_MARKERs present, and build a quote prefix for it. + int quote_level = 0; + while (line[quote_level] == Geary.RFC822.Utils.QUOTE_MARKER) + quote_level += 1; + line = line[quote_level:line.length]; + string prefix = quote_level > 0 ? string.nfill(quote_level, '>') + " " : ""; + + // Check to see if the line (with quote prefix) is longer + // than the recommended limit, if so work out where to do + int max_breakable = MAX_BREAKABLE_LEN - prefix.length; + int max_unbreakable = MAX_UNBREAKABLE_LEN - prefix.length; + do { + int start_ind = 0; + + // Space stuff if needed + if (quote_level == 0 && + (line.has_prefix(">") || line.has_prefix("From"))) { + line = " " + line; + start_ind = 1; + } + + // Check to see if we need to break the line, if so + // determine where to do it. + int cut_ind = line.length; + if (cut_ind > max_breakable) { + // Line needs to be broken, look for the last + // useful place to break before before the + // max recommended length. + string beg = line[0:max_breakable]; + cut_ind = beg.last_index_of(" ", start_ind) + 1; + if (cut_ind == 0) { + // No natural places to break found, so look + // for place further along, and if that is + // also not found then break on the SMTP max + // line length. + cut_ind = line.index_of(" ", start_ind) + 1; + if (cut_ind == 0) + cut_ind = line.length; + if (cut_ind > max_unbreakable) + cut_ind = max_unbreakable; + } + } + + // Actually break the line + flowed.append(prefix + line[0:cut_ind] + "\n"); + line = line[cut_ind:line.length]; + } while (line.length > 0); + } + + return flowed.str; + } + + public override bool button_release_event(Gdk.EventButton event) { + // WebView seems to unconditionally consume button events, so + // to show a link popopver after the view has processed one, + // we need to emit our own. + bool ret = base.button_release_event(event); + if (this.signals_enabled) { + button_release_event_done(event); + } + return ret; + } + + private void on_command_stack_changed(WebKit.JavascriptResult result) { + try { + if (this.signals_enabled) { + string[] values = WebKitUtil.to_string(result).split(","); + command_stack_changed(values[0] == "true", values[1] == "true"); + } + } catch (Geary.JS.Error err) { + debug("Could not get command stack state: %s", err.message); + } + } + + private void on_cursor_context_changed(WebKit.JavascriptResult result) { + try { + if (this.signals_enabled) { + cursor_context_changed(new EditContext(WebKitUtil.to_string(result))); + } + } catch (Geary.JS.Error err) { + debug("Could not get text cursor style: %s", err.message); + } + } + + private void on_document_modified(WebKit.JavascriptResult result) { + // Only modify actually changed to avoid excessive notify + // signals being fired. + if (this.signals_enabled) { + if (this.is_empty) { + this.is_empty = false; + } + document_modified(); + } + } +} diff -Nru geary-0.11.4/src/client/composer/composer-widget.vala geary-0.12.0/src/client/composer/composer-widget.vala --- geary-0.11.4/src/client/composer/composer-widget.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/composer/composer-widget.vala 2017-10-02 11:25:21.000000000 +0000 @@ -1,11 +1,21 @@ -/* Copyright 2016 Software Freedom Conservancy Inc. +/* + * Copyright 2016 Software Freedom Conservancy Inc. + * Copyright 2017 Michael Gratton * * This software is licensed under the GNU Lesser General Public License - * (version 2.1 or later). See the COPYING file in this distribution. + * (version 2.1 or later). See the COPYING file in this distribution. */ -// Widget for sending messages. +private errordomain AttachmentError { + FILE, + DUPLICATE +} + +// The actual widget for sending messages. Should be put in a ComposerContainer +[GtkTemplate (ui = "/org/gnome/Geary/composer-widget.ui")] public class ComposerWidget : Gtk.EventBox { + + public enum ComposeType { NEW_MESSAGE, REPLY, @@ -27,297 +37,371 @@ INLINE_COMPACT } + private enum AttachPending { ALL, INLINE_ONLY } + private class FromAddressMap { public Geary.Account account; - public Geary.RFC822.MailboxAddress? sender; public Geary.RFC822.MailboxAddresses from; - public FromAddressMap(Geary.Account a, Geary.RFC822.MailboxAddresses f, Geary.RFC822.MailboxAddress? s = null) { + public FromAddressMap(Geary.Account a, Geary.RFC822.MailboxAddresses f) { account = a; from = f; - sender = s; } } - - public const string ACTION_UNDO = "undo"; - public const string ACTION_REDO = "redo"; - public const string ACTION_CUT = "cut"; - public const string ACTION_COPY = "copy"; - public const string ACTION_COPY_LINK = "copy link"; - public const string ACTION_PASTE = "paste"; - public const string ACTION_PASTE_FORMAT = "paste with formatting"; - public const string ACTION_BOLD = "bold"; - public const string ACTION_ITALIC = "italic"; - public const string ACTION_UNDERLINE = "underline"; - public const string ACTION_STRIKETHROUGH = "strikethrough"; - public const string ACTION_REMOVE_FORMAT = "removeformat"; - public const string ACTION_INDENT = "indent"; - public const string ACTION_OUTDENT = "outdent"; - public const string ACTION_JUSTIFY_LEFT = "justifyleft"; - public const string ACTION_JUSTIFY_RIGHT = "justifyright"; - public const string ACTION_JUSTIFY_CENTER = "justifycenter"; - public const string ACTION_JUSTIFY_FULL = "justifyfull"; - public const string ACTION_MENU = "menu"; - public const string ACTION_COLOR = "color"; - public const string ACTION_INSERT_LINK = "insertlink"; - public const string ACTION_COMPOSE_AS_HTML = "compose as html"; - public const string ACTION_SHOW_EXTENDED = "show extended"; - public const string ACTION_CLOSE = "close"; - public const string ACTION_CLOSE_SAVE = "close and save"; - public const string ACTION_CLOSE_DISCARD = "close and discard"; - public const string ACTION_DETACH = "detach"; - public const string ACTION_SEND = "send"; - public const string ACTION_ADD_ATTACHMENT = "add attachment"; - public const string ACTION_ADD_ORIGINAL_ATTACHMENTS = "add original attachments"; - public const string ACTION_GEAR_MENU = "gear menu"; - + + private SimpleActionGroup actions = new SimpleActionGroup(); + + private const string ACTION_UNDO = "undo"; + private const string ACTION_REDO = "redo"; + private const string ACTION_CUT = "cut"; + private const string ACTION_COPY = "copy"; + private const string ACTION_COPY_LINK = "copy-link"; + private const string ACTION_PASTE = "paste"; + private const string ACTION_PASTE_WITH_FORMATTING = "paste-with-formatting"; + private const string ACTION_SELECT_ALL = "select-all"; + private const string ACTION_BOLD = "bold"; + private const string ACTION_ITALIC = "italic"; + private const string ACTION_UNDERLINE = "underline"; + private const string ACTION_STRIKETHROUGH = "strikethrough"; + private const string ACTION_FONT_SIZE = "font-size"; + private const string ACTION_FONT_FAMILY = "font-family"; + private const string ACTION_REMOVE_FORMAT = "remove-format"; + private const string ACTION_INDENT = "indent"; + private const string ACTION_OUTDENT = "outdent"; + private const string ACTION_JUSTIFY = "justify"; + private const string ACTION_COLOR = "color"; + private const string ACTION_INSERT_IMAGE = "insert-image"; + private const string ACTION_INSERT_LINK = "insert-link"; + private const string ACTION_COMPOSE_AS_HTML = "compose-as-html"; + private const string ACTION_SHOW_EXTENDED = "show-extended"; + private const string ACTION_CLOSE = "close"; + private const string ACTION_CLOSE_AND_SAVE = "close-and-save"; + private const string ACTION_CLOSE_AND_DISCARD = "close-and-discard"; + private const string ACTION_DETACH = "detach"; + private const string ACTION_SEND = "send"; + private const string ACTION_ADD_ATTACHMENT = "add-attachment"; + private const string ACTION_ADD_ORIGINAL_ATTACHMENTS = "add-original-attachments"; + private const string ACTION_SELECT_DICTIONARY = "select-dictionary"; + private const string ACTION_OPEN_INSPECTOR = "open_inspector"; + + // ACTION_INSERT_LINK and ACTION_REMOVE_FORMAT are missing from + // here since they are handled in update_selection_actions + private const string[] html_actions = { + ACTION_BOLD, ACTION_ITALIC, ACTION_UNDERLINE, ACTION_STRIKETHROUGH, + ACTION_FONT_SIZE, ACTION_FONT_FAMILY, ACTION_COLOR, ACTION_JUSTIFY, + ACTION_INSERT_IMAGE, ACTION_COPY_LINK, ACTION_PASTE_WITH_FORMATTING + }; + + private const ActionEntry[] action_entries = { + // Editor commands + {ACTION_UNDO, on_undo }, + {ACTION_REDO, on_redo }, + {ACTION_CUT, on_cut }, + {ACTION_COPY, on_copy }, + {ACTION_COPY_LINK, on_copy_link }, + {ACTION_PASTE, on_paste }, + {ACTION_PASTE_WITH_FORMATTING, on_paste_with_formatting }, + {ACTION_SELECT_ALL, on_select_all }, + {ACTION_BOLD, on_action, null, "false" }, + {ACTION_ITALIC, on_action, null, "false" }, + {ACTION_UNDERLINE, on_action, null, "false" }, + {ACTION_STRIKETHROUGH, on_action, null, "false" }, + {ACTION_FONT_SIZE, on_font_size, "s", "'medium'" }, + {ACTION_FONT_FAMILY, on_font_family, "s", "'sans'" }, + {ACTION_REMOVE_FORMAT, on_remove_format, null, "false" }, + {ACTION_INDENT, on_indent }, + {ACTION_OUTDENT, on_action }, + {ACTION_JUSTIFY, on_justify, "s", "'left'" }, + {ACTION_COLOR, on_select_color }, + {ACTION_INSERT_IMAGE, on_insert_image }, + {ACTION_INSERT_LINK, on_insert_link }, + // Composer commands + {ACTION_COMPOSE_AS_HTML, on_toggle_action, null, "true", on_compose_as_html_toggled }, + {ACTION_SHOW_EXTENDED, on_toggle_action, null, "false", on_show_extended_toggled }, + {ACTION_CLOSE, on_close }, + {ACTION_CLOSE_AND_SAVE, on_close_and_save }, + {ACTION_CLOSE_AND_DISCARD, on_close_and_discard }, + {ACTION_DETACH, on_detach }, + {ACTION_SEND, on_send }, + {ACTION_ADD_ATTACHMENT, on_add_attachment }, + {ACTION_ADD_ORIGINAL_ATTACHMENTS, on_pending_attachments }, + {ACTION_SELECT_DICTIONARY, on_select_dictionary }, + {ACTION_OPEN_INSPECTOR, on_open_inspector }, + }; + + public static Gee.MultiMap action_accelerators = new Gee.HashMultiMap(); + static construct { + action_accelerators.set(ACTION_UNDO, "z"); + action_accelerators.set(ACTION_REDO, "z"); + action_accelerators.set(ACTION_CUT, "x"); + action_accelerators.set(ACTION_COPY, "c"); + action_accelerators.set(ACTION_PASTE, "v"); + action_accelerators.set(ACTION_PASTE_WITH_FORMATTING, "v"); + action_accelerators.set(ACTION_INSERT_IMAGE, "g"); + action_accelerators.set(ACTION_INSERT_LINK, "l"); + action_accelerators.set(ACTION_INDENT, "bracketright"); + action_accelerators.set(ACTION_OUTDENT, "bracketleft"); + action_accelerators.set(ACTION_REMOVE_FORMAT, "space"); + action_accelerators.set(ACTION_BOLD, "b"); + action_accelerators.set(ACTION_ITALIC, "i"); + action_accelerators.set(ACTION_UNDERLINE, "u"); + action_accelerators.set(ACTION_STRIKETHROUGH, "k"); + action_accelerators.set(ACTION_CLOSE, "w"); + action_accelerators.set(ACTION_CLOSE, "Escape"); + action_accelerators.set(ACTION_ADD_ATTACHMENT, "t"); + action_accelerators.set(ACTION_DETACH, "d"); + } + private const string DRAFT_SAVED_TEXT = _("Saved"); private const string DRAFT_SAVING_TEXT = _("Saving"); private const string DRAFT_ERROR_TEXT = _("Error saving"); private const string BACKSPACE_TEXT = _("Press Backspace to delete quote"); private const string DEFAULT_TITLE = _("New Message"); - + private const string URI_LIST_MIME_TYPE = "text/uri-list"; private const string FILE_URI_PREFIX = "file://"; - private const string BODY_ID = "message-body"; - private const string HTML_BODY = """ - - - -
- """; - private const string CURSOR = ""; - - private const int DRAFT_TIMEOUT_SEC = 10; - - public const string ATTACHMENT_KEYWORDS_SUFFIX = ".doc|.pdf|.xls|.ppt|.rtf|.pps"; - - // A list of keywords, separated by pipe ("|") characters, that suggest an attachment; since - // this is full-word checking, include all variants of each word. No spaces are allowed. - public const string ATTACHMENT_KEYWORDS_LOCALIZED = _("attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|enclosing|encloses|enclosure|enclosures"); - - private delegate bool CompareStringFunc(string key, string token); - + + // Translators: This is list of keywords, separated by pipe ("|") + // characters, that suggest an attachment; since this is full-word + // checking, include all variants of each word. No spaces are + // allowed. + private const string ATTACHMENT_KEYWORDS_LOCALIZED = _("attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|enclosing|encloses|enclosure|enclosures"); + public Geary.Account account { get; private set; } - - public Geary.RFC822.MailboxAddress sender { get; set; } - - public Geary.RFC822.MailboxAddresses from { get; set; } - + + public Geary.RFC822.MailboxAddresses from { get; private set; } + public string to { - get { return to_entry.get_text(); } - set { to_entry.set_text(value); } + get { return this.to_entry.get_text(); } + set { this.to_entry.set_text(value); } } - + public string cc { - get { return cc_entry.get_text(); } - set { cc_entry.set_text(value); } + get { return this.cc_entry.get_text(); } + set { this.cc_entry.set_text(value); } } - + public string bcc { - get { return bcc_entry.get_text(); } - set { bcc_entry.set_text(value); } + get { return this.bcc_entry.get_text(); } + set { this.bcc_entry.set_text(value); } } public string reply_to { - get { return reply_to_entry.get_text(); } - set { reply_to_entry.set_text(value); } + get { return this.reply_to_entry.get_text(); } + set { this.reply_to_entry.set_text(value); } } - + public Gee.Set in_reply_to = new Gee.HashSet(); public string references { get; set; } - - public string subject { - get { return subject_entry.get_text(); } - set { subject_entry.set_text(value); } - } - - public string message { - owned get { return get_html(); } - set { - body_html = value; - editor.load_string(HTML_BODY, "text/html", "UTF8", ""); - } - } - - public bool compose_as_html { - get { return ((Gtk.ToggleAction) actions.get_action(ACTION_COMPOSE_AS_HTML)).active; } - set { ((Gtk.ToggleAction) actions.get_action(ACTION_COMPOSE_AS_HTML)).active = value; } - } - public bool show_extended { - get { return ((Gtk.ToggleAction) actions.get_action(ACTION_SHOW_EXTENDED)).active; } - set { ((Gtk.ToggleAction) actions.get_action(ACTION_SHOW_EXTENDED)).active = value; } + public string subject { + get { return this.subject_entry.get_text(); } + set { this.subject_entry.set_text(value); } } public ComposerState state { get; internal set; } public ComposeType compose_type { get; private set; default = ComposeType.NEW_MESSAGE; } - + public Gee.Set referred_ids = new Gee.HashSet(); - - public bool blank { + + /** Determines if the composer is completely empty. */ + public bool is_blank { get { - return to_entry.empty && cc_entry.empty && bcc_entry.empty && reply_to_entry.empty && - subject_entry.buffer.length == 0 && !editor.can_undo() && attachment_files.size == 0; + return this.to_entry.empty + && this.cc_entry.empty + && this.bcc_entry.empty + && this.reply_to_entry.empty + && this.subject_entry.buffer.length == 0 + && this.editor.is_empty + && this.attached_files.size == 0; } } - + + /** Determines if the composer can currently save a draft. */ + private bool can_save { + get { return this.draft_manager != null; } + } + + /** Determines if current message should be saved as draft. */ + private bool should_save { + get { + return this.can_save + && !this.is_draft_saved + && !this.is_blank; + } + } + public ComposerHeaderbar header { get; private set; } - + + public ComposerWebView editor { get; private set; } + public string draft_save_text { get; private set; } - + public bool can_delete_quote { get; private set; default = false; } - + public string toolbar_text { get; set; } - + public string window_title { get; set; } - + + public Configuration config { get; set; } + private ContactListStore? contact_list_store = null; - - private string? body_html = null; - private Gee.Set attachment_files = new Gee.HashSet(Geary.Files.nullable_hash, - Geary.Files.nullable_equal); - - private Gtk.Builder builder; + + private string body_html = ""; + + [GtkChild] + private Gtk.Box composer_container; + + [GtkChild] + internal Gtk.Grid editor_container; + + [GtkChild] private Gtk.Label from_label; + [GtkChild] private Gtk.Label from_single; - private Gtk.ComboBoxText from_multiple = new Gtk.ComboBoxText(); + [GtkChild] + private Gtk.ComboBoxText from_multiple; private Gee.ArrayList from_list = new Gee.ArrayList(); + [GtkChild] + private Gtk.EventBox to_box; + [GtkChild] + private Gtk.Label to_label; private EmailEntry to_entry; + [GtkChild] + private Gtk.EventBox cc_box; + [GtkChild] + private Gtk.Label cc_label; private EmailEntry cc_entry; + [GtkChild] + private Gtk.EventBox bcc_box; + [GtkChild] private Gtk.Label bcc_label; private EmailEntry bcc_entry; + [GtkChild] + private Gtk.EventBox reply_to_box; + [GtkChild] private Gtk.Label reply_to_label; private EmailEntry reply_to_entry; + [GtkChild] + private Gtk.Label subject_label; + [GtkChild] private Gtk.Entry subject_entry; + [GtkChild] private Gtk.Label message_overlay_label; + [GtkChild] private Gtk.Box attachments_box; - private Gtk.Alignment hidden_on_attachment_drag_over; - private Gtk.Alignment visible_on_attachment_drag_over; + [GtkChild] + private Gtk.Box hidden_on_attachment_drag_over; + [GtkChild] + private Gtk.Box visible_on_attachment_drag_over; + [GtkChild] private Gtk.Widget hidden_on_attachment_drag_over_child; + [GtkChild] private Gtk.Widget visible_on_attachment_drag_over_child; - - private Gtk.Menu menu = new Gtk.Menu(); - private Gtk.RadioMenuItem font_small; - private Gtk.RadioMenuItem font_medium; - private Gtk.RadioMenuItem font_large; - private Gtk.RadioMenuItem font_sans; - private Gtk.RadioMenuItem font_serif; - private Gtk.RadioMenuItem font_monospace; - private Gtk.MenuItem color_item; - private Gtk.MenuItem html_item; - private Gtk.MenuItem html_item2; - private Gtk.MenuItem extended_item; - - private Gtk.ActionGroup actions; - private string? hover_url = null; - private bool action_flag = false; + [GtkChild] + private Gtk.Widget recipients; + [GtkChild] + private Gtk.Box header_area; + [GtkChild] + + private Gtk.Box composer_toolbar; + [GtkChild] + private Gtk.Box insert_buttons; + [GtkChild] + private Gtk.Box font_style_buttons; + [GtkChild] + private Gtk.Button insert_link_button; + [GtkChild] + private Gtk.Button remove_format_button; + [GtkChild] + private Gtk.Button select_dictionary_button; + [GtkChild] + private Gtk.MenuButton menu_button; + [GtkChild] + private Gtk.Label info_label; + + [GtkChild] + private Gtk.Box message_area; + + private Menu html_menu; + private Menu plain_menu; + + private Menu context_menu_model; + private Menu context_menu_rich_text; + private Menu context_menu_plain_text; + private Menu context_menu_webkit_spelling; + private Menu context_menu_webkit_text_entry; + private Menu context_menu_inspector; + + private SpellCheckPopover? spell_check_popover = null; + private string? pointer_url = null; + private string? cursor_url = null; private bool is_attachment_overlay_visible = false; - private Gee.List? pending_attachments = null; private Geary.RFC822.MailboxAddresses reply_to_addresses; private Geary.RFC822.MailboxAddresses reply_cc_addresses; private string reply_subject = ""; private string forward_subject = ""; private bool top_posting = true; private string? last_quote = null; - + + private Gee.List? pending_attachments = null; + private AttachPending pending_include = AttachPending.INLINE_ONLY; + private Gee.Set attached_files = new Gee.HashSet(Geary.Files.nullable_hash, + Geary.Files.nullable_equal); + private Gee.Map inline_files = new Gee.HashMap(); + private Gee.Map cid_files = new Gee.HashMap(); + private Geary.App.DraftManager? draft_manager = null; private Geary.EmailFlags draft_flags = new Geary.EmailFlags.with(Geary.EmailFlags.DRAFT); - private uint draft_save_timeout_id = 0; + private Geary.TimeoutManager draft_timer; + private bool is_draft_saved = false; + + // Is the composer closing (e.g. saving a draft or sending)? private bool is_closing = false; - - public WebKit.WebView editor; - // We need to keep a reference to the edit-fixer in composer-window, so it doesn't get - // garbage-collected. - private WebViewEditFixer edit_fixer; - public Gtk.UIManager ui; + private ComposerContainer container { get { return (ComposerContainer) parent; } } - - public ComposerWidget(Geary.Account account, ComposeType compose_type, - Geary.Email? referred = null, string? quote = null, bool is_referred_draft = false) { + + + /** Fired when the current saved draft's id has changed. */ + public signal void draft_id_changed(Geary.EmailIdentifier? id); + + /** Fired when the user opens a link in the composer. */ + public signal void link_activated(string url); + + + public ComposerWidget(Geary.Account account, ComposeType compose_type, Configuration config) { this.account = account; + this.config = config; this.compose_type = compose_type; - if (compose_type == ComposeType.NEW_MESSAGE) - state = ComposerState.NEW; - else if (compose_type == ComposeType.FORWARD) - state = ComposerState.INLINE; + if (this.compose_type == ComposeType.NEW_MESSAGE) + this.state = ComposerState.NEW; + else if (this.compose_type == ComposeType.FORWARD) + this.state = ComposerState.INLINE; else - state = ComposerState.INLINE_COMPACT; - - setup_drag_destination(this); - - add_events(Gdk.EventMask.KEY_PRESS_MASK | Gdk.EventMask.KEY_RELEASE_MASK); - builder = GearyApplication.instance.create_builder("composer.glade"); - - Gtk.Box box = builder.get_object("composer") as Gtk.Box; - attachments_box = builder.get_object("attachments_box") as Gtk.Box; - hidden_on_attachment_drag_over = (Gtk.Alignment) builder.get_object("hidden_on_attachment_drag_over"); - hidden_on_attachment_drag_over_child = (Gtk.Widget) builder.get_object("hidden_on_attachment_drag_over_child"); - visible_on_attachment_drag_over = (Gtk.Alignment) builder.get_object("visible_on_attachment_drag_over"); - visible_on_attachment_drag_over_child = (Gtk.Widget) builder.get_object("visible_on_attachment_drag_over_child"); - visible_on_attachment_drag_over.remove(visible_on_attachment_drag_over_child); - - Gtk.Widget recipients = builder.get_object("recipients") as Gtk.Widget; - bind_property("state", recipients, "visible", BindingFlags.SYNC_CREATE, - (binding, source_value, ref target_value) => { - target_value = (state != ComposerState.INLINE_COMPACT); - return true; + this.state = ComposerState.INLINE_COMPACT; + + this.header = new ComposerHeaderbar( + config, + this.state == ComposerState.INLINE_COMPACT + ); + this.header.expand_composer.connect(() => { + if (this.state == ComposerState.INLINE_COMPACT) { + this.state = ComposerState.INLINE; + update_composer_view(); + } }); - string[] subject_elements = {"subject label", "subject"}; - foreach (string name in subject_elements) { - Gtk.Widget widget = builder.get_object(name) as Gtk.Widget; - bind_property("state", widget, "visible", BindingFlags.SYNC_CREATE, - (binding, source_value, ref target_value) => { - target_value = (state != ComposerState.INLINE && state != ComposerState.PANED); - return true; - }); - } - notify["state"].connect((s, p) => { update_from_field(); }); - + + // Setup drag 'n drop + const Gtk.TargetEntry[] target_entries = { { URI_LIST_MIME_TYPE, 0, 0 } }; + Gtk.drag_dest_set(this, Gtk.DestDefaults.MOTION | Gtk.DestDefaults.HIGHLIGHT, + target_entries, Gdk.DragAction.COPY); + + add_events(Gdk.EventMask.KEY_PRESS_MASK | Gdk.EventMask.KEY_RELEASE_MASK); + + this.visible_on_attachment_drag_over.remove(this.visible_on_attachment_drag_over_child); + BindingTransformFunc set_toolbar_text = (binding, source_value, ref target_value) => { if (draft_save_text == "" && can_delete_quote) target_value = BACKSPACE_TEXT; @@ -329,49 +413,55 @@ set_toolbar_text); bind_property("can-delete-quote", this, "toolbar-text", BindingFlags.SYNC_CREATE, set_toolbar_text); - - from_label = (Gtk.Label) builder.get_object("from label"); - from_single = (Gtk.Label) builder.get_object("from_single"); - from_multiple = (Gtk.ComboBoxText) builder.get_object("from_multiple"); - to_entry = new EmailEntry(this); - (builder.get_object("to") as Gtk.EventBox).add(to_entry); - cc_entry = new EmailEntry(this); - (builder.get_object("cc") as Gtk.EventBox).add(cc_entry); - bcc_entry = new EmailEntry(this); - (builder.get_object("bcc") as Gtk.EventBox).add(bcc_entry); - reply_to_entry = new EmailEntry(this); - (builder.get_object("reply to") as Gtk.EventBox).add(reply_to_entry); - - Gtk.Label to_label = (Gtk.Label) builder.get_object("to label"); - Gtk.Label cc_label = (Gtk.Label) builder.get_object("cc label"); - bcc_label = (Gtk.Label) builder.get_object("bcc label"); - reply_to_label = (Gtk.Label) builder.get_object("reply to label"); - to_label.set_mnemonic_widget(to_entry); - cc_label.set_mnemonic_widget(cc_entry); - bcc_label.set_mnemonic_widget(bcc_entry); - reply_to_label.set_mnemonic_widget(reply_to_entry); + this.to_entry = new EmailEntry(this); + this.to_entry.changed.connect(on_envelope_changed); + this.to_box.add(to_entry); + this.cc_entry = new EmailEntry(this); + this.cc_entry.changed.connect(on_envelope_changed); + this.cc_box.add(cc_entry); + this.bcc_entry = new EmailEntry(this); + this.bcc_entry.changed.connect(on_envelope_changed); + this.bcc_box.add(bcc_entry); + this.reply_to_entry = new EmailEntry(this); + this.reply_to_entry.changed.connect(on_envelope_changed); + this.reply_to_box.add(reply_to_entry); + + this.to_label.set_mnemonic_widget(this.to_entry); + this.cc_label.set_mnemonic_widget(this.cc_entry); + this.bcc_label.set_mnemonic_widget(this.bcc_entry); + this.reply_to_label.set_mnemonic_widget(this.reply_to_entry); + + this.to_entry.margin_top = this.cc_entry.margin_top = this.bcc_entry.margin_top = this.reply_to_entry.margin_top = 6; + + this.editor = new ComposerWebView(config); + this.editor.set_hexpand(true); + this.editor.set_vexpand(true); + this.editor.show(); + + this.editor_container.add(this.editor); + + // Initialize menus + Gtk.Builder builder = new Gtk.Builder.from_resource( + "/org/gnome/Geary/composer-menus.ui" + ); + this.html_menu = (Menu) builder.get_object("html_menu_model"); + this.plain_menu = (Menu) builder.get_object("plain_menu_model"); + this.context_menu_model = (Menu) builder.get_object("context_menu_model"); + this.context_menu_rich_text = (Menu) builder.get_object("context_menu_rich_text"); + this.context_menu_plain_text = (Menu) builder.get_object("context_menu_plain_text"); + this.context_menu_inspector = (Menu) builder.get_object("context_menu_inspector"); + this.context_menu_webkit_spelling = (Menu) builder.get_object("context_menu_webkit_spelling"); + this.context_menu_webkit_text_entry = (Menu) builder.get_object("context_menu_webkit_text_entry"); - to_entry.margin_top = cc_entry.margin_top = bcc_entry.margin_top = reply_to_entry.margin_top = 6; - - // TODO: It would be nicer to set the completions inside the EmailEntry constructor. But in - // testing, this can cause non-deterministic segfaults. Investigate why, and fix if possible. - set_entry_completions(); - subject_entry = builder.get_object("subject") as Gtk.Entry; - subject_entry.bind_property("text", this, "window-title", BindingFlags.SYNC_CREATE, + this.subject_entry.bind_property("text", this, "window-title", BindingFlags.SYNC_CREATE, (binding, source_value, ref target_value) => { - target_value = Geary.String.is_empty_or_whitespace(subject_entry.text) - ? DEFAULT_TITLE : subject_entry.text.strip(); + target_value = Geary.String.is_empty_or_whitespace(this.subject_entry.text) + ? DEFAULT_TITLE : this.subject_entry.text.strip(); return true; }); - Gtk.Alignment message_area = builder.get_object("message area") as Gtk.Alignment; - actions = builder.get_object("compose actions") as Gtk.ActionGroup; - // Can only happen after actions exits - compose_as_html = GearyApplication.instance.config.compose_as_html; - - header = new ComposerHeaderbar(actions); + embed_header(); - bind_property("state", header, "state", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL); - + // Listen to account signals to update from menu. Geary.Engine.instance.account_available.connect(() => { update_from_field(); @@ -382,257 +472,58 @@ } }); // TODO: also listen for account updates to allow adding identities while writing an email - - Gtk.ScrolledWindow scroll = new Gtk.ScrolledWindow(null, null); - scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC); - - Gtk.Overlay message_overlay = new Gtk.Overlay(); - message_overlay.add(scroll); - message_area.add(message_overlay); - - message_overlay_label = new Gtk.Label(null); - message_overlay_label.ellipsize = Pango.EllipsizeMode.MIDDLE; - message_overlay_label.halign = Gtk.Align.START; - message_overlay_label.valign = Gtk.Align.END; - message_overlay_label.realize.connect(on_message_overlay_label_realize); - message_overlay.add_overlay(message_overlay_label); - - subject_entry.changed.connect(on_subject_changed); - to_entry.changed.connect(validate_send_button); - cc_entry.changed.connect(validate_send_button); - bcc_entry.changed.connect(validate_send_button); - reply_to_entry.changed.connect(validate_send_button); - - if (get_direction () == Gtk.TextDirection.RTL) { - actions.get_action(ACTION_INDENT).icon_name = "format-indent-more-rtl-symbolic"; - actions.get_action(ACTION_OUTDENT).icon_name = "format-indent-less-rtl-symbolic"; - } else { - actions.get_action(ACTION_INDENT).icon_name = "format-indent-more-symbolic"; - actions.get_action(ACTION_OUTDENT).icon_name = "format-indent-less-symbolic"; - } - - ComposerToolbar composer_toolbar = new ComposerToolbar(actions, menu); - Gtk.Alignment toolbar_area = (Gtk.Alignment) builder.get_object("toolbar area"); - toolbar_area.add(composer_toolbar); - bind_property("toolbar-text", composer_toolbar, "label-text", BindingFlags.SYNC_CREATE); - - actions.get_action(ACTION_UNDO).activate.connect(on_action); - actions.get_action(ACTION_REDO).activate.connect(on_action); - - actions.get_action(ACTION_CUT).activate.connect(on_cut); - actions.get_action(ACTION_COPY).activate.connect(on_copy); - actions.get_action(ACTION_COPY_LINK).activate.connect(on_copy_link); - actions.get_action(ACTION_PASTE).activate.connect(on_paste); - actions.get_action(ACTION_PASTE_FORMAT).activate.connect(on_paste_with_formatting); - - actions.get_action(ACTION_BOLD).activate.connect(on_formatting_action); - actions.get_action(ACTION_ITALIC).activate.connect(on_formatting_action); - actions.get_action(ACTION_UNDERLINE).activate.connect(on_formatting_action); - actions.get_action(ACTION_STRIKETHROUGH).activate.connect(on_formatting_action); - - actions.get_action(ACTION_REMOVE_FORMAT).activate.connect(on_remove_format); - actions.get_action(ACTION_COMPOSE_AS_HTML).activate.connect(on_compose_as_html); - actions.get_action(ACTION_SHOW_EXTENDED).activate.connect(on_show_extended); - - actions.get_action(ACTION_INDENT).activate.connect(on_indent); - actions.get_action(ACTION_OUTDENT).activate.connect(on_action); - - actions.get_action(ACTION_JUSTIFY_LEFT).activate.connect(on_formatting_action); - actions.get_action(ACTION_JUSTIFY_RIGHT).activate.connect(on_formatting_action); - actions.get_action(ACTION_JUSTIFY_CENTER).activate.connect(on_formatting_action); - actions.get_action(ACTION_JUSTIFY_FULL).activate.connect(on_formatting_action); - - actions.get_action(ACTION_COLOR).activate.connect(on_select_color); - actions.get_action(ACTION_INSERT_LINK).activate.connect(on_insert_link); - - actions.get_action(ACTION_CLOSE).activate.connect(on_close); - actions.get_action(ACTION_CLOSE_SAVE).activate.connect(on_close_and_save); - actions.get_action(ACTION_CLOSE_DISCARD).activate.connect(on_close_and_discard); - - actions.get_action(ACTION_DETACH).activate.connect(on_detach); - actions.get_action(ACTION_SEND).activate.connect(on_send); - actions.get_action(ACTION_ADD_ATTACHMENT).activate.connect(on_add_attachment_button_clicked); - actions.get_action(ACTION_ADD_ORIGINAL_ATTACHMENTS).activate.connect(on_pending_attachments_button_clicked); - - ui = new Gtk.UIManager(); - ui.insert_action_group(actions, 0); - GearyApplication.instance.load_ui_resource_for_manager(ui, "composer_accelerators.ui"); - - add_extra_accelerators(); - from = account.information.get_primary_from(); - Geary.EmailIdentifier? editing_draft_id = null; - - if (referred != null) { - if (compose_type != ComposeType.NEW_MESSAGE) { - add_recipients_and_ids(compose_type, referred); - reply_subject = Geary.RFC822.Utils.create_subject_for_reply(referred); - forward_subject = Geary.RFC822.Utils.create_subject_for_forward(referred); - } - last_quote = quote; - switch (compose_type) { - case ComposeType.NEW_MESSAGE: - if (referred.from != null) - from = referred.from; - if (referred.to != null) - to_entry.addresses = referred.to; - if (referred.cc != null) - cc_entry.addresses = referred.cc; - if (referred.bcc != null) - bcc_entry.addresses = referred.bcc; - if (referred.in_reply_to != null) - in_reply_to.add_all(referred.in_reply_to.list); - if (referred.references != null) - references = referred.references.to_rfc822_string(); - if (referred.subject != null) - subject = referred.subject.value; - try { - Geary.RFC822.Message message = referred.get_message(); - if (message.has_html_body()) { - body_html = message.get_html_body(null); - } else { - body_html = message.get_plain_body(true, null); - } - } catch (Error error) { - debug("Error getting message body: %s", error.message); - } - - if (is_referred_draft) - editing_draft_id = referred.id; - - add_attachments(referred.attachments); - break; - - case ComposeType.REPLY: - case ComposeType.REPLY_ALL: - subject = reply_subject; - references = Geary.RFC822.Utils.reply_references(referred); - body_html = "\n\n" + Geary.RFC822.Utils.quote_email_for_reply(referred, quote, - Geary.RFC822.TextFormat.HTML); - pending_attachments = referred.attachments; - if (quote != null) - top_posting = false; - else - can_delete_quote = true; - break; - - case ComposeType.FORWARD: - subject = forward_subject; - body_html = "\n\n" + Geary.RFC822.Utils.quote_email_for_forward(referred, quote, - Geary.RFC822.TextFormat.HTML); - add_attachments(referred.attachments); - pending_attachments = referred.attachments; - break; - } - } + bind_property("toolbar-text", this.info_label, "label", BindingFlags.SYNC_CREATE); - update_from_field(); - open_draft_manager_async.begin(editing_draft_id); + this.from = new Geary.RFC822.MailboxAddresses.single(account.information.primary_mailbox); - // only add signature if the option is actually set and if this is not a draft - if (account.information.use_email_signature && !is_referred_draft) - add_signature_and_cursor(); - else - set_cursor(); - - editor = new StylishWebView(); - edit_fixer = new WebViewEditFixer(editor); + this.draft_timer = new Geary.TimeoutManager.seconds( + 10, () => { this.save_draft.begin(); } + ); - editor.load_finished.connect(on_load_finished); - editor.hovering_over_link.connect(on_hovering_over_link); - editor.context_menu.connect(on_context_menu); - editor.move_focus.connect(update_actions); - editor.copy_clipboard.connect(update_actions); - editor.cut_clipboard.connect(update_actions); - editor.paste_clipboard.connect(update_actions); - editor.undo.connect(update_actions); - editor.redo.connect(update_actions); - editor.selection_changed.connect(update_actions); - editor.key_press_event.connect(on_editor_key_press); - editor.user_changed_contents.connect(reset_draft_timer); - - // only do this after setting body_html - editor.load_string(HTML_BODY, "text/html", "UTF8", ""); - - editor.navigation_policy_decision_requested.connect(on_navigation_policy_decision_requested); - editor.new_window_policy_decision_requested.connect(on_navigation_policy_decision_requested); - - GearyApplication.instance.config.settings.changed[Configuration.SPELL_CHECK_KEY].connect( - on_spell_check_changed); - - // Font family menu items. - font_sans = new Gtk.RadioMenuItem(new SList()); - font_sans.activate.connect(on_font_sans); - font_sans.related_action = ui.get_action("ui/font_sans"); - font_serif = new Gtk.RadioMenuItem.from_widget(font_sans); - font_serif.activate.connect(on_font_serif); - font_serif.related_action = ui.get_action("ui/font_serif"); - font_monospace = new Gtk.RadioMenuItem.from_widget(font_sans); - font_monospace.related_action = ui.get_action("ui/font_monospace"); - font_monospace.activate.connect(on_font_monospace); - - // Font size menu items. - font_small = new Gtk.RadioMenuItem(new SList()); - font_small.related_action = ui.get_action("ui/font_small"); - font_small.activate.connect(on_font_size_small); - font_medium = new Gtk.RadioMenuItem.from_widget(font_small); - font_medium.related_action = ui.get_action("ui/font_medium"); - font_medium.activate.connect(on_font_size_medium); - font_large = new Gtk.RadioMenuItem.from_widget(font_small); - font_large.related_action = ui.get_action("ui/font_large"); - font_large.activate.connect(on_font_size_large); - - color_item = new Gtk.MenuItem(); - color_item.related_action = ui.get_action("ui/color"); - html_item = new Gtk.CheckMenuItem(); - html_item.related_action = ui.get_action("ui/htmlcompose"); - extended_item = new Gtk.CheckMenuItem(); - extended_item.related_action = ui.get_action("ui/extended"); - - html_item2 = new Gtk.CheckMenuItem(); - html_item2.related_action = ui.get_action("ui/htmlcompose"); - - WebKit.WebSettings s = editor.settings; - s.enable_spell_checking = GearyApplication.instance.config.spell_check; - s.auto_load_images = false; - s.enable_scripts = false; - s.enable_java_applet = false; - s.enable_plugins = false; - editor.settings = s; - - scroll.add(editor); - scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC); - - add(box); + // Add actions once every element has been initialized and added + initialize_actions(); validate_send_button(); + // Connect everything (can only happen after actions were added) + this.to_entry.changed.connect(validate_send_button); + this.cc_entry.changed.connect(validate_send_button); + this.bcc_entry.changed.connect(validate_send_button); + this.reply_to_entry.changed.connect(validate_send_button); + + this.editor.command_stack_changed.connect(on_command_state_changed); + this.editor.button_release_event_done.connect(on_button_release); + this.editor.context_menu.connect(on_context_menu); + this.editor.cursor_context_changed.connect(on_cursor_context_changed); + this.editor.document_modified.connect(() => { draft_changed(); }); + this.editor.get_editor_state().notify["typing-attributes"].connect(on_typing_attributes_changed); + this.editor.key_press_event.connect(on_editor_key_press_event); + this.editor.load_changed.connect(on_load_changed); + this.editor.mouse_target_changed.connect(on_mouse_target_changed); + this.editor.selection_changed.connect(on_selection_changed); + // Place the message area before the compose toolbar in the focus chain, so that // the user can tab directly from the Subject: field to the message area. + // TODO: after bumping the min. GTK+ version to 3.16, we can/should do this in the UI file. List chain = new List(); - chain.append(hidden_on_attachment_drag_over); - chain.append(message_area); - chain.append(composer_toolbar); - chain.append(attachments_box); - box.set_focus_chain(chain); - - // Remind the conversation viewer of draft ids when it - // reloads. Need to use the signal handler's viewer instance - // to avoid some sort of ref that is preventing the composer - // from being finalised when closed. - ConversationViewer conversation_viewer = - GearyApplication.instance.controller.main_window.conversation_viewer; - conversation_viewer.cleared.connect((viewer) => { - if (draft_manager != null) - viewer.blacklist_by_id(draft_manager.current_draft_id); - }); - - // Don't do this in an overridden version of the destroy - // method, it somehow ends up in an infinite loop - destroy.connect(() => { close_draft_manager_async.begin(null); }); + chain.append(this.hidden_on_attachment_drag_over); + chain.append(this.message_area); + chain.append(this.composer_toolbar); + chain.append(this.attachments_box); + this.composer_container.set_focus_chain(chain); + + update_composer_view(); } - - public ComposerWidget.from_mailto(Geary.Account account, string mailto) { - this(account, ComposeType.NEW_MESSAGE); + + public override void destroy() { + this.draft_timer.reset(); + if (this.draft_manager != null) + close_draft_manager_async.begin(null); + base.destroy(); + } + + public ComposerWidget.from_mailto(Geary.Account account, string mailto, Configuration config) { + this(account, ComposeType.NEW_MESSAGE, config); Gee.HashMultiMap headers = new Gee.HashMultiMap(); if (mailto.length > Geary.ComposedEmail.MAILTO_SCHEME.length) { @@ -647,43 +538,124 @@ Uri.unescape_string(param_parts[1])); } } - + // Assemble the headers. if (email.length > 0 && headers.contains("to")) - to = "%s,%s".printf(email, Geary.Collection.get_first(headers.get("to"))); + this.to = "%s,%s".printf(email, Geary.Collection.get_first(headers.get("to"))); else if (email.length > 0) - to = email; + this.to = email; else if (headers.contains("to")) - to = Geary.Collection.get_first(headers.get("to")); - + this.to = Geary.Collection.get_first(headers.get("to")); + if (headers.contains("cc")) - cc = Geary.Collection.get_first(headers.get("cc")); - + this.cc = Geary.Collection.get_first(headers.get("cc")); + if (headers.contains("bcc")) - bcc = Geary.Collection.get_first(headers.get("bcc")); - + this.bcc = Geary.Collection.get_first(headers.get("bcc")); + if (headers.contains("subject")) - subject = Geary.Collection.get_first(headers.get("subject")); - + this.subject = Geary.Collection.get_first(headers.get("subject")); + if (headers.contains("body")) - body_html = Geary.HTML.preserve_whitespace(Geary.HTML.escape_markup( + this.body_html = Geary.HTML.preserve_whitespace(Geary.HTML.escape_markup( Geary.Collection.get_first(headers.get("body")))); - - foreach (string attachment in headers.get("attach")) - add_attachment(File.new_for_commandline_arg(attachment)); - foreach (string attachment in headers.get("attachment")) - add_attachment(File.new_for_commandline_arg(attachment)); + + Gee.List attachments = new Gee.LinkedList(); + attachments.add_all(headers.get("attach")); + attachments.add_all(headers.get("attachment")); + foreach (string attachment in attachments) { + try { + add_attachment_part(File.new_for_commandline_arg(attachment)); + } catch (Error err) { + attachment_failed(err.message); + } + } } } - - public async void restore_draft_state_async(Geary.Account account) { + + /** + * Loads the message into the composer editor. + */ + public async void load(Geary.Email? referred = null, + string? quote = null, + bool is_referred_draft = false, + Cancellable? cancellable = null) { + this.last_quote = quote; + string referred_quote = ""; + if (referred != null) { + referred_quote = fill_in_from_referred(referred, quote); + if (is_referred_draft || + compose_type == ComposeType.NEW_MESSAGE || + compose_type == ComposeType.FORWARD) { + this.pending_include = AttachPending.ALL; + } + if (is_referred_draft) { + yield restore_reply_to_state(); + } + } + + if (this.state == ComposerState.INLINE_COMPACT) + set_compact_header_recipients(); + + update_composer_view(); + update_attachments_view(); + + string signature = yield load_signature(cancellable); + this.editor.load_html( + this.body_html, + signature, + referred_quote, + this.top_posting, + is_referred_draft + ); + + try { + yield open_draft_manager_async(is_referred_draft ? referred.id : null); + } catch (Error e) { + debug("Could not open draft manager: %s", e.message); + } + + // For accounts with large numbers of contacts, loading the + // entry completions can some time, so do it after the UI has + // been shown + yield load_entry_completions(); + } + + /** + * Loads and sets contact auto-complete data for the current account. + */ + private async void load_entry_completions() { + // XXX Since ContactListStore hooks into ContactStore to + // listen for contacts being added and removed, + // GearyController or some composer-related controller should + // construct an instance per account and keep it around for + // the lifetime of the app, since there can be tens of + // thousands of contacts for large accounts. + Geary.ContactStore contacts = this.account.get_contact_store(); + if (this.contact_list_store == null || + this.contact_list_store.contact_store != contacts) { + ContactListStore store = new ContactListStore(contacts); + this.contact_list_store = store; + yield store.load(); + + this.to_entry.completion = new ContactEntryCompletion(store); + this.cc_entry.completion = new ContactEntryCompletion(store); + this.bcc_entry.completion = new ContactEntryCompletion(store); + this.reply_to_entry.completion = new ContactEntryCompletion(store); + } + } + + /** + * Restores the composer's widget state from any replied to messages. + */ + private async void restore_reply_to_state() { bool first_email = true; - - foreach (Geary.RFC822.MessageID mid in in_reply_to) { + + foreach (Geary.RFC822.MessageID mid in this.in_reply_to) { Gee.MultiMap? email_map; try { email_map = - yield account.local_search_message_id_async(mid, Geary.Email.Field.ENVELOPE, + yield this.account.local_search_message_id_async(mid, Geary.Email.Field.ENVELOPE, true, null, new Geary.EmailFlags.with(Geary.EmailFlags.DRAFT)); // TODO: Folder blacklist } catch (Error error) { continue; @@ -705,58 +677,178 @@ // composer's internal set of ids - we really shouldn't be // messing around with the draft's recipients since the // user may have already updated them. - add_recipients_and_ids(compose_type, email, false); + add_recipients_and_ids(this.compose_type, email, false); if (first_email) { - reply_subject = Geary.RFC822.Utils.create_subject_for_reply(email); - forward_subject = Geary.RFC822.Utils.create_subject_for_forward(email); + this.reply_subject = Geary.RFC822.Utils.create_subject_for_reply(email); + this.forward_subject = Geary.RFC822.Utils.create_subject_for_forward(email); first_email = false; } } if (first_email) // Either no referenced emails, or we don't have them. Treat as new. return; - - if (cc == "") - compose_type = ComposeType.REPLY; + + if (this.cc == "") + this.compose_type = ComposeType.REPLY; else - compose_type = ComposeType.REPLY_ALL; - - to_entry.modified = cc_entry.modified = bcc_entry.modified = false; + this.compose_type = ComposeType.REPLY_ALL; + + this.to_entry.modified = this.cc_entry.modified = this.bcc_entry.modified = false; if (!to_entry.addresses.equal_to(reply_to_addresses)) - to_entry.modified = true; + this.to_entry.modified = true; if (cc != "" && !cc_entry.addresses.equal_to(reply_cc_addresses)) - cc_entry.modified = true; + this.cc_entry.modified = true; if (bcc != "") - bcc_entry.modified = true; - + this.bcc_entry.modified = true; + if (in_reply_to.size > 1) { - state = ComposerState.PANED; - } else if (compose_type == ComposeType.FORWARD || to_entry.modified || cc_entry.modified || - bcc_entry.modified) { - state = ComposerState.INLINE; + this.state = ComposerState.PANED; + } else if (this.compose_type == ComposeType.FORWARD || this.to_entry.modified + || this.cc_entry.modified || this.bcc_entry.modified) { + this.state = ComposerState.INLINE; } else { - state = ComposerState.INLINE_COMPACT; - // Set recipients in header - validate_send_button(); + this.state = ComposerState.INLINE_COMPACT; } } - - public void set_focus() { - if (Geary.String.is_empty(to)) { - to_entry.grab_focus(); - } else if (Geary.String.is_empty(subject)) { - subject_entry.grab_focus(); - } else { - editor.grab_focus(); + + /** + * Creates and opens the composer's draft manager. + */ + private async void open_draft_manager_async( + Geary.EmailIdentifier? editing_draft_id = null, + Cancellable? cancellable = null) + throws Error { + if (!this.account.information.save_drafts) { + this.header.save_and_close_button.hide(); + return; + } + + this.draft_manager = new Geary.App.DraftManager(account); + try { + yield this.draft_manager.open_async(editing_draft_id, cancellable); + debug("Draft manager opened"); + } catch (Error err) { + debug("Unable to open draft manager %s: %s", + this.draft_manager.to_string(), err.message); + this.draft_manager = null; + throw err; + } + + update_draft_state(); + get_action(ACTION_CLOSE_AND_SAVE).set_enabled(true); + this.header.save_and_close_button.show(); + + this.draft_manager.notify[Geary.App.DraftManager.PROP_DRAFT_STATE] + .connect(on_draft_state_changed); + this.draft_manager.notify[Geary.App.DraftManager.PROP_CURRENT_DRAFT_ID] + .connect(on_draft_id_changed); + this.draft_manager.fatal.connect(on_draft_manager_fatal); + } + + // Copies the addresses (e.g. From/To/CC) and content from referred into this one + private string fill_in_from_referred(Geary.Email referred, string? quote) { + string referred_quote = ""; + if (this.compose_type != ComposeType.NEW_MESSAGE) { + add_recipients_and_ids(this.compose_type, referred); + this.reply_subject = Geary.RFC822.Utils.create_subject_for_reply(referred); + this.forward_subject = Geary.RFC822.Utils.create_subject_for_forward(referred); + } + this.pending_attachments = referred.attachments; + switch (this.compose_type) { + // Restoring a draft + case ComposeType.NEW_MESSAGE: + if (referred.from != null) + this.from = referred.from; + if (referred.to != null) + this.to_entry.addresses = referred.to; + if (referred.cc != null) + this.cc_entry.addresses = referred.cc; + if (referred.bcc != null) + this.bcc_entry.addresses = referred.bcc; + if (referred.in_reply_to != null) + this.in_reply_to.add_all(referred.in_reply_to.list); + if (referred.references != null) + this.references = referred.references.to_rfc822_string(); + if (referred.subject != null) + this.subject = referred.subject.value; + try { + Geary.RFC822.Message message = referred.get_message(); + if (message.has_html_body()) { + referred_quote = message.get_html_body(null); + } else { + referred_quote = message.get_plain_body(true, null); + } + } catch (Error error) { + debug("Error getting draft message body: %s", error.message); + } + break; + + case ComposeType.REPLY: + case ComposeType.REPLY_ALL: + this.subject = reply_subject; + this.references = Geary.RFC822.Utils.reply_references(referred); + referred_quote = Geary.RFC822.Utils.quote_email_for_reply(referred, quote, + Geary.RFC822.TextFormat.HTML); + if (!Geary.String.is_empty(quote)) + this.top_posting = false; + else + this.can_delete_quote = true; + break; + + case ComposeType.FORWARD: + this.subject = forward_subject; + referred_quote = Geary.RFC822.Utils.quote_email_for_forward(referred, quote, + Geary.RFC822.TextFormat.HTML); + break; } + return referred_quote; } - + + public void set_focus() { + bool not_compact = (this.state != ComposerState.INLINE_COMPACT); + if (not_compact && Geary.String.is_empty(to)) + this.to_entry.grab_focus(); + else if (not_compact && Geary.String.is_empty(subject)) + this.subject_entry.grab_focus(); + else + this.editor.grab_focus(); + } + + // Initializes all actions and adds them to the action group + private void initialize_actions() { + this.actions.add_action_entries(action_entries, this); + + // for some reason, we can't use the same prefix. + insert_action_group("cmp", this.actions); + this.header.insert_action_group("cmh", this.actions); + + get_action(ACTION_CLOSE_AND_SAVE).set_enabled(false); + + get_action(ACTION_UNDO).set_enabled(false); + get_action(ACTION_REDO).set_enabled(false); + + update_cursor_actions(); + } + + private void update_cursor_actions() { + bool has_selection = this.editor.has_selection; + get_action(ACTION_CUT).set_enabled(has_selection); + get_action(ACTION_COPY).set_enabled(has_selection); + + get_action(ACTION_INSERT_LINK).set_enabled( + this.editor.is_rich_text && (has_selection || this.cursor_url != null) + ); + get_action(ACTION_REMOVE_FORMAT).set_enabled( + this.editor.is_rich_text && has_selection + ); + } + private bool check_preferred_from_address(Gee.List account_addresses, Geary.RFC822.MailboxAddresses? referred_addresses) { if (referred_addresses != null) { foreach (Geary.RFC822.MailboxAddress address in account_addresses) { if (referred_addresses.get_all().contains(address)) { - from = new Geary.RFC822.MailboxAddresses.single(address); + this.from = new Geary.RFC822.MailboxAddresses.single(address); return true; } } @@ -764,105 +856,64 @@ return false; } - private void on_load_finished(WebKit.WebFrame frame) { - if (get_realized()) - on_load_finished_and_realized(); - else - realize.connect(on_load_finished_and_realized); + private void on_load_changed(WebKit.WebView view, WebKit.LoadEvent event) { + if (event == WebKit.LoadEvent.FINISHED) { + if (get_realized()) + on_load_finished_and_realized(); + else + realize.connect(on_load_finished_and_realized); + } } - + private void on_load_finished_and_realized() { // This is safe to call even when this connection hasn't been made. realize.disconnect(on_load_finished_and_realized); - WebKit.DOM.Document document = editor.get_dom_document(); - WebKit.DOM.HTMLElement? body = document.get_element_by_id(BODY_ID) as WebKit.DOM.HTMLElement; - assert(body != null); - if (!Geary.String.is_empty(body_html)) { - try { - body.set_inner_html(body_html); - } catch (Error e) { - debug("Failed to load prefilled body: %s", e.message); - } - } - body.focus(); // Focus within the HTML document - - // Set cursor at appropriate position - try { - WebKit.DOM.Element? cursor = document.get_element_by_id("cursormarker"); - if (cursor != null) { - WebKit.DOM.Range range = document.create_range(); - range.select_node_contents(cursor); - range.collapse(false); - WebKit.DOM.DOMSelection selection = document.default_view.get_selection(); - selection.remove_all_ranges(); - selection.add_range(range); - cursor.parent_element.remove_child(cursor); - } - } catch (Error error) { - debug("Error setting cursor at end of text: %s", error.message); - } + this.actions.change_action_state( + ACTION_SHOW_EXTENDED, false + ); + this.actions.change_action_state( + ACTION_COMPOSE_AS_HTML, this.config.compose_as_html + ); - protect_blockquote_styles(); - - set_focus(); // Focus in the GTK widget hierarchy - - // Ensure the editor is in correct mode re HTML - on_compose_as_html(); - - bind_event(editor,"a", "click", (Callback) on_link_clicked, this); - update_actions(); - on_show_extended(); - if (can_delete_quote) - editor.selection_changed.connect(() => { can_delete_quote = false; }); - } - - // Glade only allows one accelerator per-action. This method adds extra accelerators not defined - // in the Glade file. - private void add_extra_accelerators() { - GtkUtil.add_accelerator(ui, actions, "Escape", ACTION_CLOSE); - } - - private void setup_drag_destination(Gtk.Widget destination) { - const Gtk.TargetEntry[] target_entries = { { URI_LIST_MIME_TYPE, 0, 0 } }; - Gtk.drag_dest_set(destination, Gtk.DestDefaults.MOTION | Gtk.DestDefaults.HIGHLIGHT, - target_entries, Gdk.DragAction.COPY); - destination.drag_data_received.connect(on_drag_data_received); - destination.drag_drop.connect(on_drag_drop); - destination.drag_motion.connect(on_drag_motion); - destination.drag_leave.connect(on_drag_leave); + this.editor.selection_changed.connect( + () => { this.can_delete_quote = false; } + ); } - + private void show_attachment_overlay(bool visible) { - if (is_attachment_overlay_visible == visible) + if (this.is_attachment_overlay_visible == visible) return; - - is_attachment_overlay_visible = visible; - + + this.is_attachment_overlay_visible = visible; + // If we just make the widget invisible, it can still intercept drop signals. So we // completely remove it instead. if (visible) { int height = hidden_on_attachment_drag_over.get_allocated_height(); - hidden_on_attachment_drag_over.remove(hidden_on_attachment_drag_over_child); - visible_on_attachment_drag_over.add(visible_on_attachment_drag_over_child); - visible_on_attachment_drag_over.set_size_request(-1, height); + this.hidden_on_attachment_drag_over.remove(this.hidden_on_attachment_drag_over_child); + this.visible_on_attachment_drag_over.add(this.visible_on_attachment_drag_over_child); + this.visible_on_attachment_drag_over.set_size_request(-1, height); } else { - hidden_on_attachment_drag_over.add(hidden_on_attachment_drag_over_child); - visible_on_attachment_drag_over.remove(visible_on_attachment_drag_over_child); - visible_on_attachment_drag_over.set_size_request(-1, -1); + this.hidden_on_attachment_drag_over.add(this.hidden_on_attachment_drag_over_child); + this.visible_on_attachment_drag_over.remove(this.visible_on_attachment_drag_over_child); + this.visible_on_attachment_drag_over.set_size_request(-1, -1); } } - + + [GtkCallback] private bool on_drag_motion() { show_attachment_overlay(true); return false; } - + + [GtkCallback] private void on_drag_leave() { show_attachment_overlay(false); } - + + [GtkCallback] private void on_drag_data_received(Gtk.Widget sender, Gdk.DragContext context, int x, int y, Gtk.SelectionData selection_data, uint info, uint time_) { @@ -875,14 +926,19 @@ foreach (string uri in uris) { if (!uri.has_prefix(FILE_URI_PREFIX)) continue; - - add_attachment(File.new_for_uri(uri.strip())); + + try { + add_attachment_part(File.new_for_uri(uri.strip())); + } catch (Error err) { + attachment_failed(err.message); + } } } Gtk.drag_finish(context, dnd_success, false, time_); } - + + [GtkCallback] private bool on_drag_drop(Gtk.Widget sender, Gdk.DragContext context, int x, int y, uint time_) { if (context.list_targets() == null) return false; @@ -901,109 +957,109 @@ Gtk.drag_get_data(sender, context, target_type, time_); return true; } - - public Geary.ComposedEmail get_composed_email(DateTime? date_override = null, + + public async Geary.ComposedEmail get_composed_email(DateTime? date_override = null, bool only_html = false) { Geary.ComposedEmail email = new Geary.ComposedEmail( date_override ?? new DateTime.now_local(), from); - email.sender = sender; - - if (to_entry.addresses != null) - email.to = to_entry.addresses; - - if (cc_entry.addresses != null) - email.cc = cc_entry.addresses; - - if (bcc_entry.addresses != null) - email.bcc = bcc_entry.addresses; - if (reply_to_entry.addresses != null) - email.reply_to = reply_to_entry.addresses; - - if ((compose_type == ComposeType.REPLY || compose_type == ComposeType.REPLY_ALL) && - !in_reply_to.is_empty) + email.to = this.to_entry.addresses ?? email.to; + email.cc = this.cc_entry.addresses ?? email.cc; + email.bcc = this.bcc_entry.addresses ?? email.bcc; + email.reply_to = this.reply_to_entry.addresses ?? email.reply_to; + + if ((this.compose_type == ComposeType.REPLY || this.compose_type == ComposeType.REPLY_ALL) && + !this.in_reply_to.is_empty) email.in_reply_to = new Geary.RFC822.MessageIDList.from_collection(in_reply_to).to_rfc822_string(); - - if (!Geary.String.is_empty(references)) - email.references = references; - - if (!Geary.String.is_empty(subject)) - email.subject = subject; - - email.attachment_files.add_all(attachment_files); - - if (compose_as_html || only_html) - email.body_html = get_html(); - if (!only_html) - email.body_text = get_text(); + + if (!Geary.String.is_empty(this.references)) + email.references = this.references; + + if (!Geary.String.is_empty(this.subject)) + email.subject = this.subject; + + email.attached_files.add_all(this.attached_files); + email.inline_files.set_all(this.inline_files); + email.cid_files.set_all(this.cid_files); + + email.img_src_prefix = ClientWebView.INTERNAL_URL_PREFIX; + + try { + if (this.editor.is_rich_text || only_html) + email.body_html = yield this.editor.get_html(); + if (!only_html) + email.body_text = yield this.editor.get_text(); + } catch (Error error) { + debug("Error getting composer message body: %s", error.message); + } // User-Agent email.mailer = GearyApplication.PRGNAME + "/" + GearyApplication.VERSION; - + return email; } - - public override void show_all() { - base.show_all(); - // Now, hide elements that we don't want shown - update_from_field(); - state = state; // Triggers visibilities - show_attachments(); - } - + public void change_compose_type(ComposeType new_type, Geary.Email? referred = null, string? quote = null) { - if (referred != null && quote != null && quote != last_quote) { - last_quote = quote; - WebKit.DOM.Document document = editor.get_dom_document(); + if (referred != null && quote != null && quote != this.last_quote) { + this.last_quote = quote; // Always use reply styling, since forward styling doesn't work for inline quotes - document.exec_command("insertHTML", false, - Geary.RFC822.Utils.quote_email_for_reply(referred, quote, Geary.RFC822.TextFormat.HTML)); - + this.editor.insert_html( + Geary.RFC822.Utils.quote_email_for_reply(referred, quote, Geary.RFC822.TextFormat.HTML) + ); + if (!referred_ids.contains(referred.id)) { add_recipients_and_ids(new_type, referred); - ensure_paned(); + + if (this.state != ComposerState.PANED && + this.state != ComposerState.DETACHED) { + this.state = ComposerWidget.ComposerState.PANED; + // XXX move the two lines below to the controller + this.container.remove_composer(); + GearyApplication.instance.controller.main_window.conversation_viewer.do_compose(this); + } } - } else if (new_type != compose_type) { - bool recipients_modified = to_entry.modified || cc_entry.modified || bcc_entry.modified; + } else if (new_type != this.compose_type) { + bool recipients_modified = this.to_entry.modified || this.cc_entry.modified || this.bcc_entry.modified; switch (new_type) { case ComposeType.REPLY: case ComposeType.REPLY_ALL: - subject = reply_subject; + this.subject = this.reply_subject; if (!recipients_modified) { - to_entry.addresses = reply_to_addresses; - cc_entry.addresses = (new_type == ComposeType.REPLY_ALL) ? + this.to_entry.addresses = reply_to_addresses; + this.cc_entry.addresses = (new_type == ComposeType.REPLY_ALL) ? reply_cc_addresses : null; - to_entry.modified = cc_entry.modified = false; + this.to_entry.modified = this.cc_entry.modified = false; } else { - to_entry.select_region(0, -1); + this.to_entry.select_region(0, -1); } break; - + case ComposeType.FORWARD: - if (state == ComposerState.INLINE_COMPACT) - state = ComposerState.INLINE; - subject = forward_subject; + if (this.state == ComposerState.INLINE_COMPACT) + this.state = ComposerState.INLINE; + this.subject = forward_subject; if (!recipients_modified) { - to = ""; - cc = ""; - to_entry.modified = cc_entry.modified = false; + this.to = ""; + this.cc = ""; + this.to_entry.modified = this.cc_entry.modified = false; } else { - to_entry.select_region(0, -1); + this.to_entry.select_region(0, -1); } break; - + default: assert_not_reached(); } - compose_type = new_type; + this.compose_type = new_type; } - - container.present(); + + update_composer_view(); + this.container.present(); set_focus(); } - + private void add_recipients_and_ids(ComposeType type, Geary.Email referred, bool modify_headers = true) { Gee.List sender_addresses = @@ -1012,7 +1068,7 @@ // Set the preferred from address. New messages should retain // the account default and drafts should retain the draft's // from addresses, so don't update them here - if (compose_type != ComposeType.NEW_MESSAGE) { + if (this.compose_type != ComposeType.NEW_MESSAGE) { if (!check_preferred_from_address(sender_addresses, referred.to)) { if (!check_preferred_from_address(sender_addresses, referred.cc)) if (!check_preferred_from_address(sender_addresses, referred.bcc)) @@ -1033,137 +1089,104 @@ if (!modify_headers) return; - bool recipients_modified = to_entry.modified || cc_entry.modified || bcc_entry.modified; + bool recipients_modified = this.to_entry.modified || this.cc_entry.modified || this.bcc_entry.modified; if (!recipients_modified) { if (type == ComposeType.REPLY || type == ComposeType.REPLY_ALL) - to_entry.addresses = Geary.RFC822.Utils.merge_addresses(to_entry.addresses, + this.to_entry.addresses = Geary.RFC822.Utils.merge_addresses(to_entry.addresses, to_addresses); if (type == ComposeType.REPLY_ALL) - cc_entry.addresses = Geary.RFC822.Utils.remove_addresses( - Geary.RFC822.Utils.merge_addresses(cc_entry.addresses, cc_addresses), - to_entry.addresses); + this.cc_entry.addresses = Geary.RFC822.Utils.remove_addresses( + Geary.RFC822.Utils.merge_addresses(this.cc_entry.addresses, cc_addresses), + this.to_entry.addresses); else - cc_entry.addresses = Geary.RFC822.Utils.remove_addresses(cc_entry.addresses, - to_entry.addresses); - to_entry.modified = cc_entry.modified = false; + this.cc_entry.addresses = Geary.RFC822.Utils.remove_addresses(this.cc_entry.addresses, + this.to_entry.addresses); + this.to_entry.modified = this.cc_entry.modified = false; } - + in_reply_to.add(referred.message_id); referred_ids.add(referred.id); } - - private void add_signature_and_cursor() { - string? signature = null; - - // If use signature is enabled but no contents are on settings then we'll use ~/.signature, if any - // otherwise use whatever the user has input in settings dialog - if (account.information.use_email_signature && Geary.String.is_empty_or_whitespace(account.information.email_signature)) { - File signature_file = File.new_for_path(Environment.get_home_dir()).get_child(".signature"); - if (!signature_file.query_exists()) { - set_cursor(); - return; - } - - try { - FileUtils.get_contents(signature_file.get_path(), out signature); - if (Geary.String.is_empty_or_whitespace(signature)) { - set_cursor(); - return; - } - signature = smart_escape(signature, false); - } catch (Error error) { - debug("Error reading signature file %s: %s", signature_file.get_path(), error.message); - set_cursor(); - return; - } - } else { - signature = account.information.email_signature; - if(Geary.String.is_empty_or_whitespace(signature)) { - set_cursor(); - return; - } - signature = smart_escape(signature, true); - } - - if (body_html == null) - body_html = CURSOR + "

" + signature; - else if (top_posting) - body_html = CURSOR + "

" + signature + body_html; - else - body_html = body_html + CURSOR + "

" + signature; - } - - private void set_cursor() { - if (top_posting) - body_html = CURSOR + body_html; - else - body_html = body_html + CURSOR; - } - - private bool can_save() { - return draft_manager != null - && draft_manager.is_open - && editor.can_undo() - && account.information.save_drafts; - } public CloseStatus should_close() { - if (is_closing) + if (this.is_closing) return CloseStatus.PENDING_CLOSE; - - bool try_to_save = can_save(); - - container.present(); - AlertDialog dialog; - - if (try_to_save) { - dialog = new TernaryConfirmationDialog(container.top_window, - _("Do you want to discard this message?"), null, Stock._KEEP, Stock._DISCARD, - Gtk.ResponseType.CLOSE); - } else { - dialog = new ConfirmationDialog(container.top_window, - _("Do you want to discard this message?"), null, Stock._DISCARD); - } - - Gtk.ResponseType response = dialog.run(); - if (response == Gtk.ResponseType.CANCEL || response == Gtk.ResponseType.DELETE_EVENT) { - return CloseStatus.CANCEL_CLOSE; // Cancel - } else if (response == Gtk.ResponseType.OK) { - if (try_to_save) { - save_and_exit_async.begin(); // Save - return CloseStatus.PENDING_CLOSE; + if (this.is_blank) + return CloseStatus.DO_CLOSE; + + this.container.present(); + + CloseStatus status = CloseStatus.PENDING_CLOSE; + if (this.can_save) { + AlertDialog dialog = new TernaryConfirmationDialog(container.top_window, + _("Do you want to discard this message?"), null, Stock._KEEP, Stock._DISCARD, + Gtk.ResponseType.CLOSE, "suggested-action"); + Gtk.ResponseType response = dialog.run(); + if (response == Gtk.ResponseType.CANCEL || + response == Gtk.ResponseType.DELETE_EVENT) { + status = CloseStatus.CANCEL_CLOSE; + } else if (response == Gtk.ResponseType.OK) { + // Keep + if (!this.is_draft_saved) { + save_and_exit_async.begin(); + } else { + status = CloseStatus.DO_CLOSE; + } } else { - return CloseStatus.DO_CLOSE; + // Discard + discard_and_exit_async.begin(); } } else { - discard_and_exit_async.begin(); // Discard - return CloseStatus.PENDING_CLOSE; + AlertDialog dialog = new ConfirmationDialog(container.top_window, + _("Do you want to discard this message?"), null, Stock._DISCARD, "destructive-action"); + Gtk.ResponseType response = dialog.run(); + if (response == Gtk.ResponseType.OK) { + discard_and_exit_async.begin(); + } else { + status = CloseStatus.CANCEL_CLOSE; + } } + + return status; } - - private void on_close() { + + private void on_close(SimpleAction action, Variant? param) { if (should_close() == CloseStatus.DO_CLOSE) - container.close_container(); + this.container.close_container(); } - - private void on_close_and_save() { - if (can_save()) + + private void on_close_and_save(SimpleAction action, Variant? param) { + if (this.should_save) save_and_exit_async.begin(); else - on_close(); + this.container.close_container(); } - - private void on_close_and_discard() { + + private void on_close_and_discard(SimpleAction action, Variant? param) { discard_and_exit_async.begin(); } - + private void on_detach() { - if (state == ComposerState.DETACHED) + if (this.state == ComposerState.DETACHED) return; - Gtk.Widget? focus = container.top_window.get_focus(); - container.remove_composer(); + Gtk.Widget? focus = this.container.top_window.get_focus(); + this.container.remove_composer(); ComposerWindow window = new ComposerWindow(this); - state = ComposerWidget.ComposerState.DETACHED; + + // Workaround a GTK+ crasher, Bug 771812. When the composer is + // re-parented, its menu_button's popover keeps a reference to + // the conversation window's viewport, so when that is removed + // it has a null parent and we crash. To reproduce: Reply + // inline, detach the composer, then choose a different + // conversation back in the main window. The workaround here + // sets a new menu model and hence the menu_button constructs + // a new popover. + this.actions.change_action_state(ACTION_COMPOSE_AS_HTML, + GearyApplication.instance.config.compose_as_html); + + this.state = ComposerWidget.ComposerState.DETACHED; + this.header.detached(); + update_composer_view(); if (focus != null && focus.parent.visible) { ComposerWindow focus_win = focus.get_toplevel() as ComposerWindow; if (focus_win != null && focus_win == window) @@ -1172,149 +1195,94 @@ set_focus(); } } - - public void ensure_paned() { - if (state == ComposerState.PANED || state == ComposerState.DETACHED) - return; - container.remove_composer(); - GearyApplication.instance.controller.main_window.conversation_viewer - .set_paned_composer(this); - state = ComposerWidget.ComposerState.PANED; - } - + public void embed_header() { - if (header.parent == null) { - Gtk.Alignment header_area = (Gtk.Alignment) builder.get_object("header_area"); - header_area.add(header); + if (this.header.parent == null) { + this.header_area.add(this.header); + this.header.hexpand = true; } } - + public void free_header() { - if (header.parent != null) - header.parent.remove(header); + if (this.header.parent != null) + this.header.parent.remove(this.header); } - - // compares all keys to all tokens according to user-supplied comparison function - // Returns true if found - private bool search_tokens(string[] keys, string[] tokens, CompareStringFunc cmp_func, - out string? found_key, out string? found_token) { - foreach (string key in keys) { - foreach (string token in tokens) { - if (cmp_func(key, token)) { - found_key = key; - found_token = token; - - return true; - } - } - } - - found_key = null; - found_token = null; - - return false; + + public override bool key_press_event(Gdk.EventKey event) { + // Override the method since key-press-event is run last, and + // we want this behaviour to take precedence over the default + // key handling + return check_send_on_return(event) && base.key_press_event(event); + } + + // Updates the composer's UI after its state has changed + private void update_composer_view() { + this.recipients.set_visible(this.state != ComposerState.INLINE_COMPACT); + + bool not_inline = (this.state != ComposerState.INLINE && + this.state != ComposerState.INLINE_COMPACT); + this.subject_label.set_visible(not_inline); + this.subject_entry.set_visible(not_inline); + + this.header.state = this.state; + + update_from_field(); } - - private bool email_contains_attachment_keywords() { - // Filter out all content contained in block quotes - string filtered = @"$subject\n"; - filtered += Util.DOM.get_text_representation(editor.get_dom_document(), "blockquote"); - - Regex url_regex = null; + + private async bool should_send() { + bool has_subject = !Geary.String.is_empty(subject.strip()); + bool has_attachment = this.attached_files.size > 0; + bool has_body = true; + try { - // Prepare to ignore urls later - url_regex = new Regex(URL_REGEX, RegexCompileFlags.CASELESS); - } catch (Error error) { - debug("Error building regex in keyword checker: %s", error.message); - } - - string[] suffix_keys = ATTACHMENT_KEYWORDS_SUFFIX.casefold().split("|"); - string[] full_word_keys = ATTACHMENT_KEYWORDS_LOCALIZED.casefold().split("|"); - - foreach (string line in filtered.split("\n")) { - // Stop looking once we hit forwarded content - if (line.has_prefix("--")) { - break; - } - - // casefold line, strip start and ending whitespace, then tokenize by whitespace - string folded = line.casefold().strip(); - string[] tokens = folded.split_set(" \t"); - - // search for full-word matches - string? found_key, found_token; - bool found = search_tokens(full_word_keys, tokens, (key, token) => { - return key == token; - }, out found_key, out found_token); - - // if not found, search for suffix matches - if (!found) { - found = search_tokens(suffix_keys, tokens, (key, token) => { - return token.has_suffix(key); - }, out found_key, out found_token); - } - - if (found) { - try { - // Make sure the match isn't coming from a url - if (found_key in url_regex.replace(folded, -1, 0, "")) { - return true; - } - } catch (Error error) { - debug("Regex replacement error in keyword checker: %s", error.message); - return true; - } - } + has_body = !Geary.String.is_empty(yield this.editor.get_html()); + } catch (Error err) { + debug("Failed to get message body: %s", err.message); } - - return false; - } - - private bool should_send() { - bool has_subject = !Geary.String.is_empty(subject.strip()); - bool has_body = !Geary.String.is_empty(get_html()); - bool has_attachment = attachment_files.size > 0; - bool has_body_or_attachment = has_body || has_attachment; - + string? confirmation = null; - if (!has_subject && !has_body_or_attachment) { + if (!has_subject && !has_body && !has_attachment) { confirmation = _("Send message with an empty subject and body?"); } else if (!has_subject) { confirmation = _("Send message with an empty subject?"); - } else if (!has_body_or_attachment) { + } else if (!has_body && !has_attachment) { confirmation = _("Send message with an empty body?"); - } else if (!has_attachment && email_contains_attachment_keywords()) { + } else if (!has_attachment && + yield this.editor.contains_attachment_keywords( + ATTACHMENT_KEYWORDS_LOCALIZED, this.subject)) { confirmation = _("Send message without an attachment?"); } if (confirmation != null) { ConfirmationDialog dialog = new ConfirmationDialog(container.top_window, - confirmation, null, Stock._OK); - if (dialog.run() != Gtk.ResponseType.OK) - return false; + confirmation, null, Stock._OK, "suggested-action"); + return (dialog.run() == Gtk.ResponseType.OK); } return true; } - + // Sends the current message. - private void on_send() { - if (should_send()) - on_send_async.begin(); + private void on_send(SimpleAction action, Variant? param) { + this.should_send.begin((obj, res) => { + if (this.should_send.end(res)) { + on_send_async.begin(); + } + }); } - + // Used internally by on_send() private async void on_send_async() { - container.vanish(); - is_closing = true; - - linkify_document(editor.get_dom_document()); - + this.editor.disable(); + this.container.vanish(); + this.is_closing = true; + // Perform send. try { - yield account.send_email_async(get_composed_email()); + yield this.editor.clean_content(); + yield this.account.send_email_async(yield get_composed_email()); } catch (Error e) { GLib.message("Error sending email: %s", e.message); } - + Geary.Nonblocking.Semaphore? semaphore = discard_draft(); if (semaphore != null) { try { @@ -1323,736 +1291,521 @@ // ignored } } - + // Only close window after draft is deleted; this closes the drafts folder. - container.close_container(); + this.container.close_container(); } - - private void on_draft_state_changed() { - switch (draft_manager.draft_state) { + + /** + * Closes current draft manager, if any, then opens a new one. + */ + private async void reopen_draft_manager_async(Cancellable? cancellable) + throws Error { + if (this.draft_manager != null) { + yield close_draft_manager_async(cancellable); + } + // XXX Need to work out what do to with any existing draft in + // this case. See Bug 713533. + yield open_draft_manager_async(null); + } + + private async void close_draft_manager_async(Cancellable? cancellable) + throws Error { + this.draft_save_text = ""; + get_action(ACTION_CLOSE_AND_SAVE).set_enabled(false); + disconnect_from_draft_manager(); + + // drop ref even if close failed + try { + yield this.draft_manager.close_async(cancellable); + } finally { + this.draft_manager = null; + } + debug("Draft manager closed"); + } + + // This code is in a separate method due to https://bugzilla.gnome.org/show_bug.cgi?id=742621 + // connect_to_draft_manager() is simply for symmetry. When above bug is fixed, this code can + // be moved back into open/close methods + private void disconnect_from_draft_manager() { + this.draft_manager.notify[Geary.App.DraftManager.PROP_DRAFT_STATE] + .disconnect(on_draft_state_changed); + this.draft_manager.notify[Geary.App.DraftManager.PROP_CURRENT_DRAFT_ID] + .disconnect(on_draft_id_changed); + this.draft_manager.fatal.disconnect(on_draft_manager_fatal); + } + + private void update_draft_state() { + switch (this.draft_manager.draft_state) { case Geary.App.DraftManager.DraftState.STORED: - draft_save_text = DRAFT_SAVED_TEXT; + this.draft_save_text = DRAFT_SAVED_TEXT; + this.is_draft_saved = true; break; - + case Geary.App.DraftManager.DraftState.STORING: - draft_save_text = DRAFT_SAVING_TEXT; + this.draft_save_text = DRAFT_SAVING_TEXT; + this.is_draft_saved = true; break; - + case Geary.App.DraftManager.DraftState.NOT_STORED: - draft_save_text = ""; + this.draft_save_text = ""; + this.is_draft_saved = false; break; - + case Geary.App.DraftManager.DraftState.ERROR: - draft_save_text = DRAFT_ERROR_TEXT; + this.draft_save_text = DRAFT_ERROR_TEXT; + this.is_draft_saved = false; break; - + default: assert_not_reached(); } } - - private void on_draft_id_changed() { - GearyApplication.instance.controller.main_window.conversation_viewer.blacklist_by_id( - draft_manager.current_draft_id); - } - - private void on_draft_manager_fatal(Error err) { - draft_save_text = DRAFT_ERROR_TEXT; - } - - private void connect_to_draft_manager() { - draft_manager.notify[Geary.App.DraftManager.PROP_DRAFT_STATE].connect(on_draft_state_changed); - draft_manager.notify[Geary.App.DraftManager.PROP_CURRENT_DRAFT_ID].connect(on_draft_id_changed); - draft_manager.fatal.connect(on_draft_manager_fatal); - } - - // This code is in a separate method due to https://bugzilla.gnome.org/show_bug.cgi?id=742621 - // connect_to_draft_manager() is simply for symmetry. When above bug is fixed, this code can - // be moved back into open/close methods - private void disconnect_from_draft_manager() { - draft_manager.notify[Geary.App.DraftManager.PROP_DRAFT_STATE].disconnect(on_draft_state_changed); - draft_manager.notify[Geary.App.DraftManager.PROP_CURRENT_DRAFT_ID].disconnect(on_draft_id_changed); - draft_manager.fatal.disconnect(on_draft_manager_fatal); - } - - // Returns the drafts folder for the current From account. - private async void open_draft_manager_async( - Geary.EmailIdentifier? editing_draft_id = null, - Cancellable? cancellable = null) - throws Error { - this.draft_save_text = ""; - Gtk.Action close_and_save = this.actions.get_action(ACTION_CLOSE_SAVE); - close_and_save.set_sensitive(false); + private inline void draft_changed() { + if (this.can_save) { + this.draft_timer.start(); + } + this.draft_save_text = ""; + // can_save depends on the value of this, so reset it after + // the if test above + this.is_draft_saved = false; + } - yield close_draft_manager_async(cancellable); + // Note that drafts are NOT "linkified." + private async void save_draft() { + // cancel timer in favor of just doing it now + this.draft_timer.reset(); - if (!this.account.information.save_drafts) { - close_and_save.set_visible(false); - return; + if (this.draft_manager != null) { + try { + Geary.ComposedEmail draft = yield get_composed_email(null, true); + this.draft_manager.update( + draft.to_rfc822_message(), this.draft_flags, null + ); + } catch (Error err) { + GLib.message("Unable to save draft: %s", err.message); + } } + } + + private Geary.Nonblocking.Semaphore? discard_draft() { + // cancel timer in favor of this operation + this.draft_timer.reset(); - this.draft_manager = new Geary.App.DraftManager(account); try { - yield this.draft_manager.open_async(editing_draft_id, cancellable); - } catch (Error err) { - debug("Unable to open draft manager %s: %s", draft_manager.to_string(), err.message); - - draft_manager = null; - - throw err; - } - connect_to_draft_manager(); - - close_and_save.set_visible(true); - close_and_save.set_sensitive(true); - } - - private async void close_draft_manager_async(Cancellable? cancellable) throws Error { - this.actions.get_action(ACTION_CLOSE_SAVE).set_sensitive(false); - if (this.draft_manager == null) - return; - - disconnect_from_draft_manager(); - - // drop ref even if close failed - try { - yield draft_manager.close_async(cancellable); - } finally { - this.draft_manager = null; - } - } - - // Resets the draft save timeout. - private void reset_draft_timer() { - draft_save_text = ""; - cancel_draft_timer(); - - if (can_save()) - draft_save_timeout_id = Timeout.add_seconds(DRAFT_TIMEOUT_SEC, on_save_draft_timeout); - } - - // Cancels the draft save timeout - private void cancel_draft_timer() { - if (draft_save_timeout_id == 0) - return; - - Source.remove(draft_save_timeout_id); - draft_save_timeout_id = 0; - } - - private bool on_save_draft_timeout() { - // this is not rescheduled by the event loop, so kill the timeout id - draft_save_timeout_id = 0; - - save_draft(); - - return false; - } - - // Note that drafts are NOT "linkified." - private Geary.Nonblocking.Semaphore? save_draft() { - // cancel timer in favor of just doing it now - cancel_draft_timer(); - - try { - if (draft_manager != null) { - return draft_manager.update(get_composed_email(null, true).to_rfc822_message(), - draft_flags, null); - } - } catch (Error err) { - GLib.message("Unable to save draft: %s", err.message); - } - - return null; - } - - private Geary.Nonblocking.Semaphore? discard_draft() { - // cancel timer in favor of this operation - cancel_draft_timer(); - - try { - if (draft_manager != null) - return draft_manager.discard(); + if (this.draft_manager != null) + return this.draft_manager.discard(); } catch (Error err) { GLib.message("Unable to discard draft: %s", err.message); } return null; } - + // Used while waiting for draft to save before closing widget. private void make_gui_insensitive() { - container.vanish(); - cancel_draft_timer(); + this.container.vanish(); + this.draft_timer.reset(); } - + private async void save_and_exit_async() { make_gui_insensitive(); - is_closing = true; - - save_draft(); + this.is_closing = true; + + yield save_draft(); try { yield close_draft_manager_async(null); } catch (Error err) { // ignored } - if (draft_manager != null) - GearyApplication.instance.controller.main_window.conversation_viewer - .unblacklist_by_id(draft_manager.current_draft_id); - container.close_container(); } - + private async void discard_and_exit_async() { make_gui_insensitive(); - is_closing = true; - - discard_draft(); - if (draft_manager != null) + this.is_closing = true; + + // This method can be called even if drafts are not being + // saved, hence we need to check the draft manager + if (draft_manager != null) { + discard_draft(); draft_manager.discard_on_close = true; - try { - yield close_draft_manager_async(null); - } catch (Error err) { - // ignored + try { + yield close_draft_manager_async(null); + } catch (Error err) { + // ignored + } } - - container.close_container(); - } - - private void on_add_attachment_button_clicked() { - AttachmentDialog dialog = null; - do { - // Transient parent of AttachmentDialog is this ComposerWindow - // But this generates the following warning: - // Attempting to add a widget with type AttachmentDialog to a - // ComposerWindow, but as a GtkBin subclass a ComposerWindow can - // only contain one widget at a time; - // it already contains a widget of type GtkBox - dialog = new AttachmentDialog(container.top_window); - } while (!dialog.is_finished(add_attachment)); + + this.container.close_container(); } - - private void on_pending_attachments_button_clicked() { - add_attachments(pending_attachments, false); + + private void update_attachments_view() { + if (this.attached_files.size > 0 ) + attachments_box.show_all(); + else + attachments_box.hide(); + + update_pending_attachments(this.pending_include, true); } - - private void check_pending_attachments() { - if (pending_attachments != null) { - foreach (Geary.Attachment attachment in pending_attachments) { - if (!attachment_files.contains(attachment.file)) { - header.show_pending_attachments = true; - return; + + // Both adds pending attachments and updates the UI if there are + // any that were left out, that could have been added manually. + private void update_pending_attachments(AttachPending include, bool do_add) { + bool manual_enabled = false; + if (this.pending_attachments != null) { + foreach(Geary.Attachment part in this.pending_attachments) { + try { + string? content_id = part.content_id; + Geary.Mime.DispositionType? type = + part.content_disposition.disposition_type; + File file = part.file; + if (type == Geary.Mime.DispositionType.INLINE) { + // We only care about the Content Ids of + // inline parts, since we need to display them + // in the editor web view. However if an + // inline part does not have a CID, it is not + // possible to be referenced from an IMG SRC + // using a cid: URL anyway, so treat it as an + // attachment instead. + if (content_id != null) { + this.cid_files[content_id] = file; + this.editor.add_internal_resource( + content_id, new Geary.Memory.FileBuffer(file, true) + ); + } else { + type = Geary.Mime.DispositionType.ATTACHMENT; + } + } + + if (type == Geary.Mime.DispositionType.INLINE || + include == AttachPending.ALL) { + // The pending attachment should be added + // automatically, so add it if asked to and it + // hasn't already been added + if (do_add && + !(file in this.attached_files) && + !(content_id in this.inline_files)) { + if (type == Geary.Mime.DispositionType.INLINE) { + add_inline_part(file, content_id); + } else { + add_attachment_part(file); + } + } + } else { + // The pending attachment should only be added + // manually + manual_enabled = true; + } + } catch (Error err) { + attachment_failed(err.message); } } } - header.show_pending_attachments = false; + this.header.show_pending_attachments = manual_enabled; } - - private void attachment_failed(string msg) { - ErrorDialog dialog = new ErrorDialog(container.top_window, _("Cannot add attachment"), msg); - dialog.run(); + + private void add_attachment_part(File target) + throws AttachmentError { + FileInfo target_info = check_attachment_file(target); + + if (!this.attached_files.add(target)) { + throw new AttachmentError.DUPLICATE( + _("“%s” already attached for delivery.").printf(target.get_path()) + ); + } + + Gtk.Box box = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 6); + this.attachments_box.pack_start(box); + + /// In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" + string label_text = _("%s (%s)").printf(target.get_basename(), + Files.get_filesize_as_string(target_info.get_size())); + Gtk.Label label = new Gtk.Label(label_text); + box.pack_start(label); + label.halign = Gtk.Align.START; + label.margin_start = 4; + label.margin_end = 4; + + Gtk.Button remove_button = new Gtk.Button.with_mnemonic(Stock._REMOVE); + box.pack_start(remove_button, false, false); + remove_button.clicked.connect(() => remove_attachment(target, box)); + + update_attachments_view(); } - - private bool add_attachment(File attachment_file, bool alert_errors = true) { - FileInfo attachment_file_info; + + private void add_inline_part(File target, string content_id) + throws AttachmentError { + check_attachment_file(target); + this.inline_files[content_id] = target; + try { + this.editor.add_internal_resource( + content_id, new Geary.Memory.FileBuffer(target, true) + ); + } catch (Error err) { + // unlikely + debug("Failed to re-open file for attachment: %s", err.message); + } + } + + private FileInfo check_attachment_file(File target) + throws AttachmentError { + FileInfo target_info; try { - attachment_file_info = attachment_file.query_info("standard::size,standard::type", + target_info = target.query_info("standard::size,standard::type", FileQueryInfoFlags.NONE); - } catch(Error e) { - if (alert_errors) - attachment_failed(_("\"%s\" could not be found.").printf(attachment_file.get_path())); - - return false; + } catch (Error e) { + throw new AttachmentError.FILE( + _("“%s” could not be found.").printf(target.get_path()) + ); } - - if (attachment_file_info.get_file_type() == FileType.DIRECTORY) { - if (alert_errors) - attachment_failed(_("\"%s\" is a folder.").printf(attachment_file.get_path())); - - return false; + + if (target_info.get_file_type() == FileType.DIRECTORY) { + throw new AttachmentError.FILE( + _("“%s” is a folder.").printf(target.get_path()) + ); } - if (attachment_file_info.get_size() == 0){ - if (alert_errors) - attachment_failed(_("\"%s\" is an empty file.").printf(attachment_file.get_path())); - - return false; + if (target_info.get_size() == 0){ + throw new AttachmentError.FILE( + _("“%s” is an empty file.").printf(target.get_path()) + ); } - + try { - FileInputStream? stream = attachment_file.read(); + FileInputStream? stream = target.read(); if (stream != null) stream.close(); } catch(Error e) { - debug("File '%s' could not be opened for reading. Error: %s", attachment_file.get_path(), + debug("File '%s' could not be opened for reading. Error: %s", target.get_path(), e.message); - - if (alert_errors) - attachment_failed(_("\"%s\" could not be opened for reading.").printf(attachment_file.get_path())); - - return false; - } - - if (!attachment_files.add(attachment_file)) { - if (alert_errors) - attachment_failed(_("\"%s\" already attached for delivery.").printf(attachment_file.get_path())); - - return false; + + throw new AttachmentError.FILE( + _("“%s” could not be opened for reading.").printf(target.get_path()) + ); } - - Gtk.Box box = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 6); - attachments_box.pack_start(box); - - /// In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)" - string label_text = _("%s (%s)").printf(attachment_file.get_basename(), - Files.get_filesize_as_string(attachment_file_info.get_size())); - Gtk.Label label = new Gtk.Label(label_text); - box.pack_start(label); - label.halign = Gtk.Align.START; - label.xpad = 4; - - Gtk.Button remove_button = new Gtk.Button.with_mnemonic(Stock._REMOVE); - box.pack_start(remove_button, false, false); - remove_button.clicked.connect(() => remove_attachment(attachment_file, box)); - - show_attachments(); - - return true; + + return target_info; } - - private void add_attachments(Gee.List attachments, bool alert_errors = true) { - foreach(Geary.Attachment attachment in attachments) - add_attachment(attachment.file, alert_errors); + + private void attachment_failed(string msg) { + ErrorDialog dialog = new ErrorDialog(this.container.top_window, _("Cannot add attachment"), msg); + dialog.run(); } - + private void remove_attachment(File file, Gtk.Box box) { - if (!attachment_files.remove(file)) + if (!this.attached_files.remove(file)) return; - foreach (weak Gtk.Widget child in attachments_box.get_children()) { + foreach (weak Gtk.Widget child in this.attachments_box.get_children()) { if (child == box) { - attachments_box.remove(box); + this.attachments_box.remove(box); break; } } - show_attachments(); + update_attachments_view(); } - - private void show_attachments() { - if (attachment_files.size > 0 ) { - attachments_box.show_all(); - } else { - attachments_box.hide(); + + private bool check_send_on_return(Gdk.EventKey event) { + bool ret = Gdk.EVENT_PROPAGATE; + switch (Gdk.keyval_name(event.keyval)) { + case "Return": + case "KP_Enter": + // always trap Ctrl+Enter/Ctrl+KeypadEnter to prevent + // the Enter leaking through to the controls, but only + // send if send is available + if ((event.state & Gdk.ModifierType.CONTROL_MASK) != 0) { + this.actions.activate_action(ACTION_SEND, null); + ret = Gdk.EVENT_STOP; + } + break; } - check_pending_attachments(); + return ret; } - - private void on_subject_changed() { - reset_draft_timer(); + + [GtkCallback] + private void on_envelope_changed() { + draft_changed(); } - + private void validate_send_button() { - header.send_enabled = - to_entry.valid_or_empty && cc_entry.valid_or_empty && bcc_entry.valid_or_empty - && (!to_entry.empty || !cc_entry.empty || !bcc_entry.empty); - if (state == ComposerState.INLINE_COMPACT) { - bool tocc = !to_entry.empty && !cc_entry.empty, - ccbcc = !(to_entry.empty && cc_entry.empty) && !bcc_entry.empty; - string label = to_entry.buffer.text + (tocc ? ", " : "") - + cc_entry.buffer.text + (ccbcc ? ", " : "") + bcc_entry.buffer.text; - StringBuilder tooltip = new StringBuilder(); - if (to_entry.addresses != null) - foreach(Geary.RFC822.MailboxAddress addr in to_entry.addresses) - tooltip.append(_("To: ") + addr.get_full_address() + "\n"); - if (cc_entry.addresses != null) - foreach(Geary.RFC822.MailboxAddress addr in cc_entry.addresses) - tooltip.append(_("Cc: ") + addr.get_full_address() + "\n"); - if (bcc_entry.addresses != null) - foreach(Geary.RFC822.MailboxAddress addr in bcc_entry.addresses) - tooltip.append(_("Bcc: ") + addr.get_full_address() + "\n"); - if (reply_to_entry.addresses != null) - foreach(Geary.RFC822.MailboxAddress addr in reply_to_entry.addresses) - tooltip.append(_("Reply-To: ") + addr.get_full_address() + "\n"); - header.set_recipients(label, tooltip.str.slice(0, -1)); // Remove trailing \n - } - - reset_draft_timer(); + get_action(ACTION_SEND).set_enabled(this.to_entry.valid || this.cc_entry.valid || this.bcc_entry.valid); } - - private void on_formatting_action(Gtk.Action action) { - if (compose_as_html) - on_action(action); + + private void set_compact_header_recipients() { + bool tocc = !this.to_entry.empty && !this.cc_entry.empty, + ccbcc = !(this.to_entry.empty && this.cc_entry.empty) && !this.bcc_entry.empty; + string label = this.to_entry.buffer.text + (tocc ? ", " : "") + + this.cc_entry.buffer.text + (ccbcc ? ", " : "") + this.bcc_entry.buffer.text; + StringBuilder tooltip = new StringBuilder(); + if (to_entry.addresses != null) + foreach(Geary.RFC822.MailboxAddress addr in this.to_entry.addresses) + tooltip.append(_("To: ") + addr.get_full_address() + "\n"); + if (cc_entry.addresses != null) + foreach(Geary.RFC822.MailboxAddress addr in this.cc_entry.addresses) + tooltip.append(_("Cc: ") + addr.get_full_address() + "\n"); + if (bcc_entry.addresses != null) + foreach(Geary.RFC822.MailboxAddress addr in this.bcc_entry.addresses) + tooltip.append(_("Bcc: ") + addr.get_full_address() + "\n"); + if (reply_to_entry.addresses != null) + foreach(Geary.RFC822.MailboxAddress addr in this.reply_to_entry.addresses) + tooltip.append(_("Reply-To: ") + addr.get_full_address() + "\n"); + this.header.set_recipients(label, tooltip.str.slice(0, -1)); // Remove trailing \n } - - private void on_action(Gtk.Action action) { - if (action_flag) + + private void on_justify(SimpleAction action, Variant? param) { + this.editor.execute_editing_command("justify" + param.get_string()); + } + + private void on_action(SimpleAction action, Variant? param) { + if (!action.enabled) return; - - action_flag = true; // prevents recursion - editor.get_dom_document().exec_command(action.get_name(), false, ""); - action_flag = false; + + // We need the unprefixed name to send as a command to the editor + string[] prefixed_action_name = action.get_name().split("."); + string action_name = prefixed_action_name[prefixed_action_name.length - 1]; + this.editor.execute_editing_command(action_name); } - - private void on_cut() { - if (container.get_focus() == editor) - editor.cut_clipboard(); - else if (container.get_focus() is Gtk.Editable) - ((Gtk.Editable) container.get_focus()).cut_clipboard(); + + private void on_undo(SimpleAction action, Variant? param) { + this.editor.undo(); } - - private void on_copy() { - if (container.get_focus() == editor) - editor.copy_clipboard(); - else if (container.get_focus() is Gtk.Editable) - ((Gtk.Editable) container.get_focus()).copy_clipboard(); + + private void on_redo(SimpleAction action, Variant? param) { + this.editor.redo(); } - - private void on_copy_link() { + + private void on_cut(SimpleAction action, Variant? param) { + if (this.container.get_focus() == this.editor) + this.editor.cut_clipboard(); + else if (this.container.get_focus() is Gtk.Editable) + ((Gtk.Editable) this.container.get_focus()).cut_clipboard(); + } + + private void on_copy(SimpleAction action, Variant? param) { + if (this.container.get_focus() == this.editor) + this.editor.copy_clipboard(); + else if (this.container.get_focus() is Gtk.Editable) + ((Gtk.Editable) this.container.get_focus()).copy_clipboard(); + } + + private void on_copy_link(SimpleAction action, Variant? param) { Gtk.Clipboard c = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD); - c.set_text(hover_url, -1); + // XXX could this also be the cursor URL? We should be getting + // the target URL as from the action param + c.set_text(this.pointer_url, -1); c.store(); } - - private WebKit.DOM.Node? get_left_text(WebKit.DOM.Node node, long offset) { - WebKit.DOM.Document document = editor.get_dom_document(); - string node_value = node.node_value; - - // Offset is in unicode characters, but index is in bytes. We need to get the corresponding - // byte index for the given offset. - int char_count = node_value.char_count(); - int index = offset > char_count ? node_value.length : node_value.index_of_nth_char(offset); - return offset > 0 ? document.create_text_node(node_value[0:index]) : null; + private void on_paste(SimpleAction action, Variant? param) { + if (this.container.get_focus() == this.editor) + this.editor.paste_plain_text(); + else if (this.container.get_focus() is Gtk.Editable) + ((Gtk.Editable) this.container.get_focus()).paste_clipboard(); } - - private void on_clipboard_text_received(Gtk.Clipboard clipboard, string? text) { - if (text == null) - return; - - // Insert plain text from clipboard. - WebKit.DOM.Document document = editor.get_dom_document(); - document.exec_command("inserttext", false, text); - - // The inserttext command will not scroll if needed, but we can't use the clipboard - // for plain text. WebKit allows us to scroll a node into view, but not an arbitrary - // position within a text node. So we add a placeholder node at the cursor position, - // scroll to that, then remove the placeholder node. - try { - WebKit.DOM.DOMSelection selection = document.default_view.get_selection(); - WebKit.DOM.Node selection_base_node = selection.get_base_node(); - long selection_base_offset = selection.get_base_offset(); - - WebKit.DOM.NodeList selection_child_nodes = selection_base_node.get_child_nodes(); - WebKit.DOM.Node ref_child = selection_child_nodes.item(selection_base_offset); - - WebKit.DOM.Element placeholder = document.create_element("SPAN"); - WebKit.DOM.Text placeholder_text = document.create_text_node("placeholder"); - placeholder.append_child(placeholder_text); - - if (selection_base_node.node_name == "#text") { - WebKit.DOM.Node? left = get_left_text(selection_base_node, selection_base_offset); - - WebKit.DOM.Node parent = selection_base_node.parent_node; - if (left != null) - parent.insert_before(left, selection_base_node); - parent.insert_before(placeholder, selection_base_node); - parent.remove_child(selection_base_node); - - placeholder.scroll_into_view_if_needed(false); - parent.insert_before(selection_base_node, placeholder); - if (left != null) - parent.remove_child(left); - parent.remove_child(placeholder); - selection.set_base_and_extent(selection_base_node, selection_base_offset, selection_base_node, selection_base_offset); - } else { - selection_base_node.insert_before(placeholder, ref_child); - placeholder.scroll_into_view_if_needed(false); - selection_base_node.remove_child(placeholder); - } - - } catch (Error err) { - debug("Error scrolling pasted text into view: %s", err.message); - } - } - - private void on_paste() { - if (container.get_focus() == editor) - get_clipboard(Gdk.SELECTION_CLIPBOARD).request_text(on_clipboard_text_received); - else if (container.get_focus() is Gtk.Editable) - ((Gtk.Editable) container.get_focus()).paste_clipboard(); + + private void on_paste_with_formatting(SimpleAction action, Variant? param) { + if (this.container.get_focus() == this.editor) + this.editor.paste_rich_text(); } - - private void on_paste_with_formatting() { - if (container.get_focus() == editor) - editor.paste_clipboard(); + + private void on_select_all(SimpleAction action, Variant? param) { + this.editor.select_all(); } - - private void on_select_all() { - editor.select_all(); + + private void on_remove_format(SimpleAction action, Variant? param) { + this.editor.execute_editing_command("removeformat"); + this.editor.execute_editing_command("removeparaformat"); + this.editor.execute_editing_command("unlink"); + this.editor.execute_editing_command_with_argument("backcolor", "#ffffff"); + this.editor.execute_editing_command_with_argument("forecolor", "#000000"); } - - private void on_remove_format() { - editor.get_dom_document().exec_command("removeformat", false, ""); - editor.get_dom_document().exec_command("removeparaformat", false, ""); - editor.get_dom_document().exec_command("unlink", false, ""); - editor.get_dom_document().exec_command("backcolor", false, "#ffffff"); - editor.get_dom_document().exec_command("forecolor", false, "#000000"); + + // Use this for toggle actions, and use the change-state signal to respond to these state changes + private void on_toggle_action(SimpleAction? action, Variant? param) { + action.change_state(!action.state.get_boolean()); } - - private void on_compose_as_html() { - WebKit.DOM.DOMTokenList body_classes = editor.get_dom_document().body.get_class_list(); - if (!compose_as_html) { - toggle_toolbar_buttons(false); - build_plaintext_menu(); - try { - body_classes.add("plain"); - } catch (Error error) { - debug("Error setting composer style: %s", error.message); - } - } else { - toggle_toolbar_buttons(true); - build_html_menu(); - try { - body_classes.remove("plain"); - } catch (Error error) { - debug("Error setting composer style: %s", error.message); - } - } + + private void on_compose_as_html_toggled(SimpleAction? action, Variant? new_state) { + bool compose_as_html = new_state.get_boolean(); + action.set_state(compose_as_html); + + foreach (string html_action in html_actions) + get_action(html_action).set_enabled(compose_as_html); + + update_cursor_actions(); + + this.insert_buttons.visible = compose_as_html; + this.font_style_buttons.visible = compose_as_html; + this.remove_format_button.visible = compose_as_html; + + this.menu_button.menu_model = (compose_as_html) ? this.html_menu : this.plain_menu; + + this.editor.set_rich_text(compose_as_html); + GearyApplication.instance.config.compose_as_html = compose_as_html; } - private void on_show_extended() { - if (!show_extended) { - bcc_label.visible = bcc_entry.visible = reply_to_label.visible = reply_to_entry.visible = false; - } else { - if (state == ComposerState.INLINE_COMPACT) - state = ComposerState.INLINE; - bcc_label.visible = bcc_entry.visible = reply_to_label.visible = reply_to_entry.visible = true; + private void on_show_extended_toggled(SimpleAction? action, Variant? new_state) { + bool show_extended = new_state.get_boolean(); + action.set_state(show_extended); + this.bcc_label.visible = + this.bcc_entry.visible = + this.reply_to_label.visible = + this.reply_to_entry.visible = show_extended; + + if (show_extended && this.state == ComposerState.INLINE_COMPACT) { + this.state = ComposerState.INLINE; + update_composer_view(); } } - - private void toggle_toolbar_buttons(bool show) { - actions.get_action(ACTION_BOLD).visible = - actions.get_action(ACTION_ITALIC).visible = - actions.get_action(ACTION_UNDERLINE).visible = - actions.get_action(ACTION_STRIKETHROUGH).visible = - actions.get_action(ACTION_INSERT_LINK).visible = - actions.get_action(ACTION_REMOVE_FORMAT).visible = show; - } - - private void build_plaintext_menu() { - GtkUtil.clear_menu(menu); - - menu.append(html_item2); - menu.append(new Gtk.SeparatorMenuItem()); - menu.append(extended_item); - menu.show_all(); - } - - private void build_html_menu() { - GtkUtil.clear_menu(menu); - - menu.append(font_sans); - menu.append(font_serif); - menu.append(font_monospace); - menu.append(new Gtk.SeparatorMenuItem()); - - menu.append(font_small); - menu.append(font_medium); - menu.append(font_large); - menu.append(new Gtk.SeparatorMenuItem()); - - menu.append(color_item); - menu.append(new Gtk.SeparatorMenuItem()); - - menu.append(html_item); + private void on_font_family(SimpleAction action, Variant? param) { + this.editor.execute_editing_command_with_argument( + "fontname", param.get_string() + ); + action.set_state(param.get_string()); + } + + private void on_font_size(SimpleAction action, Variant? param) { + string size = ""; + if (param.get_string() == "small") + size = "1"; + else if (param.get_string() == "medium") + size = "3"; + else // Large + size = "7"; - menu.append(new Gtk.SeparatorMenuItem()); - menu.append(extended_item); - menu.show_all(); // Call this or only menu items associated with actions will be displayed. + this.editor.execute_editing_command_with_argument("fontsize", size); + action.set_state(param.get_string()); } - - private void on_font_sans() { - if (!action_flag) - editor.get_dom_document().exec_command("fontname", false, "sans"); - } - - private void on_font_serif() { - if (!action_flag) - editor.get_dom_document().exec_command("fontname", false, "serif"); - } - - private void on_font_monospace() { - if (!action_flag) - editor.get_dom_document().exec_command("fontname", false, "monospace"); - } - - private void on_font_size_small() { - if (!action_flag) - editor.get_dom_document().exec_command("fontsize", false, "1"); - } - - private void on_font_size_medium() { - if (!action_flag) - editor.get_dom_document().exec_command("fontsize", false, "3"); - } - - private void on_font_size_large() { - if (!action_flag) - editor.get_dom_document().exec_command("fontsize", false, "7"); - } - + private void on_select_color() { - if (compose_as_html) { - Gtk.ColorChooserDialog dialog = new Gtk.ColorChooserDialog(_("Select Color"), - container.top_window); - if (dialog.run() == Gtk.ResponseType.OK) - editor.get_dom_document().exec_command("forecolor", false, dialog.get_rgba().to_string()); - - dialog.destroy(); + Gtk.ColorChooserDialog dialog = new Gtk.ColorChooserDialog(_("Select Color"), + this.container.top_window); + if (dialog.run() == Gtk.ResponseType.OK) { + this.editor.execute_editing_command_with_argument( + "forecolor", dialog.get_rgba().to_string() + ); } - } - - private void on_indent(Gtk.Action action) { - on_action(action); - - // Undo styling of blockquotes - try { - WebKit.DOM.NodeList node_list = editor.get_dom_document().query_selector_all( - "blockquote[style=\"margin: 0 0 0 40px; border: none; padding: 0px;\"]"); - for (int i = 0; i < node_list.length; ++i) { - WebKit.DOM.Element element = (WebKit.DOM.Element) node_list.item(i); - element.remove_attribute("style"); - element.set_attribute("type", "cite"); - } - } catch (Error error) { - debug("Error removing blockquote style: %s", error.message); - } - } - - private void protect_blockquote_styles() { - // We will search for an remove a particular styling when we quote text. If that style - // exists in the quoted text, we alter it slightly so we don't mess with it later. - try { - WebKit.DOM.NodeList node_list = editor.get_dom_document().query_selector_all( - "blockquote[style=\"margin: 0 0 0 40px; border: none; padding: 0px;\"]"); - for (int i = 0; i < node_list.length; ++i) { - ((WebKit.DOM.Element) node_list.item(i)).set_attribute("style", - "margin: 0 0 0 40px; padding: 0px; border:none;"); - } - } catch (Error error) { - debug("Error protecting blockquotes: %s", error.message); - } - } - - private void on_insert_link() { - if (compose_as_html) - link_dialog("http://"); - } - - private static void on_link_clicked(WebKit.DOM.Element element, WebKit.DOM.Event event, - ComposerWidget composer) { - try { - composer.editor.get_dom_document().get_default_view().get_selection(). - select_all_children(element); - } catch (Error e) { - debug("Error selecting link: %s", e.message); - } - } - - private void link_dialog(string link) { - Gtk.Dialog dialog = new Gtk.Dialog(); - bool existing_link = false; - - // Save information needed to re-establish selection - WebKit.DOM.DOMSelection selection = editor.get_dom_document().get_default_view(). - get_selection(); - WebKit.DOM.Node anchor_node = selection.anchor_node; - long anchor_offset = selection.anchor_offset; - WebKit.DOM.Node focus_node = selection.focus_node; - long focus_offset = selection.focus_offset; - - // Allow user to remove link if they're editing an existing one. - if (focus_node != null && (focus_node is WebKit.DOM.HTMLAnchorElement || - focus_node.get_parent_element() is WebKit.DOM.HTMLAnchorElement)) { - existing_link = true; - dialog.add_buttons(Stock._REMOVE, Gtk.ResponseType.REJECT); - } - - dialog.add_buttons(Stock._CANCEL, Gtk.ResponseType.CANCEL, Stock._OK, - Gtk.ResponseType.OK); - - Gtk.Entry entry = new Gtk.Entry(); - entry.changed.connect(() => { - // Only allow OK when there's text in the box. - dialog.set_response_sensitive(Gtk.ResponseType.OK, - !Geary.String.is_empty(entry.text.strip())); - }); - - dialog.width_request = 350; - dialog.get_content_area().spacing = 7; - dialog.get_content_area().border_width = 10; - dialog.get_content_area().pack_start(new Gtk.Label("Link URL:")); - dialog.get_content_area().pack_start(entry); - dialog.get_widget_for_response(Gtk.ResponseType.OK).can_default = true; - dialog.set_default_response(Gtk.ResponseType.OK); - dialog.show_all(); - - entry.set_text(link); - entry.activates_default = true; - entry.move_cursor(Gtk.MovementStep.BUFFER_ENDS, 0, false); - - int response = dialog.run(); - - // Re-establish selection, since selecting text in the Entry will de-select all - // in the WebView. - try { - selection.set_base_and_extent(anchor_node, anchor_offset, focus_node, focus_offset); - } catch (Error e) { - debug("Error re-establishing selection: %s", e.message); - } - - if (response == Gtk.ResponseType.OK) - editor.get_dom_document().exec_command("createLink", false, entry.text); - else if (response == Gtk.ResponseType.REJECT) - editor.get_dom_document().exec_command("unlink", false, ""); - dialog.destroy(); - - // Re-bind to anchor links. This must be done every time link have changed. - bind_event(editor,"a", "click", (Callback) on_link_clicked, this); - } - - private string get_html() { - return ((WebKit.DOM.HTMLElement) editor.get_dom_document().get_element_by_id(BODY_ID)) - .get_inner_html(); - } - - private string get_text() { - return html_to_flowed_text((WebKit.DOM.HTMLElement) editor.get_dom_document() - .get_element_by_id(BODY_ID)); } - - private bool on_navigation_policy_decision_requested(WebKit.WebFrame frame, - WebKit.NetworkRequest request, WebKit.WebNavigationAction navigation_action, - WebKit.WebPolicyDecision policy_decision) { - policy_decision.ignore(); - if (compose_as_html) - link_dialog(request.uri); - return true; + + private void on_indent(SimpleAction action, Variant? param) { + this.editor.indent_line(); } - - private void on_hovering_over_link(string? title, string? url) { - if (compose_as_html) { - message_overlay_label.label = url; - hover_url = url; - update_actions(); - } + + private void on_mouse_target_changed(WebKit.WebView web_view, + WebKit.HitTestResult hit_test, + uint modifiers) { + bool copy_link_enabled = hit_test.context_is_link(); + this.pointer_url = copy_link_enabled ? hit_test.get_link_uri() : null; + this.message_overlay_label.label = this.pointer_url ?? ""; + get_action(ACTION_COPY_LINK).set_enabled(copy_link_enabled); } - + private void update_message_overlay_label_style() { Gdk.RGBA window_background = container.top_window.get_style_context() .get_background_color(Gtk.StateFlags.NORMAL); @@ -2068,286 +1821,174 @@ message_overlay_label.get_style_context().changed.connect( on_message_overlay_label_style_changed); } - + + [GtkCallback] private void on_message_overlay_label_realize() { update_message_overlay_label_style(); } - + private void on_message_overlay_label_style_changed() { update_message_overlay_label_style(); } - - private void on_spell_check_changed() { - editor.settings.enable_spell_checking = GearyApplication.instance.config.spell_check; - } - - // This overrides the keypress handling for the *widget*; the WebView editor's keypress overrides - // are handled by on_editor_key_press - public override bool key_press_event(Gdk.EventKey event) { - update_actions(); - - switch (Gdk.keyval_name(event.keyval)) { - case "Return": - case "KP_Enter": - // always trap Ctrl+Enter/Ctrl+KeypadEnter to prevent the Enter leaking through - // to the controls, but only send if send is available - if ((event.state & Gdk.ModifierType.CONTROL_MASK) != 0) { - if (header.send_enabled) - on_send(); - - return true; - } - break; - } - - return base.key_press_event(event); - } - - private bool on_context_menu(Gtk.Widget default_menu, WebKit.HitTestResult hit_test_result, - bool keyboard_triggered) { - Gtk.Menu context_menu = (Gtk.Menu) default_menu; - Gtk.MenuItem? ignore_spelling = null, learn_spelling = null; - bool suggestions = false; - - GLib.List children = context_menu.get_children(); - foreach (weak Gtk.Widget child in children) { - Gtk.MenuItem item = (Gtk.MenuItem) child; - if (item.is_sensitive()) { - WebKit.ContextMenuAction action = WebKit.context_menu_item_get_action(item); - if (action == WebKit.ContextMenuAction.SPELLING_GUESS) { - suggestions = true; - continue; - } - - if (action == WebKit.ContextMenuAction.IGNORE_SPELLING) - ignore_spelling = item; - else if (action == WebKit.ContextMenuAction.LEARN_SPELLING) - learn_spelling = item; + + private bool on_context_menu(WebKit.WebView view, + WebKit.ContextMenu context_menu, + Gdk.Event event, + WebKit.HitTestResult hit_test_result) { + // This is a three step process: + // 1. Work out what existing menu items exist that we want to keep + // 2. Clear the existing menu + // 3. Rebuild it based on our GMenu specification + + // Step 1. + + const WebKit.ContextMenuAction[] SPELLING_ACTIONS = { + WebKit.ContextMenuAction.SPELLING_GUESS, + WebKit.ContextMenuAction.NO_GUESSES_FOUND, + WebKit.ContextMenuAction.IGNORE_SPELLING, + WebKit.ContextMenuAction.IGNORE_GRAMMAR, + WebKit.ContextMenuAction.LEARN_SPELLING, + }; + const WebKit.ContextMenuAction[] TEXT_INPUT_ACTIONS = { + WebKit.ContextMenuAction.INPUT_METHODS, + WebKit.ContextMenuAction.UNICODE, + }; + + Gee.List existing_spelling = + new Gee.LinkedList(); + Gee.List existing_text_entry = + new Gee.LinkedList(); + + foreach (WebKit.ContextMenuItem item in context_menu.get_items()) { + if (item.get_stock_action() in SPELLING_ACTIONS) { + existing_spelling.add(item); + } else if (item.get_stock_action() in TEXT_INPUT_ACTIONS) { + existing_text_entry.add(item); } - context_menu.remove(child); } - - if (suggestions) - context_menu.append(new Gtk.SeparatorMenuItem()); - if (ignore_spelling != null) - context_menu.append(ignore_spelling); - if (learn_spelling != null) - context_menu.append(learn_spelling); - if (ignore_spelling != null || learn_spelling != null) - context_menu.append(new Gtk.SeparatorMenuItem()); - - // Undo - Gtk.MenuItem undo = new Gtk.ImageMenuItem(); - undo.related_action = actions.get_action(ACTION_UNDO); - context_menu.append(undo); - - // Redo - Gtk.MenuItem redo = new Gtk.ImageMenuItem(); - redo.related_action = actions.get_action(ACTION_REDO); - context_menu.append(redo); - - context_menu.append(new Gtk.SeparatorMenuItem()); - - // Cut - Gtk.MenuItem cut = new Gtk.ImageMenuItem(); - cut.related_action = actions.get_action(ACTION_CUT); - context_menu.append(cut); - - // Copy - Gtk.MenuItem copy = new Gtk.ImageMenuItem(); - copy.related_action = actions.get_action(ACTION_COPY); - context_menu.append(copy); - - // Copy link. - Gtk.MenuItem copy_link = new Gtk.ImageMenuItem(); - copy_link.related_action = actions.get_action(ACTION_COPY_LINK); - context_menu.append(copy_link); - - // Paste - Gtk.MenuItem paste = new Gtk.ImageMenuItem(); - paste.related_action = actions.get_action(ACTION_PASTE); - context_menu.append(paste); - - // Paste with formatting - if (compose_as_html) { - Gtk.MenuItem paste_format = new Gtk.ImageMenuItem(); - paste_format.related_action = actions.get_action(ACTION_PASTE_FORMAT); - context_menu.append(paste_format); + + // Step 2. + + context_menu.remove_all(); + + // Step 3. + + GtkUtil.menu_foreach(context_menu_model, (label, name, target, section) => { + if (context_menu.last() != null) { + context_menu.append(new WebKit.ContextMenuItem.separator()); + } + + if (section == this.context_menu_webkit_spelling) { + foreach (WebKit.ContextMenuItem item in existing_spelling) + context_menu.append(item); + } else if (section == this.context_menu_webkit_text_entry) { + foreach (WebKit.ContextMenuItem item in existing_text_entry) + context_menu.append(item); + } else if (section == this.context_menu_rich_text) { + if (this.editor.is_rich_text) + append_menu_section(context_menu, section); + } else if (section == this.context_menu_plain_text) { + if (!this.editor.is_rich_text) + append_menu_section(context_menu, section); + } else if (section == this.context_menu_inspector) { + if (Args.inspector) + append_menu_section(context_menu, section); + } else { + append_menu_section(context_menu, section); + } + }); + + // 4. Update the clipboard + // get_clipboard(Gdk.SELECTION_CLIPBOARD).request_targets( + // (_, targets) => { + // foreach (Gdk.Atom atom in targets) { + // debug("atom name: %s", atom.name()); + // } + // }); + + return Gdk.EVENT_PROPAGATE; + } + + private inline void append_menu_section(WebKit.ContextMenu context_menu, + Menu section) { + GtkUtil.menu_foreach(section, (label, name, target, section) => { + if ("." in name) + name = name.split(".")[1]; + + Gtk.Action action = new Gtk.Action(name, label, null, null); + action.set_sensitive(get_action(name).enabled); + action.activate.connect((action) => { + this.actions.activate_action(name, target); + }); + context_menu.append(new WebKit.ContextMenuItem(action)); + }); + } + + private void on_select_dictionary(SimpleAction action, Variant? param) { + if (this.spell_check_popover == null) { + this.spell_check_popover = new SpellCheckPopover( + this.select_dictionary_button, this.config + ); + this.spell_check_popover.selection_changed.connect((active_langs) => { + this.config.spell_check_languages = active_langs; + }); } - - context_menu.append(new Gtk.SeparatorMenuItem()); - - // Select all. - Gtk.MenuItem select_all_item = new Gtk.MenuItem.with_mnemonic(Stock.SELECT__ALL); - select_all_item.activate.connect(on_select_all); - context_menu.append(select_all_item); - - context_menu.show_all(); - - update_actions(); - - return false; + this.spell_check_popover.toggle(); } - - private bool on_editor_key_press(Gdk.EventKey event) { - // widget's keypress override doesn't receive non-modifier keys when the editor processes - // them, regardless if true or false is called; this deals with that issue (specifically + + private bool on_editor_key_press_event(Gdk.EventKey event) { + // Widget's keypress override doesn't receive non-modifier + // keys when the editor processes them, regardless if true or + // false is called; this deals with that issue (specifically // so Ctrl+Enter will send the message) if (event.is_modifier == 0) { - if (key_press_event(event)) - return true; - } - - if ((event.state & Gdk.ModifierType.MOD1_MASK) != 0) - return false; - - if ((event.state & Gdk.ModifierType.CONTROL_MASK) != 0) { - if (event.keyval == Gdk.Key.Tab) { - child_focus(Gtk.DirectionType.TAB_FORWARD); - return true; - } - if (event.keyval == Gdk.Key.ISO_Left_Tab) { - child_focus(Gtk.DirectionType.TAB_BACKWARD); - return true; - } - return false; + if (check_send_on_return(event) == Gdk.EVENT_STOP) + return Gdk.EVENT_STOP; } - - if (can_delete_quote) { - can_delete_quote = false; - if (event.keyval == Gdk.Key.BackSpace) { - body_html = null; - if (account.information.use_email_signature) - add_signature_and_cursor(); - else - set_cursor(); - editor.load_string(HTML_BODY, "text/html", "UTF8", ""); - return true; - } - } - - WebKit.DOM.Document document = editor.get_dom_document(); - if (event.keyval == Gdk.Key.Tab) { - document.exec_command("inserthtml", false, - "\t"); - return true; - } - - if (event.keyval == Gdk.Key.ISO_Left_Tab) { - // If there is no selection and the character before the cursor is tab, delete it. - WebKit.DOM.DOMSelection selection = document.get_default_view().get_selection(); - if (selection.is_collapsed) { - selection.modify("extend", "backward", "character"); - try { - if (selection.get_range_at(0).get_text() == "\t") - selection.delete_from_document(); - else - selection.collapse_to_end(); - } catch (Error error) { - debug("Error handling Left Tab: %s", error.message); - } + + if (this.can_delete_quote) { + this.can_delete_quote = false; + if (event.is_modifier == 0 && event.keyval == Gdk.Key.BackSpace) { + this.editor.delete_quoted_message(); + return Gdk.EVENT_STOP; } - return true; } - - return false; + + return Gdk.EVENT_PROPAGATE; } - - private void update_actions() { - // Undo/redo. - actions.get_action(ACTION_UNDO).sensitive = editor.can_undo(); - actions.get_action(ACTION_REDO).sensitive = editor.can_redo(); - - // Clipboard. - actions.get_action(ACTION_CUT).sensitive = editor.can_cut_clipboard(); - actions.get_action(ACTION_COPY).sensitive = editor.can_copy_clipboard(); - actions.get_action(ACTION_COPY_LINK).sensitive = hover_url != null; - actions.get_action(ACTION_PASTE).sensitive = editor.can_paste_clipboard(); - actions.get_action(ACTION_PASTE_FORMAT).sensitive = editor.can_paste_clipboard() && compose_as_html; - - // Style toggle buttons. - WebKit.DOM.DOMWindow window = editor.get_dom_document().get_default_view(); - WebKit.DOM.DOMSelection? selection = window.get_selection(); - if (selection == null) - return; - - actions.get_action(ACTION_REMOVE_FORMAT).sensitive = !selection.is_collapsed; - - WebKit.DOM.Element? active = selection.focus_node as WebKit.DOM.Element; - if (active == null && selection.focus_node != null) - active = selection.focus_node.get_parent_element(); - - if (active != null && !action_flag) { - action_flag = true; - - WebKit.DOM.CSSStyleDeclaration styles = window.get_computed_style(active, ""); - - ((Gtk.ToggleAction) actions.get_action(ACTION_BOLD)).active = - styles.get_property_value("font-weight") == "bold"; - - ((Gtk.ToggleAction) actions.get_action(ACTION_ITALIC)).active = - styles.get_property_value("font-style") == "italic"; - - ((Gtk.ToggleAction) actions.get_action(ACTION_UNDERLINE)).active = - styles.get_property_value("text-decoration") == "underline"; - - ((Gtk.ToggleAction) actions.get_action(ACTION_STRIKETHROUGH)).active = - styles.get_property_value("text-decoration") == "line-through"; - - // Font family. - string font_name = styles.get_property_value("font-family").down(); - if (font_name.contains("sans-serif") || - font_name.contains("arial") || - font_name.contains("trebuchet") || - font_name.contains("helvetica")) - font_sans.activate(); - else if (font_name.contains("serif") || - font_name.contains("georgia") || - font_name.contains("times")) - font_serif.activate(); - else if (font_name.contains("monospace") || - font_name.contains("courier") || - font_name.contains("console")) - font_monospace.activate(); - - // Font size. - int font_size; - styles.get_property_value("font-size").scanf("%dpx", out font_size); - if (font_size < 11) - font_small.activate(); - else if (font_size > 20) - font_large.activate(); - else - font_medium.activate(); - - action_flag = false; - } + + /** + * Helper method, returns a composer action. + * @param action_name - The name of the action (as found in action_entries) + */ + public SimpleAction? get_action(string action_name) { + return this.actions.lookup_action(action_name) as SimpleAction; } - - private bool add_account_emails_to_from_list(Geary.Account account, bool set_active = false) { + + private bool add_account_emails_to_from_list(Geary.Account other_account, bool set_active = false) { Geary.RFC822.MailboxAddresses primary_address = new Geary.RFC822.MailboxAddresses.single( - account.information.get_primary_mailbox_address()); - from_multiple.append_text(primary_address.to_rfc822_string()); - from_list.add(new FromAddressMap(account, primary_address)); - if (!set_active && from.equal_to(primary_address)) { - from_multiple.set_active(from_list.size - 1); + other_account.information.primary_mailbox); + this.from_multiple.append_text(primary_address.to_rfc822_string()); + this.from_list.add(new FromAddressMap(other_account, primary_address)); + if (!set_active && this.from.equal_to(primary_address)) { + this.from_multiple.set_active(this.from_list.size - 1); set_active = true; } - - if (account.information.alternate_mailboxes != null) { - foreach (Geary.RFC822.MailboxAddress alternate_mailbox in account.information.alternate_mailboxes) { + + if (other_account.information.alternate_mailboxes != null) { + foreach (Geary.RFC822.MailboxAddress alternate_mailbox in other_account.information.alternate_mailboxes) { Geary.RFC822.MailboxAddresses addresses = new Geary.RFC822.MailboxAddresses.single( alternate_mailbox); // Displayed in the From dropdown to indicate an "alternate email address" // for an account. The first printf argument will be the alternate email // address, and the second will be the account's primary email address. - string display = _("%1$s via %2$s").printf(addresses.to_rfc822_string(), account.information.email); - from_multiple.append_text(display); - from_list.add(new FromAddressMap(account, addresses)); + string display = _("%1$s via %2$s").printf(addresses.to_rfc822_string(), other_account.information.display_name); + this.from_multiple.append_text(display); + this.from_list.add(new FromAddressMap(other_account, addresses)); - if (!set_active && from.equal_to(addresses)) { - from_multiple.set_active(from_list.size - 1); + if (!set_active && this.from.equal_to(addresses)) { + this.from_multiple.set_active(this.from_list.size - 1); set_active = true; } } @@ -2358,9 +1999,9 @@ // Updates from combobox contents and visibility, returns true if // the from address had to be set private bool update_from_field() { - from_multiple.changed.disconnect(on_from_changed); - from_single.visible = from_multiple.visible = from_label.visible = false; - + this.from_multiple.changed.disconnect(on_from_changed); + this.from_single.visible = this.from_multiple.visible = this.from_label.visible = false; + Gee.Map accounts; try { accounts = Geary.Engine.instance.get_accounts(); @@ -2371,8 +2012,8 @@ } // Don't show in inline, compact, or paned modes. - if (state == ComposerState.INLINE || state == ComposerState.INLINE_COMPACT || - state == ComposerState.PANED) + if (this.state == ComposerState.INLINE || this.state == ComposerState.INLINE_COMPACT || + this.state == ComposerState.PANED) return false; // If there's only one account, show nothing. (From fields are hidden above.) @@ -2380,46 +2021,133 @@ accounts.values).first().alternate_mailboxes == null)) return false; - from_label.visible = true; - - from_label.set_use_underline(true); - from_label.set_mnemonic_widget(from_multiple); + this.from_label.visible = true; + this.from_label.set_mnemonic_widget(this.from_multiple); // Composer label (with mnemonic underscore) for the account selector // when choosing what address to send a message from. - from_label.set_text_with_mnemonic(_("_From:")); - - from_multiple.visible = true; - from_multiple.remove_all(); - from_list = new Gee.ArrayList(); - - // This is set to true if the current message's from address - // has been selected in the ComboBox - bool set_active = false; - if (compose_type == ComposeType.NEW_MESSAGE) { - set_active = add_account_emails_to_from_list(account); + this.from_label.set_text_with_mnemonic(_("_From:")); + + this.from_multiple.visible = true; + this.from_multiple.remove_all(); + this.from_list = new Gee.ArrayList(); + + // Always add at least the current account. The var set_active + // is set to true if the current message's from address has + // been set in the ComboBox. + bool set_active = add_account_emails_to_from_list(this.account); + if (this.compose_type == ComposeType.NEW_MESSAGE) { foreach (Geary.AccountInformation info in accounts.values) { try { Geary.Account a = Geary.Engine.instance.get_account_instance(info); - if (a != account) + if (a != this.account) set_active = add_account_emails_to_from_list(a, set_active); } catch (Error e) { debug("Error getting account in composer: %s", e.message); } } - } else { - set_active = add_account_emails_to_from_list(account); } - + if (!set_active) { - // The identity or account that was active before has been removed - // use the best we can get now (primary address of the account or any other) - from_multiple.set_active(0); + // The identity or account that was active before has been + // removed use the best we can get now (primary address of + // the account or any other) + this.from_multiple.set_active(0); } - from_multiple.changed.connect(on_from_changed); + this.from_multiple.changed.connect(on_from_changed); return !set_active; } + private bool update_from_account() throws Error { + int index = this.from_multiple.get_active(); + if (index < 0) + return false; + + assert(this.from_list.size > index); + + Geary.Account new_account = this.from_list.get(index).account; + from = this.from_list.get(index).from; + if (new_account == this.account) + return false; + + this.account = new_account; + this.load_signature.begin(null, (obj, res) => { + this.editor.update_signature(this.load_signature.end(res)); + }); + load_entry_completions.begin(); + + return true; + } + + private async string load_signature(Cancellable? cancellable = null) { + string account_sig = ""; + + if (this.account.information.use_email_signature) { + account_sig = account.information.email_signature ?? ""; + if (Geary.String.is_empty_or_whitespace(account_sig)) { + // No signature is specified in the settings, so use + // ~/.signature + File signature_file = File.new_for_path(Environment.get_home_dir()).get_child(".signature"); + try { + uint8[] data; + yield signature_file.load_contents_async(cancellable, out data, null); + account_sig = (string) data; + } catch (Error error) { + if (!(error is IOError.NOT_FOUND)) { + debug("Error reading signature file %s: %s", signature_file.get_path(), error.message); + } + } + } + + account_sig = (!Geary.String.is_empty_or_whitespace(account_sig)) + ? Geary.HTML.smart_escape(account_sig, true) + : ""; + } + + return account_sig; + } + + private async ComposerLinkPopover new_link_popover(ComposerLinkPopover.Type type, + string url) { + var selection_id = ""; + try { + selection_id = yield this.editor.save_selection(); + } catch (Error err) { + debug("Error saving selection: %s", err.message); + } + ComposerLinkPopover popover = new ComposerLinkPopover(type); + popover.set_link_url(url); + popover.closed.connect(() => { + this.editor.free_selection(selection_id); + Idle.add(() => { popover.destroy(); return Source.REMOVE; }); + }); + popover.link_activate.connect((link_uri) => { + this.editor.insert_link(popover.link_uri, selection_id); + }); + popover.link_delete.connect(() => { + this.editor.delete_link(); + }); + popover.link_open.connect(() => { link_activated(popover.link_uri); }); + return popover; + } + + private void on_command_state_changed(bool can_undo, bool can_redo) { + get_action(ACTION_UNDO).set_enabled(can_undo); + get_action(ACTION_REDO).set_enabled(can_redo); + } + + private void on_draft_id_changed() { + draft_id_changed(this.draft_manager.current_draft_id); + } + + private void on_draft_manager_fatal(Error err) { + this.draft_save_text = DRAFT_ERROR_TEXT; + } + + private void on_draft_state_changed() { + update_draft_state(); + } + private void on_from_changed() { bool changed = false; try { @@ -2427,47 +2155,154 @@ } catch (Error err) { debug("Unable to update From: Account in composer: %s", err.message); } - - // if the Geary.Account didn't change and the drafts folder is open(ing), do nothing more; - // need to check for the drafts folder because opening it in the case of multiple From: - // is handled here alone, so need to open it if not already - if (!changed && draft_manager != null) - return; - - open_draft_manager_async.begin(); - reset_draft_timer(); + + // if the Geary.Account didn't change and the drafts manager + // is open(ing), do nothing more; need to check for the drafts + // manager because opening it in the case of multiple From: is + // handled here alone, so if changed open it if not already + if (changed || this.draft_manager == null) { + reopen_draft_manager_async.begin(null); + } } - - private bool update_from_account() throws Error { - int index = from_multiple.get_active(); - if (index < 0) - return false; - - assert(from_list.size > index); - - Geary.Account new_account = from_list.get(index).account; - from = from_list.get(index).from; - sender = from_list.get(index).sender; - if (new_account == account) - return false; - - account = new_account; - set_entry_completions(); - - return true; + + private bool on_button_release(Gdk.Event event) { + // Show the link popover on mouse release (instead of press) + // so the user can still select text with a link in it, + // without the popover immediately appearing and raining on + // their text selection parade. + if (this.pointer_url != null && + this.actions.get_action_state(ACTION_COMPOSE_AS_HTML).get_boolean()) { + Gdk.EventButton? button = (Gdk.EventButton) event; + Gdk.Rectangle location = new Gdk.Rectangle(); + location.x = (int) button.x; + location.y = (int) button.y; + + this.new_link_popover.begin( + ComposerLinkPopover.Type.EXISTING_LINK, this.pointer_url, + (obj, res) => { + ComposerLinkPopover popover = this.new_link_popover.end(res); + popover.set_relative_to(this.editor); + popover.set_pointing_to(location); + popover.show(); + }); + } + return Gdk.EVENT_PROPAGATE; } - - private void set_entry_completions() { - if (contact_list_store != null && contact_list_store.contact_store == account.get_contact_store()) - return; - - contact_list_store = new ContactListStore(account.get_contact_store()); - - to_entry.completion = new ContactEntryCompletion(contact_list_store); - cc_entry.completion = new ContactEntryCompletion(contact_list_store); - bcc_entry.completion = new ContactEntryCompletion(contact_list_store); - reply_to_entry.completion = new ContactEntryCompletion(contact_list_store); + + private void on_cursor_context_changed(ComposerWebView.EditContext context) { + this.cursor_url = context.is_link ? context.link_url : null; + update_cursor_actions(); + + this.actions.change_action_state(ACTION_FONT_FAMILY, context.font_family); + + if (context.font_size < 11) + this.actions.change_action_state(ACTION_FONT_SIZE, "small"); + else if (context.font_size > 20) + this.actions.change_action_state(ACTION_FONT_SIZE, "large"); + else + this.actions.change_action_state(ACTION_FONT_SIZE, "medium"); } - -} + private void on_typing_attributes_changed() { + uint mask = this.editor.get_editor_state().get_typing_attributes(); + this.actions.change_action_state( + ACTION_BOLD, + (mask & WebKit.EditorTypingAttributes.BOLD) == WebKit.EditorTypingAttributes.BOLD + ); + this.actions.change_action_state( + ACTION_ITALIC, + (mask & WebKit.EditorTypingAttributes.ITALIC) == WebKit.EditorTypingAttributes.ITALIC + ); + this.actions.change_action_state( + ACTION_UNDERLINE, + (mask & WebKit.EditorTypingAttributes.UNDERLINE) == WebKit.EditorTypingAttributes.UNDERLINE + ); + this.actions.change_action_state( + ACTION_STRIKETHROUGH, + (mask & WebKit.EditorTypingAttributes.STRIKETHROUGH) == WebKit.EditorTypingAttributes.STRIKETHROUGH + ); + } + + private void on_add_attachment() { + AttachmentDialog dialog = new AttachmentDialog(this.container.top_window, this.config); + if (dialog.run() == Gtk.ResponseType.ACCEPT) { + dialog.hide(); + foreach (File file in dialog.get_files()) { + try { + add_attachment_part(file); + } catch (Error err) { + attachment_failed(err.message); + break; + } + } + + } + dialog.destroy(); + } + + private void on_pending_attachments() { + update_pending_attachments(AttachPending.ALL, true); + } + + private void on_insert_image(SimpleAction action, Variant? param) { + AttachmentDialog dialog = new AttachmentDialog(this.container.top_window, this.config); + Gtk.FileFilter filter = new Gtk.FileFilter(); + // Translators: This is the name of the file chooser filter + // when inserting an image in the composer. + filter.set_name(_("Images")); + filter.add_mime_type("image/*"); + dialog.add_filter(filter); + if (dialog.run() == Gtk.ResponseType.ACCEPT) { + dialog.hide(); + foreach (File file in dialog.get_files()) { + try { + string path = file.get_path(); + add_inline_part(file, path); + this.editor.insert_image( + ClientWebView.INTERNAL_URL_PREFIX + path + ); + } catch (Error err) { + attachment_failed(err.message); + break; + } + } + } + dialog.destroy(); + } + + private void on_insert_link(SimpleAction action, Variant? param) { + ComposerLinkPopover.Type type = ComposerLinkPopover.Type.NEW_LINK; + string url = "http://"; + if (this.cursor_url != null) { + type = ComposerLinkPopover.Type.EXISTING_LINK; + url = this.cursor_url; + } + + this.new_link_popover.begin(type, url, (obj, res) => { + ComposerLinkPopover popover = this.new_link_popover.end(res); + + // We have to disconnect then reconnect the selection + // changed signal for the duration of the popover + // being active since if the user selects the text in + // the URL entry, then the editor will lose its + // selection, the inset link action will become + // disabled, and the popover will disappear + this.editor.selection_changed.disconnect(on_selection_changed); + popover.closed.connect(() => { + this.editor.selection_changed.connect(on_selection_changed); + }); + + popover.set_relative_to(this.insert_link_button); + popover.show(); + }); + } + + private void on_open_inspector(SimpleAction action, Variant? param) { + this.editor.get_inspector().show(); + } + + private void on_selection_changed(bool has_selection) { + update_cursor_actions(); + } + +} diff -Nru geary-0.11.4/src/client/composer/composer-window.vala geary-0.12.0/src/client/composer/composer-window.vala --- geary-0.11.4/src/client/composer/composer-window.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/composer/composer-window.vala 2017-10-02 11:25:21.000000000 +0000 @@ -4,55 +4,76 @@ * (version 2.1 or later). See the COPYING file in this distribution. */ -// Window for sending messages. -public class ComposerWindow : Gtk.Window, ComposerContainer { +/** + * A ComposerWindow is a ComposerContainer that is used to compose mails in a separate window + * (i.e. detached) of its own. + */ +public class ComposerWindow : Gtk.ApplicationWindow, ComposerContainer { + + public Gtk.ApplicationWindow top_window { + get { return this; } + } + + internal ComposerWidget composer { get; set; } + + protected Gee.MultiMap? old_accelerators { get; set; } private bool closing = false; - + + public ComposerWindow(ComposerWidget composer) { Object(type: Gtk.WindowType.TOPLEVEL); - - add(composer); - - if (!GearyApplication.instance.is_running_unity) { - composer.header.show_close_button = true; - composer.free_header(); - set_titlebar(composer.header); - composer.bind_property("window-title", composer.header, "title", - BindingFlags.SYNC_CREATE); - } else { + this.composer = composer; + + // Make sure it gets added to the GtkApplication, to get the window-specific + // composer actions to work properly. + GearyApplication.instance.add_window(this); + + // XXX Bug 764622 + set_property("name", "GearyComposerWindow"); + + add(this.composer); + focus_in_event.connect(on_focus_in); + focus_out_event.connect(on_focus_out); + + if (composer.config.desktop_environment == Configuration.DesktopEnvironment.UNITY) { composer.embed_header(); composer.bind_property("window-title", this, "title", BindingFlags.SYNC_CREATE); + } else { + this.composer.header.show_close_button = true; + this.composer.free_header(); + set_titlebar(this.composer.header); + composer.bind_property("window-title", this.composer.header, "title", + BindingFlags.SYNC_CREATE); } - - add_accel_group(composer.ui.get_accel_group()); + show(); set_position(Gtk.WindowPosition.CENTER); } - - public Gtk.Window top_window { - get { return this; } - } - + public override void show() { set_default_size(680, 600); base.show(); } - + public void close_container() { - closing = true; + on_focus_out(); + this.composer.editor.focus_in_event.disconnect(on_focus_in); + this.composer.editor.focus_out_event.disconnect(on_focus_out); + + this.closing = true; destroy(); } - + public override bool delete_event(Gdk.EventAny event) { - return !(closing || + return !(this.closing || ((ComposerWidget) get_child()).should_close() == ComposerWidget.CloseStatus.DO_CLOSE); } - + public void vanish() { hide(); } - + public void remove_composer() { warning("Detached composer received remove"); } diff -Nru geary-0.11.4/src/client/composer/contact-entry-completion.vala geary-0.12.0/src/client/composer/contact-entry-completion.vala --- geary-0.11.4/src/client/composer/contact-entry-completion.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/composer/contact-entry-completion.vala 2017-10-02 11:25:21.000000000 +0000 @@ -5,15 +5,38 @@ */ public class ContactEntryCompletion : Gtk.EntryCompletion { + + + private static bool completion_match_func(Gtk.EntryCompletion completion, string key, Gtk.TreeIter iter) { + ContactEntryCompletion contacts = (ContactEntryCompletion) completion; + + // We don't use the provided key, because the user can enter multiple addresses. + int current_address_index; + string current_address_key; + contacts.get_addresses(completion, out current_address_index, out current_address_key); + + Geary.Contact? contact = contacts.list_store.get_contact(iter); + if (contact == null) + return false; + + string highlighted_result; + if (!contacts.match_prefix_contact(current_address_key, contact, out highlighted_result)) + return false; + + contacts.list_store.set_highlighted_result(iter, highlighted_result, current_address_key); + + return true; + } + private ContactListStore list_store; private Gtk.TreeIter? last_iter = null; - + public ContactEntryCompletion(ContactListStore list_store) { this.list_store = list_store; - + model = list_store; - set_match_func(completion_match_func); - + set_match_func(ContactEntryCompletion.completion_match_func); + Gtk.CellRendererText text_renderer = new Gtk.CellRendererText(); pack_start(text_renderer, true); add_attribute(text_renderer, "markup", ContactListStore.Column.CONTACT_MARKUP_NAME); @@ -65,25 +88,6 @@ last_iter = null; } - private bool completion_match_func(Gtk.EntryCompletion completion, string key, Gtk.TreeIter iter) { - // We don't use the provided key, because the user can enter multiple addresses. - int current_address_index; - string current_address_key; - get_addresses(completion, out current_address_index, out current_address_key); - - Geary.Contact? contact = list_store.get_contact(iter); - if (contact == null) - return false; - - string highlighted_result; - if (!match_prefix_contact(current_address_key, contact, out highlighted_result)) - return false; - - list_store.set_highlighted_result(iter, highlighted_result, current_address_key); - - return true; - } - private Gee.List get_addresses(Gtk.EntryCompletion completion, out int current_address_index = null, out string current_address_key = null, out string current_address_remainder = null) { diff -Nru geary-0.11.4/src/client/composer/contact-list-store.vala geary-0.12.0/src/client/composer/contact-list-store.vala --- geary-0.11.4/src/client/composer/contact-list-store.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/composer/contact-list-store.vala 2017-10-02 11:25:21.000000000 +0000 @@ -5,9 +5,53 @@ */ public class ContactListStore : Gtk.ListStore { + // Minimum visibility for the contact to appear in autocompletion. private const Geary.ContactImportance CONTACT_VISIBILITY_THRESHOLD = Geary.ContactImportance.TO_TO; - + + // Batch size for loading contacts asynchronously + private uint LOAD_BATCH_SIZE = 4096; + + + private static int sort_func(Gtk.TreeModel model, Gtk.TreeIter aiter, Gtk.TreeIter biter) { + // Order by importance, then by real name, then by email. + GLib.Value avalue, bvalue; + model.get_value(aiter, Column.CONTACT_OBJECT, out avalue); + model.get_value(biter, Column.CONTACT_OBJECT, out bvalue); + Geary.Contact? acontact = avalue.get_object() as Geary.Contact; + Geary.Contact? bcontact = bvalue.get_object() as Geary.Contact; + + // Contacts can be null if the sort func is called between TreeModel.append and + // TreeModel.set. + if (acontact == bcontact) + return 0; + if (acontact == null && bcontact != null) + return -1; + if (acontact != null && bcontact == null) + return 1; + + // First order by importance. + if (acontact.highest_importance > bcontact.highest_importance) + return -1; + if (acontact.highest_importance < bcontact.highest_importance) + return 1; + + // Then order by real name. + string? anormalized_real_name = acontact.real_name == null ? null : + acontact.real_name.normalize().casefold(); + string? bnormalized_real_name = bcontact.real_name == null ? null : + bcontact.real_name.normalize().casefold(); + // strcmp correctly marks 'null' as first in lexigraphic order, so we don't need to + // special-case it. + int result = strcmp(anormalized_real_name, bnormalized_real_name); + if (result != 0) + return result; + + // Finally, order by email. + return strcmp(acontact.normalized_email, bcontact.normalized_email); + } + + public enum Column { CONTACT_OBJECT, CONTACT_MARKUP_NAME, @@ -26,25 +70,35 @@ public ContactListStore(Geary.ContactStore contact_store) { set_column_types(Column.get_types()); - this.contact_store = contact_store; - - foreach (Geary.Contact contact in contact_store.contacts) - add_contact(contact); - - // set sort function *after* adding all the contacts - set_sort_func(Column.CONTACT_OBJECT, sort_func); - set_sort_column_id(Column.CONTACT_OBJECT, Gtk.SortType.ASCENDING); - contact_store.contact_added.connect(on_contact_added); contact_store.contact_updated.connect(on_contact_updated); } - + ~ContactListStore() { - contact_store.contact_added.disconnect(on_contact_added); - contact_store.contact_updated.disconnect(on_contact_updated); + this.contact_store.contact_added.disconnect(on_contact_added); + this.contact_store.contact_updated.disconnect(on_contact_updated); } - + + /** + * Loads contacts from the model's contact store. + */ + public async void load() { + uint count = 0; + foreach (Geary.Contact contact in this.contact_store.contacts) { + add_contact(contact); + count++; + if (count % LOAD_BATCH_SIZE == 0) { + Idle.add(load.callback); + yield; + } + } + + // set sort function *after* adding all the contacts + set_sort_func(Column.CONTACT_OBJECT, ContactListStore.sort_func); + set_sort_column_id(Column.CONTACT_OBJECT, Gtk.SortType.ASCENDING); + } + public Geary.Contact get_contact(Gtk.TreeIter iter) { GLib.Value contact_value; get_value(iter, Column.CONTACT_OBJECT, out contact_value); @@ -73,20 +127,19 @@ set(iter, Column.CONTACT_MARKUP_NAME, highlighted_result, -1); } } - - private void add_contact(Geary.Contact contact) { - if (contact.highest_importance < CONTACT_VISIBILITY_THRESHOLD) - return; - - string full_address = contact.get_rfc822_address().to_rfc822_string(); - Gtk.TreeIter iter; - append(out iter); - set(iter, - Column.CONTACT_OBJECT, contact, - Column.CONTACT_MARKUP_NAME, Markup.escape_text(full_address), - Column.PRIOR_KEYS, new Gee.HashSet()); + + private inline void add_contact(Geary.Contact contact) { + if (contact.highest_importance >= CONTACT_VISIBILITY_THRESHOLD) { + string full_address = contact.get_rfc822_address().to_rfc822_string(); + Gtk.TreeIter iter; + append(out iter); + set(iter, + Column.CONTACT_OBJECT, contact, + Column.CONTACT_MARKUP_NAME, Markup.escape_text(full_address), + Column.PRIOR_KEYS, new Gee.HashSet()); + } } - + private void update_contact(Geary.Contact updated_contact) { Gtk.TreeIter iter; if (!get_iter_first(out iter)) @@ -111,43 +164,6 @@ private void on_contact_updated(Geary.Contact contact) { update_contact(contact); } - - private int sort_func(Gtk.TreeModel model, Gtk.TreeIter aiter, Gtk.TreeIter biter) { - // Order by importance, then by real name, then by email. - GLib.Value avalue, bvalue; - model.get_value(aiter, Column.CONTACT_OBJECT, out avalue); - model.get_value(biter, Column.CONTACT_OBJECT, out bvalue); - Geary.Contact? acontact = avalue.get_object() as Geary.Contact; - Geary.Contact? bcontact = bvalue.get_object() as Geary.Contact; - - // Contacts can be null if the sort func is called between TreeModel.append and - // TreeModel.set. - if (acontact == bcontact) - return 0; - if (acontact == null && bcontact != null) - return -1; - if (acontact != null && bcontact == null) - return 1; - - // First order by importance. - if (acontact.highest_importance > bcontact.highest_importance) - return -1; - if (acontact.highest_importance < bcontact.highest_importance) - return 1; - - // Then order by real name. - string? anormalized_real_name = acontact.real_name == null ? null : - acontact.real_name.normalize().casefold(); - string? bnormalized_real_name = bcontact.real_name == null ? null : - bcontact.real_name.normalize().casefold(); - // strcmp correctly marks 'null' as first in lexigraphic order, so we don't need to - // special-case it. - int result = strcmp(anormalized_real_name, bnormalized_real_name); - if (result != 0) - return result; - - // Finally, order by email. - return strcmp(acontact.normalized_email, bcontact.normalized_email); - } + } diff -Nru geary-0.11.4/src/client/composer/email-entry.vala geary-0.12.0/src/client/composer/email-entry.vala --- geary-0.11.4/src/client/composer/email-entry.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/composer/email-entry.vala 2017-10-02 11:25:21.000000000 +0000 @@ -4,10 +4,13 @@ * (version 2.1 or later). See the COPYING file in this distribution. */ -// Displays a dialog for collecting the user's login data. +// A custom entry for e-mail addresses public class EmailEntry : Gtk.Entry { - public bool valid_or_empty { get; set; default = true; } + // Whether this entry contains a valid email address + public bool valid { get; set; default = false; } + public bool empty { get; set; default = true; } + public bool modified = false; // null or valid addresses @@ -32,6 +35,8 @@ text = (addresses == null) ? "" : addresses.to_rfc822_string(); updating = false; }); + + show(); } private void on_changed() { @@ -39,12 +44,16 @@ return; modified = true; - ((ContactEntryCompletion) get_completion()).reset_selection(); + ContactEntryCompletion? completion = get_completion() as ContactEntryCompletion; + if (completion != null) { + completion.reset_selection(); + } + if (Geary.String.is_empty(text.strip())) { updating = true; addresses = null; updating = false; - valid_or_empty = true; + valid = false; empty = true; return; } @@ -55,8 +64,8 @@ } private void validate_addresses() { - if (addresses.size == 0) { - valid_or_empty = true; + if (addresses == null || addresses.size == 0) { + valid = false; empty = true; return; } @@ -64,11 +73,11 @@ foreach (Geary.RFC822.MailboxAddress address in addresses) { if (!address.is_valid()) { - valid_or_empty = false; + valid = false; return; } } - valid_or_empty = true; + valid = true; } private bool on_key_press(Gtk.Widget widget, Gdk.EventKey event) { diff -Nru geary-0.11.4/src/client/composer/scrollable-overlay.vala geary-0.12.0/src/client/composer/scrollable-overlay.vala --- geary-0.11.4/src/client/composer/scrollable-overlay.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/composer/scrollable-overlay.vala 1970-01-01 00:00:00.000000000 +0000 @@ -1,48 +0,0 @@ -/* Copyright 2016 Software Freedom Conservancy Inc. - * - * This software is licensed under the GNU Lesser General Public License - * (version 2.1 or later). See the COPYING file in this distribution. - */ - -public class ScrollableOverlay : Gtk.Overlay, Gtk.Scrollable { - - private Gtk.Scrollable main_child; - - public Gtk.Adjustment hadjustment { get; set; } - - public Gtk.Adjustment vadjustment { get; set; } - - public Gtk.ScrollablePolicy hscroll_policy { get; set; } - - public Gtk.ScrollablePolicy vscroll_policy { get; set; } - - public ScrollableOverlay(Gtk.Scrollable main_child) { - this.main_child = main_child; - add((Gtk.Widget) main_child); - - bind_property("hadjustment", main_child, "hadjustment", - BindingFlags.BIDIRECTIONAL | BindingFlags.SYNC_CREATE); - bind_property("vadjustment", main_child, "vadjustment", - BindingFlags.BIDIRECTIONAL | BindingFlags.SYNC_CREATE); - bind_property("hscroll_policy", main_child, "hscroll_policy", - BindingFlags.BIDIRECTIONAL | BindingFlags.SYNC_CREATE); - bind_property("vscroll_policy", main_child, "vscroll_policy", - BindingFlags.BIDIRECTIONAL | BindingFlags.SYNC_CREATE); - - realize.connect(() => { - vadjustment.value_changed.connect(on_scroll); - hadjustment.value_changed.connect(on_scroll); - }); - get_child_position.connect(on_child_position); - } - - private bool on_child_position(Gtk.Widget widget, Gdk.Rectangle allocation) { - return ((ComposerEmbed) widget).set_position(ref allocation, hadjustment.value, - vadjustment.value, get_allocated_height()); - } - - private void on_scroll() { - queue_resize(); - } -} - diff -Nru geary-0.11.4/src/client/composer/spell-check-popover.vala geary-0.12.0/src/client/composer/spell-check-popover.vala --- geary-0.11.4/src/client/composer/spell-check-popover.vala 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/src/client/composer/spell-check-popover.vala 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,316 @@ +/* Copyright 2016 Software Freedom Conservancy Inc. + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +public class SpellCheckPopover { + + /** + * This signal is emitted then the selection of rows changes. + * + * @param active_langs The new set of active dictionaries after the + * selection has changed. + */ + public signal void selection_changed(string[] active_langs); + + private Gtk.Popover? popover = null; + private GLib.GenericSet selected_rows; + private bool is_expanded = false; + private Gtk.ListBox langs_list; + private Gtk.SearchEntry search_box; + private Gtk.ScrolledWindow view; + private Gtk.Box content; + private Configuration config; + + private enum SpellCheckStatus { + INACTIVE, + ACTIVE + } + + private class SpellCheckLangRow : Gtk.ListBoxRow { + + /** + * This signal is emitted then the user activates the row. + * + * @param lang_code The language code associated to this row (such as en_US). + * @param status true if the associated dictionary should be enabled, false if it should be + * disabled. + */ + public signal void toggled (string lang_code, bool status); + + /** + * @brief Signal when the visibility has changed. + */ + public signal void visibility_changed (); + + private string lang_code; + private string lang_name; + private string country_name; + private bool is_lang_visible; + private Gtk.Image active_image; + private Gtk.Button remove_button; + private SpellCheckStatus lang_active = SpellCheckStatus.INACTIVE; + private Configuration config; + + public SpellCheckLangRow (string lang_code, Configuration config) { + this.lang_code = lang_code; + this.config = config; + + Gtk.Box box = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 6); + + lang_name = International.language_name_from_locale(lang_code); + country_name = International.country_name_from_locale(lang_code); + + string label_text = lang_name; + if (country_name != null) + label_text += " (" + country_name + ")"; + Gtk.Label label = new Gtk.Label(label_text); + GtkUtil.set_label_xalign(label, 0.0f); + label.set_size_request(-1, 24); + + box.pack_start(label, false, false); + + Gtk.IconSize sz = Gtk.IconSize.SMALL_TOOLBAR; + active_image = new Gtk.Image.from_icon_name("object-select-symbolic", sz); + remove_button = new Gtk.Button(); + remove_button.set_relief(Gtk.ReliefStyle.NONE); + box.pack_start(active_image, false, false, 6); + box.pack_start(remove_button, true, true); + remove_button.halign = Gtk.Align.END; // Make the button stay at the right end of the screen + + remove_button.clicked.connect(on_remove_clicked); + + is_lang_visible = false; + foreach (string visible_lang in this.config.spell_check_visible_languages) { + if (visible_lang == lang_code) + is_lang_visible = true; + } + + foreach (string active_lang in this.config.spell_check_languages) { + if (active_lang == lang_code) + lang_active = SpellCheckStatus.ACTIVE; + } + + update_images(); + add(box); + } + + public bool is_lang_active() { + return lang_active == SpellCheckStatus.ACTIVE; + } + + private void update_images() { + Gtk.IconSize sz = Gtk.IconSize.SMALL_TOOLBAR; + + switch (lang_active) { + case SpellCheckStatus.ACTIVE: + active_image.set_from_icon_name("object-select-symbolic", sz); + break; + case SpellCheckStatus.INACTIVE: + active_image.clear(); + break; + } + + if (is_lang_visible) { + remove_button.set_image(new Gtk.Image.from_icon_name("list-remove-symbolic", sz)); + remove_button.set_tooltip_text(_("Remove this language from the preferred list")); + } + else { + remove_button.set_image(new Gtk.Image.from_icon_name("list-add-symbolic", sz)); + remove_button.set_tooltip_text(_("Add this language to the preferred list")); + } + } + + private void on_remove_clicked() { + is_lang_visible = ! is_lang_visible; + + update_images(); + + if (!is_lang_visible && lang_active == SpellCheckStatus.ACTIVE) + set_lang_active(SpellCheckStatus.INACTIVE); + + if (is_lang_visible) { + string[] visible_langs = this.config.spell_check_visible_languages; + visible_langs += lang_code; + this.config.spell_check_visible_languages = visible_langs; + } + else { + string[] visible_langs = {}; + foreach (string lang in this.config.spell_check_visible_languages) { + if (lang != lang_code) + visible_langs += lang; + } + this.config.spell_check_visible_languages = visible_langs; + } + + visibility_changed(); + } + + public bool match_filter(string filter) { + string filter_down = filter.down(); + return ((lang_name != null ? filter_down in lang_name.down() : false) || + (country_name != null ? filter_down in country_name.down() : false)); + } + + private void set_lang_active(SpellCheckStatus active) { + lang_active = active; + + switch (active) { + case SpellCheckStatus.ACTIVE: + // If the lang is not visible make it visible now + if (!is_lang_visible) { + string[] visible_langs = this.config.spell_check_visible_languages; + visible_langs += lang_code; + this.config.spell_check_visible_languages = visible_langs; + is_lang_visible = true; + } + break; + case SpellCheckStatus.INACTIVE: + break; + } + + update_images(); + this.toggled(lang_code, active == SpellCheckStatus.ACTIVE); + } + + public void handle_activation(SpellCheckPopover spell_check_popover) { + // Make sure that we do not enable the language when the user is just + // trying to remove it from the list. + if (!visible) + return; + + switch (lang_active) { + case SpellCheckStatus.ACTIVE: + set_lang_active(SpellCheckStatus.INACTIVE); + break; + case SpellCheckStatus.INACTIVE: + set_lang_active(SpellCheckStatus.ACTIVE); + break; + } + } + + public bool is_row_visible(bool is_expanded) { + return is_lang_visible || is_expanded; + } + } + + public SpellCheckPopover(Gtk.Widget button, Configuration config) { + this.popover = new Gtk.Popover(button); + this.config = config; + this.selected_rows = new GLib.GenericSet(GLib.str_hash, GLib.str_equal); + setup_popover(); + } + + private bool filter_function (Gtk.ListBoxRow row) { + string text = search_box.get_text(); + SpellCheckLangRow r = row as SpellCheckLangRow; + return (r.is_row_visible(is_expanded) && r.match_filter(text)); + } + + private void setup_popover() { + // We populate the popover with the list of languages that the user wants to see + string[] languages = International.get_available_dictionaries(); + + content = new Gtk.Box(Gtk.Orientation.VERTICAL, 6); + search_box = new Gtk.SearchEntry(); + search_box.set_placeholder_text(_("Search for more languages")); + search_box.changed.connect(on_search_box_changed); + search_box.grab_focus.connect(on_search_box_grab_focus); + content.pack_start(search_box, false, true); + + view = new Gtk.ScrolledWindow(null, null); + view.set_shadow_type(Gtk.ShadowType.IN); + view.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC); + + langs_list = new Gtk.ListBox(); + langs_list.set_selection_mode(Gtk.SelectionMode.NONE); + foreach (string lang in languages) { + SpellCheckLangRow row = new SpellCheckLangRow(lang, this.config); + langs_list.add(row); + + if (row.is_lang_active()) + selected_rows.add(lang); + + row.toggled.connect(this.on_row_toggled); + row.visibility_changed.connect(this.on_visibility_changed); + } + langs_list.row_activated.connect(on_row_activated); + view.add(langs_list); + + content.pack_start(view, true, true); + + langs_list.set_filter_func(this.filter_function); + + view.set_size_request(350, 300); + popover.add(content); + + // Make sure that the search box does not get the focus first. We want it to have it only + // if the user wants to perform an extended search. + content.set_focus_child(view); + content.set_margin_start(6); + content.set_margin_end(6); + content.set_margin_top(6); + content.set_margin_bottom(6); + } + + private void on_row_activated(Gtk.ListBoxRow row) { + SpellCheckLangRow r = row as SpellCheckLangRow; + r.handle_activation(this); + // Make sure that we update the visible languages based on the + // possibly updated is_lang_visible_properties. + langs_list.invalidate_filter(); + } + + private void on_search_box_changed() { + langs_list.invalidate_filter(); + } + + private void on_search_box_grab_focus() { + set_expanded(true); + } + + private void set_expanded(bool expanded) { + is_expanded = expanded; + langs_list.invalidate_filter(); + } + + /* + * Toggle the visibility of the popover, and return the final status. + * + * @return true if the Popover is visible after the call, false otherwise. + */ + public bool toggle() { + if (popover.get_visible()) { + popover.hide(); + } + else { + // Make sure that when the box is shown the list is not expanded anymore. + search_box.set_text(""); + content.set_focus_child(view); + is_expanded = false; + langs_list.invalidate_filter(); + + popover.show_all(); + } + + return popover.get_visible(); + } + + private void on_row_toggled(string lang_code, bool active) { + if (active) + selected_rows.add(lang_code); + else + selected_rows.remove(lang_code); + + // Signal that the selection has changed + string[] active_langs = {}; + selected_rows.foreach((lang) => active_langs += lang); + this.selection_changed(active_langs); + } + + private void on_visibility_changed() { + langs_list.invalidate_filter(); + } + +} diff -Nru geary-0.11.4/src/client/composer/webview-edit-fixer.vala geary-0.12.0/src/client/composer/webview-edit-fixer.vala --- geary-0.11.4/src/client/composer/webview-edit-fixer.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/composer/webview-edit-fixer.vala 1970-01-01 00:00:00.000000000 +0000 @@ -1,317 +0,0 @@ -/* Copyright 2016 Software Freedom Conservancy Inc. - * - * This software is licensed under the GNU Lesser General Public License - * (version 2.1 or later). See the COPYING file in this distribution. - */ - -/** - * Class to inject the correct blockquote-editing behavior into a WebKit.WebView. - */ -public class WebViewEditFixer { - // HTML node names - private const string BLOCKQUOTE_NAME = "BLOCKQUOTE"; - private const string BODY_NAME = "BODY"; - private const string BR_NAME = "BR"; - private const string DIV_NAME = "DIV"; - private const string DOCUMENT_NAME = "#document"; - private const string SPAN_NAME = "SPAN"; - private const string TEXT_NAME = "#text"; - - // WebKit-specific node ids - private const string EDITING_DELETE_CONTAINER_ID = "WebKit-Editing-Delete-Container"; - - private WebKit.WebView web_view; - private bool is_shift_down = false; - - public WebViewEditFixer(WebKit.WebView web_view) { - this.web_view = web_view; - this.web_view.should_insert_text.connect(on_should_insert_text); - this.web_view.key_press_event.connect(on_key_press_event); - } - - ~WebViewEditFixer() { - web_view.should_insert_text.disconnect(on_should_insert_text); - web_view.key_press_event.disconnect(on_key_press_event); - } - - private WebKit.DOM.Document get_document() { - return web_view.get_dom_document(); - } - - // We really want to examine Gdk.Keymap.get_default().get_modifier_state(), instead of storing - // whether the shift key is down at each keypress, but it isn't yet available in the Vala - // bindings. - private bool on_key_press_event (Gdk.EventKey event) { - is_shift_down = (event.state & Gdk.ModifierType.SHIFT_MASK) != 0; - return false; - } - - private bool on_should_insert_text(string text_to_insert, WebKit.DOM.Range selected_range, - WebKit.InsertAction insert_action) { - // We only want to intercept this event when inserting a newline. - if (text_to_insert != "\n") - return true; - - try { - WebKit.DOM.Node start_container = selected_range.get_start_container(); - // If we are not inside a blockquote, the default behavior is fine. - if (!has_blockquote_in_ancestry(start_container)) - return true; - - selected_range.delete_contents(); - - // If the user is holding down shift, we simply insert a linebreak without splitting- - // up the DOM (recursively or otherwise). - long start_offset = selected_range.get_start_offset(); - if (is_shift_down) - insert_linebreak_at_current_level(start_container, start_offset); - else - insert_linebreak_at_highest_level(start_container, start_offset); - - return false; - } catch (Error err) { - debug("Error in on_should_insert_text: '%s'", err.message); - return false; - } - } - - // Checks whether node is a blockquote or has one among its ancestors. - private bool has_blockquote_in_ancestry(WebKit.DOM.Node node) { - WebKit.DOM.Node? current = node; - while (current != null && current.node_name != DOCUMENT_NAME) { - if (current.node_name == BLOCKQUOTE_NAME) - return true; - - current = current.parent_node; - } - - return false; - } - - // Insert a linebreak without splitting up the DOM (recursively or otherwise). This method is - // used instead of do_split when the user is holding down shift. - private void insert_linebreak_at_current_level(WebKit.DOM.Node node, long offset) { - try { - WebKit.DOM.Element br = get_document().create_element(BR_NAME); - WebKit.DOM.Node parent = node.parent_node; - - if (node.node_name == TEXT_NAME) { - WebKit.DOM.Node? left, right; - get_split_text(node, offset, out left, out right); - if (left != null) - parent.insert_before(left, node); - parent.insert_before(br, node); - if (right != null) - parent.insert_before(right, node); - parent.remove_child(node); - - set_focus(right ?? br, right == null ? 1 : 0); - } else { - WebKit.DOM.NodeList children = node.child_nodes; - if (offset < children.length) - node.insert_before(br, children.item(offset)); - else - node.append_child(br); - - set_focus(br, 1); - } - } catch (Error err) { - debug("Error in insert_linebreak_at_current_level: '%s'", err.message); - } - } - - // Splits a text node into two halfs, with the left half containing the next before offset, - // and the right node containing the text after offset. If either node is empty, it will be - // null. - private void get_split_text(WebKit.DOM.Node node, long offset, out WebKit.DOM.Node? left, - out WebKit.DOM.Node? right) { - WebKit.DOM.Document document = get_document(); - string node_value = node.node_value; - - // Offset is in unicode characters, but index is in bytes. We need to get the corresponding - // byte index for the given offset. - int char_count = node_value.char_count(); - int index = offset > char_count ? node_value.length : node_value.index_of_nth_char(offset); - - left = offset > 0 ? document.create_text_node(node_value[0:index]) : null; - right = offset < char_count ? document.create_text_node(node_value[index:node_value.length]) : null; - } - - // Focuses the cursor at the specified position. - private void set_focus(WebKit.DOM.Node focus_node, long focus_offset = 0) { - try { - WebKit.DOM.DOMSelection selection = get_document().default_view.get_selection(); - selection.set_position(focus_node, focus_offset); - } catch (Error err) { - debug("Error in set_focus: '%s'", err.message); - } - - scroll_into_view_if_needed(focus_node); - } - - private void scroll_into_view_if_needed(WebKit.DOM.Node node) { - if (node.node_value.length > 0 && node is WebKit.DOM.Element) { - ((WebKit.DOM.Element)node).scroll_into_view_if_needed(false); - return; - } - - WebKit.DOM.Node? parent = node.parent_node; - if (parent == null) - return; - - // WebKit.DOM.Element.scroll_into_view_if_needed does not work if the element has no - // visual component. So we create a placeholder element, scroll to that, then remove - // the placeholder. - try { - WebKit.DOM.Document document = get_document(); - WebKit.DOM.Element placeholder = document.create_element(SPAN_NAME); - WebKit.DOM.Text placeholder_text = document.create_text_node("placeholder"); - placeholder.append_child(placeholder_text); - parent.insert_before(placeholder, node); - placeholder.scroll_into_view_if_needed(false); - parent.remove_child(placeholder); - } catch (Error err) { - debug("Error in scroll_into_view_if_needed: '%s'", err.message); - } - } - - // Recursively splits node, with 'offset' as the divider between the two halfs. Continue - // climbing up the DOM tree, splitting as we go, until there are no more blockquotes in our - // ancestry. When we finish recursing, insert a BR between the split nodes at the highest level - // of the tree, and focus the BR. - private void insert_linebreak_at_highest_level(WebKit.DOM.Node node, long offset) { - WebKit.DOM.Node parent = node.parent_node; - WebKit.DOM.Node? left, right; - get_split(node, offset, out left, out right); - - try { - if (has_blockquote_in_ancestry(parent)) { - // Recursive case. Don't insert line break, and don't set focus. - long split_offset = get_offset(parent, node); - if (left != null) { - parent.insert_before(left, node); - split_offset++; - } - if (right != null) - parent.insert_before(right, node); - parent.remove_child(node); - - insert_linebreak_at_highest_level(parent, split_offset); - } else { - // Base case. Insert a line break in the middle, and set the cursor focus. - if (left != null) - parent.insert_before(left, node); - WebKit.DOM.Element br = get_document().create_element(BR_NAME); - parent.insert_before(br, node); - if (right != null) - parent.insert_before(right, node); - parent.remove_child(node); - - // Set the cursor focus. - set_focus(br); - } - } catch (Error err) { - debug("Error in do_split: '%s'", err.message); - } - } - - // Splits node into two halfs, one containing the children to the left of offset, the other - // containing the children to the right of offset. If either of the split nodes has no children - // that are neither whitespace nor a line break, null is returned for that split node. - private void get_split(WebKit.DOM.Node node, long offset, out WebKit.DOM.Node? left, - out WebKit.DOM.Node? right) { - string node_name = node.node_name; - - if (node_name == TEXT_NAME) { - get_split_text(node, offset, out left, out right); - return; - } - - left = node.clone_node(false); - right = node.clone_node(false); - - // Move the first $offset children to the left node. - for (long i = 0; i < offset; i++) - move_first_child(node, left); - - // Move the remaining children to the right node. - while (node.child_nodes.length > 0) { - // If anything goes wrong, break out of the loop. - if (!move_first_child(node, right)) - break; - } - - if (!is_substantial(left)) - left = null; - if (!is_substantial(right)) - right = null; - } - - // Gets the number of children before child in parent's children. Child must be among parent's - // children. - private long get_offset(WebKit.DOM.Node parent, WebKit.DOM.Node child) { - long offset = 0; - WebKit.DOM.Node current = parent.child_nodes.item(offset); - while (offset < parent.child_nodes.length) { - if (current == null) - break; - if (current.is_same_node(child)) - return offset; - - offset++; - current = parent.child_nodes.item(offset); - } - - // Hopefully, this should never happen. But if it does, better to split in a wrong location - // than to crash. - return 0; - } - - // Removes the first child of source and appends it to destination. - private bool move_first_child(WebKit.DOM.Node source, WebKit.DOM.Node destination) { - try { - WebKit.DOM.Node temp = source.child_nodes.item(0); - if (is_editing_delete_container(temp)) { - source.remove_child(temp); - } else { - // This will remove temp from source - destination.append_child(temp); - } - } catch (Error err) { - debug("Error in move_first_child: '%s'", err.message); - return false; - } - - return true; - } - - // There is a special node that webkit attaches to the BLOCKQUOTE in focus. We want to ignore - // this node, as it is transient. - private bool is_editing_delete_container(WebKit.DOM.Node node) { - if (!node.has_attributes()) - return false; - - WebKit.DOM.NamedNodeMap attributes = node.get_attributes(); - WebKit.DOM.Node? id = attributes.get_named_item("id"); - return id != null && id.node_value == EDITING_DELETE_CONTAINER_ID; - } - - // True if node has at least one child that is not a BR, a #text consisting entirely of - // whitespace, or an unsubstantial div. - private bool is_substantial(WebKit.DOM.Node node) { - WebKit.DOM.Node child; - for (ulong i = 0; i < node.child_nodes.length; i++) { - child = node.child_nodes.item(i); - if (child.node_name == BR_NAME) - continue; - if (child.node_name == TEXT_NAME && Geary.String.is_empty_or_whitespace(child.node_value)) - continue; - if (child.node_name == DIV_NAME && !is_substantial(child)) - continue; - - return true; - } - - return false; - } -} diff -Nru geary-0.11.4/src/client/conversation-list/conversation-list-cell-renderer.vala geary-0.12.0/src/client/conversation-list/conversation-list-cell-renderer.vala --- geary-0.11.4/src/client/conversation-list/conversation-list-cell-renderer.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/conversation-list/conversation-list-cell-renderer.vala 2017-10-02 11:25:21.000000000 +0000 @@ -13,15 +13,26 @@ public ConversationListCellRenderer() { } - - public override void get_size(Gtk.Widget widget, Gdk.Rectangle? cell_area, out int x_offset, - out int y_offset, out int width, out int height) { + + public override void get_preferred_height(Gtk.Widget widget, + out int minimum_size, + out int natural_size) { if (example_data == null) style_changed(widget); - - example_data.get_size(widget, cell_area, out x_offset, out y_offset, out width, out height); + + minimum_size = natural_size = example_data.get_height(); } - + + public override void get_preferred_width(Gtk.Widget widget, + out int minimum_size, + out int natural_size) { + // Set width to 1 (rather than 0) to work around certain + // themes that cause the conversation list to be shown as + // "squished": + // https://bugzilla.gnome.org/show_bug.cgi?id=713954 + minimum_size = natural_size = 1; + } + public override void render(Cairo.Context ctx, Gtk.Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gtk.CellRendererState flags) { if (data != null) @@ -42,5 +53,14 @@ public static void set_hover_selected(bool hover) { hover_selected = hover; } -} + // This is implemented because it's required; ignore it and look at get_preferred_height() instead. + public override void get_size(Gtk.Widget widget, Gdk.Rectangle? cell_area, out int x_offset, + out int y_offset, out int width, out int height) { + // Set values to avoid compiler warning. + x_offset = 0; + y_offset = 0; + width = 0; + height = 0; + } +} diff -Nru geary-0.11.4/src/client/conversation-list/conversation-list-store.vala geary-0.12.0/src/client/conversation-list/conversation-list-store.vala --- geary-0.11.4/src/client/conversation-list/conversation-list-store.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/conversation-list/conversation-list-store.vala 2017-10-02 11:25:21.000000000 +0000 @@ -16,10 +16,12 @@ public class ConversationListStore : Gtk.ListStore { public const Geary.Email.Field REQUIRED_FIELDS = Geary.Email.Field.ENVELOPE | Geary.Email.Field.FLAGS | Geary.Email.Field.PROPERTIES; - - public const Geary.Email.Field WITH_PREVIEW_FIELDS = - Geary.Email.Field.ENVELOPE | Geary.Email.Field.FLAGS | Geary.Email.Field.PROPERTIES | Geary.Email.Field.PREVIEW; - + + // XXX Remove ALL and NONE when PREVIEW has been fixed. See Bug 714317. + public const Geary.Email.Field WITH_PREVIEW_FIELDS = + Geary.Email.Field.ENVELOPE | Geary.Email.Field.FLAGS | Geary.Email.Field.PROPERTIES | Geary.Email.Field.PREVIEW | + Geary.Email.Field.ALL | Geary.Email.Field.NONE; + public enum Column { CONVERSATION_DATA, CONVERSATION_OBJECT, @@ -67,12 +69,22 @@ return row.get_model().get_iter(out iter, get_path()); } } - - public Geary.ProgressMonitor preview_monitor { get; private set; default = + + + private static int sort_by_date(Gtk.TreeModel model, + Gtk.TreeIter aiter, + Gtk.TreeIter biter) { + Geary.App.Conversation a, b; + model.get(aiter, Column.CONVERSATION_OBJECT, out a); + model.get(biter, Column.CONVERSATION_OBJECT, out b); + return compare_conversation_ascending(a, b); + } + + + public Geary.App.ConversationMonitor conversations { get; set; } + public Geary.ProgressMonitor preview_monitor { get; private set; default = new Geary.SimpleProgressMonitor(Geary.ProgressType.ACTIVITY); } - public bool is_clearing { get; private set; default = false; } - - private Geary.App.ConversationMonitor conversation_monitor; + private Gee.HashMap row_map = new Gee.HashMap< Geary.App.Conversation, RowWrapper>(); private Geary.App.EmailStore? email_store = null; @@ -80,69 +92,48 @@ private bool loading_local_only = true; private Geary.Nonblocking.Mutex refresh_mutex = new Geary.Nonblocking.Mutex(); private uint update_id = 0; - - public signal void conversations_added_began(); - - public signal void conversations_added_finished(); - - public ConversationListStore() { + + public signal void conversations_added(bool start); + public signal void conversations_removed(bool start); + + public ConversationListStore(Geary.App.ConversationMonitor conversations) { set_column_types(Column.get_types()); - set_default_sort_func(sort_by_date); + set_default_sort_func(ConversationListStore.sort_by_date); set_sort_column_id(Gtk.SortColumn.DEFAULT, Gtk.SortType.DESCENDING); - + + this.conversations = conversations; + this.update_id = Timeout.add_seconds_full( + Priority.LOW, 60, update_date_strings + ); + this.email_store = new Geary.App.EmailStore( + conversations.folder.account + ); GearyApplication.instance.config.settings.changed[Configuration.DISPLAY_PREVIEW_KEY].connect( on_display_preview_changed); - update_id = Timeout.add_seconds_full(Priority.LOW, 60, update_date_strings); - - GearyApplication.instance.controller.notify[GearyController.PROP_CURRENT_CONVERSATION]. - connect(on_conversation_monitor_changed); - } - - ~ConversationListStore() { - if (update_id != 0) - Source.remove(update_id); - - GearyApplication.instance.controller.notify[GearyController.PROP_CURRENT_CONVERSATION]. - disconnect(on_conversation_monitor_changed); + + conversations.scan_completed.connect(on_scan_completed); + conversations.conversations_added.connect(on_conversations_added); + conversations.conversations_removed.connect(on_conversations_removed); + conversations.conversation_appended.connect(on_conversation_appended); + conversations.conversation_trimmed.connect(on_conversation_trimmed); + conversations.email_flags_changed.connect(on_email_flags_changed); + + // add all existing conversations + on_conversations_added(conversations.get_conversations()); } - - private void on_conversation_monitor_changed() { - is_clearing = true; - - if (conversation_monitor != null) { - conversation_monitor.scan_completed.disconnect(on_scan_completed); - conversation_monitor.conversations_added.disconnect(on_conversations_added); - conversation_monitor.conversation_removed.disconnect(on_conversation_removed); - conversation_monitor.conversation_appended.disconnect(on_conversation_appended); - conversation_monitor.conversation_trimmed.disconnect(on_conversation_trimmed); - conversation_monitor.email_flags_changed.disconnect(on_email_flags_changed); - } - - cancellable.cancel(); - cancellable = new Cancellable(); - + + public void destroy() { + this.cancellable.cancel(); clear(); - row_map.clear(); - conversation_monitor = GearyApplication.instance.controller.current_conversations; - email_store = null; - - if (conversation_monitor != null) { - email_store = new Geary.App.EmailStore(conversation_monitor.folder.account); - - // add all existing conversations - on_conversations_added(conversation_monitor.get_conversations()); - - conversation_monitor.scan_completed.connect(on_scan_completed); - conversation_monitor.conversations_added.connect(on_conversations_added); - conversation_monitor.conversation_removed.connect(on_conversation_removed); - conversation_monitor.conversation_appended.connect(on_conversation_appended); - conversation_monitor.conversation_trimmed.connect(on_conversation_trimmed); - conversation_monitor.email_flags_changed.connect(on_email_flags_changed); + + // Release circular refs. + this.row_map.clear(); + if (this.update_id != 0) { + Source.remove(this.update_id); + this.update_id = 0; } - - is_clearing = false; } - + public Geary.App.Conversation? get_conversation_at_path(Gtk.TreePath path) { Gtk.TreeIter iter; if (!get_iter(out iter, path)) @@ -228,7 +219,7 @@ // the user experience Gee.TreeSet sorted_conversations = new Gee.TreeSet( compare_conversation_descending); - sorted_conversations.add_all(conversation_monitor.get_conversations()); + sorted_conversations.add_all(this.conversations.get_conversations()); foreach (Geary.App.Conversation conversation in sorted_conversations) { // find oldest unread message for the preview Geary.Email? need_preview = null; @@ -282,12 +273,15 @@ else debug("Unable to find preview for conversation"); } - + private void set_row(Gtk.TreeIter iter, Geary.App.Conversation conversation, Geary.Email preview) { - FormattedConversationData conversation_data = new FormattedConversationData(conversation, - preview, conversation_monitor.folder, - conversation_monitor.folder.account.information.get_all_mailboxes()); - + FormattedConversationData conversation_data = new FormattedConversationData( + conversation, + preview, + this.conversations.folder, + this.conversations.folder.account.information.get_all_mailboxes() + ); + Gtk.TreePath? path = get_path(iter); assert(path != null); RowWrapper wrapper = new RowWrapper(this, conversation, path); @@ -313,7 +307,11 @@ if (last_email == null) { debug("Cannot refresh conversation: last email is null"); +#if VALA_0_36 + remove(ref iter); +#else remove(iter); +#endif return; } @@ -385,9 +383,13 @@ private void remove_conversation(Geary.App.Conversation conversation) { Gtk.TreeIter iter; if (get_iter_for_conversation(conversation, out iter)) +#if VALA_0_36 + remove(ref iter); +#else remove(iter); +#endif - row_map.remove(conversation); + row_map.unset(conversation); } private bool add_conversation(Geary.App.Conversation conversation) { @@ -422,7 +424,7 @@ if (conversations.size == 0) return; - conversations_added_began(); + conversations_added(true); debug("Adding %d conversations.", conversations.size); int added = 0; @@ -432,13 +434,16 @@ } debug("Added %d/%d conversations.", added, conversations.size); - conversations_added_finished(); + conversations_added(false); } - private void on_conversation_removed(Geary.App.Conversation conversation) { - remove_conversation(conversation); + private void on_conversations_removed(Gee.Collection conversations) { + conversations_removed(true); + foreach (Geary.App.Conversation removed in conversations) + remove_conversation(removed); + conversations_removed(false); } - + private void on_conversation_appended(Geary.App.Conversation conversation) { if (has_conversation(conversation)) { refresh_conversation(conversation); @@ -452,7 +457,7 @@ } private void on_display_preview_changed() { - refresh_previews_async.begin(conversation_monitor); + refresh_previews_async.begin(this.conversations); } private void on_email_flags_changed(Geary.App.Conversation conversation) { @@ -461,24 +466,14 @@ // refresh previews because the oldest unread message is displayed as the preview, and if // that's changed, need to change the preview // TODO: need support code to load preview for single conversation, not scan all - refresh_previews_async.begin(conversation_monitor); + refresh_previews_async.begin(this.conversations); } - - private int sort_by_date(Gtk.TreeModel model, Gtk.TreeIter aiter, Gtk.TreeIter biter) { - Geary.App.Conversation a, b; - - get(aiter, Column.CONVERSATION_OBJECT, out a); - get(biter, Column.CONVERSATION_OBJECT, out b); - - return compare_conversation_ascending(a, b); - } - + private bool update_date_strings() { this.foreach(update_date_string); - // Keep calling this SourceFunc - return true; + return Source.CONTINUE; } - + private bool update_date_string(Gtk.TreeModel model, Gtk.TreePath path, Gtk.TreeIter iter) { FormattedConversationData? message_data; model.get(iter, Column.CONVERSATION_DATA, out message_data); @@ -489,5 +484,6 @@ // Continue iterating, don't stop return false; } + } diff -Nru geary-0.11.4/src/client/conversation-list/conversation-list-view.vala geary-0.12.0/src/client/conversation-list/conversation-list-view.vala --- geary-0.11.4/src/client/conversation-list/conversation-list-view.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/conversation-list/conversation-list-view.vala 2017-10-02 11:25:21.000000000 +0000 @@ -13,14 +13,14 @@ // scroll adjustment seen at the call to load_more(). private double last_upper = -1.0; private bool reset_adjustment = false; - private Gee.Set selected = new Gee.HashSet(); - private ConversationListStore conversation_list_store; private Geary.App.ConversationMonitor? conversation_monitor; private Gee.Set? current_visible_conversations = null; private Geary.Scheduler.Scheduled? scheduled_update_visible_conversations = null; private Gtk.Menu? context_menu = null; - private uint selection_changed_id = 0; - + private Gee.Set selected = new Gee.HashSet(); + private Geary.IdleManager selection_update; + private bool suppress_selection = false; + public signal void conversations_selected(Gee.Set selected); // Signal for when a conversation has been double-clicked, or selected and enter is pressed. @@ -34,33 +34,22 @@ Geary.EmailFlags? flags_to_add, Geary.EmailFlags? flags_to_remove, bool only_mark_preview); public signal void visible_conversations_changed(Gee.Set visible); - - public ConversationListView(ConversationListStore conversation_list_store) { - this.conversation_list_store = conversation_list_store; - set_model(conversation_list_store); - + + + public ConversationListView() { set_show_expanders(false); set_headers_visible(false); - + append_column(create_column(ConversationListStore.Column.CONVERSATION_DATA, new ConversationListCellRenderer(), ConversationListStore.Column.CONVERSATION_DATA.to_string(), 0)); - + Gtk.TreeSelection selection = get_selection(); - selection.changed.connect(on_selection_changed); selection.set_mode(Gtk.SelectionMode.MULTIPLE); style_set.connect(on_style_changed); show.connect(on_show); row_activated.connect(on_row_activated); - - get_model().row_inserted.connect(on_rows_changed); - get_model().rows_reordered.connect(on_rows_changed); - get_model().row_changed.connect(on_rows_changed); - get_model().row_deleted.connect(on_rows_changed); - get_model().row_deleted.connect(on_row_deleted); - - conversation_list_store.conversations_added_began.connect(on_conversations_added_began); - conversation_list_store.conversations_added_finished.connect(on_conversations_added_finished); + button_press_event.connect(on_button_press); // Set up drag and drop. @@ -81,13 +70,72 @@ unowned Gtk.BindingSet? binding_set = Gtk.BindingSet.find("GtkTreeView"); assert(binding_set != null); Gtk.BindingEntry.remove(binding_set, Gdk.Key.N, Gdk.ModifierType.CONTROL_MASK); + + this.selection_update = new Geary.IdleManager(do_selection_changed); + this.selection_update.priority = Geary.IdleManager.Priority.LOW; } - + + public override void destroy() { + this.selection_update.reset(); + base.destroy(); + } + + public new ConversationListStore? get_model() { + return (this as Gtk.TreeView).get_model() as ConversationListStore; + } + + public new void set_model(ConversationListStore? new_store) { + ConversationListStore? old_store = get_model(); + if (old_store != null) { + old_store.conversations_added.disconnect(on_conversations_added); + old_store.conversations_removed.disconnect(on_conversations_removed); + old_store.row_inserted.disconnect(on_rows_changed); + old_store.rows_reordered.disconnect(on_rows_changed); + old_store.row_changed.disconnect(on_rows_changed); + old_store.row_deleted.disconnect(on_rows_changed); + old_store.row_deleted.disconnect(on_row_deleted); + } + + if (new_store != null) { + new_store.row_inserted.connect(on_rows_changed); + new_store.rows_reordered.connect(on_rows_changed); + new_store.row_changed.connect(on_rows_changed); + new_store.row_deleted.connect(on_rows_changed); + new_store.row_deleted.connect(on_row_deleted); + new_store.conversations_removed.connect(on_conversations_removed); + new_store.conversations_added.connect(on_conversations_added); + } + + // Disconnect the selection handler since we don't want to + // fire selection signals while changing the model. + Gtk.TreeSelection selection = get_selection(); + selection.changed.disconnect(on_selection_changed); + (this as Gtk.TreeView).set_model(new_store); + this.selected.clear(); + selection.changed.connect(on_selection_changed); + } + + /** + * Specifies an action is currently changing the view's selection. + */ + public void set_changing_selection(bool is_changing) { + // Make sure that when not autoselecting, and if the user is + // causing selected rows to be removed, the next row is not + // automatically selected by GtkTreeView + if (is_changing) { + this.suppress_selection = + !GearyApplication.instance.config.autoselect; + } else { + // If no longer changing, always re-enable selection + get_selection().set_mode(Gtk.SelectionMode.MULTIPLE); + } + } + private void on_conversation_monitor_changed() { if (conversation_monitor != null) { conversation_monitor.scan_started.disconnect(on_scan_started); conversation_monitor.scan_completed.disconnect(on_scan_completed); - conversation_monitor.conversation_removed.disconnect(on_conversation_removed); + conversation_monitor.seed_completed.disconnect(on_seed_completed); } conversation_monitor = GearyApplication.instance.controller.current_conversations; @@ -95,7 +143,7 @@ if (conversation_monitor != null) { conversation_monitor.scan_started.connect(on_scan_started); conversation_monitor.scan_completed.connect(on_scan_completed); - conversation_monitor.conversation_removed.connect(on_conversation_removed); + conversation_monitor.seed_completed.connect(on_seed_completed); } } @@ -105,40 +153,57 @@ private void on_scan_completed() { enable_load_more = true; - - // Select first conversation. - if (GearyApplication.instance.config.autoselect) - select_first_conversation(); + + // Select the first conversation, if autoselect is enabled, + // nothing has been selected yet and we're not composing. Do + // this here instead of in on_seed_completed since we want to + // to select the first row on folder change as soon as + // possible. + if (GearyApplication.instance.config.autoselect && + get_selection().count_selected_rows() == 0 && + !GearyApplication.instance.controller.any_inline_composers()) { + set_cursor(new Gtk.TreePath.from_indices(0, -1), null, false); + } } - - private void on_conversation_removed(Geary.App.Conversation conversation) { - if (!GearyApplication.instance.config.autoselect) - get_selection().unselect_all(); + + private void on_seed_completed() { + if (!GearyApplication.instance.config.autoselect) { + // Notify that no conversations will be selected + conversations_selected(this.selected.read_only_view); + } } - - private void on_conversations_added_began() { + + private void on_conversations_added(bool start) { Gtk.Adjustment? adjustment = get_adjustment(); - // If we were at the top, we want to stay there after conversations are added. - reset_adjustment = adjustment != null && adjustment.get_value() == 0; + if (start) { + // If we were at the top, we want to stay there after + // conversations are added. + this.reset_adjustment = adjustment != null && adjustment.get_value() == 0; + } else if (this.reset_adjustment && adjustment != null) { + // Pump the loop to make sure the new conversations are + // taking up space in the window. Without this, setting + // the adjustment here is a no-op because as far as it's + // concerned, it's already at the top. + while (Gtk.events_pending()) + Gtk.main_iteration(); + + adjustment.set_value(0); + } + this.reset_adjustment = false; } - - private void on_conversations_added_finished() { - if (!reset_adjustment) - return; - - // Pump the loop to make sure the new conversations are taking up space - // in the window. Without this, setting the adjustment here is a no-op - // because as far as it's concerned, it's already at the top. - while (Gtk.events_pending()) - Gtk.main_iteration(); - - Gtk.Adjustment? adjustment = get_adjustment(); - if (adjustment == null) - return; - - adjustment.set_value(0); + + private void on_conversations_removed(bool start) { + if (!GearyApplication.instance.config.autoselect) { + Gtk.SelectionMode mode = start + // Stop GtkTreeView from automatically selecting the + // next row after the removed rows + ? Gtk.SelectionMode.NONE + // Allow the user to make selections again + : Gtk.SelectionMode.MULTIPLE; + get_selection().set_mode(mode); + } } - + private Gtk.Adjustment? get_adjustment() { Gtk.ScrolledWindow? parent = get_parent() as Gtk.ScrolledWindow; if (parent == null) { @@ -178,7 +243,7 @@ // Get the current conversation. If it's selected, we'll apply the mark operation to // all selected conversations; otherwise, it just applies to this one. - Geary.App.Conversation conversation = conversation_list_store.get_conversation_at_path(path); + Geary.App.Conversation conversation = get_model().get_conversation_at_path(path); Gee.Collection to_mark; if (GearyApplication.instance.controller.get_selected_conversations().contains(conversation)) to_mark = GearyApplication.instance.controller.get_selected_conversations(); @@ -215,10 +280,10 @@ return true; if (event.button == 3 && event.type == Gdk.EventType.BUTTON_PRESS) { - Geary.App.Conversation conversation = conversation_list_store.get_conversation_at_path(path); + Geary.App.Conversation conversation = get_model().get_conversation_at_path(path); string?[] action_names = {}; - action_names += GearyController.ACTION_DELETE_MESSAGE; + action_names += GearyController.ACTION_DELETE_CONVERSATION; if (conversation.is_unread()) action_names += GearyController.ACTION_MARK_AS_READ; @@ -307,73 +372,46 @@ Gtk.TreeModel model; return get_selection().get_selected_rows(out model); } - - private Gtk.TreePath? get_selected_path() { - return get_all_selected_paths().nth_data(0); - } - + private void on_selection_changed() { - if (selection_changed_id != 0) - Source.remove(selection_changed_id); - - // Schedule processing selection changes at low idle for two reasons: (a) if a lot of - // changes come in back-to-back, this allows for all that activity to settle before - // updating state and firing signals (which results in a lot of I/O), and (b) it means - // the ConversationMonitor's signals may be processed in any order by this class and the - // ConversationListView and not result in a lot of screen flashing and (again) unnecessary - // I/O as both classes update selection state. - selection_changed_id = Idle.add(() => { - // no longer scheduled - selection_changed_id = 0; - - do_selection_changed(); - - return false; - }, Priority.LOW); + // Schedule processing selection changes at low idle for + // two reasons: (a) if a lot of changes come in + // back-to-back, this allows for all that activity to + // settle before updating state and firing signals (which + // results in a lot of I/O), and (b) it means the + // ConversationMonitor's signals may be processed in any + // order by this class and the ConversationListView and + // not result in a lot of screen flashing and (again) + // unnecessary I/O as both classes update selection state. + this.selection_update.schedule(); } - - // Gtk.TreeSelection can fire its "changed" signal even when nothing's changed, so look for that - // to avoid subscribers from doing the same things (in particular, I/O) multiple times + + // Gtk.TreeSelection can fire its "changed" signal even when + // nothing's changed, so look for that to avoid subscribers from + // doing the same things (in particular, I/O) multiple times private void do_selection_changed() { - // if the ConversationListStore is clearing, then this is called repeatedly as the elements - // are removed, causing signals to fire and a flurry of I/O that is immediately cancelled - // this prevents that, merely firing the signal once to indicate all selections are - // dropped while clearing - if (conversation_list_store.is_clearing) { - if (selected.size > 0) { - selected.clear(); - conversations_selected(selected.read_only_view); - } - - return; - } - + Gee.HashSet new_selection = + new Gee.HashSet(); List paths = get_all_selected_paths(); - if (paths.length() == 0) { - // only notify if this is different than what was previously reported - if (selected.size != 0) { - selected.clear(); - conversations_selected(selected.read_only_view); + if (paths.length() != 0) { + // Conversations are selected, so collect them and + // signal if different + foreach (Gtk.TreePath path in paths) { + Geary.App.Conversation? conversation = + get_model().get_conversation_at_path(path); + if (conversation != null) + new_selection.add(conversation); } - - return; - } - - // Conversations are selected, so collect them and signal if different - Gee.HashSet new_selected = new Gee.HashSet(); - foreach (Gtk.TreePath path in paths) { - Geary.App.Conversation? conversation = conversation_list_store.get_conversation_at_path(path); - if (conversation != null) - new_selected.add(conversation); } - + // only notify if different than what was previously reported - if (!Geary.Collection.are_sets_equal(selected, new_selected)) { - selected = new_selected; - conversations_selected(selected.read_only_view); + if (!Geary.Collection.are_sets_equal( + this.selected, new_selection)) { + this.selected = new_selection; + conversations_selected(this.selected.read_only_view); } } - + public Gee.Set get_visible_conversations() { Gee.HashSet visible_conversations = new Gee.HashSet(); @@ -383,7 +421,7 @@ return visible_conversations; while (start_path.compare(end_path) <= 0) { - Geary.App.Conversation? conversation = conversation_list_store.get_conversation_at_path(start_path); + Geary.App.Conversation? conversation = get_model().get_conversation_at_path(start_path); if (conversation != null) visible_conversations.add(conversation); @@ -397,7 +435,7 @@ Gee.HashSet selected_conversations = new Gee.HashSet(); foreach (Gtk.TreePath path in get_all_selected_paths()) { - Geary.App.Conversation? conversation = conversation_list_store.get_conversation_at_path(path); + Geary.App.Conversation? conversation = get_model().get_conversation_at_path(path); if (path != null) selected_conversations.add(conversation); } @@ -424,17 +462,9 @@ private void schedule_visible_conversations_changed() { scheduled_update_visible_conversations = Geary.Scheduler.on_idle(update_visible_conversations); } - - // Selects the first conversation, if nothing has been selected yet and we're not composing. - public void select_first_conversation() { - if (get_selected_path() == null && - !GearyApplication.instance.controller.any_inline_composers()) { - set_cursor(new Gtk.TreePath.from_indices(0, -1), null, false); - } - } public void select_conversation(Geary.App.Conversation conversation) { - Gtk.TreePath path = conversation_list_store.get_path_for_conversation(conversation); + Gtk.TreePath path = get_model().get_path_for_conversation(conversation); if (path != null) set_cursor(path, null, false); } @@ -442,7 +472,7 @@ public void select_conversations(Gee.Set conversations) { Gtk.TreeSelection selection = get_selection(); foreach (Geary.App.Conversation conversation in conversations) { - Gtk.TreePath path = conversation_list_store.get_path_for_conversation(conversation); + Gtk.TreePath path = get_model().get_path_for_conversation(conversation); if (path != null) selection.select_path(path); } @@ -472,7 +502,7 @@ } private void on_row_activated(Gtk.TreePath path) { - Geary.App.Conversation? c = conversation_list_store.get_conversation_at_path(path); + Geary.App.Conversation? c = get_model().get_conversation_at_path(path); if (c != null) conversation_activated(c); } @@ -482,25 +512,23 @@ ConversationListCellRenderer.set_hover_selected(hover); queue_draw(); } - + private bool on_motion_notify_event(Gdk.EventMotion event) { - if (get_selected_path() == null) - return false; - - Gtk.TreePath? path = null; - int cell_x, cell_y; - get_path_at_pos((int) event.x, (int) event.y, out path, null, out cell_x, out cell_y); - - set_hover_selected(path != null && get_selection().path_is_selected(path)); - - return false; + if (get_selection().count_selected_rows() > 0) { + Gtk.TreePath? path = null; + int cell_x, cell_y; + get_path_at_pos((int) event.x, (int) event.y, out path, null, out cell_x, out cell_y); + + set_hover_selected(path != null && get_selection().path_is_selected(path)); + } + return Gdk.EVENT_PROPAGATE; } - + private bool on_leave_notify_event() { - if (get_selected_path() != null) + if (get_selection().count_selected_rows() > 0) { set_hover_selected(false); - - return false; + } + return Gdk.EVENT_PROPAGATE; + } } - diff -Nru geary-0.11.4/src/client/conversation-list/formatted-conversation-data.vala geary-0.12.0/src/client/conversation-list/formatted-conversation-data.vala --- geary-0.11.4/src/client/conversation-list/formatted-conversation-data.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/conversation-list/formatted-conversation-data.vala 2017-10-02 11:25:21.000000000 +0000 @@ -230,17 +230,9 @@ } // Must call calculate_sizes() first. - public void get_size(Gtk.Widget widget, Gdk.Rectangle? cell_area, out int x_offset, - out int y_offset, out int width, out int height) { + public int get_height() { assert(cell_height != -1); // ensures calculate_sizes() was called. - - x_offset = 0; - y_offset = 0; - // set width to 1 (rather than 0) to work around certain themes that cause the - // conversation list to be shown as "squished": - // https://bugzilla.gnome.org/show_bug.cgi?id=713954 - width = 1; - height = cell_height; + return cell_height; } // Can be used for rendering or calculating height. diff -Nru geary-0.11.4/src/client/conversation-viewer/conversation-email.vala geary-0.12.0/src/client/conversation-viewer/conversation-email.vala --- geary-0.11.4/src/client/conversation-viewer/conversation-email.vala 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/src/client/conversation-viewer/conversation-email.vala 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,823 @@ +/* + * Copyright 2016 Software Freedom Conservancy Inc. + * Copyright 2016 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +/** + * A widget for displaying an email in a conversation. + * + * This view corresponds to {@link Geary.Email}, displaying the + * email's primary message (a {@link Geary.RFC822.Message}), any + * sub-messages (also instances of {@link Geary.RFC822.Message}) and + * attachments. The RFC822 messages are themselves displayed by {@link + * ConversationMessage}. + */ +[GtkTemplate (ui = "/org/gnome/Geary/conversation-email.ui")] +public class ConversationEmail : Gtk.Box { + // This isn't a Gtk.Grid since when added to a Gtk.ListBoxRow the + // hover style isn't applied to it. + + + /** + * Iterator that returns all message views in an email view. + */ + private class MessageViewIterator : + Gee.Traversable, + Gee.Iterator, + Object { + + + public bool read_only { + get { return true; } + } + public bool valid { + get { return this.pos == 0 || this.attached_views.valid; } + } + + private ConversationEmail parent_view; + private int pos = -1; + private Gee.Iterator? attached_views = null; + + internal MessageViewIterator(ConversationEmail parent_view) { + this.parent_view = parent_view; + this.attached_views = parent_view._attached_messages.iterator(); + } + + public bool next() { + if (!has_next()) { + return false; + } + if (this.pos == -1) { + this.pos = 0; + } else { + this.attached_views.next(); + } + return true; + } + + public bool has_next() { + return this.pos == -1 || this.attached_views.next(); + } + + public new ConversationMessage get() { + switch (this.pos) { + case -1: + assert_not_reached(); + + case 0: + this.pos = 1; + return this.parent_view.primary_message; + + default: + return this.attached_views.get(); + } + } + + public void remove() { + assert_not_reached(); + } + + public new bool foreach(Gee.ForallFunc f) { + this.pos = 1; + bool ret = f(this.parent_view.primary_message); + if (ret) { + ret = this.attached_views.foreach(f); + } + return ret; + } + + } + + + // Displays an attachment's icon and details + [GtkTemplate (ui = "/org/gnome/Geary/conversation-email-attachment-view.ui")] + private class AttachmentView : Gtk.Grid { + + public Geary.Attachment attachment { get; private set; } + + [GtkChild] + private Gtk.Image icon; + + [GtkChild] + private Gtk.Label filename; + + [GtkChild] + private Gtk.Label description; + + private string gio_content_type; + + public AttachmentView(Geary.Attachment attachment) { + this.attachment = attachment; + string mime_content_type = attachment.content_type.get_mime_type(); + this.gio_content_type = ContentType.from_mime_type( + mime_content_type + ); + + string? file_name = attachment.content_filename; + string file_desc = ContentType.get_description(gio_content_type); + if (ContentType.is_unknown(gio_content_type)) { + // Translators: This is the file type displayed for + // attachments with unknown file types. + file_desc = _("Unknown"); + } + string file_size = Files.get_filesize_as_string(attachment.filesize); + + if (Geary.String.is_empty(file_name)) { + // XXX Check for unknown types here and try to guess + // using attachment data. + file_name = file_desc; + file_desc = file_size; + } else { + // Translators: The first argument will be a + // description of the document type, the second will + // be a human-friendly size string. For example: + // Document (100.9MB) + file_desc = _("%s (%s)".printf(file_desc, file_size)); + } + this.filename.set_text(file_name); + this.description.set_text(file_desc); + } + + internal async void load_icon(Cancellable load_cancelled) { + if (load_cancelled.is_cancelled()) { + return; + } + + Gdk.Pixbuf? pixbuf = null; + + // XXX We need to hook up to GtkWidget::style-set and + // reload the icon when the theme changes. + + int window_scale = get_scale_factor(); + try { + // If the file is an image, use it. Otherwise get the + // icon for this mime_type. + if (this.attachment.content_type.has_media_type("image")) { + // Get a thumbnail for the image. + // TODO Generate and save the thumbnail when + // extracting the attachments rather than when showing + // them in the viewer. + int preview_size = ATTACHMENT_PREVIEW_SIZE * window_scale; + InputStream stream = yield this.attachment.file.read_async( + Priority.DEFAULT, + load_cancelled + ); + pixbuf = yield new Gdk.Pixbuf.from_stream_at_scale_async( + stream, preview_size, preview_size, true, load_cancelled + ); + pixbuf = pixbuf.apply_embedded_orientation(); + } else { + // Load the icon for this mime type + Icon icon = ContentType.get_icon(this.gio_content_type); + Gtk.IconTheme theme = Gtk.IconTheme.get_default(); + Gtk.IconLookupFlags flags = Gtk.IconLookupFlags.DIR_LTR; + if (get_direction() == Gtk.TextDirection.RTL) { + flags = Gtk.IconLookupFlags.DIR_RTL; + } + Gtk.IconInfo? icon_info = theme.lookup_by_gicon_for_scale( + icon, ATTACHMENT_ICON_SIZE, window_scale, flags + ); + if (icon_info != null) { + pixbuf = yield icon_info.load_icon_async(load_cancelled); + } + } + } catch (Error error) { + debug("Failed to load icon for attachment '%s': %s", + this.attachment.id, + error.message); + } + + if (pixbuf != null) { + Cairo.Surface surface = Gdk.cairo_surface_create_from_pixbuf( + pixbuf, window_scale, get_window() + ); + this.icon.set_from_surface(surface); + } + } + + } + + + private const int ATTACHMENT_ICON_SIZE = 32; + private const int ATTACHMENT_PREVIEW_SIZE = 64; + + private const string ACTION_FORWARD = "forward"; + private const string ACTION_MARK_READ = "mark_read"; + private const string ACTION_MARK_UNREAD = "mark_unread"; + private const string ACTION_MARK_UNREAD_DOWN = "mark_unread_down"; + private const string ACTION_OPEN_ATTACHMENTS = "open_attachments"; + private const string ACTION_PRINT = "print"; + private const string ACTION_REPLY_SENDER = "reply_sender"; + private const string ACTION_REPLY_ALL = "reply_all"; + private const string ACTION_SAVE_ATTACHMENTS = "save_attachments"; + private const string ACTION_SAVE_ALL_ATTACHMENTS = "save_all_attachments"; + private const string ACTION_SELECT_ALL_ATTACHMENTS = "select_all_attachments"; + private const string ACTION_STAR = "star"; + private const string ACTION_UNSTAR = "unstar"; + private const string ACTION_VIEW_SOURCE = "view_source"; + + private const string MANUAL_READ_CLASS = "geary-manual-read"; + private const string SENT_CLASS = "geary-sent"; + private const string STARRED_CLASS = "geary-starred"; + private const string UNREAD_CLASS = "geary-unread"; + + /** The specific email that is displayed by this view. */ + public Geary.Email email { get; private set; } + + /** Determines if the email is showing a preview or the full message. */ + public bool is_collapsed = true; + + /** Determines if the email has been manually marked as being read. */ + public bool is_manually_read { + get { return get_style_context().has_class(MANUAL_READ_CLASS); } + set { + if (value) { + get_style_context().add_class(MANUAL_READ_CLASS); + } else { + get_style_context().remove_class(MANUAL_READ_CLASS); + } + } + } + + /** The view displaying the email's primary message headers and body. */ + public ConversationMessage primary_message { get; private set; } + + /** Views for attached messages. */ + public Gee.List attached_messages { + owned get { return this._attached_messages.read_only_view; } + } + + /** Determines if all message's web views have finished loading. */ + public bool message_bodies_loaded { get; private set; default = false; } + + // Backing for attached_messages + private Gee.List _attached_messages = + new Gee.LinkedList(); + + // Contacts for the email's account + private Geary.ContactStore contact_store; + + private Configuration config; + + // Message view with selected text, if any + private ConversationMessage? body_selection_message = null; + + // Attachment ids that have been displayed inline + private Gee.HashSet inlined_content_ids = new Gee.HashSet(); + + // A subset of the message's attachments that are displayed in the + // attachments view + Gee.Collection displayed_attachments = + new Gee.LinkedList(); + + // Message-specific actions + private SimpleActionGroup message_actions = new SimpleActionGroup(); + + [GtkChild] + private Gtk.Grid actions; + + [GtkChild] + private Gtk.Button attachments_button; + + [GtkChild] + private Gtk.Button star_button; + + [GtkChild] + private Gtk.Button unstar_button; + + [GtkChild] + private Gtk.MenuButton email_menubutton; + + [GtkChild] + private Gtk.InfoBar draft_infobar; + + [GtkChild] + private Gtk.InfoBar not_saved_infobar; + + [GtkChild] + private Gtk.Grid sub_messages; + + [GtkChild] + private Gtk.Grid attachments; + + [GtkChild] + private Gtk.FlowBox attachments_view; + + [GtkChild] + private Gtk.Button select_all_attachments; + + private Gtk.Menu attachments_menu; + + + /** Fired when the user clicks "reply" in the message menu. */ + public signal void reply_to_message(); + + /** Fired when the user clicks "reply all" in the message menu. */ + public signal void reply_all_message(); + + /** Fired when the user clicks "forward" in the message menu. */ + public signal void forward_message(); + + /** Fired when the user updates the email's flags. */ + public signal void mark_email( + Geary.NamedFlag? to_add, Geary.NamedFlag? to_remove + ); + + /** Fired when the user updates flags for this email and all others down. */ + public signal void mark_email_from_here( + Geary.NamedFlag? to_add, Geary.NamedFlag? to_remove + ); + + /** Fired when the user activates an attachment. */ + public signal void attachments_activated( + Gee.Collection attachments + ); + + /** Fired when the user saves an attachment. */ + public signal void save_attachments( + Gee.Collection attachments + ); + + /** Fired the edit draft button is clicked. */ + public signal void edit_draft(); + + /** Fired when the view source action is activated. */ + public signal void view_source(); + + /** Fired when the user selects text in a message. */ + internal signal void body_selection_changed(bool has_selection); + + + /** + * Constructs a new view to display an email. + * + * This method sets up most of the user interface for displaying + * the complete email, but does not attempt any possibly + * long-running loading processes. + */ + public ConversationEmail(Geary.Email email, + Geary.ContactStore contact_store, + Configuration config, + bool is_sent, + bool is_draft) { + this.email = email; + this.contact_store = contact_store; + this.config = config; + + if (is_sent) { + get_style_context().add_class(SENT_CLASS); + } + + add_action(ACTION_FORWARD).activate.connect(() => { + forward_message(); + }); + add_action(ACTION_PRINT).activate.connect(() => { + print(); + }); + add_action(ACTION_MARK_READ).activate.connect(() => { + mark_email(null, Geary.EmailFlags.UNREAD); + }); + add_action(ACTION_MARK_UNREAD).activate.connect(() => { + mark_email(Geary.EmailFlags.UNREAD, null); + }); + add_action(ACTION_MARK_UNREAD_DOWN).activate.connect(() => { + mark_email_from_here(Geary.EmailFlags.UNREAD, null); + }); + add_action(ACTION_OPEN_ATTACHMENTS, false).activate.connect(() => { + attachments_activated(get_selected_attachments()); + }); + add_action(ACTION_REPLY_ALL).activate.connect(() => { + reply_all_message(); + }); + add_action(ACTION_REPLY_SENDER).activate.connect(() => { + reply_to_message(); + }); + add_action(ACTION_SAVE_ATTACHMENTS, false).activate.connect(() => { + save_attachments(get_selected_attachments()); + }); + add_action(ACTION_SAVE_ALL_ATTACHMENTS).activate.connect(() => { + save_attachments(this.displayed_attachments); + }); + add_action(ACTION_SELECT_ALL_ATTACHMENTS, false).activate.connect(() => { + this.attachments_view.select_all(); + }); + add_action(ACTION_STAR).activate.connect(() => { + mark_email(Geary.EmailFlags.FLAGGED, null); + }); + add_action(ACTION_UNSTAR).activate.connect(() => { + mark_email(null, Geary.EmailFlags.FLAGGED); + }); + add_action(ACTION_VIEW_SOURCE).activate.connect(() => { + view_source(); + }); + insert_action_group("eml", message_actions); + + // Construct CID resources from attachments + + Gee.Map cid_resources = + new Gee.HashMap(); + foreach (Geary.Attachment att in email.attachments) { + if (att.content_id != null) { + try { + cid_resources[att.content_id] = + new Geary.Memory.FileBuffer(att.file, true); + } catch (Error err) { + debug("Could not open attachment: %s", err.message); + } + } + } + + // Construct the view for the primary message, hook into it + + Geary.RFC822.Message message; + try { + message = email.get_message(); + } catch (Error error) { + debug("Error loading primary message: %s", error.message); + return; + } + + bool load_images = email.load_remote_images().is_certain(); + Geary.Contact contact = this.contact_store.get_by_rfc822( + message.get_primary_originator() + ); + if (contact != null) { + load_images |= contact.always_load_remote_images(); + } + + this.primary_message = new ConversationMessage(message, config, load_images); + this.primary_message.web_view.add_internal_resources(cid_resources); + connect_message_view_signals(this.primary_message); + + this.primary_message.summary.add(this.actions); + + Gtk.Builder builder = new Gtk.Builder.from_resource( + "/org/gnome/Geary/conversation-email-menus.ui" + ); + this.email_menubutton.set_menu_model( + (MenuModel) builder.get_object("email_menu") + ); + this.email_menubutton.set_sensitive(false); + + this.attachments_menu = new Gtk.Menu.from_model( + (MenuModel) builder.get_object("attachments_menu") + ); + this.attachments_menu.attach_to_widget(this, null); + + this.primary_message.infobars.add(this.draft_infobar); + if (is_draft) { + this.draft_infobar.show(); + this.draft_infobar.response.connect((infobar, response_id) => { + if (response_id == 1) { edit_draft(); } + }); + } + + this.primary_message.infobars.add(this.not_saved_infobar); + + pack_start(this.primary_message, true, true, 0); + update_email_state(); + + // Add sub_messages container and message viewers if any + + Gee.List sub_messages = message.get_sub_messages(); + if (sub_messages.size > 0) { + this.primary_message.body_container.add(this.sub_messages); + } + foreach (Geary.RFC822.Message sub_message in sub_messages) { + ConversationMessage attached_message = + new ConversationMessage(sub_message, config, false); + connect_message_view_signals(attached_message); + attached_message.web_view.add_internal_resources(cid_resources); + this.sub_messages.add(attached_message); + this._attached_messages.add(attached_message); + } + } + + /** + * Starts loading the complete email. + * + * This method will load the avatar and message body for the + * primary message and any attached messages, as well as + * attachment names, types and icons. + */ + public async void start_loading(Cancellable load_cancelled) { + foreach (ConversationMessage view in this) { + if (load_cancelled.is_cancelled()) { + break; + } + yield primary_message.load_message_body(load_cancelled); + view.load_avatar.begin( + GearyApplication.instance.controller.avatar_session, + load_cancelled + ); + } + + // Only load attachments once the web views have finished + // loading, since we want to know if any attachments marked as + // being inline were actually not displayed inline, and hence + // need to be displayed as if they were attachments. + if (!load_cancelled.is_cancelled()) { + if (this.message_bodies_loaded) { + yield load_attachments(load_cancelled); + } else { + this.notify["message-bodies-loaded"].connect(() => { + load_attachments.begin(load_cancelled); + }); + } + } + } + + /** + * Shows the complete message: headers, body and attachments. + */ + public void expand_email(bool include_transitions=true) { + is_collapsed = false; + update_email_state(); + attachments_button.set_sensitive(true); + email_menubutton.set_sensitive(true); + primary_message.show_message_body(include_transitions); + foreach (ConversationMessage attached in this._attached_messages) { + attached.show_message_body(include_transitions); + } + } + + /** + * Hides the complete message, just showing the header preview. + */ + public void collapse_email() { + is_collapsed = true; + update_email_state(); + attachments_button.set_sensitive(false); + email_menubutton.set_sensitive(false); + primary_message.hide_message_body(); + foreach (ConversationMessage attached in this._attached_messages) { + attached.hide_message_body(); + } + } + + /** + * Updates the current email's flags and dependent UI state. + */ + public void update_flags(Geary.Email email) { + this.email.set_flags(email.email_flags); + update_email_state(); + } + + /** + * Returns user-selected body HTML from a message, if any. + */ + public async string? get_selection_for_quoting() { + string? selection = null; + if (this.body_selection_message != null) { + try { + selection = + yield this.body_selection_message.web_view.get_selection_for_quoting(); + } catch (Error err) { + debug("Failed to get selection for quoting: %s", err.message); + } + } + return selection; + } + + /** + * Returns user-selected body text from a message, if any. + */ + public async string? get_selection_for_find() { + string? selection = null; + if (this.body_selection_message != null) { + try { + selection = + yield this.body_selection_message.web_view.get_selection_for_find(); + } catch (Error err) { + debug("Failed to get selection for find: %s", err.message); + } + } + return selection; + } + + /** + * Returns a new Iterable over all message views in this email view + */ + internal Gee.Iterator iterator() { + return new MessageViewIterator(this); + } + + private SimpleAction add_action(string name, bool enabled = true) { + SimpleAction action = new SimpleAction(name, null); + action.set_enabled(enabled); + message_actions.add_action(action); + return action; + } + + private void set_action_enabled(string name, bool enabled) { + SimpleAction? action = this.message_actions.lookup(name) as SimpleAction; + if (action != null) { + action.set_enabled(enabled); + } + } + + private void connect_message_view_signals(ConversationMessage view) { + view.flag_remote_images.connect(on_flag_remote_images); + view.remember_remote_images.connect(on_remember_remote_images); + view.web_view.internal_resource_loaded.connect((id) => { + this.inlined_content_ids.add(id); + }); + view.web_view.notify["has-valid-height"].connect(() => { + bool all_loaded = true; + foreach (ConversationMessage message in this) { + if (!message.web_view.has_valid_height) { + all_loaded = false; + break; + } + } + if (all_loaded == true && !this.message_bodies_loaded) { + // Only update the property value if not already + // true + this.message_bodies_loaded = true; + } + }); + view.web_view.selection_changed.connect((has_selection) => { + this.body_selection_message = has_selection ? view : null; + body_selection_changed(has_selection); + }); + } + + private void update_email_state() { + Geary.EmailFlags? flags = this.email.email_flags; + Gtk.StyleContext style = get_style_context(); + + bool is_unread = (flags != null && flags.is_unread()); + set_action_enabled(ACTION_MARK_READ, is_unread); + set_action_enabled(ACTION_MARK_UNREAD, !is_unread); + set_action_enabled(ACTION_MARK_UNREAD_DOWN, !is_unread); + if (is_unread) { + style.add_class(UNREAD_CLASS); + } else { + style.remove_class(UNREAD_CLASS); + } + + bool is_flagged = (flags != null && flags.is_flagged()); + set_action_enabled(ACTION_STAR, !this.is_collapsed && !is_flagged); + set_action_enabled(ACTION_UNSTAR, !this.is_collapsed && is_flagged); + if (is_flagged) { + style.add_class(STARRED_CLASS); + star_button.hide(); + unstar_button.show(); + } else { + style.remove_class(STARRED_CLASS); + star_button.show(); + unstar_button.hide(); + } + + if (flags != null && flags.is_outbox_sent()) { + this.not_saved_infobar.show(); + } + } + + private async void load_attachments(Cancellable load_cancelled) { + // Determine if we have any attachments to be displayed. This + // relies on the primary and any attached message bodies + // having being already loaded, so that we know which + // attachments have been shown inline and hence do not need to + // be included here. + foreach (Geary.Attachment attachment in email.attachments) { + if (!(attachment.content_id in this.inlined_content_ids)) { + Geary.Mime.DispositionType? disposition = null; + if (attachment.content_disposition != null) { + disposition = attachment.content_disposition.disposition_type; + } + // Display both any attachment and inline parts that + // have already not been inlined. Although any inline + // parts should be referred to by other content in a + // multipart/related or multipart/alternative + // container, or inlined if in a multipart/mixed + // container, this cannot be not guaranteed. C.f. Bug + // 769868. + if (disposition != null && + disposition == Geary.Mime.DispositionType.ATTACHMENT || + disposition == Geary.Mime.DispositionType.INLINE) { + this.displayed_attachments.add(attachment); + } + } + } + + // Now we can actually show the attachments, if any + if (!this.displayed_attachments.is_empty) { + this.attachments_button.show(); + this.attachments_button.set_sensitive(!this.is_collapsed); + this.primary_message.body_container.add(this.attachments); + + if (this.displayed_attachments.size > 1) { + this.select_all_attachments.show(); + set_action_enabled(ACTION_SELECT_ALL_ATTACHMENTS, true); + } + + foreach (Geary.Attachment attachment in this.displayed_attachments) { + if (load_cancelled.is_cancelled()) { + return; + } + AttachmentView view = new AttachmentView(attachment); + this.attachments_view.add(view); + yield view.load_icon(load_cancelled); + } + } + } + + internal Gee.Collection get_selected_attachments() { + Gee.LinkedList selected = + new Gee.LinkedList(); + foreach (Gtk.FlowBoxChild child in + this.attachments_view.get_selected_children()) { + selected.add(((AttachmentView) child.get_child()).attachment); + } + return selected; + } + + private void print() { + // XXX This isn't anywhere near good enough - headers aren't + // being printed. + + Gtk.Window? window = get_toplevel() as Gtk.Window; + WebKit.PrintOperation op = new WebKit.PrintOperation( + this.primary_message.web_view + ); + Gtk.PrintSettings settings = new Gtk.PrintSettings(); + + if (!Geary.String.is_empty(this.config.print_dir)) { + settings.set(Gtk.PRINT_SETTINGS_OUTPUT_DIR, this.config.print_dir); + } + + if (this.email.subject != null) { + string file_name = Geary.String.reduce_whitespace(this.email.subject.value); + file_name = file_name.replace("/", "_"); + if (file_name.char_count() > 128) { + file_name = Geary.String.safe_byte_substring(file_name, 128); + } + + if (!Geary.String.is_empty(file_name)) { + settings.set(Gtk.PRINT_SETTINGS_OUTPUT_BASENAME, file_name); + } + } + + op.set_print_settings(settings); + op.run_dialog(window); + + string? file_uri = op.get_print_settings().get(Gtk.PRINT_SETTINGS_OUTPUT_URI); + if (!Geary.String.is_empty(file_uri)) { + File print_file = File.new_for_uri(file_uri); + this.config.print_dir = print_file.get_parent().get_path(); + } + } + + private void on_flag_remote_images(ConversationMessage view) { + // XXX check we aren't already auto loading the image + mark_email(Geary.EmailFlags.LOAD_REMOTE_IMAGES, null); + } + + + private void on_remember_remote_images(ConversationMessage view) { + Geary.RFC822.MailboxAddress? sender = view.message.get_primary_originator(); + if (sender == null) { + debug("Couldn't find sender for message: %s", email.id.to_string()); + return; + } + + Geary.Contact? contact = contact_store.get_by_rfc822( + view.message.get_primary_originator() + ); + if (contact == null) { + debug("Couldn't find contact for %s", sender.to_string()); + return; + } + + Geary.ContactFlags flags = new Geary.ContactFlags(); + flags.add(Geary.ContactFlags.ALWAYS_LOAD_REMOTE_IMAGES); + Gee.ArrayList contact_list = new Gee.ArrayList(); + contact_list.add(contact); + contact_store.mark_contacts_async.begin(contact_list, flags, null); + } + + [GtkCallback] + private void on_attachments_child_activated(Gtk.FlowBox view, + Gtk.FlowBoxChild child) { + attachments_activated( + Geary.iterate( + ((AttachmentView) child.get_child()).attachment + ).to_array_list() + ); + } + + [GtkCallback] + private void on_attachments_selected_changed(Gtk.FlowBox view) { + uint len = view.get_selected_children().length(); + bool not_empty = len > 0; + set_action_enabled(ACTION_OPEN_ATTACHMENTS, not_empty); + set_action_enabled(ACTION_SAVE_ATTACHMENTS, not_empty); + set_action_enabled(ACTION_SELECT_ALL_ATTACHMENTS, + len < this.displayed_attachments.size); + } + +} diff -Nru geary-0.11.4/src/client/conversation-viewer/conversation-list-box.vala geary-0.12.0/src/client/conversation-viewer/conversation-list-box.vala --- geary-0.11.4/src/client/conversation-viewer/conversation-list-box.vala 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/src/client/conversation-viewer/conversation-list-box.vala 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,1097 @@ +/* + * Copyright 2016 Software Freedom Conservancy Inc. + * Copyright 2016 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +/** + * A widget for displaying conversations as a list of emails. + * + * The view displays the current selected {@link + * Geary.App.Conversation} from the conversation list. To do so, it + * listens to signals from both the list and the current conversation + * monitor, updating the email list as needed. + * + * Unlike ConversationListStore (which sorts by date received), + * ConversationListBox sorts by the {@link Geary.Email.date} field + * (the Date: header), as that's the date displayed to the user. + */ +public class ConversationListBox : Gtk.ListBox { + + /** Fields that must be available for display as a conversation. */ + private const Geary.Email.Field REQUIRED_FIELDS = + Geary.Email.Field.HEADER + | Geary.Email.Field.BODY + | Geary.Email.Field.ORIGINATORS + | Geary.Email.Field.RECEIVERS + | Geary.Email.Field.SUBJECT + | Geary.Email.Field.DATE + | Geary.Email.Field.FLAGS + | Geary.ComposedEmail.REQUIRED_REPLY_FIELDS; + + // Offset from the top of the list box which emails views will + // scrolled to, so the user can see there are additional messages + // above it. XXX This is currently approx 1.5 times the height of + // a collapsed ConversationEmail, it should probably calculated + // somehow so that differences user's font size are taken into + // account. + private const int EMAIL_TOP_OFFSET = 92; + + // Loading spinner timeout + private const int LOADING_TIMEOUT_MSEC = 150; + + + // Base class for list rows it the list box + private abstract class ConversationRow : Gtk.ListBoxRow { + + + protected const string EXPANDED_CLASS = "geary-expanded"; + private const string FIRST_CLASS = "geary-first"; + private const string LAST_CLASS = "geary-last"; +#if !GTK_3_20 + // GTK < 3.20+ style workarounds. Keep this in sync + // with geary.css. + private const int CANT_USE_PADDING_WORKAROUND = 18; +#endif + + // The email being displayed by this row, if any + public Geary.Email? email { get; private set; default = null; } + + // Is the row showing the email's message body or just headers? + public bool is_expanded { + get { + return this._is_expanded; + } + protected set { +#if !GTK_3_20 + // GTK+ < 3.20 style workaround. Keep this in sync + // with geary.css + this.margin_bottom = value ? 6 : 0; +#endif + this._is_expanded = value; + } + } + private bool _is_expanded = false; + + // Designate this row as the first visible row in the + // conversation listbox, or not. See Bug 764710 and + // ::update_first_last_row() below. + internal bool is_first { + set { + set_style_context_class(FIRST_CLASS, value); +#if !GTK_3_20 + // GTK < 3.20+ style workarounds. Keep this in sync + // with geary.css. + this.margin_top = CANT_USE_PADDING_WORKAROUND; +#endif + } + } + + // Designate this row as the last visible row in the + // conversation listbox, or not. See Bug 764710 and + // ::update_first_last_row() below. + internal bool is_last { + set { + set_style_context_class(LAST_CLASS, value); +#if !GTK_3_20 + // GTK < 3.20+ style workarounds. Keep this in sync + // with geary.css. + this.margin_bottom = CANT_USE_PADDING_WORKAROUND; +#endif + } + } + + + // We can only scroll to a specific row once it has been + // allocated space. This signal allows the viewer to hook up + // to appropriate times to try to do that scroll. + public signal void should_scroll(); + + + public ConversationRow(Geary.Email? email) { + this.email = email; + show(); + +#if !GTK_3_20 + // GTK < 3.20+ style workarounds. Keep this in sync with + // geary.css. + this.margin_start = CANT_USE_PADDING_WORKAROUND; + this.margin_end = CANT_USE_PADDING_WORKAROUND; +#endif + } + + // Request the row be expanded, if supported. + public virtual new void expand() { + // Not supported by default + } + + // Request the row be collapsed, if supported. + public virtual void collapse() { + // Not supported by default + } + + // Enables firing the should_scroll signal when this row is + // allocated a size + public void enable_should_scroll() { + this.size_allocate.connect(on_size_allocate); + } + + protected inline void set_style_context_class(string class_name, bool value) { + if (value) { + get_style_context().add_class(class_name); + } else { + get_style_context().remove_class(class_name); + } + } + + protected virtual void on_size_allocate() { + // Disable should_scroll so we don't keep on scrolling + // later, like when the window has been resized. + this.size_allocate.disconnect(on_size_allocate); + should_scroll(); + } + + } + + + // Displays a single ConversationEmail in the list box + private class EmailRow : ConversationRow { + + + private const string MATCH_CLASS = "geary-matched"; + + + // Has the row been temporarily expanded to show search matches? + public bool is_pinned { get; private set; default = false; } + + // Does the row contain an email matching the current search? + public bool is_search_match { + get { return get_style_context().has_class(MATCH_CLASS); } + set { + set_style_context_class(MATCH_CLASS, value); + this.is_pinned = value; + update_row_expansion(); + } + } + + + // The email view for this row, if any + public ConversationEmail view { get; private set; } + + + public EmailRow(ConversationEmail view) { + base(view.email); + this.view = view; + add(view); + } + + public override void expand() { + this.is_expanded = true; + foreach (ConversationMessage message in this.view) { + if (!message.web_view.has_valid_height) { + message.web_view.queue_resize(); + } + }; + update_row_expansion(); + } + + public override void collapse() { + this.is_expanded = false; + this.is_pinned = false; + update_row_expansion(); + } + + protected override void on_size_allocate() { + // We need to wait the web view to load first, so that the + // message has a non-trivial height, and then wait for it + // to be reallocated, so that it picks up the web_view's + // height. + if (view.primary_message.web_view.has_valid_height) { + // Disable should_scroll after the message body has + // been loaded so we don't keep on scrolling later, + // like when the window has been resized. + this.size_allocate.disconnect(on_size_allocate); + } + should_scroll(); + } + + private inline void update_row_expansion() { + if (this.is_expanded || this.is_pinned) { + get_style_context().add_class(EXPANDED_CLASS); + this.view.expand_email(); + } else { + get_style_context().remove_class(EXPANDED_CLASS); + this.view.collapse_email(); + } + } + + } + + + // Displays a single embedded composer in the list box + private class ComposerRow : ConversationRow { + + // The embedded composer for this row + public ComposerEmbed view { get; private set; } + + + public ComposerRow(ComposerEmbed view) { + base(view.referred); + this.view = view; + this.is_expanded = true; + get_style_context().add_class(EXPANDED_CLASS); + add(this.view); + } + + } + + static construct { + // Set up custom keybindings + unowned Gtk.BindingSet bindings = Gtk.BindingSet.by_class( + (ObjectClass) typeof(ConversationListBox).class_ref() + ); + Gtk.BindingEntry.add_signal( + bindings, Gdk.Key.space, 0, "focus-next", 0 + ); + Gtk.BindingEntry.add_signal( + bindings, Gdk.Key.KP_Space, 0, "focus-next", 0 + ); + Gtk.BindingEntry.add_signal( + bindings, Gdk.Key.space, Gdk.ModifierType.SHIFT_MASK, "focus-prev", 0 + ); + Gtk.BindingEntry.add_signal( + bindings, Gdk.Key.KP_Space, Gdk.ModifierType.SHIFT_MASK, "focus-prev", 0 + ); + + Gtk.BindingEntry.add_signal( + bindings, Gdk.Key.Up, 0, "scroll", 1, + typeof(Gtk.ScrollType), Gtk.ScrollType.STEP_UP + ); + Gtk.BindingEntry.add_signal( + bindings, Gdk.Key.Down, 0, "scroll", 1, + typeof(Gtk.ScrollType), Gtk.ScrollType.STEP_DOWN + ); + Gtk.BindingEntry.add_signal( + bindings, Gdk.Key.Page_Up, 0, "scroll", 1, + typeof(Gtk.ScrollType), Gtk.ScrollType.PAGE_UP + ); + Gtk.BindingEntry.add_signal( + bindings, Gdk.Key.Page_Down, 0, "scroll", 1, + typeof(Gtk.ScrollType), Gtk.ScrollType.PAGE_DOWN + ); + Gtk.BindingEntry.add_signal( + bindings, Gdk.Key.Home, 0, "scroll", 1, + typeof(Gtk.ScrollType), Gtk.ScrollType.START + ); + Gtk.BindingEntry.add_signal( + bindings, Gdk.Key.End, 0, "scroll", 1, + typeof(Gtk.ScrollType), Gtk.ScrollType.END + ); + } + + private static int on_sort(Gtk.ListBoxRow row1, Gtk.ListBoxRow row2) { + Geary.Email? email1 = ((ConversationRow) row1).email; + Geary.Email? email2 = ((ConversationRow) row2).email; + + if (email1 == null) { + return 1; + } + if (email2 == null) { + return -1; + } + return Geary.Email.compare_sent_date_ascending(email1, email2); + } + + + /** Conversation being displayed. */ + public Geary.App.Conversation conversation { get; private set; } + + // Folder from which the conversation was loaded + internal Geary.Folder location { get; private set; } + + // Used to load messages in conversation. + private Geary.App.EmailStore email_store; + + // Contacts for the account this conversation exists in + private Geary.ContactStore contact_store; + + // Contacts for the account this conversation exists in + private Geary.AccountInformation account_info; + + // Was this conversation loaded from the drafts folder? + private bool is_draft_folder; + + // Cancellable for this conversation's data loading. + private Cancellable cancellable = new Cancellable(); + + // App config + private Configuration config; + + // Email view with selected text, if any + private ConversationEmail? body_selected_view = null; + + // Maps displayed emails to their corresponding rows. + private Gee.HashMap email_rows = + new Gee.HashMap(); + + // The id of the draft referred to by the current composer. + private Geary.EmailIdentifier? draft_id = null; + + // First and last visible row in the list, if any + private ConversationRow? first_row = null; + private ConversationRow? last_row = null; + + // Cached search terms to apply to new messages + private Gee.Set? search_terms = null; + + // Total number of search matches found + private uint search_matches_found = 0; + + private uint loading_timeout_id = 0; + + + /** Keyboard action to scroll the conversation. */ + [Signal (action=true)] + public virtual signal void scroll(Gtk.ScrollType type) { + Gtk.Adjustment adj = get_adjustment(); + double value = adj.get_value(); + switch (type) { + case Gtk.ScrollType.STEP_UP: + value -= adj.get_step_increment(); + break; + case Gtk.ScrollType.STEP_DOWN: + value += adj.get_step_increment(); + break; + case Gtk.ScrollType.PAGE_UP: + value -= adj.get_page_increment(); + break; + case Gtk.ScrollType.PAGE_DOWN: + value += adj.get_page_increment(); + break; + case Gtk.ScrollType.START: + value = 0.0; + break; + case Gtk.ScrollType.END: + value = adj.get_upper(); + break; + } + adj.set_value(value); + } + + /** Keyboard action to shift focus to the next message, if any. */ + [Signal (action=true)] + public virtual signal void focus_next() { + this.move_cursor(Gtk.MovementStep.DISPLAY_LINES, 1); + } + + /** Keyboard action to shift focus to the prev message, if any. */ + [Signal (action=true)] + public virtual signal void focus_prev() { + this.move_cursor(Gtk.MovementStep.DISPLAY_LINES, -1); + } + + /** Fired when an email view is added to the conversation list. */ + public signal void email_added(ConversationEmail email); + + /** Fired when an email view is removed from the conversation list. */ + public signal void email_removed(ConversationEmail email); + + /** Fired when the user updates the flags for a set of emails. */ + public signal void mark_emails(Gee.Collection emails, + Geary.EmailFlags? flags_to_add, Geary.EmailFlags? flags_to_remove); + + /** Fired when an email that matches the current search terms is found. */ + public signal void search_matches_updated(uint matches); + + + /** + * Constructs a new conversation list box instance. + */ + public ConversationListBox(Geary.App.Conversation conversation, + Geary.Folder location, + Geary.App.EmailStore? email_store, + Geary.ContactStore contact_store, + Geary.AccountInformation account_info, + bool is_draft_folder, + Configuration config, + Gtk.Adjustment adjustment) { + this.conversation = conversation; + this.location = location; + this.email_store = email_store; + this.contact_store = contact_store; + this.account_info = account_info; + this.is_draft_folder = is_draft_folder; + this.config = config; + + get_style_context().add_class("background"); + get_style_context().add_class("conversation-listbox"); +#if !GTK_3_20 + // GTK < 3.20+ style workaround + get_style_context().remove_class("list"); +#endif + + set_adjustment(adjustment); + set_selection_mode(Gtk.SelectionMode.NONE); + set_sort_func(ConversationListBox.on_sort); + + this.realize.connect(() => { + adjustment.value_changed.connect(() => { check_mark_read(); }); + }); + this.row_activated.connect(on_row_activated); + this.size_allocate.connect(() => { check_mark_read(); }); + + this.conversation.appended.connect(on_conversation_appended); + this.conversation.trimmed.connect(on_conversation_trimmed); + this.conversation.email_flags_changed.connect(on_update_flags); + + // If the load is taking too long, display a spinner + this.loading_timeout_id = + Timeout.add(LOADING_TIMEOUT_MSEC, () => { + if (this.loading_timeout_id != 0) { + debug("Loading timed out"); + show_loading(); + } + this.loading_timeout_id = 0; + return Source.REMOVE; + }); + } + + public override void destroy() { + if (this.loading_timeout_id != 0) { + Source.remove(this.loading_timeout_id); + // Clear in case this is called twice + this.loading_timeout_id = 0; + } + this.cancellable.cancel(); + this.email_rows.clear(); + base.destroy(); + } + + public async void load_conversation() + throws Error { + // Fetch full emails from the conversation + Gee.Collection full_emails = + yield load_full_emails( + this.conversation.get_emails( + Geary.App.Conversation.Ordering.SENT_DATE_ASCENDING + ) + ); + + // Add them all + EmailRow? first_expanded_row = null; + foreach (Geary.Email full_email in full_emails) { + if (this.cancellable.is_cancelled()) { + break; + } + if (!(full_email.id in this.email_rows)) { + EmailRow row = add_email(full_email); + if (row.is_expanded && + (first_expanded_row == null || + on_sort(row, first_expanded_row) < 0)) { + first_expanded_row = row; + } + } + } + + update_first_last_row(); + EmailRow? last_email = this.last_row as EmailRow; + + if (last_email != null && !this.cancellable.is_cancelled()) { + // If no other row was expanded by default, use the last + if (first_expanded_row == null) { + last_email.expand(); + first_expanded_row = last_email; + } + + // Start the first expanded row loading before any others, + // scroll the view to it when its done + yield first_expanded_row.view.start_loading(this.cancellable); + first_expanded_row.should_scroll.connect(scroll_to); + first_expanded_row.enable_should_scroll(); + + // Start everything else loading + this.foreach((child) => { + if (!this.cancellable.is_cancelled()) { + EmailRow? row = child as EmailRow; + if (row != null && row != first_expanded_row) { + row.view.start_loading.begin(this.cancellable); + } + } + }); + + debug("Conversation loading complete"); + } + + this.loading_timeout_id = 0; + set_placeholder(null); + } + + /** + * Returns the email view to be replied to, if any. + * + * If an email view has a visible body and selected text, that + * view will be returned. Else the last message by sort order will + * be returned, if any. + */ + public ConversationEmail? get_reply_target() { + ConversationEmail? view = get_selection_view(); + if (view == null) { + EmailRow? last = null; + this.foreach((child) => { + EmailRow? row = child as EmailRow; + if (row != null) { + last = row; + } + }); + + if (last != null) { + view = last.view; + } + } + return view; + } + + /** + * Returns the email view with a visible user selection, if any. + * + * If an email view has selected body text. + */ + public ConversationEmail? get_selection_view() { + ConversationEmail? view = this.body_selected_view; + if (view != null) { + if (view.is_collapsed) { + // A collapsed email can't be visible + view = null; + } else { + // XXX check the selected text is actually on screen + } + } + return view; + } + + /** + * Adds an an embedded composer to the view. + */ + public void add_embedded_composer(ComposerEmbed embed, bool is_draft) { + if (is_draft) { + this.draft_id = embed.referred.id; + EmailRow? draft = this.email_rows.get(embed.referred.id); + if (draft != null) { + remove_email(draft.email); + } + } + + ComposerRow row = new ComposerRow(embed); + row.enable_should_scroll(); + row.should_scroll.connect(() => { scroll_to(row); }); + add(row); + update_first_last_row(); + + embed.composer.draft_id_changed.connect((id) => { this.draft_id = id; }); + embed.vanished.connect(() => { + this.draft_id = null; + remove(row); + if (is_draft && + row.email != null && + !this.cancellable.is_cancelled()) { + load_full_email.begin(row.email.id); + } + }); + } + + /** + * Displays an email as being read, regardless of its actual flags. + */ + public void mark_manual_read(Geary.EmailIdentifier id) { + EmailRow? row = this.email_rows.get(id); + if (row != null) { + row.view.is_manually_read = true; + } + } + + /** + * Displays an email as being unread, regardless of its actual flags. + */ + public void mark_manual_unread(Geary.EmailIdentifier id) { + EmailRow? row = this.email_rows.get(id); + if (row != null) { + row.view.is_manually_read = false; + } + } + + /** + * Loads search term matches for this list's emails. + */ + public async void load_search_terms() { + Geary.SearchFolder search = (Geary.SearchFolder) this.location; + Geary.SearchQuery? query = search.search_query; + if (query != null) { + + // List all IDs of emails we're viewing. + Gee.Collection ids = + new Gee.ArrayList(); + foreach (Gee.Map.Entry entry + in this.email_rows.entries) { + if (entry.value.get_visible()) { + ids.add(entry.key); + } + } + + Gee.Set? search_matches = null; + try { + search_matches = yield search.get_search_matches_async( + ids, cancellable + ); + } catch (Error e) { + debug("Error highlighting search results: %s", e.message); + // Continue on here since if nothing else we have the + // fudging to fall back on immediately below. + } + + if (search_matches == null) + search_matches = new Gee.HashSet(); + + // This applies a fudge-factor set of matches when the database results + // aren't entirely satisfactory, such as when you search for an email + // address and the database tokenizes out the @ and ., etc. It's not meant + // to be comprehensive, just a little extra highlighting applied to make + // the results look a little closer to what you typed. + foreach (string word in query.raw.split(" ")) { + if (word.has_suffix("\"")) + word = word.substring(0, word.length - 1); + if (word.has_prefix("\"")) + word = word.substring(1); + + if (!Geary.String.is_empty_or_whitespace(word)) + search_matches.add(word); + } + + if (!this.cancellable.is_cancelled()) { + highlight_search_terms(search_matches); + } + } + } + + /** + * Applies search term highlighting to all email views. + * + * Returns true if any were found, else returns false. + */ + public void highlight_search_terms(Gee.Set terms) { + this.search_terms = terms; + this.search_matches_found = 0; + foreach (Gtk.Widget child in get_children()) { + EmailRow? row = child as EmailRow; + if (row != null) { + apply_search_terms(row); + } + } + } + + /** + * Removes search term highlighting from all messages. + */ + public void unmark_search_terms() { + this.search_terms = null; + this.search_matches_found = 0; + + this.foreach((child) => { + EmailRow? row = child as EmailRow; + if (row != null) { + if (row.is_search_match) { + row.is_search_match = false; + foreach (ConversationMessage msg_view in row.view) { + msg_view.unmark_search_terms(); + } + } + } + }); + search_matches_updated(this.search_matches_found); + } + + /** + * Increases the magnification level used for displaying messages. + */ + public void zoom_in() { + message_view_iterator().foreach((msg_view) => { + msg_view.web_view.zoom_in(); + return true; + }); + } + + /** + * Decreases the magnification level used for displaying messages. + */ + public void zoom_out() { + message_view_iterator().foreach((msg_view) => { + msg_view.web_view.zoom_out(); + return true; + }); + } + + /** + * Resets magnification level used for displaying messages to the default. + */ + public void zoom_reset() { + message_view_iterator().foreach((msg_view) => { + msg_view.web_view.zoom_level = 1.0f; + return true; + }); + } + + // Given some emails, fetch the full versions with all required fields. + private async Gee.Collection load_full_emails( + Gee.Collection emails) throws Error { + Gee.ArrayList ids = new Gee.ArrayList(); + foreach (Geary.Email email in emails) + ids.add(email.id); + + Gee.Collection? full_emails = + yield this.email_store.list_email_by_sparse_id_async( + ids, + REQUIRED_FIELDS, + Geary.Folder.ListFlags.NONE, + this.cancellable + ); + + if (full_emails == null) { + full_emails = Gee.Collection.empty(); + } + + return full_emails; + } + + // Loads full version of an email, adds it to the listbox + private async void load_full_email(Geary.EmailIdentifier id) + throws Error { + Geary.Email full_email = yield this.email_store.fetch_email_async( + id, REQUIRED_FIELDS, Geary.Folder.ListFlags.NONE, this.cancellable + ); + + if (!this.cancellable.is_cancelled()) { + EmailRow row = add_email(full_email); + update_first_last_row(); + yield row.view.start_loading(this.cancellable); + } + } + + // Constructs a row and view for an email, adds it to the listbox + private EmailRow add_email(Geary.Email email) { + // Should be able to edit draft emails from any + // conversation. This test should be more like "is in drafts + // folder" + bool is_in_folder = this.conversation.is_in_current_folder(email.id); + bool is_draft = (this.is_draft_folder && is_in_folder); + + bool is_sent = false; + if (email.from != null) { + foreach (Geary.RFC822.MailboxAddress from in email.from) { + if (this.account_info.has_email_address(from)) { + is_sent = true; + break; + } + } + } + + ConversationEmail view = new ConversationEmail( + email, + this.contact_store, + this.config, + is_sent, + is_draft + ); + view.mark_email.connect(on_mark_email); + view.mark_email_from_here.connect(on_mark_email_from_here); + view.body_selection_changed.connect((email, has_selection) => { + this.body_selected_view = has_selection ? email : null; + }); + + ConversationMessage conversation_message = view.primary_message; + conversation_message.body_container.button_release_event.connect_after((event) => { + // Consume all non-consumed clicks so the row is not + // inadvertently activated after clicking on the + // email body. + return true; + }); + + EmailRow row = new EmailRow(view); + this.email_rows.set(email.id, row); + + add(row); + email_added(view); + + // Expand interesting messages by default + if (email.is_unread().is_certain() || + email.is_flagged().is_certain() || + is_draft) { + row.expand(); + } + + // Apply any existing search terms to the new row + if (this.search_terms != null) { + apply_search_terms(row); + } + + return row; + } + + // Removes the email's row from the listbox, if any + private void remove_email(Geary.Email email) { + EmailRow? row = null; + if (this.email_rows.unset(email.id, out row)) { + remove(row); + email_removed(row.view); + } + } + + private void show_loading() { + Gtk.Spinner spinner = new Gtk.Spinner(); + spinner.set_size_request(32, 32); + spinner.halign = spinner.valign = Gtk.Align.CENTER; + spinner.start(); + spinner.show(); + set_placeholder(spinner); + } + + private void scroll_to(ConversationRow row) { + Gtk.Allocation? alloc = null; + row.get_allocation(out alloc); + int y = 0; + if (alloc.y > EMAIL_TOP_OFFSET) { + y = alloc.y - EMAIL_TOP_OFFSET; + } + + // XXX This doesn't always quite work right, maybe since it's + // hard getting a reliable height out of WebKitGTK, or maybe + // because we stop calling this method when the email message + // body has finished loading, but attachments and sub-messages + // may still be loading. Or both? + get_adjustment().set_value(y); + } + + /** + * Finds any currently visible messages, marks them as being read. + */ + private void check_mark_read() { + Gee.ArrayList email_ids = + new Gee.ArrayList(); + + Gtk.Adjustment adj = get_adjustment(); + int top_bound = (int) adj.value; + int bottom_bound = top_bound + (int) adj.page_size; + + email_view_iterator().foreach((email_view) => { + const int TEXT_PADDING = 50; + ConversationMessage conversation_message = email_view.primary_message; + // Don't bother with not-yet-loaded emails since the + // size of the body will be off, affecting the visibility + // of emails further down the conversation. + if (email_view.email.is_unread().is_certain() && + conversation_message.web_view.has_valid_height && + !email_view.is_manually_read) { + int body_top = 0; + int body_left = 0; + ConversationWebView web_view = conversation_message.web_view; + web_view.translate_coordinates( + this, + 0, 0, + out body_left, out body_top + ); + + int body_height = web_view.get_allocated_height(); + int body_bottom = body_top + body_height; + + // Only mark the email as read if it's actually visible + if (body_height > 0 && + body_bottom > top_bound && + body_top + TEXT_PADDING < bottom_bound) { + email_ids.add(email_view.email.id); + + // Since it can take some time for the new flags + // to round-trip back to our signal handlers, + // mark as manually read here + email_view.is_manually_read = true; + } + } + return true; + }); + + if (email_ids.size > 0) { + Geary.EmailFlags flags = new Geary.EmailFlags(); + flags.add(Geary.EmailFlags.UNREAD); + mark_emails(email_ids, null, flags); + } + } + + // Due to Bug 764710, we can only use the CSS :last-child selector + // for GTK themes after 3.20.3, so for now manually maintain a + // class on the last box so we can emulate it + private void update_first_last_row() { + ConversationRow? first = null; + ConversationRow? last = null; + this.foreach((child) => { + if (first == null) { + first = (ConversationRow) child; + } + last = (ConversationRow) child; + }); + + if (this.first_row != first) { + if (this.first_row != null) { + this.first_row.is_first = false; + } + + this.first_row = first; + this.first_row.is_first = true; + } + + if (this.last_row != last) { + if (this.last_row != null) { + this.last_row.is_last = false; + } + + this.last_row = last; + this.last_row.is_last = true; + } + } + + private void apply_search_terms(EmailRow row) { + // Message bodies need to be loaded to be able to search for + // them? + if (row.view.message_bodies_loaded) { + this.apply_search_terms_impl.begin(row); + } else { + row.view.notify["message-bodies-loaded"].connect(() => { + this.apply_search_terms_impl.begin(row); + }); + } + } + + // This should only be called from apply_search_terms above + private async void apply_search_terms_impl(EmailRow row) { + bool found = false; + foreach (ConversationMessage view in row.view) { + uint count = yield view.highlight_search_terms(this.search_terms); + if (count > 0) { + found = true; + } + this.search_matches_found += count; + } + row.is_search_match = found; + search_matches_updated(this.search_matches_found); + } + + /** + * Returns an new Iterable over all email views in the viewer + */ + private Gee.Iterator email_view_iterator() { + return this.email_rows.values.map((row) => { + return ((EmailRow) row).view; + }); + } + + /** + * Returns a new Iterable over all message views in the viewer + */ + private Gee.Iterator message_view_iterator() { + return Gee.Iterator.concat( + email_view_iterator().map>( + (email_view) => { return email_view.iterator(); } + ) + ); + } + + private void on_conversation_appended(Geary.App.Conversation conversation, + Geary.Email email) { + on_conversation_appended_async.begin(conversation, email); + } + + private async void on_conversation_appended_async( + Geary.App.Conversation conversation, Geary.Email part_email) { + // Don't add rows that are already present, or that are + // currently being edited. + if (!(part_email.id in this.email_rows) && + part_email.id != this.draft_id) { + load_full_email.begin(part_email.id, (obj, ret) => { + try { + load_full_email.end(ret); + } catch (Error err) { + debug( + "Unable to append email to conversation: %s", + err.message + ); + } + }); + } + } + + private void on_conversation_trimmed(Geary.Email email) { + remove_email(email); + } + + private void on_update_flags(Geary.Email email) { + if (!this.email_rows.has_key(email.id)) { + return; + } + + EmailRow row = this.email_rows.get(email.id); + row.view.update_flags(email); + } + + private void on_mark_email(ConversationEmail view, + Geary.NamedFlag? to_add, + Geary.NamedFlag? to_remove) { + Gee.Collection ids = + new Gee.LinkedList(); + ids.add(view.email.id); + mark_emails(ids, flag_to_flags(to_add), flag_to_flags(to_remove)); + } + + private void on_mark_email_from_here(ConversationEmail view, + Geary.NamedFlag? to_add, + Geary.NamedFlag? to_remove) { + Geary.Email email = view.email; + Gee.Collection ids = + new Gee.LinkedList(); + ids.add(email.id); + this.foreach((row) => { + if (row.get_visible()) { + Geary.Email other = ((EmailRow) row).view.email; + if (Geary.Email.compare_sent_date_ascending( + email, other) < 0) { + ids.add(other.id); + } + } + }); + mark_emails(ids, flag_to_flags(to_add), flag_to_flags(to_remove)); + } + + private Geary.EmailFlags? flag_to_flags(Geary.NamedFlag? flag) { + Geary.EmailFlags flags = null; + if (flag != null) { + flags = new Geary.EmailFlags(); + flags.add(flag); + } + return flags; + } + + private void on_row_activated(Gtk.ListBoxRow widget) { + EmailRow? row = widget as EmailRow; + if (row != null) { + // Allow non-last rows to be expanded/collapsed, but also let + // the last row to be expanded since appended sent emails will + // be appended last. Finally, don't let rows with active + // composers be collapsed. + if (row.is_expanded) { + if (row != this.last_row) { + row.collapse(); + } + } else { + row.expand(); + } + } + } + +} diff -Nru geary-0.11.4/src/client/conversation-viewer/conversation-message.vala geary-0.12.0/src/client/conversation-viewer/conversation-message.vala --- geary-0.11.4/src/client/conversation-viewer/conversation-message.vala 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/src/client/conversation-viewer/conversation-message.vala 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,983 @@ +/* + * Copyright 2016 Software Freedom Conservancy Inc. + * Copyright 2016 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +/** + * A widget for displaying an {@link Geary.RFC822.Message}. + * + * This view corresponds to {@link Geary.RFC822.Message}, displaying + * both the message's headers and body. Any attachments and sub + * messages are handled by {@link ConversationEmail}, which typically + * embeds at least one instance of this class. + */ +[GtkTemplate (ui = "/org/gnome/Geary/conversation-message.ui")] +public class ConversationMessage : Gtk.Grid { + + + private const string FROM_CLASS = "geary-from"; + private const string MATCH_CLASS = "geary-match"; + private const string REPLACED_CID_TEMPLATE = "replaced_%02u@geary"; + private const string REPLACED_IMAGE_CLASS = "geary_replaced_inline_image"; + + private const int MAX_PREVIEW_BYTES = Geary.Email.MAX_PREVIEW_BYTES; + + + internal static inline bool has_distinct_name( + Geary.RFC822.MailboxAddress address) { + return ( + !Geary.String.is_empty(address.name) && + address.name != address.address + ); + } + + + // Widget used to display sender/recipient email addresses in + // message header Gtk.FlowBox instances. + private class AddressFlowBoxChild : Gtk.FlowBoxChild { + + private const string PRIMARY_CLASS = "geary-primary"; + + public enum Type { FROM, OTHER; } + + public Geary.RFC822.MailboxAddress address { get; private set; } + + private string search_value; + + public AddressFlowBoxChild(Geary.RFC822.MailboxAddress address, + Type type = Type.OTHER) { + this.address = address; + this.search_value = address.address.casefold(); + + // We use two label instances here when address has + // distinct parts so we can dim the secondary part, if + // any. Ideally, it would be just one label instance in + // both cases, but we can't yet include CSS classes in + // Pango markup. See Bug 766763. + + Gtk.Grid address_parts = new Gtk.Grid(); + + Gtk.Label primary = new Gtk.Label(null); + primary.ellipsize = Pango.EllipsizeMode.END; + GtkUtil.set_label_xalign(primary, 0.0f); + primary.get_style_context().add_class(PRIMARY_CLASS); + if (type == Type.FROM) { + primary.get_style_context().add_class(FROM_CLASS); + } + address_parts.add(primary); + + if (has_distinct_name(address)) { + primary.set_text(address.name); + + Gtk.Label secondary = new Gtk.Label(null); + secondary.ellipsize = Pango.EllipsizeMode.END; + GtkUtil.set_label_xalign(secondary, 0.0f); + secondary.get_style_context().add_class(Gtk.STYLE_CLASS_DIM_LABEL); + secondary.set_text(address.address); + address_parts.add(secondary); + + this.search_value = address.name.casefold() + this.search_value; + } else { + primary.set_text(address.address); + } + + // Update prelight state when mouse-overed. + Gtk.EventBox events = new Gtk.EventBox(); + events.add_events( + Gdk.EventMask.ENTER_NOTIFY_MASK | + Gdk.EventMask.LEAVE_NOTIFY_MASK + ); + events.set_visible_window(false); + events.enter_notify_event.connect(on_prelight_in_event); + events.leave_notify_event.connect(on_prelight_out_event); + events.add(address_parts); + + add(events); + set_halign(Gtk.Align.START); + show_all(); + } + + public bool highlight_search_term(string term) { + bool found = term in this.search_value; + if (found) { + get_style_context().add_class(MATCH_CLASS); + } else { + get_style_context().remove_class(MATCH_CLASS); + } + return found; + } + + public void unmark_search_terms() { + get_style_context().remove_class(MATCH_CLASS); + } + + private bool on_prelight_in_event(Gdk.Event event) { + set_state_flags(Gtk.StateFlags.PRELIGHT, false); + return Gdk.EVENT_STOP; + } + + private bool on_prelight_out_event(Gdk.Event event) { + unset_state_flags(Gtk.StateFlags.PRELIGHT); + return Gdk.EVENT_STOP; + } + + } + + private const int MAX_INLINE_IMAGE_MAJOR_DIM = 1024; + + private const string ACTION_COPY_EMAIL = "copy_email"; + private const string ACTION_COPY_LINK = "copy_link"; + private const string ACTION_COPY_SELECTION = "copy_selection"; + private const string ACTION_OPEN_INSPECTOR = "open_inspector"; + private const string ACTION_OPEN_LINK = "open_link"; + private const string ACTION_SAVE_IMAGE = "save_image"; + private const string ACTION_SEARCH_FROM = "search_from"; + private const string ACTION_SELECT_ALL = "select_all"; + + + /** The specific RFC822 message displayed by this view. */ + public Geary.RFC822.Message message { get; private set; } + + /** Box containing the preview and full header widgets. */ + [GtkChild] + internal Gtk.Grid summary; + + /** Box that InfoBar widgets should be added to. */ + [GtkChild] + internal Gtk.Grid infobars; + + /** HTML view that displays the message body. */ + internal ConversationWebView web_view { get; private set; } + + [GtkChild] + private Gtk.Image avatar; + + [GtkChild] + private Gtk.Revealer preview_revealer; + [GtkChild] + private Gtk.Label preview_from; + [GtkChild] + private Gtk.Label preview_date; + [GtkChild] + private Gtk.Label preview_body; + + [GtkChild] + private Gtk.Revealer header_revealer; + [GtkChild] + private Gtk.FlowBox from; + [GtkChild] + private Gtk.Label subject; + private string subject_searchable = ""; + [GtkChild] + private Gtk.Label date; + + [GtkChild] + private Gtk.Grid sender_header; + [GtkChild] + private Gtk.FlowBox sender_address; + + [GtkChild] + private Gtk.Grid reply_to_header; + [GtkChild] + private Gtk.FlowBox reply_to_addresses; + + [GtkChild] + private Gtk.Grid to_header; + [GtkChild] + private Gtk.Grid cc_header; + [GtkChild] + private Gtk.Grid bcc_header; + + [GtkChild] + private Gtk.Revealer body_revealer; + [GtkChild] + public Gtk.Grid body_container; + [GtkChild] + public Gtk.ProgressBar body_progress; + + [GtkChild] + private Gtk.Popover link_popover; + [GtkChild] + private Gtk.Label good_link_label; + [GtkChild] + private Gtk.Label bad_link_label; + + [GtkChild] + private Gtk.InfoBar remote_images_infobar; + + // The web_view's context menu + private Gtk.Menu? context_menu = null; + + // Menu models for creating the context menu + private MenuModel context_menu_link; + private MenuModel context_menu_email; + private MenuModel context_menu_image; + private MenuModel context_menu_main; + private MenuModel context_menu_contact; + private MenuModel? context_menu_inspector = null; + + // Address fields that can be search through + private Gee.List searchable_addresses = + new Gee.LinkedList(); + + // Resource that have been loaded by the web view + private Gee.Map resources = + new Gee.HashMap(); + + // Message-specific actions + private SimpleActionGroup message_actions = new SimpleActionGroup(); + + private int next_replaced_buffer_number = 0; + + // Is the view set to allow remote image loads? + private bool is_loading_images; + + private int remote_resources_requested = 0; + + private int remote_resources_loaded = 0; + + // Timeouts for showing the progress bar and hiding it when + // complete. The former is so that when loading cached images it + // doesn't pop up and then go away immediately afterwards. + private Geary.TimeoutManager show_progress_timeout = null; + private Geary.TimeoutManager hide_progress_timeout = null; + + + /** Fired when the user clicks a link in the email. */ + public signal void link_activated(string link); + + /** Fired when the user requests remote images be loaded. */ + public signal void flag_remote_images(); + + /** Fired when the user requests remote images be always loaded. */ + public signal void remember_remote_images(); + + /** Fired when the user saves an inline displayed image. */ + public signal void save_image(string? uri, string? alt_text, Geary.Memory.Buffer buffer); + + /** Fired when the user activates a specific search shortcut. */ + public signal void search_activated(string operator, string value); + + + /** + * Constructs a new view to display an RFC 823 message headers and body. + * + * This method sets up most of the user interface for displaying + * the message, but does not attempt any possibly long-running + * loading processes. + */ + public ConversationMessage(Geary.RFC822.Message message, + Configuration config, + bool load_remote_images) { + this.message = message; + this.is_loading_images = load_remote_images; + +#if !GTK_3_20 + // GTK < 3.20+ style workarounds. Keep this in sync with + // geary.css. + this.summary.border_width = 12; +#endif + + // Actions + + add_action(ACTION_COPY_EMAIL, true, VariantType.STRING) + .activate.connect(on_copy_email_address); + add_action(ACTION_COPY_LINK, true, VariantType.STRING) + .activate.connect(on_copy_link); + add_action(ACTION_COPY_SELECTION, false).activate.connect(() => { + web_view.copy_clipboard(); + }); + add_action(ACTION_OPEN_INSPECTOR, Args.inspector).activate.connect(() => { + this.web_view.get_inspector().show(); + }); + add_action(ACTION_OPEN_LINK, true, VariantType.STRING) + .activate.connect((param) => { + link_activated(param.get_string()); + }); + add_action(ACTION_SAVE_IMAGE, true, new VariantType("(sms)")) + .activate.connect(on_save_image); + add_action(ACTION_SEARCH_FROM, true, VariantType.STRING) + .activate.connect((param) => { + search_activated("from", param.get_string()); + }); + add_action(ACTION_SELECT_ALL, true).activate.connect(() => { + web_view.select_all(); + }); + + insert_action_group("msg", message_actions); + + // Context menu + + Gtk.Builder builder = new Gtk.Builder.from_resource( + "/org/gnome/Geary/conversation-message-menus.ui" + ); + context_menu_link = (MenuModel) builder.get_object("context_menu_link"); + context_menu_email = (MenuModel) builder.get_object("context_menu_email"); + context_menu_image = (MenuModel) builder.get_object("context_menu_image"); + context_menu_main = (MenuModel) builder.get_object("context_menu_main"); + context_menu_contact = (MenuModel) builder.get_object("context_menu_contact"); + if (Args.inspector) { + context_menu_inspector = + (MenuModel) builder.get_object("context_menu_inspector"); + } + + // Preview headers + + // Translators: This is displayed in place of the from address + // when the message has no from address. + string empty_from = _("No sender"); + + this.preview_from.set_text(format_originator_preview(empty_from)); + this.preview_from.get_style_context().add_class(FROM_CLASS); + + string date_text = ""; + string date_tooltip = ""; + if (this.message.date != null) { + date_text = Date.pretty_print( + this.message.date.value, config.clock_format + ); + date_tooltip = Date.pretty_print_verbose( + this.message.date.value, config.clock_format + ); + } + this.preview_date.set_text(date_text); + this.preview_date.set_tooltip_text(date_tooltip); + + string preview = this.message.get_preview(); + if (preview.length > MAX_PREVIEW_BYTES) { + preview = Geary.String.safe_byte_substring(preview, MAX_PREVIEW_BYTES); + // Add an ellipsis in case the wider is wider than the text + preview += "…"; + } + this.preview_body.set_text(preview); + + // Full headers + + fill_originator_addresses(empty_from); + + this.date.set_text(date_text); + this.date.set_tooltip_text(date_tooltip); + if (this.message.subject != null) { + this.subject.set_text(this.message.subject.value); + this.subject.set_visible(true); + this.subject_searchable = this.message.subject.value.casefold(); + } + fill_header_addresses(this.to_header, this.message.to); + fill_header_addresses(this.cc_header, this.message.cc); + fill_header_addresses(this.bcc_header, this.message.bcc); + + // Web view + + this.web_view = new ConversationWebView(config); + if (load_remote_images) { + this.web_view.allow_remote_image_loading(); + } + this.web_view.context_menu.connect(on_context_menu); + this.web_view.deceptive_link_clicked.connect(on_deceptive_link_clicked); + this.web_view.link_activated.connect((link) => { + link_activated(link); + }); + this.web_view.load_changed.connect(on_load_changed); + this.web_view.mouse_target_changed.connect(on_mouse_target_changed); + this.web_view.notify["estimated-load-progress"].connect(() => { + this.body_progress.set_fraction(this.web_view.estimated_load_progress); + }); + this.web_view.resource_load_started.connect(on_resource_load_started); + this.web_view.remote_image_load_blocked.connect(() => { + this.remote_images_infobar.show(); + }); + this.web_view.selection_changed.connect(on_selection_changed); + this.web_view.set_hexpand(true); + this.web_view.set_vexpand(true); + this.web_view.show(); + + this.body_container.set_has_tooltip(true); // Used to show link URLs + this.body_container.add(this.web_view); + this.show_progress_timeout = new Geary.TimeoutManager.seconds( + 1, () => { this.body_progress.show(); } + ); + this.hide_progress_timeout = new Geary.TimeoutManager.seconds( + 1, () => { this.body_progress.hide(); } + ); + } + + public override void destroy() { + this.show_progress_timeout.reset(); + this.hide_progress_timeout.reset(); + this.resources.clear(); + this.searchable_addresses.clear(); + base.destroy(); + } + + /** + * Shows the complete message and hides the preview headers. + */ + public void show_message_body(bool include_transitions=true) { + set_revealer(this.preview_revealer, false, include_transitions); + set_revealer(this.header_revealer, true, include_transitions); + set_revealer(this.body_revealer, true, include_transitions); + } + + /** + * Hides the complete message and shows the preview headers. + */ + public void hide_message_body() { + preview_revealer.set_reveal_child(true); + header_revealer.set_reveal_child(false); + body_revealer.set_reveal_child(false); + } + + /** + * Starts loading the avatar for the message's sender. + */ + public async void load_avatar(Soup.Session session, Cancellable load_cancelled) { + Geary.RFC822.MailboxAddress? primary = message.get_primary_originator(); + if (primary != null) { + int window_scale = get_scale_factor(); + int pixel_size = this.avatar.get_pixel_size(); + Soup.Message message = new Soup.Message( + "GET", + Gravatar.get_image_uri( + primary, Gravatar.Default.NOT_FOUND, pixel_size * window_scale + ) + ); + + try { + // We want to just pass load_cancelled to send_async + // here, but per Bug 778720 this is causing some + // crashy race in libsoup's cache implementation, so + // for now just let the load go through and manually + // check to see if the load has been cancelled before + // setting the avatar + InputStream data = yield session.send_async( + message, + null // should be 'load_cancelled' + ); + if (!load_cancelled.is_cancelled() && + data != null && message.status_code == 200) { + yield set_avatar(data, load_cancelled); + } + } catch (Error err) { + debug("Error loading Gravatar response: %s", err.message); + } + } + } + + /** + * Starts loading the message body in the HTML view. + */ + public async void load_message_body(Cancellable load_cancelled) { + string? body_text = null; + try { + body_text = (this.message.has_html_body()) + ? this.message.get_html_body(inline_image_replacer) + : this.message.get_plain_body(true, inline_image_replacer); + } catch (Error err) { + debug("Could not get message text. %s", err.message); + } + + load_cancelled.cancelled.connect(() => { web_view.stop_loading(); }); + this.web_view.load_html(body_text ?? ""); + } + + /** + * Highlights user search terms in the message view. + * + * Highlighting includes both in the message headers, and the + * mesage body. returns the number of matching search terms. + */ + public async uint highlight_search_terms(Gee.Set search_matches) { + // Remove existing highlights + this.web_view.get_find_controller().search_finish(); + + uint headers_found = 0; + uint webkit_found = 0; + foreach(string raw_match in search_matches) { + string match = raw_match.casefold(); + + if (this.subject_searchable.contains(match)) { + this.subject.get_style_context().add_class(MATCH_CLASS); + ++headers_found; + } else { + this.subject.get_style_context().remove_class(MATCH_CLASS); + } + + foreach (AddressFlowBoxChild address in this.searchable_addresses) { + if (address.highlight_search_term(match)) { + ++headers_found; + } + } + } + + webkit_found += yield this.web_view.highlight_search_terms(search_matches); + return headers_found + webkit_found; + } + + /** + * Disables highlighting of any search terms in the message view. + */ + public void unmark_search_terms() { + foreach (AddressFlowBoxChild address in this.searchable_addresses) { + address.unmark_search_terms(); + } + this.web_view.unmark_search_terms(); + } + + private SimpleAction add_action(string name, bool enabled, VariantType? type = null) { + SimpleAction action = new SimpleAction(name, type); + action.set_enabled(enabled); + message_actions.add_action(action); + return action; + } + + private void set_action_enabled(string name, bool enabled) { + SimpleAction? action = this.message_actions.lookup(name) as SimpleAction; + if (action != null) { + action.set_enabled(enabled); + } + } + + private Menu set_action_param_value(MenuModel existing, Variant value) { + Menu menu = new Menu(); + for (int i = 0; i < existing.get_n_items(); i++) { + MenuItem item = new MenuItem.from_model(existing, i); + Variant action = item.get_attribute_value( + Menu.ATTRIBUTE_ACTION, VariantType.STRING + ); + item.set_action_and_target_value(action.get_string(), value); + menu.append_item(item); + } + return menu; + } + + private Menu set_action_param_strings(MenuModel existing, + Gee.Map values) { + Menu menu = new Menu(); + for (int i = 0; i < existing.get_n_items(); i++) { + MenuItem item = new MenuItem.from_model(existing, i); + Variant action = item.get_attribute_value( + Menu.ATTRIBUTE_ACTION, VariantType.STRING + ); + string fq_name = action.get_string(); + string name = fq_name.substring(fq_name.index_of(".") + 1); + item.set_action_and_target( + fq_name, VariantType.STRING.dup_string(), values[name] + ); + menu.append_item(item); + } + return menu; + } + + private string format_originator_preview(string empty_from_text) { + string text = ""; + if (this.message.from != null && this.message.from.size > 0) { + int i = 0; + Gee.List list = + this.message.from.get_all(); + foreach (Geary.RFC822.MailboxAddress addr in list) { + text += has_distinct_name(addr) ? addr.name : addr.address; + + if (++i < list.size) + // Translators: This separates multiple 'from' + // addresses in the header preview for a message. + text += _(", "); + } + } else { + text = empty_from_text; + } + + return text; + } + + private void fill_originator_addresses(string empty_from_text) { + // Show any From header addresses + if (this.message.from != null && this.message.from.size > 0) { + foreach (Geary.RFC822.MailboxAddress address in this.message.from) { + AddressFlowBoxChild child = new AddressFlowBoxChild( + address, AddressFlowBoxChild.Type.FROM + ); + this.searchable_addresses.add(child); + this.from.add(child); + } + } else { + Gtk.Label label = new Gtk.Label(null); + label.set_text(empty_from_text); + + Gtk.FlowBoxChild child = new Gtk.FlowBoxChild(); + child.add(label); + child.set_halign(Gtk.Align.START); + child.show_all(); + this.from.add(child); + } + + // Show the Sender header addresses if present, but only if + // not already in the From header. + if (this.message.sender != null && + (this.message.from == null || + !this.message.from.contains_normalized(this.message.sender.address))) { + AddressFlowBoxChild child = new AddressFlowBoxChild(this.message.sender); + this.searchable_addresses.add(child); + this.sender_header.show(); + this.sender_address.add(child); + } + + // Show any Reply-To header addresses if present, but only if + // each is not already in the From header. + if (this.message.reply_to != null) { + foreach (Geary.RFC822.MailboxAddress address in this.message.reply_to) { + if (this.message.from == null || + !this.message.from.contains_normalized(address.address)) { + AddressFlowBoxChild child = new AddressFlowBoxChild(address); + this.searchable_addresses.add(child); + this.reply_to_addresses.add(child); + this.reply_to_header.show(); + } + } + } + } + + private void fill_header_addresses(Gtk.Grid header, + Geary.RFC822.MailboxAddresses? addresses) { + if (addresses != null && addresses.size > 0) { + Gtk.FlowBox box = header.get_children().nth(0).data as Gtk.FlowBox; + if (box != null) { + foreach (Geary.RFC822.MailboxAddress address in addresses) { + AddressFlowBoxChild child = new AddressFlowBoxChild(address); + this.searchable_addresses.add(child); + box.add(child); + } + } + header.set_visible(true); + } + } + + private async void set_avatar(InputStream data, + Cancellable load_cancelled) + throws Error { + Gdk.Pixbuf avatar_buf = + yield new Gdk.Pixbuf.from_stream_async(data, load_cancelled); + + if (avatar_buf != null && !load_cancelled.is_cancelled()) { + int window_scale = get_scale_factor(); + int avatar_size = this.avatar.pixel_size * window_scale; + if (avatar_buf.width != avatar_size) { + avatar_buf = avatar_buf.scale_simple( + avatar_size, avatar_size, Gdk.InterpType.BILINEAR + ); + } + this.avatar.set_from_surface( + Gdk.cairo_surface_create_from_pixbuf( + avatar_buf, window_scale, get_window() + ) + ); + } + } + + // This delegate is called from within Geary.RFC822.Message.get_body while assembling the plain + // or HTML document when a non-text MIME part is encountered within a multipart/mixed container. + // If this returns null, the MIME part is dropped from the final returned document; otherwise, + // this returns HTML that is placed into the document in the position where the MIME part was + // found + private string? inline_image_replacer(string? filename, Geary.Mime.ContentType? content_type, + Geary.Mime.ContentDisposition? disposition, string? content_id, Geary.Memory.Buffer buffer) { + if (content_type == null) { + debug("Not displaying inline: no Content-Type"); + return null; + } + + if (content_type.media_type != "image" || + !this.web_view.can_show_mime_type(content_type.to_string())) { + debug("Not displaying %s inline: unsupported Content-Type", content_type.to_string()); + return null; + } + + string id = content_id; + if (id == null) { + id = REPLACED_CID_TEMPLATE.printf(this.next_replaced_buffer_number++); + } + + this.web_view.add_internal_resource(id, buffer); + + // Translators: This string is used as the HTML IMG ALT + // attribute value when displaying an inline image in an email + // that did not specify a file name. E.g. Image".printf( + clean_filename, + REPLACED_IMAGE_CLASS, + ClientWebView.CID_URL_PREFIX, + Geary.HTML.escape_markup(id) + ); + } + + private void show_images(bool remember) { + this.is_loading_images = true; + this.web_view.load_remote_images(); + if (remember) { + flag_remote_images(); + } + } + + private inline void set_revealer(Gtk.Revealer revealer, + bool expand, + bool use_transition) { + Gtk.RevealerTransitionType transition = revealer.get_transition_type(); + if (!use_transition) { + revealer.set_transition_type(Gtk.RevealerTransitionType.NONE); + } + revealer.set_reveal_child(expand); + revealer.set_transition_type(transition); + } + + private void on_load_changed(WebKit.LoadEvent load_event) { + if (load_event != WebKit.LoadEvent.FINISHED) { + this.hide_progress_timeout.reset(); + this.body_progress.pulse(); + } else { + this.show_progress_timeout.reset(); + this.hide_progress_timeout.start(); + } + } + + private void on_resource_load_started(WebKit.WebView view, + WebKit.WebResource res, + WebKit.URIRequest req) { + // Cache the resource to allow images to be saved + this.resources[res.get_uri()] = res; + + // We only want to show the body loading progress meter if we + // are actually loading some images, so do it here rather than + // in on_load_changed. + if (this.is_loading_images && + !res.get_uri().has_prefix(ClientWebView.INTERNAL_URL_PREFIX)) { + this.show_progress_timeout.start(); + this.body_progress.pulse(); + if (!this.web_view.is_loading) { + // The initial page load has finished, so we must be + // loading a remote image afterwards at the user's + // request. We can't rely on the load_changed signal + // to stop the timer or estimated-load-progress + // changing, so manually manage it here. + this.remote_resources_requested++; + res.finished.connect(() => { + this.remote_resources_loaded++; + this.body_progress.set_fraction( + (this.remote_resources_loaded / + this.remote_resources_requested) + + this.body_progress.get_pulse_step() + ); + if (this.remote_resources_loaded >= + this.remote_resources_requested) { + this.show_progress_timeout.start(); + this.hide_progress_timeout.start(); + } + }); + } + } + } + + [GtkCallback] + private void on_address_box_child_activated(Gtk.FlowBox box, + Gtk.FlowBoxChild child) { + AddressFlowBoxChild address_child = child as AddressFlowBoxChild; + if (address_child != null) { + address_child.set_state_flags(Gtk.StateFlags.ACTIVE, false); + + Geary.RFC822.MailboxAddress address = address_child.address; + Gee.Map values = new Gee.HashMap(); + values[ACTION_OPEN_LINK] = + Geary.ComposedEmail.MAILTO_SCHEME + address.address; + values[ACTION_COPY_EMAIL] = address.get_full_address(); + values[ACTION_SEARCH_FROM] = address.address; + + Menu model = new Menu(); + model.append_section( + null, set_action_param_strings(this.context_menu_email, values) + ); + model.append_section( + null, set_action_param_strings(this.context_menu_contact, values) + ); + Gtk.Popover popover = new Gtk.Popover.from_model(child, model); + popover.set_position(Gtk.PositionType.BOTTOM); + popover.closed.connect(() => { + address_child.unset_state_flags(Gtk.StateFlags.ACTIVE); + }); + popover.show(); + } + } + + private bool on_context_menu(WebKit.WebView view, + WebKit.ContextMenu context_menu, + Gdk.Event event, + WebKit.HitTestResult hit_test) { + if (this.context_menu != null) { + this.context_menu.detach(); + } + + // Build a new context menu every time the user clicks because + // at the moment under GTK+3.20 it's far easier to selectively + // build a new menu model from pieces as we do here, then to + // have a single menu model and disable the parts we don't + // need. + Menu model = new Menu(); + + if (hit_test.context_is_link()) { + string link_url = hit_test.get_link_uri(); + MenuModel link_menu = + link_url.has_prefix(Geary.ComposedEmail.MAILTO_SCHEME) + ? context_menu_email + : context_menu_link; + model.append_section( + null, + set_action_param_value( + link_menu, new Variant.string(link_url) + ) + ); + } + + if (hit_test.context_is_image()) { + string uri = hit_test.get_image_uri(); + set_action_enabled(ACTION_SAVE_IMAGE, uri in this.resources); + model.append_section( + null, + set_action_param_value( + context_menu_image, + new Variant.tuple({ + new Variant.string(uri), + new Variant("ms", hit_test.get_link_label()), + }) + ) + ); + } + + model.append_section(null, context_menu_main); + + if (context_menu_inspector != null) { + model.append_section(null, context_menu_inspector); + } + + this.context_menu = new Gtk.Menu.from_model(model); + this.context_menu.attach_to_widget(this, null); + this.context_menu.popup(null, null, null, 0, event.get_time()); + + return true; + } + + private void on_mouse_target_changed(WebKit.WebView web_view, + WebKit.HitTestResult hit_test, + uint modifiers) { + this.body_container.set_tooltip_text( + hit_test.context_is_link() ? hit_test.get_link_uri() : null + ); + this.body_container.trigger_tooltip_query(); + } + + // Check for possible phishing links, displays a popover if found. + // If not, lets it go through to the default handler. + private void on_deceptive_link_clicked(ConversationWebView.DeceptiveText reason, + string text, + string href, + Gdk.Rectangle location) { + string text_href = text; + if (Uri.parse_scheme(text_href) == null) { + text_href = "http://" + text_href; + } + string text_label = Soup.URI.decode(text_href); + + string anchor_href = href; + if (Uri.parse_scheme(anchor_href) == null) { + anchor_href = "http://" + anchor_href; + } + string anchor_label = Soup.URI.decode(anchor_href); + + // Escape text and especially URLs since we got them from the + // HREF, and Gtk.Label.set_markup is a strict parser. + good_link_label.set_markup( + Markup.printf_escaped("%s", text_href, text_label) + ); + bad_link_label.set_markup( + Markup.printf_escaped("%s", anchor_href, anchor_label) + ); + link_popover.set_relative_to(this.web_view); + link_popover.set_pointing_to(location); + link_popover.show(); + } + + [GtkCallback] + private bool on_link_popover_activated() { + this.link_popover.hide(); + return Gdk.EVENT_PROPAGATE; + } + + private void on_selection_changed(bool has_selection) { + set_action_enabled(ACTION_COPY_SELECTION, has_selection); + } + + [GtkCallback] + private void on_remote_images_response(Gtk.InfoBar info_bar, int response_id) { + switch (response_id) { + case 1: + // Show images for the message + show_images(true); + break; + case 2: + // Show images for sender + show_images(false); + remember_remote_images(); + break; + default: + // Pass + break; + } + + remote_images_infobar.hide(); + } + + private void on_copy_link(Variant? param) { + Gtk.Clipboard clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD); + clipboard.set_text(param.get_string(), -1); + clipboard.store(); + } + + private void on_copy_email_address(Variant? param) { + string value = param.get_string(); + if (value.has_prefix(Geary.ComposedEmail.MAILTO_SCHEME)) { + value = value.substring(Geary.ComposedEmail.MAILTO_SCHEME.length, -1); + } + Gtk.Clipboard clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD); + clipboard.set_text(value, -1); + clipboard.store(); + } + + private void on_save_image(Variant? param) { + string cid_url = param.get_child_value(0).get_string(); + + string? alt_text = null; + Variant? alt_maybe = param.get_child_value(1).get_maybe(); + if (alt_maybe != null) { + alt_text = alt_maybe.get_string(); + } + WebKit.WebResource response = this.resources.get(cid_url); + response.get_data.begin(null, (obj, res) => { + try { + uint8[] data = response.get_data.end(res); + save_image(response.get_uri(), + alt_text, + new Geary.Memory.ByteBuffer(data, data.length)); + } catch (Error err) { + debug( + "Failed to get image data from web view: %s", + err.message + ); + } + }); + } + +} diff -Nru geary-0.11.4/src/client/conversation-viewer/conversation-viewer.vala geary-0.12.0/src/client/conversation-viewer/conversation-viewer.vala --- geary-0.11.4/src/client/conversation-viewer/conversation-viewer.vala 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/src/client/conversation-viewer/conversation-viewer.vala 2017-10-02 11:25:21.000000000 +0000 @@ -1,2530 +1,366 @@ -/* Copyright 2016 Software Freedom Conservancy Inc. +/* + * Copyright 2016 Software Freedom Conservancy Inc. + * Copyright 2016 Michael Gratton * * This software is licensed under the GNU Lesser General Public License - * (version 2.1 or later). See the COPYING file in this distribution. + * (version 2.1 or later). See the COPYING file in this distribution. */ /** - * A WebKit view displaying all the emails in a {@link Geary.App.Conversation}. - * - * Unlike ConversationListStore (which sorts by date received), ConversationViewer sorts by the - * {@link Geary.Email.date} field (the Date: header), as that's the date displayed to the user. + * Displays the messages in a conversation and in-window composers. */ +[GtkTemplate (ui = "/org/gnome/Geary/conversation-viewer.ui")] +public class ConversationViewer : Gtk.Stack { -public class ConversationViewer : Gtk.Box { - public const Geary.Email.Field REQUIRED_FIELDS = - Geary.Email.Field.HEADER - | Geary.Email.Field.BODY - | Geary.Email.Field.ORIGINATORS - | Geary.Email.Field.RECEIVERS - | Geary.Email.Field.SUBJECT - | Geary.Email.Field.DATE - | Geary.Email.Field.FLAGS - | Geary.Email.Field.PREVIEW; - - private const string[] INLINE_MIME_TYPES = { - "image/png", - "image/gif", - "image/jpeg", - "image/pjpeg", - "image/bmp", - "image/x-icon", - "image/x-xbitmap", - "image/x-xbm" - }; - - private const int ATTACHMENT_PREVIEW_SIZE = 50; - private const int SELECT_CONVERSATION_TIMEOUT_MSEC = 100; - private const string MESSAGE_CONTAINER_ID = "message_container"; - private const string SELECTION_COUNTER_ID = "multiple_messages"; - private const string SPINNER_ID = "spinner"; - private const string REPLACED_IMAGE_CLASS = "replaced_inline_image"; - private const string DATA_IMAGE_CLASS = "data_inline_image"; - private const int MAX_INLINE_IMAGE_MAJOR_DIM = 1024; - private const int QUOTE_SIZE_THRESHOLD = 120; - - private enum SearchState { - // Search/find states. - NONE, // Not in search - FIND, // Find toolbar - SEARCH_FOLDER, // Search folder - - COUNT; - } - - private enum SearchEvent { - // User-initated events. - RESET, - OPEN_FIND_BAR, - CLOSE_FIND_BAR, - ENTER_SEARCH_FOLDER, - - COUNT; - } - - // Main display mode. - private enum DisplayMode { - NONE = 0, // Nothing is shown (ni - CONVERSATION, // Email conversation - MULTISELECT, // Message indicating that <> 1 conversations are selected - LOADING, // Loading spinner - - COUNT; - - // Returns the CSS id associated with this mode's DIV container. - public string get_id() { - switch (this) { - case CONVERSATION: - return MESSAGE_CONTAINER_ID; - - case MULTISELECT: - return SELECTION_COUNTER_ID; - - case LOADING: - return SPINNER_ID; - - default: - assert_not_reached(); - } - } - } - - // Internal class to associate inline image buffers (replaced by rotated scaled versions of - // them) so they can be saved intact if the user requires it - private class ReplacedImage : Geary.BaseObject { - public string id; - public string filename; - public Geary.Memory.Buffer buffer; - - public ReplacedImage(int replaced_number, string filename, Geary.Memory.Buffer buffer) { - id = "%X".printf(replaced_number); - this.filename = filename; - this.buffer = buffer; - } - } - - // Fired when the user clicks a link. - public signal void link_selected(string link); - - // Fired when the user clicks "reply" in the message menu. - public signal void reply_to_message(Geary.Email message); - - // Fired when the user clicks "reply all" in the message menu. - public signal void reply_all_message(Geary.Email message); - - // Fired when the user clicks "forward" in the message menu. - public signal void forward_message(Geary.Email message); - - // Fired when the user mark messages. - public signal void mark_messages(Gee.Collection emails, - Geary.EmailFlags? flags_to_add, Geary.EmailFlags? flags_to_remove); - - // Fired when the user opens an attachment. - public signal void open_attachment(Geary.Attachment attachment); - - // Fired when the user wants to save one or more attachments. - public signal void save_attachments(Gee.List attachment); - - // Fired when the user wants to save an image buffer to disk - public signal void save_buffer_to_file(string? filename, Geary.Memory.Buffer buffer); - - // Fired when the user clicks the edit draft button. - public signal void edit_draft(Geary.Email message); - - // Fired when the viewer has been cleared. - public signal void cleared(); - - // List of emails in this view. - public Gee.TreeSet messages { get; private set; default = - new Gee.TreeSet(Geary.Email.compare_sent_date_ascending); } - - // The HTML viewer to view the emails. - public ConversationWebView web_view { get; private set; } - - // Current conversation, or null if none. - public Geary.App.Conversation? current_conversation = null; - - // Overlay consisting of a label in front of a webpage - private Gtk.Overlay message_overlay; - - // Label for displaying overlay messages. - private Gtk.Label message_overlay_label; - - // Overlay containing any inline composers. - public ScrollableOverlay compose_overlay; - - // Paned for holding any paned composers. - private Gtk.Box composer_boxes; - - // Maps emails to their corresponding elements. - private Gee.HashMap email_to_element = new - Gee.HashMap(); - - // State machine setup for search/find modes. - private Geary.State.MachineDescriptor search_machine_desc = new Geary.State.MachineDescriptor( - "ConversationViewer search", SearchState.NONE, SearchState.COUNT, SearchEvent.COUNT, null, null); - - private string? hover_url = null; - private Gtk.Menu? context_menu = null; - private Gtk.Menu? message_menu = null; - private Gtk.Menu? attachment_menu = null; - private Gtk.Menu? image_menu = null; - private weak Geary.Folder? current_folder = null; - private weak Geary.SearchFolder? search_folder = null; - private Geary.App.EmailStore? email_store = null; - private Geary.AccountInformation? current_account_information = null; - private ConversationFindBar conversation_find_bar; - private Cancellable cancellable_fetch = new Cancellable(); - private Geary.State.Machine fsm; - private DisplayMode display_mode = DisplayMode.NONE; - private uint select_conversation_timeout_id = 0; - private Gee.HashSet inlined_content_ids = new Gee.HashSet(); - private int next_replaced_buffer_number = 0; - private Gee.HashMap replaced_images = new Gee.HashMap(); - private Gee.HashSet replaced_content_ids = new Gee.HashSet(); - private Gee.HashSet blacklist_ids = new Gee.HashSet(); - - public ConversationViewer() { - Object(orientation: Gtk.Orientation.VERTICAL, spacing: 0); - - web_view = new ConversationWebView(); - - // Setup state machine for search/find states. - Geary.State.Mapping[] mappings = { - new Geary.State.Mapping(SearchState.NONE, SearchEvent.RESET, on_reset), - new Geary.State.Mapping(SearchState.NONE, SearchEvent.OPEN_FIND_BAR, on_open_find_bar), - new Geary.State.Mapping(SearchState.NONE, SearchEvent.CLOSE_FIND_BAR, on_close_find_bar), - new Geary.State.Mapping(SearchState.NONE, SearchEvent.ENTER_SEARCH_FOLDER, on_enter_search_folder), - - new Geary.State.Mapping(SearchState.FIND, SearchEvent.RESET, on_reset), - new Geary.State.Mapping(SearchState.FIND, SearchEvent.OPEN_FIND_BAR, Geary.State.nop), - new Geary.State.Mapping(SearchState.FIND, SearchEvent.CLOSE_FIND_BAR, on_close_find_bar), - new Geary.State.Mapping(SearchState.FIND, SearchEvent.ENTER_SEARCH_FOLDER, Geary.State.nop), - - new Geary.State.Mapping(SearchState.SEARCH_FOLDER, SearchEvent.RESET, on_reset), - new Geary.State.Mapping(SearchState.SEARCH_FOLDER, SearchEvent.OPEN_FIND_BAR, on_open_find_bar), - new Geary.State.Mapping(SearchState.SEARCH_FOLDER, SearchEvent.CLOSE_FIND_BAR, on_close_find_bar), - new Geary.State.Mapping(SearchState.SEARCH_FOLDER, SearchEvent.ENTER_SEARCH_FOLDER, Geary.State.nop), - }; - - fsm = new Geary.State.Machine(search_machine_desc, mappings, null); - fsm.set_logging(false); - - GearyApplication.instance.controller.conversations_selected.connect(on_conversations_selected); - GearyApplication.instance.controller.folder_selected.connect(on_folder_selected); - GearyApplication.instance.controller.conversation_count_changed.connect(on_conversation_count_changed); - - web_view.hovering_over_link.connect(on_hovering_over_link); - web_view.context_menu.connect(() => { return true; }); // Suppress default context menu. - web_view.realize.connect( () => { web_view.get_vadjustment().value_changed.connect(mark_read); }); - web_view.size_allocate.connect(mark_read); - - web_view.link_selected.connect((link) => { link_selected(link); }); - - compose_overlay = new ScrollableOverlay(web_view); - - Gtk.ScrolledWindow conversation_viewer_scrolled = new Gtk.ScrolledWindow(null, null); - conversation_viewer_scrolled.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC); - conversation_viewer_scrolled.add(compose_overlay); - - message_overlay = new Gtk.Overlay(); - message_overlay.add(conversation_viewer_scrolled); - - Gtk.Paned composer_paned = new Gtk.Paned(Gtk.Orientation.VERTICAL); - composer_paned.pack1(message_overlay, true, false); - composer_boxes = new Gtk.Box(Gtk.Orientation.VERTICAL, 0); - composer_boxes.no_show_all = true; - composer_paned.pack2(composer_boxes, true, false); - Configuration config = GearyApplication.instance.config; - config.bind(Configuration.COMPOSER_PANE_POSITION_KEY, composer_paned, "position"); - pack_start(composer_paned); - composer_boxes.notify["visible"].connect(() => { - if (!composer_boxes.visible && !message_overlay.visible) - message_overlay.show(); - }); - - conversation_find_bar = new ConversationFindBar(web_view); - conversation_find_bar.no_show_all = true; - conversation_find_bar.close.connect(() => { fsm.issue(SearchEvent.CLOSE_FIND_BAR); }); - - pack_start(conversation_find_bar, false); - } - - public void set_paned_composer(ComposerWidget composer) { - ComposerBox container = new ComposerBox(composer); - composer_boxes.pack_start(container); - composer_boxes.show(); - if (composer.state == ComposerWidget.ComposerState.NEW) - message_overlay.hide(); - } - - public Geary.Email? get_last_message() { - return messages.is_empty ? null : messages.last(); - } - - public Geary.Email? get_selected_message(out string? quote) { - quote = null; - WebKit.DOM.Document document = web_view.get_dom_document(); - WebKit.DOM.DOMSelection selection = document.default_view.get_selection(); - if (selection.is_collapsed) - return get_last_message(); - - WebKit.DOM.Element? anchor_element = selection.anchor_node as WebKit.DOM.Element; - Geary.Email? anchor_email = null; - if (anchor_element == null) - anchor_element = selection.anchor_node.parent_element; - if (anchor_element != null) - anchor_email = get_email_from_element(anchor_element); - - WebKit.DOM.Element? focus_element = selection.focus_node as WebKit.DOM.Element; - Geary.Email? focus_email = null; - if (focus_element == null) - focus_element = selection.focus_node.parent_element; - if (focus_element != null) - focus_email = get_email_from_element(focus_element); - - if (anchor_email != null && anchor_email == focus_email) { - try { - WebKit.DOM.Range range = selection.get_range_at(0); - WebKit.DOM.HTMLElement dummy = (WebKit.DOM.HTMLElement) document.create_element("div"); - bool include_dummy = false; - WebKit.DOM.Node ancestor_node = range.get_common_ancestor_container(); - WebKit.DOM.Element? ancestor = ancestor_node as WebKit.DOM.Element; - if (ancestor == null) - ancestor = ancestor_node.get_parent_element(); - // If the selection is part of a plain text message, we have to stick it in - // an appropriately styled div, so that new lines are preserved. - if (is_descendant_of(ancestor, ".plaintext")) { - dummy.get_class_list().add("plaintext"); - dummy.set_attribute("style", "white-space: pre-wrap;"); - include_dummy = true; - } - dummy.append_child(range.clone_contents()); - - // Remove the chrome we put around quotes, leaving only the blockquote element. - WebKit.DOM.NodeList quotes = dummy.query_selector_all(".quote_container"); - for (int i = 0; i < quotes.length; i++) { - WebKit.DOM.Element div = (WebKit.DOM.Element) quotes.item(i); - WebKit.DOM.Element blockquote = div.query_selector("blockquote"); - div.get_parent_element().replace_child(blockquote, div); - } - - quote = include_dummy ? dummy.get_outer_html() : dummy.get_inner_html(); - return anchor_email; - } catch (Error error) { - debug("Problem getting selected text: %s", error.message); - } - } - - return get_last_message(); - } - - // Removes all displayed e-mails from the view. - private void clear(Geary.Folder? new_folder, Geary.AccountInformation? account_information) { - // Remove all messages from DOM. - try { - foreach (WebKit.DOM.HTMLElement element in email_to_element.values) { - remove_tables_safely(element); - if (element.get_parent_element() != null) - element.get_parent_element().remove_child(element); - } - } catch (Error e) { - debug("Error clearing message viewer: %s", e.message); - } - email_to_element.clear(); - messages.clear(); - inlined_content_ids.clear(); - replaced_images.clear(); - replaced_content_ids.clear(); - blacklist_ids.clear(); - blacklist_css(); - - current_account_information = account_information; - cleared(); - } - - // Converts an email ID into HTML ID used by the
for the email. - public string get_div_id(Geary.EmailIdentifier id) { - return "message_%s".printf(id.to_string()); - } - - public void blacklist_by_id(Geary.EmailIdentifier? id) { - if (id == null) - return; - blacklist_ids.add(get_div_id(id)); - blacklist_css(); - } - - public void unblacklist_by_id(Geary.EmailIdentifier? id) { - if (id == null) - return; - blacklist_ids.remove(get_div_id(id)); - blacklist_css(); - } - - private void blacklist_css() { - GLib.StringBuilder rule = new GLib.StringBuilder(); - bool first = true; - foreach (string id in blacklist_ids) { - if (!first) - rule.append(", "); - else - first = false; - rule.append("div[id=\"" + id + "\"]"); - } - if (!first) - rule.append(" { display: none; }"); - - WebKit.DOM.HTMLElement? style_element = web_view.get_dom_document() - .get_element_by_id("blacklist_ids") as WebKit.DOM.HTMLElement; - if (style_element != null) { - try { - style_element.set_inner_html(rule.str); - } catch (Error error) { - debug("Error setting blaklist CSS: %s", error.message); - } - } - } - - private void show_special_message(string msg) { - // Remove any messages and hide the message container, then show the special message. - clear(current_folder, current_account_information); - set_mode(DisplayMode.MULTISELECT); - - try { - // Update the counter's count. - WebKit.DOM.HTMLElement counter = - web_view.get_dom_document().get_element_by_id("selection_counter") as WebKit.DOM.HTMLElement; - counter.set_inner_html(msg); - } catch (Error e) { - debug("Error updating counter: %s", e.message); - } - } - - private void hide_special_message() { - if (display_mode != DisplayMode.MULTISELECT) - return; - - clear(current_folder, current_account_information); - set_mode(DisplayMode.NONE); - } - - private void show_multiple_selected(uint selected_count) { - if (selected_count == 0) { - show_special_message(_("No conversations selected.")); - } else { - show_special_message(ngettext("%u conversation selected.", "%u conversations selected.", - selected_count).printf(selected_count)); - } - } - - private void on_folder_selected(Geary.Folder? folder) { - hide_special_message(); - cancel_load(); - - current_folder = folder; - email_store = (current_folder == null ? null : new Geary.App.EmailStore(current_folder.account)); - fsm.issue(SearchEvent.RESET); - - if (folder == null) { - clear(null, null); - current_conversation = null; - } - - if (current_folder is Geary.SearchFolder) { - fsm.issue(SearchEvent.ENTER_SEARCH_FOLDER); - web_view.allow_collapsing(false); - } else { - web_view.allow_collapsing(true); - } - } - - private void on_conversation_count_changed(int count) { - if (count != 0) - hide_special_message(); - else if (current_folder is Geary.SearchFolder) - show_special_message(_("No search results found.")); - else - show_special_message(_("No conversations in folder.")); - } - - private void on_conversations_selected(Gee.Set? conversations, - Geary.Folder? current_folder) { - cancel_load(); - // Clear the URL overlay - on_hovering_over_link(null, null); - if (current_conversation != null) { - current_conversation.appended.disconnect(on_conversation_appended); - current_conversation.trimmed.disconnect(on_conversation_trimmed); - current_conversation.email_flags_changed.disconnect(update_flags); - current_conversation = null; - } - - // Disable message buttons until conversation loads. - GearyApplication.instance.controller.enable_message_buttons(false); - - if (conversations == null || conversations.size == 0 || current_folder == null) { - show_multiple_selected(0); - return; - } - - if (conversations.size == 1) { - clear(current_folder, current_folder.account.information); - web_view.scroll_reset(); - - if (select_conversation_timeout_id != 0) - Source.remove(select_conversation_timeout_id); - - // If the load is taking too long, display a spinner. - select_conversation_timeout_id = Timeout.add(SELECT_CONVERSATION_TIMEOUT_MSEC, () => { - if (select_conversation_timeout_id != 0) - set_mode(DisplayMode.LOADING); - - return false; - }); - - current_conversation = Geary.Collection.get_first(conversations); - - select_conversation_async.begin(current_conversation, current_folder, - on_select_conversation_completed); - - current_conversation.appended.connect(on_conversation_appended); - current_conversation.trimmed.connect(on_conversation_trimmed); - current_conversation.email_flags_changed.connect(update_flags); - - GearyApplication.instance.controller.enable_message_buttons(true); - } else if (conversations.size > 1) { - show_multiple_selected(conversations.size); - - GearyApplication.instance.controller.enable_multiple_message_buttons(); - } - } - - private async void select_conversation_async(Geary.App.Conversation conversation, - Geary.Folder current_folder) throws Error { - // Load this once, so if it's cancelled, we cancel the WHOLE load. - Cancellable cancellable = cancellable_fetch; - - // Fetch full messages. - Gee.Collection? messages_to_add - = yield list_full_messages_async(conversation.get_emails( - Geary.App.Conversation.Ordering.SENT_DATE_ASCENDING), cancellable); - - if (cancellable.is_cancelled()) { - return; - } - - // Add messages. - if (messages_to_add != null) { - foreach (Geary.Email email in messages_to_add) - add_message(email, conversation.is_in_current_folder(email.id)); - } - - if (current_folder is Geary.SearchFolder) { - yield highlight_search_terms(); - } else { - unhide_last_email(); - compress_emails(); - } - } - - private void on_select_conversation_completed(Object? source, AsyncResult result) { - try { - select_conversation_async.end(result); - - mark_read(); - } catch (Error err) { - debug("Unable to select conversation: %s", err.message); - } - } - - private void on_search_text_changed(Geary.SearchQuery? query) { - if (query != null) - highlight_search_terms.begin(); - } - - // This applies a fudge-factor set of matches when the database results - // aren't entirely satisfactory, such as when you search for an email - // address and the database tokenizes out the @ and ., etc. It's not meant - // to be comprehensive, just a little extra highlighting applied to make - // the results look a little closer to what you typed. - private void add_literal_matches(string raw_query, Gee.Set? search_matches) { - foreach (string word in raw_query.split(" ")) { - if (word.has_suffix("\"")) - word = word.substring(0, word.length - 1); - if (word.has_prefix("\"")) - word = word.substring(1); - - if (!Geary.String.is_empty_or_whitespace(word)) - search_matches.add(word); - } - } - - private async void highlight_search_terms() { - if (search_folder == null) - return; - - // Remove existing highlights. - web_view.unmark_text_matches(); - - // List all IDs of emails we're viewing. - Gee.Collection ids = new Gee.ArrayList(); - foreach (Geary.Email email in messages) - ids.add(email.id); - - try { - Gee.Set? search_matches = yield search_folder.get_search_matches_async( - ids, cancellable_fetch); - if (search_matches == null) - search_matches = new Gee.HashSet(); - - if (search_folder.search_query != null) - add_literal_matches(search_folder.search_query.raw, search_matches); - - // Webkit's highlighting is ... weird. In order to actually see - // all the highlighting you're applying, it seems necessary to - // start with the shortest string and work up. If you don't, it - // seems that shorter strings will overwrite longer ones, and - // you're left with incomplete highlighting. - Gee.ArrayList ordered_matches = new Gee.ArrayList(); - ordered_matches.add_all(search_matches); - ordered_matches.sort((a, b) => a.length - b.length); - - foreach(string match in ordered_matches) - web_view.mark_text_matches(match, false, 0); - } catch (Error e) { - debug("Error highlighting search results: %s", e.message); - } - - web_view.set_highlight_text_matches(true); - } - - // Given some emails, fetch the full versions with all required fields. - private async Gee.Collection? list_full_messages_async( - Gee.Collection emails, Cancellable? cancellable) throws Error { - Geary.Email.Field required_fields = ConversationViewer.REQUIRED_FIELDS | - Geary.ComposedEmail.REQUIRED_REPLY_FIELDS; - - Gee.ArrayList ids = new Gee.ArrayList(); - foreach (Geary.Email email in emails) - ids.add(email.id); - - return yield email_store.list_email_by_sparse_id_async(ids, required_fields, - Geary.Folder.ListFlags.NONE, cancellable); - } - - // Given an email, fetch the full version with all required fields. - private async Geary.Email fetch_full_message_async(Geary.Email email, - Cancellable? cancellable) throws Error { - Geary.Email.Field required_fields = ConversationViewer.REQUIRED_FIELDS | - Geary.ComposedEmail.REQUIRED_REPLY_FIELDS; - - return yield email_store.fetch_email_async(email.id, required_fields, - Geary.Folder.ListFlags.NONE, cancellable); - } - - // Cancels the current message load, if in progress. - private void cancel_load() { - Cancellable old_cancellable = cancellable_fetch; - cancellable_fetch = new Cancellable(); - - old_cancellable.cancel(); - } - - private void on_conversation_appended(Geary.App.Conversation conversation, Geary.Email email) { - on_conversation_appended_async.begin(conversation, email, on_conversation_appended_complete); - } - - private async void on_conversation_appended_async(Geary.App.Conversation conversation, - Geary.Email email) throws Error { - add_message(yield fetch_full_message_async(email, cancellable_fetch), - conversation.is_in_current_folder(email.id)); - } - - private void on_conversation_appended_complete(Object? source, AsyncResult result) { - try { - on_conversation_appended_async.end(result); - } catch (Error err) { - debug("Unable to append email to conversation: %s", err.message); - } - } - - private void on_conversation_trimmed(Geary.Email email) { - remove_message(email); - } - - private void add_message(Geary.Email email, bool is_in_folder) { - // Make sure the message container is showing and the multi-message counter hidden. - set_mode(DisplayMode.CONVERSATION); - - if (messages.contains(email)) - return; - - string message_id = get_div_id(email.id); - - WebKit.DOM.Node insert_before = web_view.container.get_last_child(); - - messages.add(email); - Geary.Email? higher = messages.higher(email); - if (higher != null) - insert_before = web_view.get_dom_document().get_element_by_id(get_div_id(higher.id)); - - WebKit.DOM.HTMLElement div_message; - - try { - div_message = make_email_div(); - div_message.set_attribute("id", message_id); - web_view.container.insert_before(div_message, insert_before); - if (email.is_unread() == Geary.Trillian.FALSE) { - div_message.get_class_list().add("hide"); - } - if (email.from != null && email.from.contains_normalized(current_account_information.email)) { - div_message.get_class_list().add("sent"); - } - } catch (Error setup_error) { - warning("Error setting up webkit: %s", setup_error.message); - - return; - } - email_to_element.set(email.id, div_message); - - bool remote_images = false; - try { - set_message_html(email.get_message(), div_message, out remote_images); - } catch (Error error) { - warning("Error getting message from email: %s", error.message); - } - - if (remote_images) { - Geary.Contact contact = current_folder.account.get_contact_store().get_by_rfc822( - email.get_primary_originator()); - bool always_load = contact != null && contact.always_load_remote_images(); - - if (always_load || email.load_remote_images().is_certain()) { - show_images_email(div_message, false); - } else { - WebKit.DOM.HTMLElement remote_images_bar = - Util.DOM.select(div_message, ".remote_images"); - try { - ((WebKit.DOM.Element) remote_images_bar).get_class_list().add("show"); - remote_images_bar.set_inner_html("""%s %s - - """.printf( - remote_images_bar.get_inner_html(), - _("This message contains remote images."), _("Show Images"), - _("Always Show From Sender"))); - } catch (Error error) { - warning("Error showing remote images bar: %s", error.message); - } - } - } - - // Set attachment icon and add the attachments container if there are displayed attachments. - int displayed = displayed_attachments(email); - set_attachment_icon(div_message, displayed > 0); - if (displayed > 0) { - insert_attachments(div_message, email.attachments); - } - - // Add classes according to the state of the email. - update_flags(email); - - // Edit draft button for drafts folder. - if (in_drafts_folder() && is_in_folder) { - WebKit.DOM.HTMLElement draft_edit_container = Util.DOM.select(div_message, ".draft_edit"); - WebKit.DOM.HTMLElement draft_edit_button = - Util.DOM.select(div_message, ".draft_edit_button"); - try { - draft_edit_container.set_attribute("style", "display:block"); - draft_edit_button.set_inner_html(_("Edit Draft")); - } catch (Error e) { - warning("Error setting draft button: %s", e.message); - } - } - - // Add animation class after other classes set, to avoid initial animation. - Idle.add(() => { - try { - div_message.get_class_list().add("animate"); - // This will only affect any open emails. Those in the hidden state will have - // their quotes set when they're opened. - unset_controllable_quotes(div_message); - } catch (Error error) { - debug("Could not enable animation class: %s", error.message); - } - return false; - }); - - // Attach to the click events for hiding/showing quotes, opening the menu, and so forth. - bind_event(web_view, ".email", "contextmenu", (Callback) on_context_menu, this); - bind_event(web_view, ".quote_container > .hider", "click", (Callback) on_hide_quote_clicked); - bind_event(web_view, ".quote_container > .shower", "click", (Callback) on_show_quote_clicked); - bind_event(web_view, ".email_container .menu", "click", (Callback) on_menu_clicked, this); - bind_event(web_view, ".email_container .starred", "click", (Callback) on_unstar_clicked, this); - bind_event(web_view, ".email_container .unstarred", "click", (Callback) on_star_clicked, this); - bind_event(web_view, ".email_container .draft_edit .button", "click", (Callback) on_draft_edit_menu, this); - bind_event(web_view, ".header .field .value", "click", (Callback) on_value_clicked, this); - bind_event(web_view, ".email:not(:only-of-type) .header_container, .email .email .header_container","click", (Callback) on_body_toggle_clicked, this); - bind_event(web_view, ".email .compressed_note", "click", (Callback) on_body_toggle_clicked, this); - bind_event(web_view, ".attachment_container .attachment", "click", (Callback) on_attachment_clicked, this); - bind_event(web_view, ".attachment_container .attachment", "contextmenu", (Callback) on_attachment_menu, this); - bind_event(web_view, "." + DATA_IMAGE_CLASS, "contextmenu", (Callback) on_data_image_menu_handler, this); - bind_event(web_view, ".remote_images .show_images", "click", (Callback) on_show_images, this); - bind_event(web_view, ".remote_images .show_from", "click", (Callback) on_show_images_from, this); - bind_event(web_view, ".remote_images .close_show_images", "click", (Callback) on_close_show_images, this); - bind_event(web_view, ".body a", "click", (Callback) on_link_clicked, this); - - // Update the search results - if (conversation_find_bar.visible) - conversation_find_bar.commence_search(); - } - - private WebKit.DOM.HTMLElement make_email_div() { - // The HTML is like this: - // - return Util.DOM.clone_select(web_view.get_dom_document(), "#email_template"); + /** + * The current conversation listbox, if any. + */ + public ConversationListBox? current_list { + get; private set; default = null; } - - private void set_message_html(Geary.RFC822.Message message, WebKit.DOM.HTMLElement div_message, - out bool remote_images) { - string header = ""; - WebKit.DOM.HTMLElement div_email_container = Util.DOM.select(div_message, "div.email_container"); - - insert_header_address(ref header, _("From:"), message.from, true); - - if (message.to != null) - insert_header_address(ref header, _("To:"), message.to); - - if (message.cc != null) - insert_header_address(ref header, _("Cc:"), message.cc); - - if (message.bcc != null) - insert_header_address(ref header, _("Bcc:"), message.bcc); - - if (message.subject != null) - insert_header(ref header, _("Subject:"), message.subject.value); - - if (message.date != null) - insert_header_date(ref header, _("Date:"), message.date.value, true); - - // Add the avatar. - Geary.RFC822.MailboxAddress? primary = message.sender; - if (primary != null) { - try { - WebKit.DOM.HTMLImageElement icon = Util.DOM.select(div_message, ".avatar") - as WebKit.DOM.HTMLImageElement; - icon.set_attribute("src", - Gravatar.get_image_uri(primary, Gravatar.Default.MYSTERY_MAN, 48)); - } catch (Error error) { - debug("Failed to inject avatar URL: %s", error.message); - } - } - - // Insert the preview text. - try { - WebKit.DOM.HTMLElement preview = - Util.DOM.select(div_message, ".header_container .preview"); - string preview_str = message.get_preview(); - if (preview_str.length == Geary.Email.MAX_PREVIEW_BYTES) { - preview_str += "…"; - } - preview.set_inner_text(Geary.String.reduce_whitespace(preview_str)); - } catch (Error error) { - debug("Failed to add preview text: %s", error.message); - } - - // - // Build an HTML document from the email with two passes: - // - // * Geary.RFC822.Message.get_body() recursively walks the message's MIME structure looking - // for text MIME parts and assembles them sequentially. If non-text MIME parts are - // discovered within a multipart/mixed container, it calls inline_image_replacer(), which - // converts them to an IMG tag with a data: URI if they are a supported image type. - // Otherwise, the MIME part is dropped. - // - // * insert_html_markup() then strips everything outside the BODY, turning the BODY tag - // itself into a DIV, and performs other massaging of the HTML. It also looks for IMG - // tags that refer to other MIME parts via their Content-ID, converts them to data: URIs, - // and inserts them into the document. - // - // Attachments are generated and added in add_message(), which calls this method before - // building the HTML for them. The above two steps take steps to avoid inlining images - // that are actually attachments (in particular, get_body() considers their - // Content-Disposition) - // - - string? body_text = null; - try { - if (message.has_html_body()) { - body_text = message.get_html_body(inline_image_replacer); - } else { - body_text = message.get_plain_body(true, inline_image_replacer); - } - } catch (Error err) { - debug("Could not get message text. %s", err.message); - } - remote_images = false; - body_text = insert_html_markup(body_text ?? "", message, out remote_images); - - // Graft header and email body into the email container. - try { - WebKit.DOM.HTMLElement table_header = - Util.DOM.select(div_email_container, ".header_container .header"); - table_header.set_inner_html(header); - - WebKit.DOM.HTMLElement span_body = Util.DOM.select(div_email_container, ".body"); - span_body.set_inner_html(body_text); - } catch (Error html_error) { - warning("Error setting HTML for message: %s", html_error.message); - } - - // Scope + + +
+


Hi Kenneth,

We xxxxx xxxx xx xxx xxx xx xxxx x xxxxx= +xxx xxxxxxxx.=C2=A0



Thank you,

XXXXX= +X XXXXXX

You can reply directly to this message or click the fol= +lowing link:
https://app.foobar.com/xxxxxxxxxxxxxxxx1641966deff6c48623ab= +a

You can change your email preferences at:
https://app.foobar.com/xxxxxxxxxxx

"""; + + public static string HTML_BODY1_EXPECTED = "Hi Kenneth, We xxxxx xxxx xx xxx xxx xx xxxx x xxxxxxxx xxxxxxxx.  Thank you, XXXXXX XXXXXX You can reply directly to this message or click the following link: https://app.foobar.com/xxxxxxxxxxxxxxxx1641966deff6c48623aba You can change your email preferences at: https://app.foobar.com/xxxxxxxxxxx"; + + public static string HTML_BODY2_ENCODED = """ + + + + + + +
+
+ + + +
+ + + + + + +
+Buy It Now from US $1,750.00 to US $5,950.00. +
+
+ + + +
+ + + +
3D""<= +/td> +
+
+ + + +
+ + + + + + +
+

+Daccordi, Worldwide: 2 new matches today +

+
+
+ + + +
+ + + + + + +
+
+ + + + +
+ + + + + + + + + + + + + +
+ + + + + + +
+ + + + + +
+
+

+ +Daccordi 50th anniversary edition with... + +

+
+Buy it now: US $5,950.00 +
+100% positive feedback +
+
+ + + + +
+ + + + + + + + + + + + + +
+ + + + + + +
+ + + + + +
+
+

+ +Daccordi Griffe Campagnolo Croce D'Aune... + +

+
+Buy it now: US $1,750.00 +
+100% positive feedback +
+
+
+
+
+ + + +
+ + + + + + + +
+ + + + + + + + + +
+ + + + +
+ View all results +
+
3D""
3D""
+ + + + + + + + + +
+ + + + +
+Refine this search +
+
3D""
3D""
+
+ + + + +
+ Disable emails for this search<= +/a> +
+
+
 
+ + + +
+ + + + +
+
+
+ + +"""; + + public static string HTML_BODY2_EXPECTED = "Buy It Now from US $1,750.00 to US $5,950.00. eBay Daccordi, Worldwide: 2 new matches today Daccordi 50th anniversary edition with... Buy it now: US $5,950.00 100% positive feedback Daccordi Griffe Campagnolo Croce D'Aune... Buy it now: US $1,750.00 100% positive feedback View all results Refine this search Disable emails for this search   Email reference id: [#d9f42b5e860b4eabb98195c2888cba9e#] We don't check this mailbox, so please don't reply to this message. If you have a question, go to Help & Contact. ©2016 eBay Inc., eBay International AG Helvetiastrasse 15/17 - P.O. Box 133, 3000 Bern 6, Switzerland"; +} diff -Nru geary-0.11.4/test/engine/rfc822-message-test.vala geary-0.12.0/test/engine/rfc822-message-test.vala --- geary-0.11.4/test/engine/rfc822-message-test.vala 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/test/engine/rfc822-message-test.vala 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,32 @@ +/* + * Copyright 2016 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +class Geary.RFC822.MessageTest : Gee.TestCase { + + public MessageTest() { + base("Geary.RFC822.MessageTest"); + add_test("Message::get_preview", get_preview); + } + + public void get_preview() { + try { + Message multipart_signed = string_to_message(MULTIPART_SIGNED_MESSAGE_TEXT); + assert(multipart_signed.get_preview() == MULTIPART_SIGNED_MESSAGE_PREVIEW); + } catch (Error err) { + assert_no_error(err); + } + } + + private Message string_to_message(string message_text) throws Error { + return new Message.from_buffer( + new Geary.Memory.StringBuffer(message_text) + ); + } + + private static string MULTIPART_SIGNED_MESSAGE_TEXT = "Return-Path: \r\nReceived: from mogul.quuxo.net ([unix socket])\r\n by mogul (Cyrus v2.4.12-Debian-2.4.12-2) with LMTPA;\r\n Wed, 21 Dec 2016 06:54:03 +1030\r\nX-Sieve: CMU Sieve 2.4\r\nReceived: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19])\r\n by mogul.quuxo.net (8.14.4/8.14.4/Debian-2ubuntu2.1) with ESMTP id uBKKNtpt026727\r\n for ; Wed, 21 Dec 2016 06:53:57 +1030\r\nReceived: from localhost ([127.0.0.1] helo=huckleberry.canonical.com)\r\n by huckleberry.canonical.com with esmtp (Exim 4.76)\r\n (envelope-from )\r\n id 1cJQwM-0003Xk-IO; Tue, 20 Dec 2016 20:23:14 +0000\r\nReceived: from 208-151-246-43.dq1sn.easystreet.com ([208.151.246.43]\r\n helo=lizaveta.nxnw.org)\r\n by huckleberry.canonical.com with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\r\n (Exim 4.76) (envelope-from )\r\n id 1cJQin-0000t2-G6\r\n for ubuntu-security-announce@lists.ubuntu.com; Tue, 20 Dec 2016 20:09:14 +0000\r\nReceived: from kryten.nxnw.org (kryten.nxnw.org [10.19.96.254])\r\n (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\r\n (Client CN \"kryten.int.wirex.com\", Issuer \"nxnw.org\" (not verified))\r\n by lizaveta.nxnw.org (Postfix) with ESMTPS id DD8C360941\r\n for ;\r\n Tue, 20 Dec 2016 12:09:06 -0800 (PST)\r\nReceived: by kryten.nxnw.org (Postfix, from userid 1000)\r\n id 84341342F6C; Tue, 20 Dec 2016 12:09:06 -0800 (PST)\r\nDate: Tue, 20 Dec 2016 12:09:06 -0800\r\nFrom: Steve Beattie \r\nTo: ubuntu-security-announce@lists.ubuntu.com\r\nSubject: [USN-3159-1] Linux kernel vulnerability\r\nMessage-ID: <20161220200906.GF8251@nxnw.org>\r\nMail-Followup-To: Ubuntu Security \r\nMIME-Version: 1.0\r\nUser-Agent: Mutt/1.5.24 (2015-08-30)\r\nX-Mailman-Approved-At: Tue, 20 Dec 2016 20:23:12 +0000\r\nX-BeenThere: ubuntu-security-announce@lists.ubuntu.com\r\nX-Mailman-Version: 2.1.14\r\nPrecedence: list\r\nReply-To: ubuntu-users@lists.ubuntu.com, Ubuntu Security \r\nList-Id: Ubuntu Security Announcements\r\n \r\nList-Unsubscribe: , \r\n \r\nList-Archive: \r\nList-Post: \r\nList-Help: \r\nList-Subscribe: , \r\n \r\nContent-Type: multipart/mixed; boundary=\"===============7564301068935298617==\"\r\nErrors-To: ubuntu-security-announce-bounces@lists.ubuntu.com\r\nSender: ubuntu-security-announce-bounces@lists.ubuntu.com\r\nX-Greylist: Sender IP whitelisted by DNSRBL, not delayed by milter-greylist-4.3.9 (mogul.quuxo.net [203.18.245.241]); Wed, 21 Dec 2016 06:53:57 +1030 (ACDT)\r\nX-Virus-Scanned: clamav-milter 0.99.2 at mogul\r\nX-Virus-Status: Clean\r\nX-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED\r\n autolearn=ham version=3.3.2\r\nX-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on mogul.quuxo.net\r\n\r\n\r\n--===============7564301068935298617==\r\nContent-Type: multipart/signed; micalg=pgp-sha512;\r\n protocol=\"application/pgp-signature\"; boundary=\"O98KdSgI27dgYlM5\"\r\nContent-Disposition: inline\r\n\r\n\r\n--O98KdSgI27dgYlM5\r\nContent-Type: text/plain; charset=us-ascii\r\nContent-Disposition: inline\r\n\r\n==========================================================================\r\nUbuntu Security Notice USN-3159-1\r\nDecember 20, 2016\r\n\r\nlinux vulnerability\r\n==========================================================================\r\n\r\nA security issue affects these releases of Ubuntu and its derivatives:\r\n\r\n- Ubuntu 12.04 LTS\r\n\r\nSummary:\r\n\r\nThe system could be made to expose sensitive information.\r\n\r\nSoftware Description:\r\n- linux: Linux kernel\r\n\r\nDetails:\r\n\r\nIt was discovered that a race condition existed in the procfs\r\nenviron_read function in the Linux kernel, leading to an integer\r\nunderflow. A local attacker could use this to expose sensitive\r\ninformation (kernel memory).\r\n\r\nUpdate instructions:\r\n\r\nThe problem can be corrected by updating your system to the following\r\npackage versions:\r\n\r\nUbuntu 12.04 LTS:\r\n linux-image-3.2.0-119-generic 3.2.0-119.162\r\n linux-image-3.2.0-119-generic-pae 3.2.0-119.162\r\n linux-image-3.2.0-119-highbank 3.2.0-119.162\r\n linux-image-3.2.0-119-omap 3.2.0-119.162\r\n linux-image-3.2.0-119-powerpc-smp 3.2.0-119.162\r\n linux-image-3.2.0-119-powerpc64-smp 3.2.0-119.162\r\n linux-image-3.2.0-119-virtual 3.2.0-119.162\r\n linux-image-generic 3.2.0.119.134\r\n linux-image-generic-pae 3.2.0.119.134\r\n linux-image-highbank 3.2.0.119.134\r\n linux-image-omap 3.2.0.119.134\r\n linux-image-powerpc-smp 3.2.0.119.134\r\n linux-image-powerpc64-smp 3.2.0.119.134\r\n linux-image-virtual 3.2.0.119.134\r\n\r\nAfter a standard system update you need to reboot your computer to make\r\nall the necessary changes.\r\n\r\nATTENTION: Due to an unavoidable ABI change the kernel updates have\r\nbeen given a new version number, which requires you to recompile and\r\nreinstall all third party kernel modules you might have installed.\r\nUnless you manually uninstalled the standard kernel metapackages\r\n(e.g. linux-generic, linux-generic-lts-RELEASE, linux-virtual,\r\nlinux-powerpc), a standard system upgrade will automatically perform\r\nthis as well.\r\n\r\nReferences:\r\n http://www.ubuntu.com/usn/usn-3159-1\r\n CVE-2016-7916\r\n\r\nPackage Information:\r\n https://launchpad.net/ubuntu/+source/linux/3.2.0-119.162\r\n\r\n\r\n--O98KdSgI27dgYlM5\r\nContent-Type: application/pgp-signature; name=\"signature.asc\"\r\n\r\n-----BEGIN PGP SIGNATURE-----\r\nVersion: GnuPG v1\r\n\r\niQIcBAEBCgAGBQJYWY/iAAoJEC8Jno0AXoH0gKUQAJ7UOWV591M8K+HGXHI3BVJi\r\n75LCUSBRrV2NZTpc32ZMCsssb4TSqQinzczQfWSNtlLsgucKTLdCYGJvbXYxd32z\r\nBzHHHH9D8EDC6X4Olx0byiDBTX76kVBVUjxsKJ1zkYBFeMZ6tx9Tmgsl7Rdr26lP\r\n9oe3nBadkP0vM7j/dG1913MdzOlFc/2YOnGRK6QKzy1HhM74XMQTzvj9Nsbgs8ea\r\nZFTzWgDiUXi9SbBDLmwkY2uFJ+zreIH/vRjZHZ5ofJz9ed91HDhMB7CmRzn4JG/b\r\nSPAmTk0IRzWVBWglb0hPA8NN194ijeQFa6OJt94+EIMYuIasjsi8zGr+o1yxM5aY\r\ngTiDLzrQVWfddcZWmoCw8WWVbHAjMW60ehAs+y6ly0tBAn7wailXFRDFir1Vt4i2\r\n1WRTnJR2JebfQN4YeJ7CAiw34+PO8+vi8qHcRqMGkRu5IYdBy8AvBucVO923jIIy\r\nJBRTVkZqacRVp4PLx7vrOXX02z7y38iQcP2QSeapMoQjViYOVSMYhycO9zqGe3Tj\r\nAHMqp2HGj1uPp+3mM/yRBaE1X1j7lzjsKO1XZwjMUIYcFmAAsg2Gwi5S0FhhS+cD\r\nulCZ0A+r4wZ/1K6cZ2ZCEQoAZyMovwiVLNP+4q7pHhcQGTYAvCEgPksktQwD3YOe\r\nnSj5HG2dTMTOHDjVGSVV\r\n=qUGf\r\n-----END PGP SIGNATURE-----\r\n\r\n--O98KdSgI27dgYlM5--\r\n\r\n\r\n--===============7564301068935298617==\r\nContent-Type: text/plain; charset=\"us-ascii\"\r\nMIME-Version: 1.0\r\nContent-Transfer-Encoding: 7bit\r\nContent-Disposition: inline\r\n\r\n-- \r\nubuntu-security-announce mailing list\r\nubuntu-security-announce@lists.ubuntu.com\r\nModify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-security-announce\r\n\r\n--===============7564301068935298617==--\r\n"; + private static string MULTIPART_SIGNED_MESSAGE_PREVIEW = "Ubuntu Security Notice USN-3159-1 December 20, 2016 linux vulnerability A security issue affects these releases of Ubuntu and its derivatives: - Ubuntu 12.04 LTS Summary: The system could be made to expose sensitive information. Software Description: - linux: Linux kernel Details: It was discovered that a race condition existed in the procfs environ_read function in the Linux kernel, leading to an integer underflow. A local attacker could use this to expose sensitive information (kernel memory). Update instructions: The problem can be corrected by updating your system to the following package versions: Ubuntu 12.04 LTS: linux-image-3.2.0-119-generic 3.2.0-119.162 linux-image-3.2.0-119-generic-pae 3.2.0-119.162 linux-image-3.2.0-119-highbank 3.2.0-119.162 linux-image-3.2.0-119-omap 3.2.0-119.162 linux-image-3.2.0-119-powerpc-smp 3.2.0-119.162 linux-image-3.2.0-119-powerpc64-smp 3.2.0-119.162 linux-image-3.2.0-119-virtual 3.2.0-119.162 linux-image-generic 3.2.0.119.134 linux-image-generic-pae 3.2.0.119.134 linux-image-highbank 3.2.0.119.134 linux-image-omap 3.2.0.119.134 linux-image-powerpc-smp 3.2.0.119.134 linux-image-powerpc64-smp 3.2.0.119.134 linux-image-virtual 3.2.0.119.134 After a standard system update you need to reboot your computer to make all the necessary changes. ATTENTION: Due to an unavoidable ABI change the kernel updates have been given a new version number, which requires you to recompile and reinstall all third party kernel modules you might have installed. Unless you manually uninstalled the standard kernel metapackages (e.g. linux-generic, linux-generic-lts-RELEASE, linux-virtual, linux-powerpc), a standard system upgrade will automatically perform this as well. References: http://www.ubuntu.com/usn/usn-3159-1 CVE-2016-7916 Package Information: https://launchpad.net/ubuntu/+source/linux/3.2.0-119.162 ubuntu-security-announce mailing list ubuntu-security-announce@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-security-announce"; +} diff -Nru geary-0.11.4/test/engine/rfc822-utils-test.vala geary-0.12.0/test/engine/rfc822-utils-test.vala --- geary-0.11.4/test/engine/rfc822-utils-test.vala 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/test/engine/rfc822-utils-test.vala 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,44 @@ +/* + * Copyright 2016 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +class Geary.RFC822.Utils.Test : Gee.TestCase { + + public Test() { + base("Geary.RFC822.Utils.Test"); + add_test("to_preview_text", to_preview_text); + } + + public void to_preview_text() { + assert(Geary.RFC822.Utils.to_preview_text(PLAIN_BODY_ENCODED, Geary.RFC822.TextFormat.PLAIN) == + PLAIN_BODY_EXPECTED); + assert(Geary.RFC822.Utils.to_preview_text(HTML_BODY_ENCODED, Geary.RFC822.TextFormat.HTML) == + HTML_BODY_EXPECTED); + assert(Geary.RFC822.Utils.to_preview_text(HTML_BODY_ENCODED, Geary.RFC822.TextFormat.HTML) == + HTML_BODY_EXPECTED); + } + + public static string PLAIN_BODY_ENCODED = "-----BEGIN PGP SIGNED MESSAGE-----\nHash: SHA512\n\n=============================================================================\nFreeBSD-EN-16:11.vmbus Errata Notice\n The FreeBSD Project\n\nTopic: Avoid using spin locks for channel message locks\n\nCategory: core\nModule: vmbus\nAnnounced: 2016-08-12\nCredits: Microsoft OSTC\nAffects: FreeBSD 10.3\nCorrected: 2016-06-15 09:52:01 UTC (stable/10, 10.3-STABLE)\n 2016-08-12 04:01:16 UTC (releng/10.3, 10.3-RELEASE-p7)\n\nFor general information regarding FreeBSD Errata Notices and Security\nAdvisories, including descriptions of the fields above, security\nbranches, and the following sections, please visit\n.\n"; + public static string PLAIN_BODY_EXPECTED = "FreeBSD-EN-16:11.vmbus Errata Notice The FreeBSD Project Topic: Avoid using spin locks for channel message locks Category: core Module: vmbus Announced: 2016-08-12 Credits: Microsoft OSTC Affects: FreeBSD 10.3 Corrected: 2016-06-15 09:52:01 UTC (stable/10, 10.3-STABLE) 2016-08-12 04:01:16 UTC (releng/10.3, 10.3-RELEASE-p7) For general information regarding FreeBSD Errata Notices and Security Advisories, including descriptions of the fields above, security branches, and the following sections, please visit ."; + + public static string HTML_BODY_ENCODED = """ + + + + +
+


Hi Kenneth,

We xxxxx xxxx xx xxx xxx xx xxxx x xxxxxxxx xxxxxxxx. +



Thank you,

XXXXX +X XXXXXX

You can reply directly to this message or click the following link:
https://app.foobar.com/xxxxxxxxxxxxxxxx1641966deff6c48623aba

You can change your email preferences at:
https://app.foobar.com/xxxxxxxxxxx

+"""; + + public static string HTML_BODY_EXPECTED = "Hi Kenneth, We xxxxx xxxx xx xxx xxx xx xxxx x xxxxxxxx xxxxxxxx. Thank you, XXXXX X XXXXXX You can reply directly to this message or click the following link: https://app.foobar.com/xxxxxxxxxxxxxxxx1641966deff6c48623aba You can change your email preferences at: https://app.foobar.com/xxxxxxxxxxx"; + +} diff -Nru geary-0.11.4/test/engine/util-html-test.vala geary-0.12.0/test/engine/util-html-test.vala --- geary-0.11.4/test/engine/util-html-test.vala 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/test/engine/util-html-test.vala 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,100 @@ +/* + * Copyright 2016 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +class Geary.HTML.UtilTest : Gee.TestCase { + + public UtilTest() { + base("Geary.HTML.Util"); + add_test("remove_html_tags", remove_html_tags); + } + + public void remove_html_tags() { + string blockquote_body = """
hello

there

"""; + + string style_complete = """"""; + + string style_truncated = """ + + + + +
+


Hi Kenneth,

We xxxxx xxxx xx xxx xxx xx xxxx x xxxxxxxx xxxxxxxx. +



Thank you,

XXXXX +X XXXXXX

You can reply directly to this message or click the following link:
https://app.foobar.com/xxxxxxxxxxxxxxxx1641966deff6c48623aba

You can change your email preferences at:
https://app.foobar.com/xxxxxxxxxxx

+"""; + + private static string HTML_BODY_COMPLETE_EXPECTED = """ + +Hi Kenneth, + + We xxxxx xxxx xx xxx xxx xx xxxx x xxxxxxxx xxxxxxxx. + + + + +Thank you, + +XXXXX +X XXXXXX + +You can reply directly to this message or click the following link: +https://app.foobar.com/xxxxxxxxxxxxxxxx1641966deff6c48623aba + +You can change your email preferences at: +https://app.foobar.com/xxxxxxxxxxx + +"""; + + private static string HTML_ENTITIES_BODY = """
+
+
What if I said that I'd like to go to the theater tomorrow night.
+ +
 
+ +
I think we could do that!
+"""; + + private static string HTML_ENTITIES_EXPECTED = """ + +What if I said that I'd like to go to the theater tomorrow night. + + +  + + +I think we could do that! + + + +"""; + +} diff -Nru geary-0.11.4/test/engine/util-idle-manager-test.vala geary-0.12.0/test/engine/util-idle-manager-test.vala --- geary-0.11.4/test/engine/util-idle-manager-test.vala 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/test/engine/util-idle-manager-test.vala 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,40 @@ +/* + * Copyright 2017 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +class Geary.IdleManagerTest : Gee.TestCase { + + public IdleManagerTest() { + base("Geary.IdleManagerTest"); + add_test("start_reset", start_reset); + add_test("test_run", test_run); + } + + public void start_reset() { + IdleManager test = new IdleManager(() => { /* noop */ }); + assert(!test.is_running); + test.schedule(); + assert(test.is_running); + test.reset(); + assert(!test.is_running); + } + + public void test_run() { + bool did_run = false; + + IdleManager test = new IdleManager(() => { did_run = true; }); + test.schedule(); + + // There should be at least one event pending + assert(Gtk.events_pending()); + + // Execute the idle function + Gtk.main_iteration(); + + assert(did_run); + } + +} diff -Nru geary-0.11.4/test/engine/util-inet-test.vala geary-0.12.0/test/engine/util-inet-test.vala --- geary-0.11.4/test/engine/util-inet-test.vala 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/test/engine/util-inet-test.vala 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,61 @@ +/* + * Copyright 2017 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +class Geary.Inet.Test : Gee.TestCase { + + public Test() { + base("Geary.Inet.Test"); + add_test("is_valid_display_host_dns", is_valid_display_host_dns); + add_test("is_valid_display_host_ipv4", is_valid_display_host_ipv4); + add_test("is_valid_display_host_ipv6", is_valid_display_host_ipv6); + } + + public void is_valid_display_host_dns() { + assert(is_valid_display_host("foo")); + assert(is_valid_display_host("Foo")); + assert(is_valid_display_host("Ƒoo")); + assert(is_valid_display_host("2oo")); + assert(is_valid_display_host("foo.")); + assert(is_valid_display_host("foo.bar")); + assert(is_valid_display_host("foo.bar.")); + assert(is_valid_display_host("foo-bar")); + + assert(!is_valid_display_host("")); + assert(!is_valid_display_host(" ")); + assert(!is_valid_display_host(" foo")); + assert(!is_valid_display_host(" foo ")); + assert(!is_valid_display_host("foo bar")); + assert(!is_valid_display_host("-foo")); + assert(!is_valid_display_host("foo-")); + } + + public void is_valid_display_host_ipv4() { + assert(is_valid_display_host("123.123.123.123")); + assert(is_valid_display_host("127.0.0.1")); + + // These are valid host names + //assert(!is_valid_display_host("123")); + //assert(!is_valid_display_host("123.123")); + //assert(!is_valid_display_host("123.123.123")); + //assert(is_valid_display_host("666.123.123.123")); + } + + public void is_valid_display_host_ipv6() { + assert(is_valid_display_host("FEDC:BA98:7654:3210:FEDC:BA98:7654:3210")); + assert(is_valid_display_host("1080:0:0:0:8:800:200C:4171")); + assert(is_valid_display_host("3ffe:2a00:100:7031::1")); + assert(is_valid_display_host("1080::8:800:200C:417A")); + assert(is_valid_display_host("::1")); + assert(is_valid_display_host("::192.9.5.5")); + assert(is_valid_display_host("::FFFF:129.144.52.38")); + assert(is_valid_display_host("2010:836B:4179::836B:4179")); + + assert(!is_valid_display_host("1200::AB00:1234::2552:7777:1313")); + assert(!is_valid_display_host("1200:0000:AB00:1234:O000:2552:7777:1313")); + } + +} diff -Nru geary-0.11.4/test/engine/util-js-test.vala geary-0.12.0/test/engine/util-js-test.vala --- geary-0.11.4/test/engine/util-js-test.vala 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/test/engine/util-js-test.vala 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,25 @@ +/* + * Copyright 2017 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +public class Geary.JS.Test : Gee.TestCase { + + public Test() { + base("Geary.JS.Test"); + add_test("escape_string", escape_string); + } + + public void escape_string() { + print("\ndata: %s\n", Geary.JS.escape_string("\n")); + assert(Geary.JS.escape_string("\n") == """\n"""); + assert(Geary.JS.escape_string("\r") == """\r"""); + assert(Geary.JS.escape_string("\t") == """\t"""); + assert(Geary.JS.escape_string("\'") == """\'"""); + assert(Geary.JS.escape_string("\"") == """\""""); + + assert(Geary.JS.escape_string("something…\n") == """something…\n"""); + } +} diff -Nru geary-0.11.4/test/engine/util-timeout-manager-test.vala geary-0.12.0/test/engine/util-timeout-manager-test.vala --- geary-0.11.4/test/engine/util-timeout-manager-test.vala 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/test/engine/util-timeout-manager-test.vala 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,83 @@ +/* + * Copyright 2016 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +class Geary.TimeoutManagerTest : Gee.TestCase { + + // add_seconds seems to vary wildly, so needs a large epsilon + private const double SECONDS_EPSILON = 1.8; + + private const double MILLISECONDS_EPSILON = 0.1; + + public TimeoutManagerTest() { + base("Geary.TimeoutManagerTest"); + add_test("start_reset", start_reset); + if (Test.slow()) { + add_test("test_seconds", test_seconds); + add_test("test_milliseconds", test_milliseconds); + add_test("test_repeat_forever", test_repeat_forever); + } + } + + public void start_reset() { + TimeoutManager test = new TimeoutManager.seconds(1, () => { /* noop */ }); + assert(!test.is_running); + test.start(); + assert(test.is_running); + test.reset(); + assert(!test.is_running); + } + + public void test_seconds() { + Timer timer = new Timer(); + + TimeoutManager test = new TimeoutManager.seconds(1, () => { timer.stop(); }); + test.start(); + + timer.start(); + while (test.is_running && timer.elapsed() < SECONDS_EPSILON) { + Gtk.main_iteration(); + } + + assert_epsilon(timer.elapsed(), 1.0, SECONDS_EPSILON); + } + + public void test_milliseconds() { + Timer timer = new Timer(); + + TimeoutManager test = new TimeoutManager.milliseconds(100, () => { timer.stop(); }); + test.start(); + + timer.start(); + while (test.is_running && timer.elapsed() < 100 + MILLISECONDS_EPSILON) { + Gtk.main_iteration(); + } + + assert_epsilon(timer.elapsed(), 0.1, MILLISECONDS_EPSILON); + } + + public void test_repeat_forever() { + Timer timer = new Timer(); + int count = 0; + + TimeoutManager test = new TimeoutManager.seconds(1, () => { count++; }); + test.repetition = TimeoutManager.Repeat.FOREVER; + test.start(); + + timer.start(); + while (count < 2 && timer.elapsed() < SECONDS_EPSILON * 2) { + Gtk.main_iteration(); + } + timer.stop(); + + assert_epsilon(timer.elapsed(), 2.0, SECONDS_EPSILON * 2); + } + + private inline void assert_epsilon(double actual, double expected, double epsilon) { + assert(actual + epsilon >= expected && actual - epsilon <= expected); + } + +} diff -Nru geary-0.11.4/test/js/composer-page-state-test.vala geary-0.12.0/test/js/composer-page-state-test.vala --- geary-0.11.4/test/js/composer-page-state-test.vala 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/test/js/composer-page-state-test.vala 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,363 @@ +/* + * Copyright 2016 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +class ComposerPageStateTest : ClientWebViewTestCase { + + private const string COMPLETE_BODY_TEMPLATE = """
%s


"""; + private const string CLEAN_BODY_TEMPLATE = "%s


"; + + public ComposerPageStateTest() { + base("ComposerPageStateTest"); + add_test("edit_context_font", edit_context_font); + add_test("edit_context_link", edit_context_link); + add_test("indent_line", indent_line); + add_test("contains_attachment_keywords", contains_attachment_keywords); + add_test("clean_content", clean_content); + add_test("get_html", get_html); + add_test("get_text", get_text); + add_test("get_text_with_quote", get_text_with_quote); + add_test("get_text_with_nested_quote", get_text_with_nested_quote); + + add_test("contains_keywords", contains_keywords); + add_test("quote_lines", quote_lines); + add_test("resolve_nesting", resolve_nesting); + add_test("replace_non_breaking_space", replace_non_breaking_space); + + try { + ComposerWebView.load_resources(); + } catch (Error err) { + assert_not_reached(); + } + } + + public void edit_context_link() { + string html = "para"; + load_body_fixture(html); + + try { + assert(WebKitUtil.to_string(run_javascript(@"new EditContext(document.getElementById('test')).encode()")) + .has_prefix("1,url,")); + } catch (Geary.JS.Error err) { + print("Geary.JS.Error: %s\n", err.message); + assert_not_reached(); + } catch (Error err) { + print("WKError: %s\n", err.message); + assert_not_reached(); + } + } + + public void edit_context_font() { + string html = "

para

"; + load_body_fixture(html); + + try { + assert(WebKitUtil.to_string(run_javascript(@"new EditContext(document.getElementById('test')).encode()")) == + "0,,Comic Sans,144"); + } catch (Geary.JS.Error err) { + print("Geary.JS.Error: %s\n", err.message); + assert_not_reached(); + } catch (Error err) { + print("WKError: %s\n", err.message); + assert_not_reached(); + } + } + + public void indent_line() { + load_body_fixture("""some text"""); + try { + run_javascript(@"SelectionUtil.selectNode(document.getElementById('test'))"); + run_javascript(@"geary.indentLine()"); + assert(WebKitUtil.to_number(run_javascript(@"document.querySelectorAll('blockquote[type=cite]').length")) == 1); + assert(WebKitUtil.to_string(run_javascript(@"document.querySelectorAll('blockquote[type=cite]').item(0).innerText")) == + "some text"); + } catch (Geary.JS.Error err) { + print("Geary.JS.Error: %s\n", err.message); + assert_not_reached(); + } catch (Error err) { + print("WKError: %s\n", err.message); + assert_not_reached(); + } + } + + public void contains_attachment_keywords() { + load_body_fixture_full(""" +
innerquote
+ +

some text

+ +some text +""", + "--
sig", + "

outerquote text

", + true + ); + try { + assert(WebKitUtil.to_bool(run_javascript( + @"geary.containsAttachmentKeyword(\"some\", \"subject text\");" + ))); + assert(WebKitUtil.to_bool(run_javascript( + @"geary.containsAttachmentKeyword(\"subject\", \"subject text\");" + ))); + assert(!WebKitUtil.to_bool(run_javascript( + @"geary.containsAttachmentKeyword(\"innerquote\", \"subject text\");" + ))); + assert(!WebKitUtil.to_bool(run_javascript( + @"geary.containsAttachmentKeyword(\"sig\", \"subject text\");" + ))); + assert(!WebKitUtil.to_bool(run_javascript( + @"geary.containsAttachmentKeyword(\"outerquote\", \"subject text\");" + ))); + } catch (Geary.JS.Error err) { + print("Geary.JS.Error: %s\n", err.message); + assert_not_reached(); + } catch (Error err) { + print("WKError: %s\n", err.message); + assert_not_reached(); + } + } + + public void clean_content() { + // XXX split these up into multiple tests + load_body_fixture(""" +http://example1.com + +

http://example2.com

+ +

http://example3.com http://example4.com

+ +http://example5.com + +unknown://example6.com +"""); + + string expected = """ +http://example1.com + +

http://example2.com

+ +

http://example3.com http://example4.com

+ +http://example5.com + +unknown://example6.com +"""; + + try { + run_javascript("geary.cleanContent();"); + assert(WebKitUtil.to_string(run_javascript("geary.bodyPart.innerHTML;")) == + CLEAN_BODY_TEMPLATE.printf(expected)); + } catch (Geary.JS.Error err) { + print("Geary.JS.Error: %s\n", err.message); + assert_not_reached(); + } catch (Error err) { + print("WKError: %s\n", err.message); + assert_not_reached(); + } + } + + public void get_html() { + string html = "

para

"; + load_body_fixture(html); + try { + assert(WebKitUtil.to_string(run_javascript(@"window.geary.getHtml();")) == + COMPLETE_BODY_TEMPLATE.printf(html)); + } catch (Geary.JS.Error err) { + print("Geary.JS.Error: %s\n", err.message); + assert_not_reached(); + } catch (Error err) { + print("WKError: %s\n", err.message); + assert_not_reached(); + } + } + + public void get_text() { + load_body_fixture("

para

"); + try { + assert(WebKitUtil.to_string(run_javascript(@"window.geary.getText();")) == + "para\n\n\n\n"); + } catch (Geary.JS.Error err) { + print("Geary.JS.Error: %s\n", err.message); + assert_not_reached(); + } catch (Error err) { + print("WKError: %s\n", err.message); + assert_not_reached(); + } + } + + public void get_text_with_quote() { + unichar q_marker = Geary.RFC822.Utils.QUOTE_MARKER; + load_body_fixture("

pre

quote

post

"); + try { + assert(WebKitUtil.to_string(run_javascript(@"window.geary.getText();")) == + @"pre\n\n$(q_marker)quote\n$(q_marker)\npost\n\n\n\n"); + } catch (Geary.JS.Error err) { + print("Geary.JS.Error: %s", err.message); + assert_not_reached(); + } catch (Error err) { + print("WKError: %s", err.message); + assert_not_reached(); + } + } + + public void get_text_with_nested_quote() { + unichar q_marker = Geary.RFC822.Utils.QUOTE_MARKER; + load_body_fixture("

pre

quote1

quote2

post

"); + try { + assert(WebKitUtil.to_string(run_javascript(@"window.geary.getText();")) == + @"pre\n\n$(q_marker)quote1\n$(q_marker)\n$(q_marker)$(q_marker)quote2\n$(q_marker)$(q_marker)\npost\n\n\n\n"); + } catch (Geary.JS.Error err) { + print("Geary.JS.Error: %s\n", err.message); + assert_not_reached(); + } catch (Error err) { + print("WKError: %s\n", err.message); + assert_not_reached(); + } + } + + public void contains_keywords() { + load_body_fixture(); + string complete_keys = """new Set(["keyword1", "keyword2"])"""; + string suffix_keys = """new Set(["sf1", "sf2"])"""; + try { + // Doesn't contain + assert(!WebKitUtil.to_bool(run_javascript( + @"ComposerPageState.containsKeywords('notcontained', $complete_keys, $suffix_keys);" + ))); + assert(!WebKitUtil.to_bool(run_javascript( + @"ComposerPageState.containsKeywords('not contained', $complete_keys, $suffix_keys);" + ))); + assert(!WebKitUtil.to_bool(run_javascript( + @"ComposerPageState.containsKeywords('not\tcontained', $complete_keys, $suffix_keys);" + ))); + assert(!WebKitUtil.to_bool(run_javascript( + @"ComposerPageState.containsKeywords('http://www.keyword1.com', $complete_keys, $suffix_keys);" + ))); + assert(!WebKitUtil.to_bool(run_javascript( + @"ComposerPageState.containsKeywords('http://www.something.com/something.sf1', $complete_keys, $suffix_keys);" + ))); + assert(!WebKitUtil.to_bool(run_javascript( + @"ComposerPageState.containsKeywords('sf1', $complete_keys, $suffix_keys);" + ))); + assert(!WebKitUtil.to_bool(run_javascript( + @"ComposerPageState.containsKeywords('.sf1', $complete_keys, $suffix_keys);" + ))); + + // Does contain + assert(WebKitUtil.to_bool(run_javascript( + @"ComposerPageState.containsKeywords('keyword1', $complete_keys, $suffix_keys);" + ))); + assert(WebKitUtil.to_bool(run_javascript( + @"ComposerPageState.containsKeywords('keyword2 contained', $complete_keys, $suffix_keys);" + ))); + assert(WebKitUtil.to_bool(run_javascript( + @"ComposerPageState.containsKeywords('keyword2\tcontained', $complete_keys, $suffix_keys);" + ))); + assert(WebKitUtil.to_bool(run_javascript( + @"ComposerPageState.containsKeywords('something.sf1', $complete_keys, $suffix_keys);" + ))); + assert(WebKitUtil.to_bool(run_javascript( + @"ComposerPageState.containsKeywords('something.something.sf2', $complete_keys, $suffix_keys);" + ))); + } catch (Geary.JS.Error err) { + print("Geary.JS.Error: %s\n", err.message); + assert_not_reached(); + } catch (Error err) { + print("WKError: %s\n", err.message); + assert_not_reached(); + } + } + + public void resolve_nesting() { + load_body_fixture(); + unichar q_marker = Geary.RFC822.Utils.QUOTE_MARKER; + unichar q_start = '‘'; + unichar q_end = '’'; + string js_no_quote = "foo"; + string js_spaced_quote = @"foo $(q_start)0$(q_end) bar"; + string js_leading_quote = @"$(q_start)0$(q_end) bar"; + string js_hanging_quote = @"foo $(q_start)0$(q_end)"; + string js_cosy_quote1 = @"foo$(q_start)0$(q_end)bar"; + string js_cosy_quote2 = @"foo$(q_start)0$(q_end)$(q_start)1$(q_end)bar"; + string js_values = "['quote1','quote2']"; + try { + assert(WebKitUtil.to_string(run_javascript(@"ComposerPageState.resolveNesting('$(js_no_quote)', $(js_values));")) == + @"foo"); + assert(WebKitUtil.to_string(run_javascript(@"ComposerPageState.resolveNesting('$(js_spaced_quote)', $(js_values));")) == + @"foo \n$(q_marker)quote1\n bar"); + assert(WebKitUtil.to_string(run_javascript(@"ComposerPageState.resolveNesting('$(js_leading_quote)', $(js_values));")) == + @"$(q_marker)quote1\n bar"); + assert(WebKitUtil.to_string(run_javascript(@"ComposerPageState.resolveNesting('$(js_hanging_quote)', $(js_values));")) == + @"foo \n$(q_marker)quote1"); + assert(WebKitUtil.to_string(run_javascript(@"ComposerPageState.resolveNesting('$(js_cosy_quote1)', $(js_values));")) == + @"foo\n$(q_marker)quote1\nbar"); + assert(WebKitUtil.to_string(run_javascript(@"ComposerPageState.resolveNesting('$(js_cosy_quote2)', $(js_values));")) == + @"foo\n$(q_marker)quote1\n$(q_marker)quote2\nbar"); + } catch (Geary.JS.Error err) { + print("Geary.JS.Error: %s\n", err.message); + assert_not_reached(); + } catch (Error err) { + print("WKError: %s\n", err.message); + assert_not_reached(); + } + } + + public void quote_lines() { + load_body_fixture(); + unichar q_marker = Geary.RFC822.Utils.QUOTE_MARKER; + try { + assert(WebKitUtil.to_string(run_javascript("ComposerPageState.quoteLines('');")) == + @"$(q_marker)"); + assert(WebKitUtil.to_string(run_javascript("ComposerPageState.quoteLines('line1');")) == + @"$(q_marker)line1"); + assert(WebKitUtil.to_string(run_javascript("ComposerPageState.quoteLines('line1\\nline2');")) == + @"$(q_marker)line1\n$(q_marker)line2"); + } catch (Geary.JS.Error err) { + print("Geary.JS.Error: %s\n", err.message); + assert_not_reached(); + } catch (Error err) { + print("WKError: %s\n", err.message); + assert_not_reached(); + } + } + + public void replace_non_breaking_space() { + load_body_fixture(); + string single_nbsp = "a b"; + string multiple_nbsp = "a b c"; + try { + assert(WebKitUtil.to_string(run_javascript(@"ComposerPageState.replaceNonBreakingSpace('$(single_nbsp)');")) == + "a b"); + assert(WebKitUtil.to_string(run_javascript(@"ComposerPageState.replaceNonBreakingSpace('$(multiple_nbsp)');")) == + "a b c"); + } catch (Geary.JS.Error err) { + print("Geary.JS.Error: %s\n", err.message); + assert_not_reached(); + } catch (Error err) { + print("WKError: %s\n", err.message); + assert_not_reached(); + } + } + + protected override ComposerWebView set_up_test_view() { + return new ComposerWebView(this.config); + } + + protected override void load_body_fixture(string body = "") { + load_body_fixture_full(body, "", "", true); + } + + protected void load_body_fixture_full(string body, + string sig, + string quote, + bool top_posting) { + this.test_view.load_html(body, sig, quote, top_posting, false); + while (this.test_view.is_loading) { + Gtk.main_iteration(); + } + } + +} diff -Nru geary-0.11.4/test/js/conversation-page-state-test.vala geary-0.12.0/test/js/conversation-page-state-test.vala --- geary-0.11.4/test/js/conversation-page-state-test.vala 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/test/js/conversation-page-state-test.vala 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,94 @@ +/* + * Copyright 2017 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +class ConversationPageStateTest : ClientWebViewTestCase { + + public ConversationPageStateTest() { + base("ConversationPageStateTest"); + add_test("is_deceptive_text_not_url", is_deceptive_text_not_url); + add_test("is_deceptive_text_identical_text", is_deceptive_text_identical_text); + add_test("is_deceptive_text_matching_url", is_deceptive_text_matching_url); + add_test("is_deceptive_text_common_href_subdomain", is_deceptive_text_common_href_subdomain); + add_test("is_deceptive_text_common_text_subdomain", is_deceptive_text_common_text_subdomain); + add_test("is_deceptive_text_deceptive_href", is_deceptive_text_deceptive_href); + add_test("is_deceptive_text_non_matching_subdomain", is_deceptive_text_non_matching_subdomain); + add_test("is_deceptive_text_different_domain", is_deceptive_text_different_domain); + + try { + ConversationWebView.load_resources(File.new_for_path("")); + } catch (Error err) { + assert_not_reached(); + } + } + + public void is_deceptive_text_not_url() { + load_body_fixture("

my hovercraft is full of eels

"); + assert(exec_is_deceptive_text("ohhai!", "http://example.com") == + ConversationWebView.DeceptiveText.NOT_DECEPTIVE); + } + + public void is_deceptive_text_identical_text() { + load_body_fixture("

my hovercraft is full of eels

"); + assert(exec_is_deceptive_text("http://example.com", "http://example.com") == + ConversationWebView.DeceptiveText.NOT_DECEPTIVE); + } + + public void is_deceptive_text_matching_url() { + load_body_fixture("

my hovercraft is full of eels

"); + assert(exec_is_deceptive_text("example.com", "http://example.com") == + ConversationWebView.DeceptiveText.NOT_DECEPTIVE); + } + + public void is_deceptive_text_common_href_subdomain() { + load_body_fixture("

my hovercraft is full of eels

"); + assert(exec_is_deceptive_text("example.com", "http://foo.example.com") == + ConversationWebView.DeceptiveText.NOT_DECEPTIVE); + } + + public void is_deceptive_text_common_text_subdomain() { + load_body_fixture("

my hovercraft is full of eels

"); + assert(exec_is_deceptive_text("www.example.com", "http://example.com") == + ConversationWebView.DeceptiveText.NOT_DECEPTIVE); + } + + public void is_deceptive_text_deceptive_href() { + load_body_fixture("

my hovercraft is full of eels

"); + assert(exec_is_deceptive_text("www.example.com", "ohhai!") == + ConversationWebView.DeceptiveText.DECEPTIVE_HREF); + } + + public void is_deceptive_text_non_matching_subdomain() { + load_body_fixture("

my hovercraft is full of eels

"); + assert(exec_is_deceptive_text("www.example.com", "phishing.com") == + ConversationWebView.DeceptiveText.DECEPTIVE_DOMAIN); + } + + public void is_deceptive_text_different_domain() { + load_body_fixture("

my hovercraft is full of eels

"); + assert(exec_is_deceptive_text("www.example.com", "phishing.net") == + ConversationWebView.DeceptiveText.DECEPTIVE_DOMAIN); + } + + protected override ConversationWebView set_up_test_view() { + return new ConversationWebView(this.config); + } + + private uint exec_is_deceptive_text(string text, string href) { + try { + return (uint) WebKitUtil.to_number( + run_javascript(@"ConversationPageState.isDeceptiveText(\"$text\", \"$href\")") + ); + } catch (Geary.JS.Error err) { + print("Geary.JS.Error: %s\n", err.message); + assert_not_reached(); + } catch (Error err) { + print("WKError: %s\n", err.message); + assert_not_reached(); + } + } + +} diff -Nru geary-0.11.4/test/main.vala geary-0.12.0/test/main.vala --- geary-0.11.4/test/main.vala 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/test/main.vala 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,84 @@ +/* + * Copyright 2016 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +// Defined by CMake build script. +extern const string _GSETTINGS_DIR; + +int main(string[] args) { + /* + * Set env vars right up front to avoid weird bugs + */ + + // Use the memory GSettings DB so we a) always start with default + // values, and b) don't persist any changes made during a test + Environment.set_variable("GSETTINGS_BACKEND", "memory", true); + + // Let GSettings know where to find the dev schema + Environment.set_variable("GSETTINGS_SCHEMA_DIR", _GSETTINGS_DIR, true); + + /* + * Initialise all the things. + */ + + Gtk.init(ref args); + Test.init(ref args); + + Geary.RFC822.init(); + Geary.HTML.init(); + Geary.Logging.init(); + + /* + * Hook up all tests into appropriate suites + */ + + TestSuite engine = new TestSuite("engine"); + + engine.add_suite(new Geary.AttachmentTest().get_suite()); + engine.add_suite(new Geary.EngineTest().get_suite()); + engine.add_suite(new Geary.HTML.UtilTest().get_suite()); + engine.add_suite(new Geary.IdleManagerTest().get_suite()); + engine.add_suite(new Geary.Inet.Test().get_suite()); + engine.add_suite(new Geary.JS.Test().get_suite()); + engine.add_suite(new Geary.Mime.ContentTypeTest().get_suite()); + engine.add_suite(new Geary.RFC822.MailboxAddressTest().get_suite()); + engine.add_suite(new Geary.RFC822.MessageTest().get_suite()); + engine.add_suite(new Geary.RFC822.MessageDataTest().get_suite()); + engine.add_suite(new Geary.RFC822.Utils.Test().get_suite()); + engine.add_suite(new Geary.TimeoutManagerTest().get_suite()); + + TestSuite client = new TestSuite("client"); + + // Keep this before other ClientWebView based tests since it tests + // WebContext init + client.add_suite(new ClientWebViewTest().get_suite()); + + client.add_suite(new ComposerWebViewTest().get_suite()); + client.add_suite(new ConfigurationTest().get_suite()); + + TestSuite js = new TestSuite("js"); + + js.add_suite(new ComposerPageStateTest().get_suite()); + js.add_suite(new ConversationPageStateTest().get_suite()); + + /* + * Run the tests + */ + TestSuite root = TestSuite.get_root(); + root.add_suite(engine); + root.add_suite(client); + root.add_suite(js); + + int ret = -1; + Idle.add(() => { + ret = Test.run(); + Gtk.main_quit(); + return false; + }); + + Gtk.main(); + return ret; +} diff -Nru geary-0.11.4/test/testcase.vala geary-0.12.0/test/testcase.vala --- geary-0.11.4/test/testcase.vala 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/test/testcase.vala 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,96 @@ +/* testcase.vala + * + * Copyright (C) 2009 Julien Peeters + * Copyright (C) 2017 Michael Gratton + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 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 + * Lesser General Public License for more details. + + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Author: + * Julien Peeters + * Michael Gratton + */ + +public abstract class Gee.TestCase : Object { + + private GLib.TestSuite suite; + private Adaptor[] adaptors = new Adaptor[0]; + private AsyncQueue async_results = new AsyncQueue(); + + public delegate void TestMethod (); + + public TestCase (string name) { + this.suite = new GLib.TestSuite (name); + } + + public void add_test (string name, owned TestMethod test) { + var adaptor = new Adaptor (name, (owned)test, this); + this.adaptors += adaptor; + + this.suite.add (new GLib.TestCase (adaptor.name, + adaptor.set_up, + adaptor.run, + adaptor.tear_down )); + } + + public virtual void set_up () { + } + + public virtual void tear_down () { + } + + public GLib.TestSuite get_suite () { + return this.suite; + } + + protected void async_complete(AsyncResult result) { + this.async_results.push(result); + } + + protected AsyncResult async_result() { + AsyncResult? result = null; + while (result == null) { + Gtk.main_iteration(); + result = this.async_results.try_pop(); + } + return result; + } + + private class Adaptor { + [CCode (notify = false)] + public string name { get; private set; } + private TestMethod test; + private TestCase test_case; + + public Adaptor (string name, + owned TestMethod test, + TestCase test_case) { + this.name = name; + this.test = (owned)test; + this.test_case = test_case; + } + + public void set_up (void* fixture) { + this.test_case.set_up (); + } + + public void run (void* fixture) { + this.test (); + } + + public void tear_down (void* fixture) { + this.test_case.tear_down (); + } + } +} diff -Nru geary-0.11.4/THANKS geary-0.12.0/THANKS --- geary-0.11.4/THANKS 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/THANKS 2017-10-02 11:25:21.000000000 +0000 @@ -1,13 +1,18 @@ The Geary team would like to thank the following contributors: Robert Ancell +Heiko Becker +Jeremy Bicha +Kacper Bielecki Jürg Billeter Yosef Or Boczko Martijn Braam +Federico Bruni Attila Bukor Jiri Cerny Matthias Clasen Andrea Corbellini +Gianfranco Costamagna Sergey Shnatsel Davidoff Joanmarie Diggs Adam Dingle @@ -19,10 +24,13 @@ Daniel Foré Jens Georg Michael George +Niels De Graef Michael Gratton Sven Hagemann Mathias Hasselmann +Alex Henrie Mohamed Ibrahim +Andre Klapper Timo Kluck Ville Korhonen Charles Lehner @@ -34,6 +42,7 @@ mar-v-in Kai Mast William Jon McCann +Stephen Michel Thomas Moschny Tom Most Georges Basile Stavracas Neto @@ -42,21 +51,25 @@ Martin Olsson Mark Pariente Robert Park -Gautier Pelloux-Prayer +Gautier Pelloux-Prayer Ralph Plawetzki Mario Sanchez Prada Tiago Quelhas Viko Adi Rahmawan ritchiew +Leonardo Robol Didier Roche Janosch Rolles Robert Roth Gustavo Rubio Michel Alexandre Salim Anirudh Sanjeev +Robert Schroll Jakub Steiner Wolfgang Steitz +Rico Tzschichholz Jakob Unterwurzacher +Oskar Viljasaar Colin Walters Alexander Wilms Matthew Wong diff -Nru geary-0.11.4/theming/CMakeLists.txt geary-0.12.0/theming/CMakeLists.txt --- geary-0.11.4/theming/CMakeLists.txt 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/theming/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -set(THEMING_DEST share/geary/theming) - -install(FILES message-viewer.html DESTINATION ${THEMING_DEST}) -install(FILES message-viewer.css DESTINATION ${THEMING_DEST}) diff -Nru geary-0.11.4/theming/message-viewer.css geary-0.12.0/theming/message-viewer.css --- geary-0.11.4/theming/message-viewer.css 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/theming/message-viewer.css 1970-01-01 00:00:00.000000000 +0000 @@ -1,712 +0,0 @@ -/** - * Background colors associated with received emails: - * recv-normal: white - * recv-quoted: #e8e8e8 - * recv-collapsed: #f5f5f5 - * - * Background colors associated with sent emails: - * sent-normal: white - * sent-quoted: #e8e8e8 - * sent-collapsed: #f5f5f5 - */ -@media print { - - body { - background-color: white !important; - } - .avatar, .button, .starred { - display: none !important; - } - .email { - display: none !important; - } - .email.print { - display: inline-block !important; - background-color: white !important; - } - .email.print .body { - display: block !important; - background-color: white !important; - } - .email.print .preview { - display: none !important; - } - -} - -/* By default, tables reset the font properties to "normal" */ -table { - font-size: inherit; -} - -body { - margin: 0 !important; - padding: 0 !important; - font: caption; - -webkit-user-select: none; - -webkit-user-drag: none; -} - -a { - color: #08c; -} - -td, th { - vertical-align: top; -} -hr { - background-color: #999; - height: 1px; - border: 0; - margin-top: 15px; - margin-bottom: 15px; -} - -.body, .header, .preview { - -webkit-user-select: auto; - -webkit-user-drag: auto; -} -.shower, .hider { - -webkit-user-select: none; - -webkit-user-drag: none; -} - -.button { - border: 1px transparent solid; - border-radius: 2.5px; - cursor: pointer; - padding: 4px; - margin-top: 7px; - text-align: center; -} -.button * { - pointer-events: none; -} -.button:hover { - border-color: rgba(0,0,0,0.18); - box-shadow: inset 0px 0px 1px rgba(255,255,255,0.8); -} -.button:active { - border-color: rgba(0,0,0,0.20); - background-color: rgba(0,0,0,0.05);; - padding: 5px 3px 3px 5px; - box-shadow: inset 0px 0px 1px rgba(0,0,0,0.05); -} - -.email, .composer_embed { - border: 1px rgba(0,0,0,1) solid; - background-color: white;/* recv-normal */ - color: black; - box-shadow: 0 3px 11px rgba(0,0,0,1); - display: block; - word-wrap: break-word; - width: 100%; - box-sizing:border-box; - margin-top: 16px; -} - -.composer_embed { - height: 300px; -} - -.email.sent { - background-color: white;/* sent-normal */ -} - -.email .starred { - display: none; -} -.email .unstarred { - display: block; -} -.email.starred .starred { - display: block; -} -.email.starred .unstarred { - display: none; -} -.email.read, #multiple_messages .email, .composer_embed { - border-color: rgba(0,0,0,0.4); - box-shadow: 0 3px 11px rgba(0,0,0,0.21); -} -.email.animate { - -webkit-transition: border-color 3s ease; - -webkit-transition: box-shadow 3s ease; -} - -.email .email_warning { - display: none; - padding: 1em; - background-color: #fcc; - text-align: center; -} - -.email_box { - box-sizing: border-box; - -webkit-box-sizing: border-box; - width: 100% !important; -} -.email_container { - overflow: hidden; -} -.email_container .header_container { - padding: 15px; -} - -.email_container .header_container a:hover * { - color: #08c; -} - -.email_container .header_container .button_bar { - float: right; - margin-top: -6px; -} -.email_container .header_container .button_bar > .button { - float: left; -} -.email_container .header_container .button_bar > .button > .icon { - width: 16px; - height: 16px; -} -.email_container .header_container .preview { - font-size: 80%; - color: #777; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.avatar { - display: none; - image-rendering: optimizeQuality; -} - -.avatar[src^=file], .avatar[src^=http] { - display: inline; - width: 48px; - height: 48px; - float: left; - border-radius: 5px; -} - -body:not(.nohide) .email.hide .header_container .avatar { - width: 32px; - height: 32px; - margin-right: 12px; - border-radius: 2.5px; -} - -.email .body { - border-top: 1px solid #999; - margin: 16px; - margin-top: 0; - padding-top: 16px; - overflow-x: auto; - overflow-y: hidden; - position: relative; /* in case anything inside is positioned */ -} - -.email .remote_images { - display: none; - margin: 0 16px; - border: 1px solid #999; - border-bottom: none; - padding: 1em; - background: #ffc; -} - -.email .remote_images .close_show_images { - float: right; - margin-top: -0.67em; - margin-right: -0.67em; -} - -.email .replaced_inline_image { - max-width: 100%; - display: block; - margin-top: 1em; -} - -.email .link_warning { - display: inline-block; - position: absolute; - margin-top: -1em; - border: 1px solid #999; - padding: 1em; - background: #ffc; - box-shadow: 0 3px 11px rgba(0,0,0,0.21); - /* Reset styles */ - font: caption; - color: black; -} -.email .link_warning a { - color: #08c; -} -.email .link_warning span { - display: block; - padding-left: 1em; -} -.email .link_warning .close_link_warning { - float: right; - margin-top: -0.67em; - margin-right: -0.67em; -} - -@media screen { - - body { - background-color: #ccc !important; - } - body:not(.nohide) .email.hide, - body:not(.nohide) .email .email.hide { - background-color: #f5f5f5;/* recv-collapsed */ - box-shadow: 0 2px 5px rgba(0,0,0,0.12); - } - body:not(.nohide) .email.sent.hide, - body:not(.nohide) .email.sent .email.hide { - background-color: #f5f5f5;/* sent-collapsed */ - } - body:not(.nohide) .email.hide .body, - body:not(.nohide) .email.hide > .attachment_container, - .email:not(.hide) .header_container .preview, - body.nohide .email .header_container .preview, - body:not(.nohide) .email.hide .email { - display: none; - } - .email:not(.hide) .email_warning.show, - body:not(.nohide) .email.hide .header_container .preview { - display: block; - } - body:not(.nohide) .email:not(:only-of-type) .header_container, - body:not(.nohide) .email .email .header_container { - cursor: pointer; - } - .email:not(.hide) .header .field .value, - body.nohide .email .header .field .value { - cursor: auto; - } - body:not(.nohide) .email.hide .header { - padding: 0; - text-align: right; - } - body:not(.nohide) .email.hide .header .field { - display: inline; - margin-right: 2px; - text-align: left; - } - body:not(.nohide) .email.hide .header .field:not(:first-child) { - display: inline-block; - } - body:not(.nohide) .email.hide .header .field:not(.important), - body:not(.nohide) .email.hide .header .field .title { - display: none; - } - body:not(.nohide) .email.hide .header .field .value { - margin-left: 0; - } - body:not(.nohide) .email.hide .header .field .not_hidden_only, - .email:not(.hide) .header .field .hidden_only, - body.nohide .email .header .field .hidden_only { - display: none; - } - body:not(.nohide) .email.hide .header .field a { - pointer-events: none; - } - .email:not(.hide) .remote_images.show, - body.nohide .email .remote_images.show { - display: block; - } - body:not(.nohide) .email.compressed { - margin-top: -1px; - height: 10px; - } - body:not(.nohide) .email.compressed + .email { - margin-top: -1px; - } - body:not(.nohide) .compressed .email_container { - overflow: hidden; - display: none - } - body:not(.nohide) .compressed + .compressed + .compressed + .compressed + .compressed + .compressed + .compressed + .compressed + .compressed { - display:none; - } - -} - -.email .compressed_note { - text-align: center; - height: 0; -} -.email .compressed_note > span { - display: none; - padding: 0px 10px; - background-color: #f5f5f5;/* recv-collapsed */ - position: relative; - cursor: hand; -} -.email.sent .compressed_note > span { - background-color: #f5f5f5;/* sent-collapsed */ -} -body.nohide .email .compressed_note > span { - display: none !important; -} - -.email .email { - box-shadow: none; - margin-top: 0; - border: none; - border-top: 1px rgba(0,0,0,0.4) solid; - background-color: white;/* recv-normal */ -} -.email.sent .email { - background-color: white;/* sent-normal */ -} -.email .email .email_container .menu, -.email .email .email_container .starred, -.email .email .email_container .unstarred { - display: none; -} - -.email:not(.attachment) .attachment.icon { - display: none; -} -.email .header_container .attachment.icon { - float: right; - margin-top: 7px; -} -.email > .attachment_container { - padding-bottom: 10px; -} -.email > .attachment_container > .top_border { - border-bottom: 1px solid #aaa; - height: 10px; - margin: 0 16px 5px; -} -.email > .email + .attachment_container .top_border{ - height: auto; - margin: 0; -} -.email > .attachment_container > .attachment { - margin: 10px 10px 0 10px; - padding: 2px; - overflow: hidden; - cursor: pointer; - border: 1px solid transparent; - border-radius: 4px; - display: inline; -} - -.email > .attachment_container > .attachment:hover, -.email > .attachment_container > .attachment:active { - border-color: rgba(0,0,0,0.18); - box-shadow: inset 0px 0px 1px rgba(255,255,255,0.8); -} - -.email > .attachment_container > .attachment:active { - padding: 3px 1px 1px 3px; - border-color: rgba(0,0,0,0.20); - background-color: rgba(0,0,0,0.05); - box-shadow: inset 0px 0px 2px rgba(0,0,0,0.05); -} - -.email > .attachment_container > .attachment .preview { - width: 52px; - height: 52px; - text-align: center; - vertical-align: middle; -} -.email > .attachment_container > .attachment .preview img { - max-width: 50px; - max-height: 50px; -} -.email > .attachment_container > .attachment .preview .thumbnail { - border: 1px solid #999; - box-shadow: 0 0 5px #b8b8b8; - background-size: 16px 16px; - background-position:0 0, 8px 0, 8px -8px, 0px 8px; -} -.email > .attachment_container > .attachment:hover .preview .thumbnail { - background-image: - -webkit-linear-gradient(45deg, rgba(0, 0, 0, 0.1) 25%, transparent 25%, transparent), - -webkit-linear-gradient(-45deg, rgba(0, 0, 0, 0.1) 25%, transparent 25%, transparent), - -webkit-linear-gradient(45deg, transparent 75%, rgba(0, 0, 0, 0.1) 75%), - -webkit-linear-gradient(-45deg, transparent 75%, rgba(0, 0, 0, 0.1) 75%); -} -.email > .attachment_container > .attachment .info { - vertical-align: middle; - padding-left: 5px; -} -.email > .attachment_container > .attachment .info > :not(.filename) { - color: #666; -} - -.header { - overflow: hidden; -} -.header .field { - clear: both; - overflow: hidden; - font-size: 90%; -} -.header .field .title, -.header .field .value { - float: left; - padding: 2px 0; -} -.header .field .title { - width: 5em; - text-align: right; - padding-right: 7px; - color: #777; - position: absolute; -} -.header .field .value { - color: black; - margin-left: 5.25em; - max-height: 5em; - overflow-y: auto; -} -.header .field .value a { - color: black; - text-decoration: none; -} -.header .field.important .address_name { - font-weight: bold; -} -.header .field .address_value { - color: #777; -} - -.geary_spacer { - display: table; - box-sizing: border-box; - -webkit-box-sizing: border-box; - width: 100% !important; -} - -.signature { - color: #777; - display: inline; -} -.signature a, -.quote_container a { - color: #5fb2e7; -} - -.quote_container { - position: relative; - margin: 5px 0; - padding: 12px; - color: #303030; - background-color: #e8e8e8;/* recv-quoted */ - border-radius: 4px; -} -.quote_container .quote { - overflow: hidden; - position: relative; - z-index: 0; -} -body:not(.nohide) .quote_container.controllable .quote { - max-height: 80px; -} -body:not(.nohide) .quote_container.controllable.show .quote { - max-height: none; -} - -.email.sent .quote_container { - background-color: #e8e8e8;/* sent-quoted */ -} - -.quote_container > .shower, -.quote_container > .hider { - position: absolute; - z-index: 1; - bottom: -7px; - left: 0; - right: 0; - display: none; -} -.quote_container > .shower > input, -.quote_container > .hider > input { - width: 100%; - height: 15px; - padding: 0; - font-size: 7px; /* Absolute size in pixels for graphics */ - color: #888; -} -.quote_container > .shower:hover > input, -.quote_container > .hider:hover > input { - color: #000; -} -body:not(.nohide) .quote_container.controllable { - margin-bottom: 7px; - padding-bottom: 0; -} -body:not(.nohide) .quote_container.controllable.show { - padding-bottom: 12px; -} -body:not(.nohide) .quote_container.controllable > .shower { - display: block; -} -body:not(.nohide) .quote_container.controllable.show > .shower { - display: none; -} -body:not(.nohide) .quote_container.controllable.show > .hider { - display: block; -} - -#message_container { - position: absolute; - left: 0; - right: 0; - padding: 0 15px 15px; - box-sizing: border-box; - min-height: 100%; -} -#multiple_messages { - display: none; - text-align: center; -} -#multiple_messages > .email { - margin: 100px auto; - display: inline-block; - width: auto; - padding: 15px; -} -#email_template, -#attachment_template, -#link_warning_template { - display: none; -} - -blockquote { - margin: 5px 10px 5px 10px; - padding-left: 5px; - padding-right: 5px; - border: 0; - border-left: 3px #aaa solid; -} - -.search_coloring *::selection { - background-color: #00ddff; -} - -.draft_edit { - display: none; - margin: 16px; - text-align: right; -} - -.draft_edit_button { - background-color: #e8e8e8; -} - -#spinner { - display: none; - margin: 100px auto; - width: 128px; -} - -/* -Spinner code from CSSload.net -License: http://cssload.net/en/terms_of_use -*/ - -#spinner #floatingCirclesG { - position:relative; - width:128px; - height:128px; - -webkit-transform:scale(0.6); - transform:scale(0.6); -} - -#spinner .f_circleG { - position:absolute; - background-color:#FFFFFF; - height:23px; - width:23px; - -webkit-border-radius:12px; - -webkit-animation-name:f_fadeG; - -webkit-animation-duration:1.04s; - -webkit-animation-iteration-count:infinite; - -webkit-animation-direction:linear; - border-radius:12px; - animation-name:f_fadeG; - animation-duration:1.04s; - animation-iteration-count:infinite; - animation-direction:linear; -} - -#spinner #frotateG_01 { - left:0; - top:52px; - -webkit-animation-delay:0.39s; - animation-delay:0.39s; -} - -#spinner #frotateG_02 { - left:15px; - top:15px; - -webkit-animation-delay:0.52s; - animation-delay:0.52s; -} - -#spinner #frotateG_03 { - left:52px; - top:0; - -webkit-animation-delay:0.65s; - animation-delay:0.65s; -} - -#spinner #frotateG_04 { - right:15px; - top:15px; - -webkit-animation-delay:0.78s; - animation-delay:0.78s; -} - -#spinner #frotateG_05 { - right:0; - top:52px; - -webkit-animation-delay:0.91s; - animation-delay:0.91s; -} - -#spinner #frotateG_06 { - right:15px; - bottom:15px; - -webkit-animation-delay:1.04s; - animation-delay:1.04s; -} - -#spinner #frotateG_07 { - left:52px; - bottom:0; - -moz-animation-delay:1.17s; - -webkit-animation-delay:1.17s; - -ms-animation-delay:1.17s; - -o-animation-delay:1.17s; - animation-delay:1.17s; -} - -#spinner #frotateG_08 { - left:15px; - bottom:15px; - -moz-animation-delay:1.3s; - -webkit-animation-delay:1.3s; - -ms-animation-delay:1.3s; - -o-animation-delay:1.3s; - animation-delay:1.3s; -} - -@-webkit-keyframes f_fadeG { - 0% { - background-color:#000000 - } - - 100% { - background-color:#FFFFFF - } -} - -/* /Spinner */ - diff -Nru geary-0.11.4/theming/message-viewer.html geary-0.12.0/theming/message-viewer.html --- geary-0.11.4/theming/message-viewer.html 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/theming/message-viewer.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,63 +0,0 @@ - - - Geary - - - - -
-
- -
-
- - - -
-
-
-
-
- -
- -
-
-
-
-
-
-
-
-
-
- - -
- - diff -Nru geary-0.11.4/ui/accelerators.ui geary-0.12.0/ui/accelerators.ui --- geary-0.11.4/ui/accelerators.ui 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/ui/accelerators.ui 2017-10-02 11:25:21.000000000 +0000 @@ -1,16 +1,17 @@ + + + + + + + - - - - - + + + - - - - - + diff -Nru geary-0.11.4/ui/account_cannot_remove.glade geary-0.12.0/ui/account_cannot_remove.glade --- geary-0.11.4/ui/account_cannot_remove.glade 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/ui/account_cannot_remove.glade 2017-10-02 11:25:21.000000000 +0000 @@ -1,6 +1,6 @@ - + @@ -9,7 +9,7 @@ True False - 1 + 1 True diff -Nru geary-0.11.4/ui/app_menu.interface geary-0.12.0/ui/app_menu.interface --- geary-0.11.4/ui/app_menu.interface 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/ui/app_menu.interface 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ - - -
- - A_ccounts - app.GearyAccounts - <Primary>M - - - _Preferences - app.GearyPreferences - <Primary>E - -
-
- - _Help - app.GearyHelp - F1 - - - _About - app.GearyAbout - - - _Quit - app.GearyQuit - <Primary>Q - -
-
-
diff -Nru geary-0.11.4/ui/certificate_warning_dialog.glade geary-0.12.0/ui/certificate_warning_dialog.glade --- geary-0.11.4/ui/certificate_warning_dialog.glade 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/ui/certificate_warning_dialog.glade 2017-10-02 11:25:21.000000000 +0000 @@ -1,7 +1,7 @@ - + False Untrusted Connection @@ -12,8 +12,8 @@ False - 12 - 12 + 12 + 12 12 12 vertical @@ -54,7 +54,7 @@ - _Don't Trust This Server + _Don’t Trust This Server True True True @@ -139,7 +139,7 @@ True False - 16 + 16 0 (empty) True diff -Nru geary-0.11.4/ui/client-web-view-allow-remote-images.js geary-0.12.0/ui/client-web-view-allow-remote-images.js --- geary-0.11.4/ui/client-web-view-allow-remote-images.js 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/client-web-view-allow-remote-images.js 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,11 @@ +/* + * Copyright 2016 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +/** + * Enables remote image loading in a client web view. + */ +geary.allowRemoteImages = true; diff -Nru geary-0.11.4/ui/client-web-view.js geary-0.12.0/ui/client-web-view.js --- geary-0.11.4/ui/client-web-view.js 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/client-web-view.js 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,115 @@ +/* + * Copyright 2016 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +/** + * Application logic for ClientWebView and subclasses. + */ + +let PageState = function() { + this.init.apply(this, arguments); +}; +PageState.prototype = { + init: function() { + this.allowRemoteImages = false; + this.isLoaded = false; + this.hasSelection = false; + this.lastPreferredHeight = 0; + + let state = this; + + // Coalesce multiple calls to updatePreferredHeight using a + // timeout to avoid the overhead of multiple JS messages sent + // to the app and hence view multiple resizes being queued. + let queueTimeout = null; + let queuePreferredHeightUpdate = function() { + if (queueTimeout != null) { + clearTimeout(queueTimeout); + } + queueTimeout = setTimeout( + function() { state.updatePreferredHeight(); }, 10 + ); + }; + + // Queues an update after the DOM has been initially loaded + // and had any changes made to it by derived classes. + document.addEventListener("DOMContentLoaded", function(e) { + state.loaded(); + queuePreferredHeightUpdate(); + }); + + // Queues an update when the complete document is loaded. + // + // Note also that the delay introduced here by this last call + // to queuePreferredHeightUpdate when the complete document is + // loaded seems to be important to get an acurate idea of the + // final document size. + window.addEventListener("load", function(e) { + queuePreferredHeightUpdate(); + }, true); // load does not bubble + + // Queues updates for any STYLE, IMG and other loaded + // elements, hence handles resizing when the user later + // requests remote images loading. + document.addEventListener("load", function(e) { + queuePreferredHeightUpdate(); + }, true); // load does not bubble + }, + getPreferredHeight: function() { + let html = window.document.documentElement; + let height = html.offsetHeight; + let computed = window.getComputedStyle(html); + let top = computed.getPropertyValue('margin-top'); + let bot = computed.getPropertyValue('margin-bottom'); + + return ( + height + + parseInt(top.substring(0, top.length - 2)) + + parseInt(bot.substring(0, bot.length - 2)) + ); + }, + loaded: function() { + this.isLoaded = true; + }, + loadRemoteImages: function() { + this.allowRemoteImages = true; + let images = document.getElementsByTagName("IMG"); + for (let i = 0; i < images.length; i++) { + let img = images.item(i); + let src = img.src; + img.src = ""; + img.src = src; + } + }, + remoteImageLoadBlocked: function() { + window.webkit.messageHandlers.remoteImageLoadBlocked.postMessage(null); + }, + /** + * Sends "preferredHeightChanged" message if it has changed. + */ + updatePreferredHeight: function(height) { + if (height === undefined) { + height = this.getPreferredHeight(); + } + + let updated = false; + if (height > 0 && height != this.lastPreferredHeight) { + updated = true; + this.lastPreferredHeight = height; + window.webkit.messageHandlers.preferredHeightChanged.postMessage( + height + ); + } + return updated; + }, + selectionChanged: function() { + let hasSelection = !window.getSelection().isCollapsed; + if (this.hasSelection != hasSelection) { + this.hasSelection = hasSelection; + window.webkit.messageHandlers.selectionChanged.postMessage(hasSelection); + } + } +}; diff -Nru geary-0.11.4/ui/CMakeLists.txt geary-0.12.0/ui/CMakeLists.txt --- geary-0.11.4/ui/CMakeLists.txt 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/ui/CMakeLists.txt 2017-10-02 11:25:21.000000000 +0000 @@ -4,19 +4,39 @@ STRIPBLANKS "account_cannot_remove.glade" STRIPBLANKS "account_list.glade" STRIPBLANKS "account_spinner.glade" - STRIPBLANKS "app_menu.interface" STRIPBLANKS "certificate_warning_dialog.glade" - STRIPBLANKS "composer.glade" - STRIPBLANKS "composer_accelerators.ui" + "client-web-view.js" + "client-web-view-allow-remote-images.js" + STRIPBLANKS "composer-headerbar.ui" + STRIPBLANKS "composer-link-popover.ui" + STRIPBLANKS "composer-menus.ui" + STRIPBLANKS "composer-widget.ui" + "composer-web-view.css" + "composer-web-view.js" + STRIPBLANKS "conversation-email.ui" + STRIPBLANKS "conversation-email-attachment-view.ui" + STRIPBLANKS "conversation-email-menus.ui" + STRIPBLANKS "conversation-message.ui" + STRIPBLANKS "conversation-message-menus.ui" + STRIPBLANKS "conversation-viewer.ui" + "conversation-web-view.css" + "conversation-web-view.js" STRIPBLANKS "edit_alternate_emails.glade" + STRIPBLANKS "empty-placeholder.ui" STRIPBLANKS "find_bar.glade" + STRIPBLANKS "folder-popover.ui" + STRIPBLANKS "gtk/help-overlay.ui" + STRIPBLANKS "gtk/menus.ui" STRIPBLANKS "login.glade" + STRIPBLANKS "main-toolbar.ui" + STRIPBLANKS "main-window.ui" STRIPBLANKS "password-dialog.glade" - STRIPBLANKS "preferences.glade" + STRIPBLANKS "preferences-dialog.ui" STRIPBLANKS "remove_confirm.glade" STRIPBLANKS "toolbar_empty_menu.ui" STRIPBLANKS "toolbar_mark_menu.ui" STRIPBLANKS "upgrade_dialog.glade" + "geary.css" ) compile_gresources( @@ -28,17 +48,7 @@ RESOURCES ${RESOURCE_LIST} ) -compile_gresources( - RESOURCES_H - RESOURCES_XML - TYPE EMBED_H - SOURCE_DIR "${CMAKE_SOURCE_DIR}/ui" - PREFIX "/org/gnome/Geary" - RESOURCES ${RESOURCE_LIST} -) - -add_custom_target(resource_h ALL DEPENDS ${RESOURCES_H}) -add_custom_target(resource_c ALL DEPENDS ${RESOURCES_C}) +add_custom_target(resource_c DEPENDS ${RESOURCES_C}) # Work around valac wanting the resource files to be in the same # directory as the XML file. @@ -47,7 +57,9 @@ COMMAND cp ${RESOURCES_XML} ${CMAKE_BINARY_DIR}/ui COMMAND - cp ${CMAKE_SOURCE_DIR}/ui/*.glade ${CMAKE_SOURCE_DIR}/ui/*.interface ${CMAKE_SOURCE_DIR}/ui/*.ui ${CMAKE_BINARY_DIR}/ui + cp ${CMAKE_SOURCE_DIR}/ui/*.glade ${CMAKE_SOURCE_DIR}/ui/*.ui ${CMAKE_BINARY_DIR}/ui + COMMAND + cp ${CMAKE_SOURCE_DIR}/ui/*.css ${CMAKE_BINARY_DIR}/ui ) add_dependencies(resource_copy resource_c) diff -Nru geary-0.11.4/ui/composer_accelerators.ui geary-0.12.0/ui/composer_accelerators.ui --- geary-0.11.4/ui/composer_accelerators.ui 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/ui/composer_accelerators.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru geary-0.11.4/ui/composer.glade geary-0.12.0/ui/composer.glade --- geary-0.11.4/ui/composer.glade 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/ui/composer.glade 1970-01-01 00:00:00.000000000 +0000 @@ -1,642 +0,0 @@ - - - - - - - _Undo - undo - - - - - - _Redo - redo - - - - - - Cu_t - edit-cut - - - - - - _Copy - edit-copy - - - - - - _Paste - edit-paste - - - - - - _Left - - - - - _Right - - - - - _Center - - - - - _Justify - - - - - Link (Ctrl+L) - insert-link-symbolic - - - - - - C_olor - - - - - More options - go-down-symbolic - - - - - Quote text (Ctrl+]) - - - - - - Unquote text (Ctrl+[) - - - - - - Remove formatting (Ctrl+Space) - format-text-remove-symbolic - - - - - - Paste _With Formatting - - - - - - Copy _Link - - - - - Bold (Ctrl+B) - format-text-bold-symbolic - - - - - - Italic (Ctrl+I) - format-text-italic-symbolic - - - - - - Underline (Ctrl+U) - format-text-underline-symbolic - - - - - - Strikethrough (Ctrl+K) - format-text-strikethrough-symbolic - - - - - - _Rich Text - text-html - - - - - Show Extended Fields - show-more - - - - - window-close-symbolic - - - - - - Close and Save - Close and Save - Close and Save - document-save-symbolic - - - - - Close and Discard - Close and Discard - Close and Discard - user-trash-symbolic - - - - - Lar_ge - Large - - - - - _Medium - Medium - - - - - _Small - Small - - - - - S_ans Serif - Sans Serif - - - - - S_erif - Serif - - - - - _Fixed Width - Fixed Width - - - - - Detach - Detach - Detach (Ctrl+D) - detach-symbolic - - - - - - _Send - Send - Send (Ctrl+Enter) - mail-send-symbolic - - - - - _Attach File - Attach File - Attach File - mail-attachment-symbolic - - - - - _Include Original Attachments - Include Original Attachments - Include Original Attachments - edit-copy-symbolic - - - - - Application Menu - emblem-system-symbolic - - - - - - True - False - vertical - 2 - - - True - False - - - - - - False - True - 0 - - - - - True - False - - - True - False - vertical - 6 - - - True - False - 6 - 6 - 6 - 0 - 6 - - - True - False - 1 - _To - True - right - to - 6 - - - - 0 - 1 - 1 - 1 - - - - - True - False - 1 - _Cc - True - right - to - 6 - - - - 0 - 2 - 1 - 1 - - - - - True - False - True - - - 1 - 1 - 1 - 1 - - - - - True - False - True - - - 1 - 2 - 1 - 1 - - - - - True - True - True - - True - 6 - - - 1 - 5 - 1 - 1 - - - - - True - False - 1 - _Subject - True - right - subject - 6 - - - - 0 - 5 - 1 - 1 - - - - - True - False - 1 - _Bcc - True - right - to - 6 - - - - 0 - 3 - 1 - 1 - - - - - True - False - True - - - 1 - 3 - 1 - 1 - - - - - True - False - 1 - _Reply-To - True - right - to - 6 - - - - 0 - 4 - 1 - 1 - - - - - True - False - True - - - 1 - 4 - 1 - 1 - - - - - True - False - 1 - From - right - to - - - - 0 - 0 - 1 - 1 - - - - - True - False - vertical - - - True - False - 0 - - - False - True - 0 - - - - - True - False - 0 - 1 - - - False - True - 1 - - - - - 1 - 0 - 1 - 1 - - - - - False - True - 1 - - - - - - - False - True - 1 - - - - - True - False - - - True - False - center - vertical - 6 - - - True - False - center - Drop files here - - - - - - False - False - 0 - - - - - True - False - center - To add them as attachments - - - False - False - 1 - - - - - - - False - False - 2 - - - - - True - False - 6 - 6 - - - - - - False - True - 3 - - - - - True - False - 0 - in - - - True - False - - - - - - - - - - - True - True - 4 - - - - - True - False - 6 - 6 - 6 - 6 - vertical - 6 - - - - - - False - True - 5 - - - - diff -Nru geary-0.11.4/ui/composer-headerbar.ui geary-0.12.0/ui/composer-headerbar.ui --- geary-0.11.4/ui/composer-headerbar.ui 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/composer-headerbar.ui 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,219 @@ + + + + + True + False + mail-send-symbolic + + + diff -Nru geary-0.11.4/ui/composer-link-popover.ui geary-0.12.0/ui/composer-link-popover.ui --- geary-0.11.4/ui/composer-link-popover.ui 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/composer-link-popover.ui 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,124 @@ + + + + + + diff -Nru geary-0.11.4/ui/composer-menus.ui geary-0.12.0/ui/composer-menus.ui --- geary-0.11.4/ui/composer-menus.ui 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/composer-menus.ui 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,132 @@ + + + + +
+ + S_ans Serif + cmp.font-family + sans + + + S_erif + cmp.font-family + serif + + + _Fixed Width + cmp.font-family + monospace + +
+
+ + _Small + cmp.font-size + small + + + _Medium + cmp.font-size + medium + + + Lar_ge + cmp.font-size + large + +
+
+ + C_olor + cmp.color + +
+
+ + _Rich Text + cmp.compose-as-html + +
+
+ + Show Extended Fields + cmp.show-extended + +
+
+ + +
+ + _Rich Text + cmp.compose-as-html + +
+
+ + Show Extended Fields + cmp.show-extended + +
+
+ + +
+
+ + _Undo + cmp.undo + + + _Redo + cmp.redo + +
+
+ + Cu_t + cmp.cut + + + _Copy + cmp.copy + + + _Paste + cmp.paste + + + Paste _With Formatting + cmp.paste-with-formatting + +
+
+ + Cu_t + cmp.cut + + + _Copy + cmp.copy + + + _Paste + cmp.paste + +
+
+ + Select _All + cmp.select-all + +
+
+
+ + _Inspect… + cmp.open_inspector + +
+
+
diff -Nru geary-0.11.4/ui/composer-web-view.css geary-0.12.0/ui/composer-web-view.css --- geary-0.11.4/ui/composer-web-view.css 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/composer-web-view.css 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,60 @@ +/* + * Copyright 2016 Software Freedom Conservancy Inc. + * Copyright 2017 Michael Gratton + */ + +body { + margin: 0 !important; + border: 0 !important; + padding: 0 !important; + background-color: #f9f9f9 !important; + font-size: medium !important; +} + +body.plain, body.plain * { + font-family: monospace !important; + font-weight: normal; + font-style: normal; + font-size: medium !important; + color: black; + text-decoration: none; +} + +body.plain a { + cursor: text; +} + +body > div#geary-body { + margin: 0 !important; + border: 0 !important; + padding: 12px !important; + outline: 0px !important; +} + +body > div#geary-signature, +body > div#geary-quote { + margin: 0 6px !important; + border: 0 !important; + padding: 6px !important; +} + +body > div.geary-focus { + background-color: white !important; +} + +body > div#geary-signature.geary-focus, +body > div#geary-quote.geary-focus { + outline: 1px dashed #ccc !important; +} + +blockquote { + margin: 0 10px; + border: 0; + border-left: 3px #aaa solid; + padding: 0 5px; +} + +pre { + white-space: pre-wrap; + margin: 0; +} diff -Nru geary-0.11.4/ui/composer-web-view.js geary-0.12.0/ui/composer-web-view.js --- geary-0.11.4/ui/composer-web-view.js 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/composer-web-view.js 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,697 @@ +/* + * Copyright 2016 Software Freedom Conservancy Inc. + * Copyright 2016 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +/** + * Application logic for ComposerWebView. + */ +let ComposerPageState = function() { + this.init.apply(this, arguments); +}; +ComposerPageState.KEYWORD_SPLIT_REGEX = /[\s]+/g; +ComposerPageState.QUOTE_START = "\x91"; // private use one +ComposerPageState.QUOTE_END = "\x92"; // private use two +ComposerPageState.QUOTE_MARKER = "\x7f"; // delete +ComposerPageState.PROTOCOL_REGEX = /^(aim|apt|bitcoin|cvs|ed2k|ftp|file|finger|git|gtalk|http|https|irc|ircs|irc6|lastfm|ldap|ldaps|magnet|news|nntp|rsync|sftp|skype|smb|sms|svn|telnet|tftp|ssh|webcal|xmpp):/i; +// Taken from Geary.HTML.URL_REGEX, without the inline modifier (?x) +// at the start, which is unsupported in JS +ComposerPageState.URL_REGEX = new RegExp("\\b((?:[a-z][\\w-]+:(?:/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))", "gi"); + +ComposerPageState.prototype = { + __proto__: PageState.prototype, + init: function() { + PageState.prototype.init.apply(this, []); + this.bodyPart = null; + this.signaturePart = null; + this.quotePart = null; + this.focusedPart = null; + + this.undoEnabled = false; + this.redoEnabled = false; + this.selections = new Map(); + this.nextSelectionId = 0; + this.cursorContext = null; + + let state = this; + + document.addEventListener("click", function(e) { + if (e.target.tagName == "A") { + e.preventDefault(); + } + }, true); + + let modifiedId = null; + this.bodyObserver = new MutationObserver(function() { + if (modifiedId == null) { + modifiedId = window.setTimeout(function() { + state.documentModified(); + state.checkCommandStack(); + modifiedId = null; + }, 1000); + } + }); + }, + loaded: function() { + let state = this; + + this.bodyPart = document.getElementById("geary-body"); + if (this.bodyPart == null) { + this.bodyPart = document.body; + } + + this.signaturePart = document.getElementById("geary-signature"); + this.quotePart = document.getElementById("geary-quote"); + + // Should be using 'e.key' in listeners below instead of + // keyIdentifier, but that was only fixed in WK in Oct 2016 + // (WK Bug 36267). Migrate to that when we can rely on it + // being in WebKitGTK. + document.body.addEventListener("keydown", function(e) { + if (e.keyIdentifier == "U+0009" &&// Tab + !e.ctrlKey && !e.altKey && !e.metaKey) { + if (!e.shiftKey) { + state.tabOut(); + } else { + state.tabIn(); + } + e.preventDefault(); + } + }); + // We can't use keydown for this, captured or bubbled, since + // that will also cause the line that the cursor is currenty + // positioned on when Enter is pressed to also be outdented. + document.body.addEventListener("keyup", function(e) { + if (e.keyIdentifier == "Enter" && !e.shiftKey) { + // XXX WebKit seems to support both InsertNewline and + // InsertNewlineInQuotedContent arguments for + // execCommand, both of which sound like they would be + // useful here. After a quick bit of testing neither + // worked out of the box, so need to investigate + // further. See: + // https://github.com/WebKit/webkit/blob/master/Source/WebCore/editing/EditorCommand.cpp + state.breakBlockquotes(); + } + }, true); + + // Search for and remove a particular styling when we quote + // text. If that style exists in the quoted text, we alter it + // slightly so we don't mess with it later. + let nodeList = document.querySelectorAll( + "blockquote[style=\"margin: 0 0 0 40px; border: none; padding: 0px;\"]"); + for (let i = 0; i < nodeList.length; ++i) { + nodeList.item(i).setAttribute( + "style", + "margin: 0 0 0 40px; padding: 0px; border:none;" + ); + } + + // Focus within the HTML document + document.body.focus(); + this.updateFocusClass(this.bodyPart); + + // Set text cursor at appropriate position + let cursor = document.getElementById("cursormarker"); + if (cursor != null) { + let range = document.createRange(); + range.selectNodeContents(cursor); + range.collapse(false); + + let selection = window.getSelection(); + selection.removeAllRanges(); + selection.addRange(range); + cursor.parentNode.removeChild(cursor); + } + + // Enable editing and observation machinery only after + // modifying the body above. + this.bodyPart.contentEditable = true; + if (this.signaturePart != null) { + this.signaturePart.contentEditable = true; + } + if (this.quotePart != null) { + this.quotePart.contentEditable = true; + } + let config = { + attributes: true, + childList: true, + characterData: true, + subtree: true + }; + this.bodyObserver.observe(document.body, config); + + // Chain up + PageState.prototype.loaded.apply(this, []); + }, + undo: function() { + document.execCommand("undo", false, null); + this.checkCommandStack(); + }, + redo: function() { + document.execCommand("redo", false, null); + this.checkCommandStack(); + }, + saveSelection: function() { + let id = (++this.nextSelectionId).toString(); + this.selections.set(id, SelectionUtil.save()); + return id; + }, + freeSelection: function(id) { + this.selections.delete(id); + }, + insertLink: function(href, selectionId) { + if (!window.getSelection().isCollapsed) { + // There is currently a selection, so assume the user + // knows what they are doing and just linkify it. + document.execCommand("createLink", false, href); + } else { + SelectionUtil.restore(this.selections.get(selectionId)); + document.execCommand("createLink", false, href); + } + }, + deleteLink: function() { + if (!window.getSelection().isCollapsed) { + // There is currently a selection, so assume the user + // knows what they are doing and just unlink it. + document.execCommand("unlink", false, null); + } else { + let selected = SelectionUtil.getCursorElement(); + if (selected != null && selected.tagName == "A") { + // The current cursor element is an A, so select it + // since unlink requires a range + let selection = SelectionUtil.save(); + SelectionUtil.selectNode(selected); + document.execCommand("unlink", false, null); + SelectionUtil.restore(selection); + } + } + }, + indentLine: function() { + document.execCommand("indent", false, null); + let nodeList = document.querySelectorAll( + "blockquote[style=\"margin: 0 0 0 40px; border: none; padding: 0px;\"]" + ); + for (let i = 0; i < nodeList.length; ++i) { + let element = nodeList.item(i); + element.removeAttribute("style"); + element.setAttribute("type", "cite"); + } + }, + updateSignature: function(signature) { + if (this.signaturePart != null) { + console.log(signature); + this.signaturePart.innerHTML = signature; + } + }, + deleteQuotedMessage: function() { + if (this.quotePart != null) { + this.quotePart.parentNode.removeChild(this.quotePart); + this.quotePart = null; + } + }, + /** + * Determines if subject or body content refers to attachments. + */ + containsAttachmentKeyword: function(keywordSpec, subject) { + let ATTACHMENT_KEYWORDS_SUFFIX = "doc|pdf|xls|ppt|rtf|pps"; + + let completeKeys = new Set(keywordSpec.toLocaleLowerCase().split("|")); + let suffixKeys = new Set(ATTACHMENT_KEYWORDS_SUFFIX.split("|")); + + // Check the subject line + if (ComposerPageState.containsKeywords(subject, completeKeys, suffixKeys)) { + return true; + } + + // Check interesting body text + let node = this.bodyPart.firstChild; + let content = []; + let breakingElements = new Set([ + "BR", "P", "DIV", "BLOCKQUOTE", "TABLE", "OL", "UL", "HR" + ]); + while (node != null) { + if (node.nodeType == Node.TEXT_NODE) { + content.push(node.textContent); + } else if (content.nodeType == Node.ELEMENT_NODE) { + let isBreaking = breakingElements.has(node.nodeName); + if (isBreaking) { + content.push("\n"); + } + + // Only include non-quoted text + if (content.nodeName != "BLOCKQUOTE") { + content.push(content.textContent); + } + } + node = node.nextSibling; + } + return ComposerPageState.containsKeywords( + content.join(""), completeKeys, suffixKeys + ); + }, + tabOut: function() { + document.execCommand( + "inserthtml", false, "\t" + ); + }, + tabIn: function() { + // If there is no selection and the character before the + // text cursor is tab, delete it. + let selection = window.getSelection(); + if (selection.isCollapsed) { + selection.modify("extend", "backward", "character"); + if (selection.getRangeAt(0).toString() == "\t") { + document.execCommand("delete", false, null); + } else { + selection.collapseToEnd(); + } + } + }, + breakBlockquotes: function() { + // Do this in two phases to avoid in-line mutations caused by + // execCommand affecting the DOM srtcuture + let count = 0; + let node = SelectionUtil.getCursorElement(); + while (node != document.body) { + if (node.nodeName == "BLOCKQUOTE") { + count++; + } + node = node.parentNode; + } + while (count > 0) { + document.execCommand("outdent", false, null); + count--; + } + }, + cleanContent: function() { + ComposerPageState.cleanPart(this.bodyPart, false); + ComposerPageState.linkify(this.bodyPart); + + this.signaturePart = ComposerPageState.cleanPart(this.signaturePart, true); + this.quotePart = ComposerPageState.cleanPart(this.quotePart, true); + }, + getHtml: function() { + // Clone the message parts so we can clean them without + // modifiying the DOM, needed when saving drafts. In contrast + // with cleanContent above, we don't remove empty elements so + // they still exist when restoring from draft + let parent = document.createElement("DIV"); + parent.appendChild( + ComposerPageState.cleanPart(this.bodyPart.cloneNode(true), false) + ); + + if (this.signaturePart != null) { + parent.appendChild( + ComposerPageState.cleanPart(this.signaturePart.cloneNode(true), false) + ); + } + + if (this.quotePart != null) { + parent.appendChild( + ComposerPageState.cleanPart(this.quotePart.cloneNode(true), false) + ); + } + + return parent.innerHTML; + }, + getText: function() { + return ComposerPageState.htmlToQuotedText(document.body); + }, + setRichText: function(enabled) { + if (enabled) { + document.body.classList.remove("plain"); + } else { + document.body.classList.add("plain"); + } + }, + checkCommandStack: function() { + let canUndo = document.queryCommandEnabled("undo"); + let canRedo = document.queryCommandEnabled("redo"); + + if (canUndo != this.undoEnabled || canRedo != this.redoEnabled) { + this.undoEnabled = canUndo; + this.redoEnabled = canRedo; + window.webkit.messageHandlers.commandStackChanged.postMessage( + this.undoEnabled + "," + this.redoEnabled + ); + } + }, + documentModified: function(element) { + window.webkit.messageHandlers.documentModified.postMessage(null); + }, + selectionChanged: function() { + PageState.prototype.selectionChanged.apply(this, []); + + let cursor = SelectionUtil.getCursorElement(); + + // Update cursor context + if (cursor != null) { + let newContext = new EditContext(cursor); + if (!newContext.equals(this.cursorContext)) { + this.cursorContext = newContext; + window.webkit.messageHandlers.cursorContextChanged.postMessage( + newContext.encode() + ); + } + } + + while (cursor != null) { + let parent = cursor.parentNode; + if (parent == document.body) { + this.updateFocusClass(cursor); + break; + } + cursor = parent; + } + }, + /** + * Work around WebKit note yet supporting :focus-inside pseudoclass. + */ + updateFocusClass: function(newFocus) { + if (this.focusedPart != null) { + this.focusedPart.classList.remove("geary-focus"); + this.focusedPart = null; + } + if (newFocus == this.bodyPart || + newFocus == this.signaturePart || + newFocus == this.quotePart) { + this.focusedPart = newFocus; + this.focusedPart.classList.add("geary-focus"); + } + } +}; + +/** + * Determines if any keywords are present in a string. + */ +ComposerPageState.containsKeywords = function(line, completeKeys, suffixKeys) { + let tokens = new Set( + line.toLocaleLowerCase().split(ComposerPageState.KEYWORD_SPLIT_REGEX) + ); + + for (let key of completeKeys) { + if (tokens.has(key)) { + return true; + } + } + + let urlRegex = ComposerPageState.URL_REGEX; + // XXX assuming all suffixes have length = 3 here. + let extLen = 3; + for (let token of tokens) { + let extDelim = token.length - (extLen + 1); + // We do care about "a.pdf", but not ".pdf" + if (token.length >= extLen + 2 && token.charAt(extDelim) == ".") { + let suffix = token.substring(extDelim + 1); + if (suffixKeys.has(suffix)) { + if (token.match(urlRegex) == null) { + return true; + } + } + } + } + + return false; +}; + +/** + * Removes internal attributes from a composer part.. + */ +ComposerPageState.cleanPart = function(part, removeIfEmpty) { + if (part != null) { + part.removeAttribute("class"); + part.removeAttribute("contenteditable"); + + if (removeIfEmpty && part.innerText.trim() == "") { + part.parentNode.removeChild(part); + part = null; + } + } + return part; +}; + +/** + * Convert a HTML DOM tree to plain text with delineated quotes. + * + * Lines are delinated using LF. Quoted lines are prefixed with + * `ComposerPageState.QUOTE_MARKER`, where the number of markers + * indicates the depth of nesting of the quote. + * + * This will modify/reset the DOM, since it ultimately requires + * stuffing `QUOTE_MARKER` into existing paragraphs and getting it + * back out in a way that preserves the visual presentation. + */ +ComposerPageState.htmlToQuotedText = function(root) { + // XXX It would be nice to just clone the root and modify that, or + // see if we can implement this some other way so as to not modify + // the DOM at all, but currently unit test show that the results + // are not the same if we work on a clone, likely because of the + // use of HTMLElement::innerText. Need to look into it more. + + let savedDoc = root.innerHTML; + let blockquotes = root.querySelectorAll("blockquote"); + let nbq = blockquotes.length; + let bqtexts = new Array(nbq); + + // Get text of blockquotes and pull them out of DOM. They are + // replaced with tokens deliminated with the characters + // QUOTE_START and QUOTE_END (from a unicode private use block). + // We need to get the text while they're still in the DOM to get + // newlines at appropriate places. We go through the list of + // blockquotes from the end so that we get the innermost ones + // first. + for (let i = nbq - 1; i >= 0; i--) { + let bq = blockquotes.item(i); + let text = bq.innerText; + if (text.substr(-1, 1) == "\n") { + text = text.slice(0, -1); + } else { + console.debug( + " no newline at end of quote: " + + text.length > 0 + ? "0x" + text.codePointAt(text.length - 1).toString(16) + : "empty line" + ); + } + bqtexts[i] = text; + + bq.innerText = ( + ComposerPageState.QUOTE_START + + i.toString() + + ComposerPageState.QUOTE_END + ); + } + + // Reassemble plain text out of parts, and replace non-breaking + // space with regular space. + let text = ComposerPageState.resolveNesting(root.innerText, bqtexts); + + // Reassemble DOM now we have the plain text + root.innerHTML = savedDoc; + + return ComposerPageState.replaceNonBreakingSpace(text); +}; + +// Linkifies "plain text" link +ComposerPageState.linkify = function(node) { + if (node.nodeType == Node.TEXT_NODE) { + // Examine text node for something that looks like a URL + let input = node.nodeValue; + if (input != null) { + let output = input.replace(ComposerPageState.URL_REGEX, function(url) { + if (url.match(ComposerPageState.PROTOCOL_REGEX) != null) { + url = "\x01" + url + "\x01"; + } + return url; + }); + + if (input != output) { + // We got one! Now split the text and swap in a new anchor. + let parent = node.parentNode; + let sibling = node.nextSibling; + for (let part of output.split("\x01")) { + let newNode = null; + if (part.match(ComposerPageState.URL_REGEX) != null) { + newNode = document.createElement("A"); + newNode.href = part; + newNode.innerText = part; + } else { + newNode = document.createTextNode(part); + } + parent.insertBefore(newNode, sibling); + } + parent.removeChild(node); + } + } + } else { + // Recurse + let child = node.firstChild; + while (child != null) { + // Save the child and get its next sibling early since if + // it does actually contain a URL, it will be removed from + // the tree + let target = child; + child = child.nextSibling; + // Don't attempt to linkify existing links + if (target.nodeName != "A") { + ComposerPageState.linkify(target); + } + } + } +}; + +ComposerPageState.resolveNesting = function(text, values) { + let tokenregex = new RegExp( + "(.?)" + + ComposerPageState.QUOTE_START + + "([0-9]*)" + + ComposerPageState.QUOTE_END + + "(?=(.?))", "g" + ); + return text.replace(tokenregex, function(match, p1, p2, p3, offset, str) { + let key = new Number(p2); + let prevChars = p1; + let nextChars = p3; + let insertNext = ""; + // Make sure there's a newline before and after the quote. + if (prevChars != "" && prevChars != "\n") + prevChars = prevChars + "\n"; + if (nextChars != "" && nextChars != "\n") + insertNext = "\n"; + + let value = ""; + if (key >= 0 && key < values.length) { + let nested = ComposerPageState.resolveNesting(values[key], values); + value = prevChars + ComposerPageState.quoteLines(nested) + insertNext; + } else { + console.error("Regex error in denesting blockquotes: Invalid key"); + } + return value; + }); +}; + +/** + * Prefixes each NL-delineated line with `ComposerPageState.QUOTE_MARKER`. + */ +ComposerPageState.quoteLines = function(text) { + let lines = text.split("\n"); + for (let i = 0; i < lines.length; i++) + lines[i] = ComposerPageState.QUOTE_MARKER + lines[i]; + return lines.join("\n"); +}; + +/** + * Converts all non-breaking space chars to plain spaces. + */ +ComposerPageState.replaceNonBreakingSpace = function(text) { + // XXX this is a separate function for unit testing - since when + // running as a unit test, HTMLElement.innerText appears to not + // convert   into U+00A0. + return text.replace(new RegExp(" ", "g"), " "); +}; + + +/** + * Encapsulates editing-related state for a specific DOM node. + * + * This must be kept in sync with the vala object of the same name. + */ +let EditContext = function() { + this.init.apply(this, arguments); +}; +EditContext.LINK_MASK = 1 << 0; + +EditContext.prototype = { + init: function(node) { + this.context = 0; + this.linkUrl = ""; + + if (node.nodeName == "A") { + this.context |= EditContext.LINK_MASK; + this.linkUrl = node.href; + } + + let styles = window.getComputedStyle(node); + let fontFamily = styles.getPropertyValue("font-family"); + if (fontFamily.charAt() == "'") { + fontFamily = fontFamily.substr(1, fontFamily.length - 2); + } + this.fontFamily = fontFamily; + this.fontSize = styles.getPropertyValue("font-size").replace("px", ""); + }, + equals: function(other) { + return other != null + && this.context == other.context + && this.linkUrl == other.linkUrl + && this.fontFamily == other.fontFamily + && this.fontSize == other.fontSize; + }, + encode: function() { + return [ + this.context.toString(16), + this.linkUrl, + this.fontFamily, + this.fontSize + ].join(","); + } +}; + + +/** + * Utility methods for managing the DOM Selection. + */ +let SelectionUtil = { + /** + * Returns the element immediately under the text cursor. + * + * If there is a non-empty selection, the element at the end of the + * selection is returned. + */ + getCursorElement: function() { + let selection = window.getSelection(); + let node = selection.focusNode; + if (node != null && node.nodeType != Node.ELEMENT_NODE) { + node = node.parentNode; + } + return node; + }, + /** + * Modifies the selection so that it contains the given target node. + */ + selectNode: function(target) { + let newRange = new Range(); + newRange.selectNode(target); + + let selection = window.getSelection(); + selection.removeAllRanges(); + selection.addRange(newRange); + }, + /** + * Saves the current selection so it can be restored with `restore`. + */ + save: function() { + let selection = window.getSelection(); + var ranges = []; + let len = selection.rangeCount; + for (let i = 0; i < len; ++i) { + ranges.push(selection.getRangeAt(i)); + } + return ranges; + }, + /** + * Restores the selection saved with `save`. + */ + restore: function(saved) { + let selection = window.getSelection(); + selection.removeAllRanges(); + for (let i = 0; i < saved.length; i++) { + selection.addRange(saved[i]); + } + } +}; + + +var geary = new ComposerPageState(); diff -Nru geary-0.11.4/ui/composer-widget.ui geary-0.12.0/ui/composer-widget.ui --- geary-0.11.4/ui/composer-widget.ui 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/composer-widget.ui 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,799 @@ + + + + + + diff -Nru geary-0.11.4/ui/conversation-email-attachment-view.ui geary-0.12.0/ui/conversation-email-attachment-view.ui --- geary-0.11.4/ui/conversation-email-attachment-view.ui 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/conversation-email-attachment-view.ui 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,52 @@ + + + + + + diff -Nru geary-0.11.4/ui/conversation-email-menus.ui geary-0.12.0/ui/conversation-email-menus.ui --- geary-0.11.4/ui/conversation-email-menus.ui 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/conversation-email-menus.ui 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,62 @@ + + + + +
+ + _Reply + eml.reply_sender + + + Reply to _All + eml.reply_all + + + _Forward + eml.forward + +
+
+ + _Mark Read + eml.mark_read + + + _Mark Unread + eml.mark_unread + + + Mark Unread From _Here + eml.mark_unread_down + +
+
+ + _Print… + eml.print + + + _View Source + eml.view_source + +
+
+ +
+ + _Open + eml.open_attachments + +
+
+ + _Save + eml.save_attachments + + + _Save All + eml.save_all_attachments + +
+
+
diff -Nru geary-0.11.4/ui/conversation-email.ui geary-0.12.0/ui/conversation-email.ui --- geary-0.11.4/ui/conversation-email.ui 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/conversation-email.ui 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,415 @@ + + + + + + + True + False + end + start + + + False + True + True + Save all attachments + start + eml.save_all_attachments + none + + + True + False + mail-attachment-symbolic + + + + + 0 + 0 + + + + + True + False + True + True + Mark this message as starred + start + eml.star + none + + + True + False + non-starred-symbolic + + + + + 1 + 0 + + + + + False + True + True + Mark this message as not starred + start + eml.unstar + none + + + True + False + starred-symbolic + + + + + 2 + 0 + + + + + True + False + True + True + Display the message menu + start + none + + + True + False + open-menu-symbolic + + + + + 3 + 0 + + + + + box + True + False + vertical + + + True + False + + + 0 + 0 + + + + + True + True + 6 + 6 + 6 + 6 + True + True + 6 + 6 + 4 + multiple + False + + + + + 0 + 1 + + + + + True + False + + + + True + True + Open selected attachments + eml.open_attachments + + + True + False + document-open-symbolic + + + + + + + + + True + True + Save selected attachments + eml.save_attachments + + + True + False + document-save-symbolic + + + + + + + + + False + True + Select all attachments + eml.select_all_attachments + + + True + False + edit-select-all-symbolic + + + + + + + + + 0 + 2 + + + + + + + + + + + + + + + + True + False + True + warning + + + False + 6 + end + + + Edit Draft + True + True + True + + + True + True + 1 + + + + + True + False + 0 + + + + + False + vertical + 2 + + + True + False + Draft message + 0 + + + + + + True + True + 0 + + + + + True + False + This message has not yet been sent. + 0 + + + True + True + 1 + + + + + True + True + 0 + + + + button3 + + + + True + False + True + warning + + + False + 6 + end + + + Try Again + True + True + True + + + True + True + 0 + + + + + False + False + 0 + + + + + False + vertical + 16 + + + True + False + Message not saved + 0 + + + + + + True + True + 0 + + + + + True + False + This message was sent, but has not been saved to your account. + end + 0 + + + True + True + 1 + + + + + False + False + 0 + + + + button1 + + + + True + False + True + vertical + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru geary-0.11.4/ui/conversation-message-menus.ui geary-0.12.0/ui/conversation-message-menus.ui --- geary-0.11.4/ui/conversation-message-menus.ui 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/conversation-message-menus.ui 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,54 @@ + + + + + +
+ + Send New _Message… + msg.open_link + + + Copy Email _Address + msg.copy_email + +
+
+ + Save _Image As… + msg.save_image + +
+
+ + _Select All + msg.select_all + + + _Copy + msg.copy_selection + +
+
+ + Search for messages from + msg.search_from + +
+
+ + _Inspect… + msg.open_inspector + +
+
+
diff -Nru geary-0.11.4/ui/conversation-message.ui geary-0.12.0/ui/conversation-message.ui --- geary-0.11.4/ui/conversation-message.ui 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/conversation-message.ui 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,791 @@ + + + + + + + False + body_container + bottom + + + True + False + 12 + 12 + 12 + 12 + vertical + + + True + False + center + 12 + True + dialog-warning-symbolic + 3 + + + 0 + 0 + 2 + + + + + True + False + start + 12 + <a href="http://badlink.com">http://badlink.com</a> + True + middle + 60 + + + + 1 + 5 + + + + + True + False + start + But actually goes to: + + + 1 + 4 + + + + + True + False + start + 12 + 6 + <a href="http://goodlink.com">http://goodlink.com</a> + True + middle + 60 + + + + 1 + 3 + + + + + True + False + start + 12 + The link appears to go to: + + + 1 + 2 + + + + + True + False + start + Deceptive link found + + + + + + 1 + 0 + + + + + True + False + start + The email sender may be leading you to the wrong web site. + + + 1 + 1 + + + + + True + False + start + 12 + If unsure, contact the sender and ask before continuing. + + + 1 + 6 + + + + + + + + + + + + + + + + + + + + + + diff -Nru geary-0.11.4/ui/conversation-viewer.ui geary-0.12.0/ui/conversation-viewer.ui --- geary-0.11.4/ui/conversation-viewer.ui 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/conversation-viewer.ui 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,188 @@ + + + + + + diff -Nru geary-0.11.4/ui/conversation-web-view.css geary-0.12.0/ui/conversation-web-view.css --- geary-0.11.4/ui/conversation-web-view.css 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/conversation-web-view.css 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,200 @@ +/** + * Style that is inserted into the message after it is loaded. + */ + +/* + * General HTML style. + */ + +* { + transition: height 0.25s !important; +} + +html { + /* Trigger CSS 2.1 § 10.6.7 to get a shrink-wrapped height. */ + position: absolute !important; + top: 0 !important; + bottom: auto !important; + height: auto !important; + + /* Fix up the width after going to absolute positioning above. */ + width: 100%; + + /* Lock down the box just enough so we don't get an incrementally + expanding web view */ + box-sizing: border-box !important; + margin: 0 !important; +} + +body { + margin: 12px; + border: 0; + padding: 0; + + /* XXX for plain text only? */ + overflow-wrap: break-word !important; + + /* Fix messages with broken body style. See Bug 750075. */ + height: auto !important; +} + +table { + /* By default, tables reset the font properties to "normal" */ + font-size: inherit; +} + +a { + color: #08c; +} + +hr { + background-color: #999; + height: 1px; + border: 0; + margin-top: 15px; + margin-bottom: 15px; +} + +blockquote { + margin: 0.3em 16px; + border: 0; + border-left: 3px #aaa solid; + padding: 0 8px; +} + +pre { + white-space: pre-wrap; +} + +/** + * Message chrome style. + */ + +.geary-signature { + color: #777; + display: inline; +} + +.geary-signature a, +.geary-quote-container a { + color: #5fb2e7; +} + +@media screen { + + .geary_replaced_inline_image { + display: block; + max-width: 100%; + margin: 1em 0; + } + + /* Inline collapsable quote blocks */ + + .geary-quote-container { + position: relative; + /* Split 1em of top/bottom margin between here and the default + blockquote style, so if a message specifies 0px margin and padding + (i.e. GMail) there will still be some space space between the + container's background and and the blockquote. */ + margin: 0.5em 0; + border-radius: 4px; + padding: 0.5em 0; + color: #303030; + background-color: #e8e8e8;/* recv-quoted */ + } + .geary-sent .geary-quote-container { + background-color: #e8e8e8;/* sent-quoted */ + } + + .geary-quote-container > .geary-quote { + position: relative; + padding: 0; + border: 0; + padding: 0; + overflow: hidden; + z-index: 0; + } + .geary-quote-container.geary-controllable.geary-hide > .geary-quote { + /* Use a fraction value to cut the last visible line off half way. */ + max-height: calc(6em - 8px); + } + + .geary-quote-container.geary-controllable > .geary-quote > blockquote { + /* Add space between the quote and the hider button */ + margin-bottom: 18px; + } + + .geary-quote-container > .geary-shower, + .geary-quote-container > .geary-hider { + position: absolute; + display: none; + left: 0; + right: 0; + bottom: -4px; + z-index: 1; + -webkit-user-select: none; + -webkit-user-drag: none; + } + + .geary-quote-container.geary-controllable.geary-hide > .geary-hider { + display: none; + } + .geary-quote-container.geary-controllable.geary-hide > .geary-shower, + .geary-quote-container.geary-controllable > .geary-hider { + display: block; + } + + .geary-quote-container >> .geary-button { + display: block; + width: 100%; + height: 16px; + min-height: 0; + margin: 0; + margin-bottom: 4px; + padding: 0; + font-size: 8px; /* Absolute size in pixels for graphics */ + white-space: pre; + -webkit-user-select: none; + -webkit-user-drag: none; + /* All futher properties below are a workaround for WK Bug 166648 + * . The result is + * we need to manually style these buttons outselves. */ + -webkit-appearance: none; + box-sizing: border-box; + /* The following was taken from GTK+4 trunk Adwaita theme: + * gtk/theme/Adwaita/gtk-contained.css */ + border: 1px solid; + border-radius: 3px; + transition: all 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94); + color: #2e3436; + outline-color: rgba(46, 52, 54, 0.3); + border-color: #b6b6b3; + border-bottom-color: #91918c; + background-image: linear-gradient(to bottom, #e8e8e7, #dededd 60%, #cfcfcd); + text-shadow: 0 1px rgba(255, 255, 255, 0.76923); + box-shadow: inset 0 1px rgba(255, 255, 255, 0.8); } + } + .geary-quote-container >> .geary-button:hover { + /* Likewise the properties below also workaround WK Bug 166648, + * and taken from gtk/theme/Adwaita/gtk-contained.css. */ + color: #2e3436; + outline-color: rgba(46, 52, 54, 0.3); + border-color: #b6b6b3; + border-bottom-color: #91918c; + text-shadow: 0 1px rgba(255, 255, 255, 0.76923); + box-shadow: inset 0 1px white; + background-image: linear-gradient(to bottom, #f7f7f7, #e8e8e7 60%, #dededd); + } + + /* Highlight search terms */ + + .geary_search_coloring *::selection { + background-color: #00ddff; + } +} + +@media print { + body { + background-color: white !important; + } +} diff -Nru geary-0.11.4/ui/conversation-web-view.js geary-0.12.0/ui/conversation-web-view.js --- geary-0.11.4/ui/conversation-web-view.js 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/conversation-web-view.js 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,316 @@ +/* + * Copyright 2016 Software Freedom Conservancy Inc. + * Copyright 2016 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +/** + * Application logic for ConversationWebView. + */ +let ConversationPageState = function() { + this.init.apply(this, arguments); +}; + +ConversationPageState.QUOTE_CONTAINER_CLASS = "geary-quote-container"; +ConversationPageState.QUOTE_HIDE_CLASS = "geary-hide"; + +// Keep these in sync with ConversationWebView +ConversationPageState.NOT_DECEPTIVE = 0; +ConversationPageState.DECEPTIVE_HREF = 1; +ConversationPageState.DECEPTIVE_DOMAIN = 2; + +ConversationPageState.prototype = { + __proto__: PageState.prototype, + init: function() { + PageState.prototype.init.apply(this, []); + + let state = this; + document.addEventListener("click", function(e) { + if (e.target.tagName == "A" && + state.linkClicked(e.target)) { + e.preventDefault(); + } + }, true); + }, + loaded: function() { + this.updateDirection(); + this.createControllableQuotes(); + this.wrapSignature(); + PageState.prototype.loaded.apply(this, []); + }, + /** + * Set dir="auto" if not already set. + * + * This should provide a slightly better RTL experience. + */ + updateDirection: function() { + let dir = document.documentElement.dir; + if (dir == null || dir.trim() == "") { + document.documentElement.dir = "auto"; + } + }, + /** + * Add top level blockquotes to hide/show container. + */ + createControllableQuotes: function() { + let blockquoteList = document.documentElement.querySelectorAll("blockquote"); + for (let i = 0; i < blockquoteList.length; ++i) { + let blockquote = blockquoteList.item(i); + let nextSibling = blockquote.nextSibling; + let parent = blockquote.parentNode; + + // Only insert into a quote container if the element is a + // top level blockquote + if (!ConversationPageState.isDescendantOf(blockquote, "BLOCKQUOTE")) { + let quoteHeight = blockquote.offsetHeight; + + // Only make the quote it controllable if it is tall enough + let isControllable = (quoteHeight > 120); + + let quoteContainer = document.createElement("DIV"); + quoteContainer.classList.add( + ConversationPageState.QUOTE_CONTAINER_CLASS + ); + if (isControllable) { + quoteContainer.classList.add("geary-controllable"); + quoteContainer.classList.add( + ConversationPageState.QUOTE_HIDE_CLASS + ); + } + + let quoteDiv = document.createElement("DIV"); + quoteDiv.classList.add("geary-quote"); + + quoteDiv.appendChild(blockquote); + quoteContainer.appendChild(quoteDiv); + parent.insertBefore(quoteContainer, nextSibling); + + let containerHeight = quoteDiv.offsetHeight; + + let state = this; + function newControllerButton(styleClass, text) { + let button = document.createElement("BUTTON"); + button.classList.add("geary-button"); + button.type = "button"; + button.onclick = function() { + let hide = ConversationPageState.QUOTE_HIDE_CLASS; + quoteContainer.classList.toggle(hide); + + // Update the preferred height. We calculate + // what the difference should be rather than + // getting it directly, since WK won't ever + // shrink the height of the HTML element. + let height = quoteHeight - containerHeight; + if (quoteContainer.classList.contains(hide)) { + height = state.lastPreferredHeight - height; + } else { + height = state.lastPreferredHeight + height; + } + state.updatePreferredHeight(height); + }; + button.appendChild(document.createTextNode(text)); + + let container = document.createElement("DIV"); + container.classList.add(styleClass); + container.appendChild(button); + + return container; + } + + if (isControllable) { + quoteContainer.appendChild(newControllerButton( + "geary-shower", "▼ ▼ ▼" + )); + quoteContainer.appendChild(newControllerButton( + "geary-hider", "▲ ▲ ▲" + )); + } + } + } + }, + /** + * Look for and wrap a signature. + * + * Most HTML signatures fall into one + * of these designs which are handled by this method: + * + * 1. GMail:
--
$SIGNATURE + * 2. GMail Alternate:
--
$SIGNATURE + * 3. Thunderbird:
--
$SIGNATURE
+ * + */ + wrapSignature: function() { + let possibleSigs = document.documentElement.querySelectorAll("div,span,p"); + let i = 0; + let sigRegex = new RegExp("^--\\s*$"); + let alternateSigRegex = new RegExp("^--\\s*(?: 0) { + let range = selection.getRangeAt(0); + value = range.toString().trim(); + if (value == "") { + value = null; + } + } + return value; + }, + linkClicked: function(link) { + let cancelClick = false; + let href = link.href; + if (!href.startsWith("mailto:")) { + let text = link.innerText; + let reason = ConversationPageState.isDeceptiveText(text, href); + if (reason != ConversationPageState.NOT_DECEPTIVE) { + cancelClick = true; + window.webkit.messageHandlers.deceptiveLinkClicked.postMessage({ + reason: reason, + text: text, + href: href, + location: ConversationPageState.getNodeBounds(link) + }); + } + } + + return cancelClick; + } +}; + +/** + * Returns an [x, y, width, height] array of a node's bounds. + */ +ConversationPageState.getNodeBounds = function(node) { + let x = 0; + let y = 0; + let parent = node; + while (parent != null) { + x += parent.offsetLeft; + y += parent.offsetTop; + parent = parent.offsetParent; + } + return { + x: x, + y: y, + width: node.offsetWidth, + height: node.offsetHeight + }; +}; + +/** + * Test for URL-like `text` that leads somewhere other than `href`. + */ +ConversationPageState.isDeceptiveText = function(text, href) { + // First, does text look like a URI? Right now, just test whether + // it has . in it. More sophisticated tests are + // possible. + let domain = new RegExp("([a-z]*://)?" // Optional scheme + + "([^\\s:/]+\\.[^\\s:/\\.]+)" // Domain + + "(/[^\\s]*)?"); // Optional path + let textParts = text.match(domain); + if (textParts == null) { + return ConversationPageState.NOT_DECEPTIVE; + } + let hrefParts = href.match(domain); + if (hrefParts == null) { + // If href doesn't look like a URL, something is fishy, so + // warn the user + return ConversationPageState.DECEPTIVE_HREF; + } + + // Second, do the top levels of the two domains match? We + // compare the top n levels, where n is the minimum of the + // number of levels of the two domains. + let textDomain = textParts[2].toLowerCase().split(".").reverse(); + let hrefDomain = hrefParts[2].toLowerCase().split(".").reverse(); + let segmentCount = Math.min(textDomain.length, hrefDomain.length); + if (segmentCount == 0) { + return ConversationPageState.DECEPTIVE_DOMAIN; + } + for (let i = 0; i < segmentCount; i++) { + if (textDomain[i] != hrefDomain[i]) { + return ConversationPageState.DECEPTIVE_DOMAIN; + } + } + + return ConversationPageState.NOT_DECEPTIVE; +}; + +ConversationPageState.isDescendantOf = function(node, ancestorTag) { + let ancestor = node.parentNode; + while (ancestor != null) { + if (ancestor.tagName == ancestorTag) { + return true; + } + ancestor = ancestor.parentNode; + } + return false; +}; + +var geary = new ConversationPageState(); diff -Nru geary-0.11.4/ui/empty-placeholder.ui geary-0.12.0/ui/empty-placeholder.ui --- geary-0.11.4/ui/empty-placeholder.ui 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/empty-placeholder.ui 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,58 @@ + + + + + + diff -Nru geary-0.11.4/ui/find_bar.glade geary-0.12.0/ui/find_bar.glade --- geary-0.11.4/ui/find_bar.glade 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/ui/find_bar.glade 2017-10-02 11:25:21.000000000 +0000 @@ -1,6 +1,6 @@ - + True False @@ -46,7 +46,7 @@ True True True - 6 + 6 image2 none True @@ -61,7 +61,7 @@ True False - 2 + 2 0.4699999988079071 Find: @@ -90,7 +90,7 @@ True True True - 2 + 2 image3 none True @@ -126,8 +126,8 @@ True True False - 8 - 8 + 8 + 8 none True 0 diff -Nru geary-0.11.4/ui/folder-popover.ui geary-0.12.0/ui/folder-popover.ui --- geary-0.11.4/ui/folder-popover.ui 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/folder-popover.ui 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,62 @@ + + + + + + diff -Nru geary-0.11.4/ui/geary.css geary-0.12.0/ui/geary.css --- geary-0.11.4/ui/geary.css 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/geary.css 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,184 @@ +/* + * Copyright 2016 Software Freedom Conservancy Inc. + * Copyright 2016 Michael Gratton + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +/* + * Since GTK+ 3.20 introduced some significant breaking changes to CSS + * node names for styling GTK+ widgets, we need to duplicate selectors + * that either either refer to a widget by node name (e.g. "GtkLabel" + * vs "label"), or that referrs to any child nodes introduced by 3.20 + * (e.g. "frame > border"). + */ + +.geary-folder-frame, /* GTK < 3.20 */ +.geary-folder-frame > border { + border-left-width: 0; + border-top-width: 0; + border-right-width: 0; +} +.geary-conversation-frame, /* GTK < 3.20 */ +.geary-conversation-frame > border { + border-left-width: 0; + border-top-width: 0; + border-right-width: 0; +} +/* For 3-pane mode only */ +.geary-sidebar-pane-separator.vertical .conversation-frame, /* GTK < 3.20 */ +.geary-sidebar-pane-separator.vertical .conversation-frame > border { + border-bottom-width: 0; +} + +.geary-composer-box, /* GTK < 3.20 */ +.geary-composer-box > border { + border-width: 0px; +} +.geary-composer-body, /* GTK < 3.20 */ +.geary-composer-body > border { + border-left-width: 0; + border-right-width: 0; + border-bottom-width: 0; +} + +.geary-titlebar-left:dir(ltr), +.geary-titlebar-right:dir(rtl) { + border-top-right-radius: 0px; +} +.geary-titlebar-right:dir(ltr), +.geary-titlebar-left:dir(rtl) { + border-top-left-radius: 0px; +} + +/* FolderPopover */ + +.list-row.geary-folder-popover-list-row, /* GTK < 3.20 */ +row.geary-folder-popover-list-row { + padding: 6px; + border-color: @borders; + border-style: groove; + border-bottom-width: 1px; +} +.list-row.geary-folder-popover-list-row > GtkLabel, /* GTK < 3.20 */ +row.geary-folder-popover-list-row > label { + color: @theme_text_color; +} + +/* ConversationListBox */ + +.conversation-listbox { + padding: 18px; +} +.conversation-listbox > .list-row, /* GTK < 3.20 */ +.conversation-listbox > row { + margin: 0; + border: 1px solid @borders; + border-bottom-width: 0; + padding: 0; + box-shadow: 0 4px 8px 1px rgba(0,0,0,0.4); + transition: margin 0.1s; +} +.conversation-listbox > .list-row > GtkBox, /* GTK < 3.20 */ +.conversation-listbox > row > box { + background: @theme_base_color; + transition: background 0.25s; +} +.conversation-listbox > .list-row:hover > GtkBox, /* GTK < 3.20 */ +.conversation-listbox > row:hover > box { + background: shade(@theme_base_color, 0.96); +} +.conversation-listbox > .list-row.geary-expanded, /* GTK < 3.20 */ +.conversation-listbox > row.geary-expanded { + margin-bottom: 6px; + border-bottom-width: 1px; +} +.conversation-listbox *.geary-matched *.geary-match { + color: @theme_selected_fg_color; + background: @theme_selected_bg_color; +} +.conversation-listbox > .list-row.geary-last, /* GTK < 3.20 */ +.conversation-listbox > row.geary-last { + margin-bottom: 0; +} + +/* ConversationEmail */ + +.geary-unread, ConversationMessage, /* GTK < 3.20 */ +.geary-unread grid.geary-message-summary { + border-color: @theme_selected_bg_color; + transition: border 0.25s; +} + +/* ConversationMessage */ + +ConversationMessage, /* GTK < 3.20 */ +grid.geary-message-summary { + border-top: 4px solid transparent; + padding: 12px; + padding-top: 8px; + transition: border 4s; +} + +.geary-headers GtkLabel, /* GTK < 3.20 */ +.geary-headers label { + margin: 0; + padding: 1px; +} +.geary-headers GtkLabel.geary-header, /* GTK < 3.20 */ +.geary-headers label.geary-header { + padding-right: 6px; +} +.geary-headers GtkFlowBox > *, /* GTK < 3.20 */ +.geary-headers flowboxchild { + margin: 0; + padding: 1px; +} +.geary-headers GtkFlowBox > * GtkLabel, /* GTK < 3.20 */ +.geary-headers flowboxchild label { + margin: 0; + padding: 0; +} + +.geary-headers GtkLabel.geary-from, /* GTK < 3.20 */ +.geary-headers label.geary-from { + font-weight: bold; +} + +.geary-header-value > *:active, /* GTK < 3.20 */ +.geary-header-value > flowboxchild:active { + background: mix(@theme_base_color, @theme_bg_color, 0.5); +} + +.geary-header-value > *:hover, /* GTK < 3.20 */ +.geary-header-value > flowboxchild:hover { + background: @theme_base_color; +} + +.geary-header-value > * GtkLabel.dim-label, /* GTK < 3.20 */ +.geary-header-value > flowboxchild label.dim-label { + padding-left: 6px; /* Would be margin-left, but GTK 3.14 doesn't like it */ +} + +.geary-submessages .geary-message { + background-image: linear-gradient(rgba(0,0,0,0.2), @bg_color 6px); +} + +/* Composer */ + +.geary-composer-embed GtkHeaderBar, /* GTK < 3.20 */ +.geary-composer-embed headerbar { + border-top: 1px solid @borders; + border-radius: 0px; +} + +/* EmptyPlaceholder */ + +.geary-empty-placeholder > GtkImage, /* GTK < 3.20 */ +.geary-empty-placeholder > image { + margin-bottom: 12px; +} +.geary-empty-placeholder > .title { + font-weight: bold; +} diff -Nru geary-0.11.4/ui/gtk/help-overlay.ui geary-0.12.0/ui/gtk/help-overlay.ui --- geary-0.11.4/ui/gtk/help-overlay.ui 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/gtk/help-overlay.ui 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,342 @@ + + + + + + True + 12 + conversation + Conversation Shortcuts + + + True + General + + + True + Move focus to the next/previous pane + F6 <Shift>F6 + + + + + True + Move focus to conversation list + <primary>B + + + + + True + Detach composer window + <primary>D + + + + + True + Close composer window + <primary>W Escape + + + + + True + Show keyboard shortcuts + <Primary>F1 <Primary>question + + + + + True + Show help + F1 + + + + + True + Quit the application + <primary>Q + + + + + + + True + Search + + + True + Jump to search box + <primary>S + + + + + True + Find in current conversation + <primary>F + + + + + True + Find next/previous in current conversation + <primary>G <primary><Shift>G + + + + + + + True + Actions + + + True + Compose a new message + <primary>N N + + + + + True + Reply to sender + <primary>R R + + + + + True + Reply to all + <primary><Shift>R <Shift>R + + + + + True + Forward + <primary>L F + + + + + True + Archive + A + + + + + True + Move to trash + Delete Back + + + + + True + Toggle spam + <primary>J exclam + + + + + True + Move the conversation + M + + + + + True + Label the conversation + L + + + + + + True + Mark read + <primary>I <Shift>I + + + + + True + Mark unread + <primary>U <Shift>U + + + + + + + True + View + + + True + Zoom in + <primary>equal equal + + + + + True + Zoom out + <primary>minus minus + + + + + True + Reset zoom + <primary>0 0 + + + + + + + True + Additional Shortcuts + + + True + Star + S + + + + + True + Unstar + D + + + + + True + Delete + <Shift>Delete <Shift>Back + + + + + True + Jump to next (older) conversation + J + + + + + True + Jump to previous (newer) conversation + K + + + + + + + + + True + composer + Composer Shortcuts + + + True + General + + + True + Quote text + <primary>bracketleft + + + + + True + Unquote text + <primary>bracketright + + + + + + + True + Actions + + + True + Send + <primary>Return + + + + + True + Add attachment + <primary>T + + + + + + + True + Rich text mode + + + True + Bold text + <primary>B + + + + + True + Italicize text + <primary>I + + + + + True + Underline text + <primary>U + + + + + True + Strike text + <primary>K + + + + + True + Insert a link + <primary>L + + + + + True + Remove formatting + <primary>space + + + + + + + + diff -Nru geary-0.11.4/ui/gtk/menus.ui geary-0.12.0/ui/gtk/menus.ui --- geary-0.11.4/ui/gtk/menus.ui 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/gtk/menus.ui 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,44 @@ + + + + +
+ + Compose Message + app.compose + +
+
+ + A_ccounts + app.accounts + + + _Preferences + app.preferences + +
+
+ + _Keyboard Shortcuts + win.show-help-overlay + <Primary>F1 + action-missing + + + _Help + app.help + F1 + + + _About + app.about + + + _Quit + app.quit + <Primary>Q + +
+
+
diff -Nru geary-0.11.4/ui/login.glade geary-0.12.0/ui/login.glade --- geary-0.11.4/ui/login.glade 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/ui/login.glade 2017-10-02 11:25:21.000000000 +0000 @@ -1,7 +1,7 @@ - + 100 1 @@ -56,9 +56,11 @@ True False + 2 + 2 + 6 + 6 0 - 2 - 6 True @@ -116,7 +118,8 @@ True False 1 - 6 + 6 + 6 E_mail address True entry: email @@ -136,7 +139,8 @@ True False 1 - 6 + 6 + 6 _Password True entry: password @@ -169,7 +173,8 @@ True False 1 - 6 + 6 + 6 S_ervice True combo: service @@ -189,7 +194,8 @@ True False 1 - 6 + 6 + 6 N_ame True entry: real_name @@ -245,7 +251,8 @@ True False 1 - 6 + 6 + 6 N_ickname True entry: nickname @@ -340,8 +347,9 @@ True False + 10 + 10 0 - 10 IMAP settings @@ -359,7 +367,8 @@ True False 1 - 6 + 6 + 6 Se_rver True entry: imap host @@ -395,7 +404,8 @@ True False 1 - 6 + 6 + 6 P_ort True entry: imap port @@ -465,7 +475,8 @@ True False 1 - 6 + 6 + 6 Ser_ver True entry: smtp host @@ -485,7 +496,8 @@ True False 1 - 6 + 6 + 6 Por_t True entry: smtp port @@ -505,8 +517,8 @@ True False 8 + 10 0 - 10 SMTP settings @@ -524,7 +536,8 @@ True False 1 - 6 + 6 + 6 User_name True entry: smtp username @@ -544,7 +557,8 @@ True False 1 - 6 + 6 + 6 Pass_word True entry: smtp password @@ -595,7 +609,8 @@ True False 1 - 6 + 6 + 6 _Username True entry: imap username @@ -615,7 +630,8 @@ True False 1 - 6 + 6 + 6 _Password True entry: imap password @@ -665,9 +681,10 @@ True False + 6 + 6 2 1 - 6 Encr_yption True center @@ -688,8 +705,9 @@ True False 2 + 6 + 6 1 - 6 Encrypt_ion True fill @@ -862,10 +880,11 @@ True False + 4 + 4 8 + 6 0 - 4 - 6 Composer @@ -883,7 +902,7 @@ True True False - 12 + 12 True 0 True @@ -900,7 +919,7 @@ True True False - 12 + 12 True 0 True @@ -916,7 +935,7 @@ True False False - 12 + 12 @@ -949,10 +968,11 @@ True False + 4 + 4 8 + 6 0 - 4 - 6 Storage @@ -973,7 +993,8 @@ True False 0 - 6 + 6 + 6 _Download mail True + + + True + True + False + True + + + text-editor-symbolic + + + + + + + True + False + vertical + + + end + + + + + True + True + False + True + + + preferences-system-search-symbolic + + + + + end + + + + + True + True + False + True + Empty Spam or Trash folders + + + edit-clear-all-symbolic + + + + + end + + + + + + + True + False + + + + True + False + + + + True + True + False + True + + + mail-reply-sender-symbolic + + + + + + + True + True + False + True + + + mail-reply-all-symbolic + + + + + + + True + True + False + True + + + mail-forward-symbolic + + + + + + + + + True + False + + + + True + True + False + True + + + marker-symbolic + + + + + + + True + True + False + True + + + tag-symbolic + + + + + + + True + True + False + True + + + folder-symbolic + + + + + + + + + True + True + False + True + + + preferences-system-search-symbolic + + + + + end + + + + + True + True + False + True + + + preferences-system-search-symbolic + + + + + end + + + + + True + False + + + + True + True + False + True + + + + + True + True + False + True + + + + + end + + + + + True + + + + diff -Nru geary-0.11.4/ui/main-window.ui geary-0.12.0/ui/main-window.ui --- geary-0.11.4/ui/main-window.ui 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/main-window.ui 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,133 @@ + + + + + diff -Nru geary-0.11.4/ui/preferences-dialog.ui geary-0.12.0/ui/preferences-dialog.ui --- geary-0.11.4/ui/preferences-dialog.ui 1970-01-01 00:00:00.000000000 +0000 +++ geary-0.12.0/ui/preferences-dialog.ui 2017-10-02 11:25:21.000000000 +0000 @@ -0,0 +1,201 @@ + + + + + + diff -Nru geary-0.11.4/ui/preferences.glade geary-0.12.0/ui/preferences.glade --- geary-0.11.4/ui/preferences.glade 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/ui/preferences.glade 1970-01-01 00:00:00.000000000 +0000 @@ -1,239 +0,0 @@ - - - - - False - 12 - center-on-parent - dialog - - - False - vertical - 2 - - - False - end - - - False - True - end - 0 - - - - - True - False - - - True - False - 5 - 5 - 5 - Reading - 0 - - - - - - 0 - 0 - - - - - _Automatically select next message - True - True - False - 12 - 5 - 5 - 5 - True - 0 - True - - - 0 - 1 - - - - - _Display conversation preview - True - True - False - 12 - 5 - 5 - 5 - True - 0 - True - - - 0 - 2 - - - - - Use _three pane view - True - True - False - 12 - 5 - 5 - 5 - True - 0 - True - - - 0 - 3 - - - - - True - False - 5 - 5 - 5 - Composer - 0 - - - - - - 0 - 4 - - - - - Enable _spell checking - True - True - False - 12 - 5 - 5 - 5 - True - 0 - True - - - 0 - 5 - - - - - True - False - 5 - 5 - 5 - Notifications - 0 - - - - - - 0 - 6 - - - - - _Play notification sounds - True - True - False - 12 - 5 - 5 - 5 - True - 0 - True - - - 0 - 7 - - - - - Show _notifications for new mail - True - True - False - 12 - 5 - 5 - 5 - True - 0 - True - - - 0 - 8 - - - - - Always _watch for new mail - True - True - False - Geary will run in the background and notify of new mail - 12 - 5 - 5 - 5 - True - 0 - True - - - 0 - 9 - - - - - - - - False - True - 1 - - - - - - - True - False - Preferences - True - - - - diff -Nru geary-0.11.4/ui/remove_confirm.glade geary-0.12.0/ui/remove_confirm.glade --- geary-0.11.4/ui/remove_confirm.glade 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/ui/remove_confirm.glade 2017-10-02 11:25:21.000000000 +0000 @@ -1,6 +1,6 @@ - + @@ -12,7 +12,7 @@ True False - 1 + 1 True @@ -105,7 +105,8 @@ True False 0 - 6 + 6 + 6 @@ -122,7 +123,8 @@ True False 0 - 6 + 6 + 6 diff -Nru geary-0.11.4/ui/upgrade_dialog.glade geary-0.12.0/ui/upgrade_dialog.glade --- geary-0.11.4/ui/upgrade_dialog.glade 2017-10-02 09:19:04.000000000 +0000 +++ geary-0.12.0/ui/upgrade_dialog.glade 2017-10-02 11:25:21.000000000 +0000 @@ -1,6 +1,6 @@ - + False 5 @@ -32,8 +32,8 @@ True False - 8 - 8 + 8 + 8 8 8 8