From f2ab7ec929c9a2f4981763cb1c08d125f0972323 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sat, 4 Mar 2017 13:34:20 +0100 Subject: [PATCH 01/68] Lock phpunit to version 5.7.x --- composer.json-dist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json-dist b/composer.json-dist index 114be657e..5cf87b3b2 100644 --- a/composer.json-dist +++ b/composer.json-dist @@ -34,7 +34,7 @@ "endroid/qrcode": "~1.6.5" }, "require-dev": { - "phpunit/phpunit": "*" + "phpunit/phpunit": "~5.7.15" }, "suggest": { "pear-pear.php.net/net_ldap2": "~2.2.0 required for connecting to LDAP address books", From 0b385dc94667f6037c0b99c6dd272dd93246e25f Mon Sep 17 00:00:00 2001 From: Shin Kojima Date: Mon, 6 Mar 2017 16:22:55 +0800 Subject: [PATCH 02/68] Skip iconv for problematic ISO-2022-JP strings (#5668) We sometimes get broken character encodings such as: Subject: =?iso-2022-jp?B?GyRCLWo7M3l1OSk2SBsoQgo=?= This actually is not a strict ISO-2022-JP string, but a CP50220 string that is a variant of ISO-2022-JP with extended characters proposed by Microsoft. Iconv can not handle these encodings well. --- program/lib/Roundcube/rcube_charset.php | 5 ++++- tests/Framework/Charset.php | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/program/lib/Roundcube/rcube_charset.php b/program/lib/Roundcube/rcube_charset.php index 18893ea64..2f87b8266 100644 --- a/program/lib/Roundcube/rcube_charset.php +++ b/program/lib/Roundcube/rcube_charset.php @@ -201,7 +201,9 @@ class rcube_charset } // convert charset using iconv module - if ($iconv_options !== false && $from != 'UTF7-IMAP' && $to != 'UTF7-IMAP') { + if ($iconv_options !== false && $from != 'UTF7-IMAP' && $to != 'UTF7-IMAP' + && $from !== 'ISO-2022-JP' + ) { // throw an exception if iconv reports an illegal character in input // it means that input string has been truncated set_error_handler(array('rcube_charset', 'error_handler'), E_NOTICE); @@ -227,6 +229,7 @@ class rcube_charset $aliases = array( 'WINDOWS-1257' => 'ISO-8859-13', 'US-ASCII' => 'ASCII', + 'ISO-2022-JP' => 'ISO-2022-JP-MS', ); $mb_from = $aliases[$from] ?: $from; diff --git a/tests/Framework/Charset.php b/tests/Framework/Charset.php index 752ddf43e..f36b7b969 100644 --- a/tests/Framework/Charset.php +++ b/tests/Framework/Charset.php @@ -70,6 +70,7 @@ class Framework_Charset extends PHPUnit_Framework_TestCase array('aż', 'a', 'UTF-8', 'US-ASCII'), array('&BCAEMARBBEEESwQ7BDoEOA-', 'Рассылки', 'UTF7-IMAP', 'UTF-8'), array('Рассылки', '&BCAEMARBBEEESwQ7BDoEOA-', 'UTF-8', 'UTF7-IMAP'), + array(base64_decode('GyRCLWo7M3l1OSk2SBsoQg=='), '㈱山﨑工業', 'ISO-2022-JP', 'UTF-8'), ); } @@ -178,7 +179,7 @@ class Framework_Charset extends PHPUnit_Framework_TestCase function data_detect_with_lang() { return array( - array('ܦW,Dn', 'zh_TW', 'BIG-5'), + array(base64_decode('xeOl3KZXutkspUStbg=='), 'zh_TW', 'BIG-5'), ); } From 9028e772904da6dcf3122cee72868008d8d1bd57 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Mon, 6 Mar 2017 10:57:20 +0100 Subject: [PATCH 03/68] Enigma: Set micalg parameter to real hash algorithm used for signing --- plugins/enigma/lib/enigma_driver.php | 8 ++++++ plugins/enigma/lib/enigma_driver_gnupg.php | 28 ++++++++++++++++++-- plugins/enigma/lib/enigma_driver_phpssl.php | 10 +++++++ plugins/enigma/lib/enigma_engine.php | 2 +- plugins/enigma/lib/enigma_mime_message.php | 17 +++++++++--- program/lib/Roundcube/rcube_imap_generic.php | 3 +-- 6 files changed, 60 insertions(+), 8 deletions(-) diff --git a/plugins/enigma/lib/enigma_driver.php b/plugins/enigma/lib/enigma_driver.php index fa03c2274..bab3e9fc1 100644 --- a/plugins/enigma/lib/enigma_driver.php +++ b/plugins/enigma/lib/enigma_driver.php @@ -131,4 +131,12 @@ abstract class enigma_driver * @return mixed True on success or enigma_error */ abstract function delete_key($keyid); + + /** + * Returns a name of the hash algorithm used for the last + * signing operation. + * + * @return string Hash algorithm name e.g. sha1 + */ + abstract function signature_algorithm(); } diff --git a/plugins/enigma/lib/enigma_driver_gnupg.php b/plugins/enigma/lib/enigma_driver_gnupg.php index 8632fd43a..0c72137ec 100644 --- a/plugins/enigma/lib/enigma_driver_gnupg.php +++ b/plugins/enigma/lib/enigma_driver_gnupg.php @@ -23,6 +23,7 @@ class enigma_driver_gnupg extends enigma_driver protected $gpg; protected $homedir; protected $user; + protected $last_sig_algorithm; function __construct($user) @@ -120,7 +121,13 @@ class enigma_driver_gnupg extends enigma_driver if ($sign_key) { $this->gpg->addSignKey($sign_key->reference, $sign_key->password); - return $this->gpg->encryptAndSign($text, true); + + $res = $this->gpg->encryptAndSign($text, true); + $sigInfo = $this->gpg->getLastSignatureInfo(); + + $this->last_sig_algorithm = $sigInfo->getHashAlgorithmName(); + + return $res; } return $this->gpg->encrypt($text, true); @@ -172,7 +179,13 @@ class enigma_driver_gnupg extends enigma_driver { try { $this->gpg->addSignKey($key->reference, $key->password); - return $this->gpg->sign($text, $mode, CRYPT_GPG::ARMOR_ASCII, true); + + $res = $this->gpg->sign($text, $mode, CRYPT_GPG::ARMOR_ASCII, true); + $sigInfo = $this->gpg->getLastSignatureInfo(); + + $this->last_sig_algorithm = $sigInfo->getHashAlgorithmName(); + + return $res; } catch (Exception $e) { return $this->get_error_from_exception($e); @@ -365,6 +378,17 @@ class enigma_driver_gnupg extends enigma_driver return $result; } + /** + * Returns a name of the hash algorithm used for the last + * signing operation. + * + * @return string Hash algorithm name e.g. sha1 + */ + public function signature_algorithm() + { + return $this->last_sig_algorithm; + } + /** * Private key deletion. */ diff --git a/plugins/enigma/lib/enigma_driver_phpssl.php b/plugins/enigma/lib/enigma_driver_phpssl.php index a2b16fa93..e4056c8c0 100644 --- a/plugins/enigma/lib/enigma_driver_phpssl.php +++ b/plugins/enigma/lib/enigma_driver_phpssl.php @@ -146,6 +146,16 @@ class enigma_driver_phpssl extends enigma_driver { } + /** + * Returns a name of the hash algorithm used for the last + * signing operation. + * + * @return string Hash algorithm name e.g. sha1 + */ + public function signature_algorithm() + { + } + /** * Converts Crypt_GPG_Key object into Enigma's key object * diff --git a/plugins/enigma/lib/enigma_engine.php b/plugins/enigma/lib/enigma_engine.php index 49ec7bd1a..68908450f 100644 --- a/plugins/enigma/lib/enigma_engine.php +++ b/plugins/enigma/lib/enigma_engine.php @@ -216,7 +216,7 @@ class enigma_engine $message->setParam('text_charset', $text_charset); } else { - $mime->addPGPSignature($body); + $mime->addPGPSignature($body, $this->pgp_driver->signature_algorithm()); $message = $mime; } } diff --git a/plugins/enigma/lib/enigma_mime_message.php b/plugins/enigma/lib/enigma_mime_message.php index 734377f75..a81f3cfc6 100644 --- a/plugins/enigma/lib/enigma_mime_message.php +++ b/plugins/enigma/lib/enigma_mime_message.php @@ -25,6 +25,7 @@ class enigma_mime_message extends Mail_mime protected $body; protected $signature; protected $encrypted; + protected $micalg; /** @@ -119,10 +120,12 @@ class enigma_mime_message extends Mail_mime * Register signature attachment * * @param string Signature body + * @param string Hash algorithm name */ - public function addPGPSignature($body) + public function addPGPSignature($body, $algorithm = null) { $this->signature = $body; + $this->micalg = $algorithm; // Reset Content-Type to be overwritten with valid boundary unset($this->headers['Content-Type']); @@ -168,10 +171,14 @@ class enigma_mime_message extends Mail_mime if ($this->type == self::PGP_SIGNED) { $params = array( 'preamble' => "This is an OpenPGP/MIME signed message (RFC 4880 and 3156)", - 'content_type' => "multipart/signed; micalg=pgp-sha1; protocol=\"application/pgp-signature\"", + 'content_type' => "multipart/signed; protocol=\"application/pgp-signature\"", 'eol' => $this->build_params['eol'], ); + if ($this->micalg) { + $params['content_type'] .= "; micalg=pgp-" . $this->micalg; + } + $message = new Mail_mimePart('', $params); if (!empty($this->body)) { @@ -279,9 +286,13 @@ class enigma_mime_message extends Mail_mime $this->build_params['boundary'] = $boundary; if ($this->type == self::PGP_SIGNED) { - $headers['Content-Type'] = "multipart/signed; micalg=pgp-sha1;$eol" + $headers['Content-Type'] = "multipart/signed;$eol" ." protocol=\"application/pgp-signature\";$eol" ." boundary=\"$boundary\""; + + if ($this->micalg) { + $headers['Content-Type'] .= ";{$eol} micalg=pgp-" . $this->micalg; + } } else if ($this->type == self::PGP_ENCRYPTED) { $headers['Content-Type'] = "multipart/encrypted;$eol" diff --git a/program/lib/Roundcube/rcube_imap_generic.php b/program/lib/Roundcube/rcube_imap_generic.php index db9d743b1..d7245c2bb 100644 --- a/program/lib/Roundcube/rcube_imap_generic.php +++ b/program/lib/Roundcube/rcube_imap_generic.php @@ -114,8 +114,7 @@ class rcube_imap_generic $res = fwrite($this->fp, $string); if ($res === false) { - @fclose($this->fp); - $this->fp = null; + $this->closeSocket(); } return $res; From fa32c2c47101e1eea561712d3471288ac0a2e038 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Mon, 6 Mar 2017 11:35:09 +0100 Subject: [PATCH 04/68] Plugin API: Call message_part_structure hook for sub-parts of multipart/alternative message (#5678) --- CHANGELOG | 1 + program/lib/Roundcube/rcube_message.php | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index c42087549..9094637e5 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG Roundcube Webmail =========================== +- Plugin API: Call message_part_structure hook for sub-parts of multipart/alternative message (#5678) - Enigma: Always use detached signatures (#5624) - Enigma: Fix handling of messages with nested PGP encrypted parts (#5634) - Minimize unwanted message loading in preview frame on drag (#5616) diff --git a/program/lib/Roundcube/rcube_message.php b/program/lib/Roundcube/rcube_message.php index 6d3aa494e..7ac31f8bc 100644 --- a/program/lib/Roundcube/rcube_message.php +++ b/program/lib/Roundcube/rcube_message.php @@ -679,8 +679,9 @@ class rcube_message $this->parse_alternative = false; // if plain part was found, we should unset it if html is preferred - if ($this->opt['prefer_html'] && count($this->parts)) + if ($this->opt['prefer_html'] && count($this->parts)) { $plain_part = null; + } } // choose html/plain part to print @@ -697,7 +698,15 @@ class rcube_message // add the right message body if (is_object($print_part)) { $print_part->type = 'content'; - $this->add_part($print_part); + + // Allow plugins to handle also this part + $plugin = $this->app->plugins->exec_hook('message_part_structure', + array('object' => $this, 'structure' => $print_part, + 'mimetype' => $print_part->mimetype, 'recursive' => true)); + + if (!$plugin['abort']) { + $this->add_part($print_part); + } } // show plaintext warning else if ($html_part !== null && empty($this->parts)) { From 91e36f2ffe247d98c62145cad8e10f037061d604 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Wed, 8 Mar 2017 08:54:32 +0100 Subject: [PATCH 05/68] Use packagist instead of pear --- composer.json-dist | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/composer.json-dist b/composer.json-dist index 5cf87b3b2..b0244961c 100644 --- a/composer.json-dist +++ b/composer.json-dist @@ -3,10 +3,6 @@ "description": "The Roundcube Webmail suite", "license": "GPL-3.0+", "repositories": [ - { - "type": "pear", - "url": "https://pear.php.net/" - }, { "type": "composer", "url": "https://plugins.roundcube.net/" @@ -23,21 +19,21 @@ "require": { "php": ">=5.4.0", "pear/pear-core-minimal": "~1.10.1", - "roundcube/plugin-installer": "~0.1.6", - "pear-pear.php.net/net_socket": "~1.0.12", - "pear-pear.php.net/auth_sasl": "~1.0.6", - "pear-pear.php.net/net_idna2": "~0.1.1", - "pear-pear.php.net/mail_mime": "~1.10.0", - "pear-pear.php.net/net_smtp": "~1.7.1", - "pear-pear.php.net/crypt_gpg": "~1.6.0", + "pear/net_socket": "~1.0.12", + "pear/auth_sasl": "~1.1.0", + "pear/net_idna2": "~0.2.0", + "pear/mail_mime": "~1.10.0", + "pear/net_smtp": "~1.7.1", + "pear/net_ldap2": "~2.2.0", + "pear/crypt_gpg": "~1.6.0", "roundcube/net_sieve": "~1.5.0", + "roundcube/plugin-installer": "~0.1.6", "endroid/qrcode": "~1.6.5" }, "require-dev": { "phpunit/phpunit": "~5.7.15" }, "suggest": { - "pear-pear.php.net/net_ldap2": "~2.2.0 required for connecting to LDAP address books", "kolab/Net_LDAP3": "dev-master required for connecting to LDAP address books" } } From 69fb773facddd919f10250814e589d8bc5581e33 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Thu, 9 Mar 2017 11:35:21 +0100 Subject: [PATCH 06/68] Move pear/net_ldap2 back to 'suggests" section It requires php-ldap extension which might be problematic when someone does not need to use LDAP. --- composer.json-dist | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json-dist b/composer.json-dist index b0244961c..36c385d2f 100644 --- a/composer.json-dist +++ b/composer.json-dist @@ -24,7 +24,6 @@ "pear/net_idna2": "~0.2.0", "pear/mail_mime": "~1.10.0", "pear/net_smtp": "~1.7.1", - "pear/net_ldap2": "~2.2.0", "pear/crypt_gpg": "~1.6.0", "roundcube/net_sieve": "~1.5.0", "roundcube/plugin-installer": "~0.1.6", @@ -34,6 +33,7 @@ "phpunit/phpunit": "~5.7.15" }, "suggest": { - "kolab/Net_LDAP3": "dev-master required for connecting to LDAP address books" + "pear/net_ldap2": "~2.2.0 required for connecting to LDAP", + "kolab/Net_LDAP3": "dev-master required for connecting to LDAP" } } From 8953c7a2577d0ad342fce1a3b6da1df08853ea60 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Thu, 9 Mar 2017 11:41:46 +0100 Subject: [PATCH 07/68] Fix possible defect in handling \r\n in scripts (#5685) --- CHANGELOG | 1 + plugins/managesieve/Changelog | 1 + plugins/managesieve/lib/Roundcube/rcube_sieve_script.php | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 9094637e5..a14b89ca6 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -19,6 +19,7 @@ CHANGELOG Roundcube Webmail - Add rewrite rule to disable access to /vendor/bin folder in .htaccess (#5630) - Fix bug where it was too easy accidentally move a folder when using the subscription checkbox (#5655) - Managesieve: Fix parser issue with empty lines between comments (#5657) +- Managesieve: Fix possible defect in handling \r\n in scripts (#5685) - Fix/rephrase "unsaved changes" warning when cancelling a draft (#5610) RELEASE 1.3-beta diff --git a/plugins/managesieve/Changelog b/plugins/managesieve/Changelog index 329738a81..397503cfc 100644 --- a/plugins/managesieve/Changelog +++ b/plugins/managesieve/Changelog @@ -1,4 +1,5 @@ - Fix handling of scripts with nested rules (#5540) +- Fix possible defect in handling \r\n in scripts (#5685) * version 8.8 [2016-11-27] ----------------------------------------------------------- diff --git a/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php b/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php index 9d1c71445..8dbab5f75 100644 --- a/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php +++ b/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php @@ -1261,7 +1261,7 @@ class rcube_sieve_script if ($str[$position] == "\n") { $position++; } - else if ($str[$position] == "\r" && $str[$position] == "\n") { + else if ($str[$position] == "\r" && $str[$position + 1] == "\n") { $position += 2; } From b59ff5cafb23f40edf6cd1eb201c1658ebee55de Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Thu, 9 Mar 2017 11:45:22 +0100 Subject: [PATCH 08/68] Fix XSS issue in handling of a style tag inside of an svg element --- CHANGELOG | 1 + program/lib/Roundcube/rcube_utils.php | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index a14b89ca6..bc1ae6fd0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -21,6 +21,7 @@ CHANGELOG Roundcube Webmail - Managesieve: Fix parser issue with empty lines between comments (#5657) - Managesieve: Fix possible defect in handling \r\n in scripts (#5685) - Fix/rephrase "unsaved changes" warning when cancelling a draft (#5610) +- Fix XSS issue in handling of a style tag inside of an svg element RELEASE 1.3-beta ---------------- diff --git a/program/lib/Roundcube/rcube_utils.php b/program/lib/Roundcube/rcube_utils.php index 10f96c7b4..8f9a5cf50 100644 --- a/program/lib/Roundcube/rcube_utils.php +++ b/program/lib/Roundcube/rcube_utils.php @@ -494,6 +494,7 @@ class rcube_utils public static function xss_entity_decode($content) { $out = html_entity_decode(html_entity_decode($content)); + $out = strip_tags($out); $out = preg_replace_callback('/\\\([0-9a-f]{4})/i', array(self, 'xss_entity_decode_callback'), $out); $out = preg_replace('#/\*.*\*/#Ums', '', $out); From 05aae4711cd9fa2c6288acc886e9e96ae963d323 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Thu, 9 Mar 2017 12:05:11 +0100 Subject: [PATCH 09/68] Replace xss_entity_decode_callback() method with lambda function --- program/lib/Roundcube/rcube_utils.php | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/program/lib/Roundcube/rcube_utils.php b/program/lib/Roundcube/rcube_utils.php index 8f9a5cf50..07b60d30c 100644 --- a/program/lib/Roundcube/rcube_utils.php +++ b/program/lib/Roundcube/rcube_utils.php @@ -493,27 +493,16 @@ class rcube_utils */ public static function xss_entity_decode($content) { + $callback = function($matches) { return chr(hexdec($matches[1])); }; + $out = html_entity_decode(html_entity_decode($content)); $out = strip_tags($out); - $out = preg_replace_callback('/\\\([0-9a-f]{4})/i', - array(self, 'xss_entity_decode_callback'), $out); + $out = preg_replace_callback('/\\\([0-9a-f]{4})/i', $callback, $out); $out = preg_replace('#/\*.*\*/#Ums', '', $out); return $out; } - /** - * preg_replace_callback callback for xss_entity_decode - * - * @param array $matches Result from preg_replace_callback - * - * @return string Decoded entity - */ - public static function xss_entity_decode_callback($matches) - { - return chr(hexdec($matches[1])); - } - /** * Check if we can process not exceeding memory_limit * From bf21557873c8cedbffdaadd3dfc986226030ecf5 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Fri, 10 Mar 2017 10:44:51 +0100 Subject: [PATCH 10/68] Better fix for XSS in style tags (b59ff5ca) --- program/lib/Roundcube/rcube_utils.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/program/lib/Roundcube/rcube_utils.php b/program/lib/Roundcube/rcube_utils.php index 07b60d30c..ea2ef2906 100644 --- a/program/lib/Roundcube/rcube_utils.php +++ b/program/lib/Roundcube/rcube_utils.php @@ -496,9 +496,9 @@ class rcube_utils $callback = function($matches) { return chr(hexdec($matches[1])); }; $out = html_entity_decode(html_entity_decode($content)); - $out = strip_tags($out); $out = preg_replace_callback('/\\\([0-9a-f]{4})/i', $callback, $out); $out = preg_replace('#/\*.*\*/#Ums', '', $out); + $out = strip_tags($out); return $out; } From 522565b400e623ad190b57f56c1d21ff63418e33 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Fri, 10 Mar 2017 23:20:01 +0100 Subject: [PATCH 11/68] Add tests for XSS vulnerabilities in style tags --- tests/Framework/Utils.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/Framework/Utils.php b/tests/Framework/Utils.php index ba04e1545..ad81f6404 100644 --- a/tests/Framework/Utils.php +++ b/tests/Framework/Utils.php @@ -220,6 +220,15 @@ class Framework_Utils extends PHPUnit_Framework_TestCase $this->assertEquals("#rcmbody { background-image: url(data:image/png;base64,123); }", $mod, "Data URIs in url() allowed"); } + function test_xss_entity_decode() + { + $mod = rcube_utils::xss_entity_decode("<img/src=x onerror=alert(1)// "); + $this->assertNotContains('";}'); + $this->assertNotContains(' Date: Sun, 12 Mar 2017 12:14:19 +0100 Subject: [PATCH 12/68] spelling fixes (#5690) --- CHANGELOG | 16 ++++++++-------- config/defaults.inc.php | 8 ++++---- installer/client.js | 2 +- plugins/acl/acl.js | 2 +- plugins/acl/acl.php | 2 +- .../attachment_reminder/attachment_reminder.php | 2 +- plugins/emoticons/emoticons.php | 2 +- .../filesystem_attachments.php | 2 +- plugins/password/config.inc.php.dist | 2 +- plugins/password/drivers/directadmin.php | 4 ++-- plugins/password/drivers/plesk.php | 6 +++--- plugins/password/helpers/change_ldap_pass.pl | 2 +- .../squirrelmail_usercopy.php | 4 ++-- program/include/rcmail.php | 4 ++-- program/include/rcmail_output_html.php | 4 ++-- program/js/treelist.js | 2 +- program/lib/Roundcube/html.php | 4 ++-- program/lib/Roundcube/rcube.php | 8 ++++---- program/lib/Roundcube/rcube_addressbook.php | 2 +- program/lib/Roundcube/rcube_charset.php | 2 +- program/lib/Roundcube/rcube_db.php | 4 ++-- program/lib/Roundcube/rcube_db_oracle.php | 2 +- program/lib/Roundcube/rcube_html2text.php | 2 +- program/lib/Roundcube/rcube_imap.php | 4 ++-- program/lib/Roundcube/rcube_imap_cache.php | 2 +- program/lib/Roundcube/rcube_imap_generic.php | 2 +- program/lib/Roundcube/rcube_ldap_generic.php | 2 +- program/lib/Roundcube/rcube_message.php | 2 +- program/lib/Roundcube/rcube_mime.php | 2 +- program/lib/Roundcube/rcube_smtp.php | 4 ++-- program/lib/Roundcube/rcube_spellchecker.php | 2 +- program/lib/Roundcube/rcube_storage.php | 8 ++++---- program/localization/index.inc | 2 +- program/steps/mail/func.inc | 2 +- program/steps/mail/get.inc | 2 +- program/steps/mail/search_contacts.inc | 2 +- skins/larry/templates/compose.html | 2 +- 37 files changed, 63 insertions(+), 63 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index bc1ae6fd0..3ef5c3c6f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -374,7 +374,7 @@ RELEASE 1.1.1 - Fix fatal errors on systems without mbstring extension or mb_regex_encoding() function (#4769) - Fix cursor position on reply below the quote in HTML mode (#4759) - Fix so "over quota" errors are displayed also in message compose page -- Fix duplicate entries supression in autocomplete result (#4776) +- Fix duplicate entries suppression in autocomplete result (#4776) - Fix "Non-static method PEAR::isError() should not be called statically" errors (#4770) - Fix parsing invalid HTML messages with BOM after (#4777) - Fix duplicate entry on timezones list in rcube_config::timezone_name_from_abbr() (#4779) @@ -447,7 +447,7 @@ RELEASE 1.1-beta - Fix restoring draft messages from localStorage if editor mode differs (#4631) - Added config option/user preference to disable saving messages in localStorage (#4606) - Added config option 'imap_log_session' to enable Roundcube <-> IMAP session ID logging -- Added config option 'log_session_id' to control the lengh of the session identifer in logs +- Added config option 'log_session_id' to control the length of the session identifier in logs - Implemented 'storage_connected' API hook after successful IMAP login (#4638) - Intergrate Net_LDAP3 and rcube_ldap_generic classes - Add option (disabled_actions) to disable UI elements/actions (#4478) @@ -760,7 +760,7 @@ RELEASE 0.9.4 - Make identities matching case insensitive (#1881) - Fix issue where too big message data was stored in cache causing sql errors (#4325) - Fix iframe scrollbars on webkit desktop browsers (#4319) -- Fix issue where legacy config was overriden by default config (#4305) +- Fix issue where legacy config was overridden by default config (#4305) - Fix newmail_notifier issue where favicon wasn't changed back to default (#4324) - Fix setting of Junk and NonJunk flags by markasjunk plugin (#4303) - Fix lack of Reply-To address in header of forwarded message body (#4314) @@ -844,7 +844,7 @@ RELEASE 0.9.1 - Fix so Sender: address is added to Cc: field on reply to all (#4140) - Fix so addressbook_search_mode works also for group search (#4183) - Fix removal of a contact from a group in LDAP addressbook (#4185) -- Inlcude SQL query in the log on SQL error (#4172) +- Include SQL query in the log on SQL error (#4172) - Fix handling untagged responses in IMAP FETCH - "could not load message" error (#4180) - Fix very small window size in Chrome (#4087) - Fix list page reset when viewing a message in Larry skin (#4182) @@ -1131,7 +1131,7 @@ RELEASE 0.8-rc - Add IE8 hack for messages list issue (#3317) - Fix handling errors on draft auto-save - Fix importing vCard photo with ENCODING param specified (#3746) -- Support mutliple name/email pairs for Bcc and Reply-To identity settings (#3752) +- Support multiple name/email pairs for Bcc and Reply-To identity settings (#3752) - Set flexible width to login form fields (#3735) - Fix re-draw bug on list columns change in IE8 (#3318) - Allow mass-removal of addresses from a group (#3259) @@ -1627,7 +1627,7 @@ RELEASE 0.4.1 RELEASE 0.4 ----------- -- Fix disapearing upload form disapears when user selects a file on Safari (#2917) +- Fix disappearing upload form disappears when user selects a file on Safari (#2917) - Don't replace error messages with loading info (#2534) - Fix JS errors on compose mode switch (#2952) - Fix message structure parsing when it lacks optional fields (#2960) @@ -2290,7 +2290,7 @@ RELEASE 0.1-RC2 - Improve message compose screen (closes #1060) - Select next row after removing one from list (#1063) - Make smtp HELO/EHLO hostname configurable (#851) -- IPv6 Compatability (#1023), Patch #1484373 +- IPv6 Compatibility (#1023), Patch #1484373 - Unlock interface when message sending fails (#1188) - Eval PHP code in template includes (if configured) - Show message when folder is empty. Mo more static text in table (#1068) @@ -2396,7 +2396,7 @@ RELEASE 0.1-RC1 - Corrected date string in sent message header (closes #887) - Correclty choose "To" column in sent and draft mailboxes (closes #769) - Changed srong tooltips for message browse buttons (closes #757) -- Fixed signature delimeter character to be standard (Bug #830) +- Fixed signature delimiter character to be standard (Bug #830) - Fixed XSS vulnerability (Bug #877) - Remove newlines from mail headers (Bug #827) - Selection issues when moving/deleting (Bug #837) diff --git a/config/defaults.inc.php b/config/defaults.inc.php index e2db2b726..3641ccfb3 100644 --- a/config/defaults.inc.php +++ b/config/defaults.inc.php @@ -85,7 +85,7 @@ $config['syslog_id'] = 'roundcube'; $config['syslog_facility'] = LOG_USER; // Activate this option if logs should be written to per-user directories. -// Data will only be logged if a directry // exists and is writable. +// Data will only be logged if a directory // exists and is writable. $config['per_user_logging'] = false; // Log sent messages to /sendmail or to syslog @@ -210,7 +210,7 @@ $config['imap_skip_hidden_folders'] = false; // Note: Because the list is cached, re-login is required after change. $config['imap_disabled_caps'] = array(); -// Log IMAP session identifers after each IMAP login. +// Log IMAP session identifiers after each IMAP login. // This is used to relate IMAP session with Roundcube user sessions $config['imap_log_session'] = false; @@ -351,7 +351,7 @@ $config['apc_max_allowed_packet'] = '2M'; // ONLY ENABLE IT IF YOU'RE REALLY SURE WHAT YOU'RE DOING! $config['enable_installer'] = false; -// don't allow these settings to be overriden by the user +// don't allow these settings to be overridden by the user $config['dont_override'] = array(); // List of disabled UI elements/actions @@ -1052,7 +1052,7 @@ $config['addressbook_sort_col'] = 'surname'; $config['addressbook_name_listing'] = 0; // use this timezone to display date/time -// valid timezone identifers are listed here: php.net/manual/en/timezones.php +// valid timezone identifiers are listed here: php.net/manual/en/timezones.php // 'auto' will use the browser's timezone settings $config['timezone'] = 'auto'; diff --git a/installer/client.js b/installer/client.js index b6095a91f..2880ce34f 100644 --- a/installer/client.js +++ b/installer/client.js @@ -1,6 +1,6 @@ /* +-----------------------------------------------------------------------+ - | Roundcube installer cleint function | + | Roundcube installer client function | | | | This file is part of the Roundcube web development suite | | Copyright (C) 2009-2012, The Roundcube Dev Team | diff --git a/plugins/acl/acl.js b/plugins/acl/acl.js index 1b92ed86d..577625eb4 100644 --- a/plugins/acl/acl.js +++ b/plugins/acl/acl.js @@ -368,7 +368,7 @@ rcube_webmail.prototype.acl_init_form = function(id) $('input:checked', type_list).focus(); } -// Returns class name according to ACL comparision result +// Returns class name according to ACL comparison result rcube_webmail.prototype.acl_class = function(acl1, acl2) { var i, len, found = 0; diff --git a/plugins/acl/acl.php b/plugins/acl/acl.php index 9896d7a13..31cb514f6 100644 --- a/plugins/acl/acl.php +++ b/plugins/acl/acl.php @@ -611,7 +611,7 @@ class acl extends rcube_plugin * @param array $acl1 ACL rights array (or string) * @param array $acl2 ACL rights array (or string) * - * @param int Comparision result, 2 - full match, 1 - partial match, 0 - no match + * @param int Comparison result, 2 - full match, 1 - partial match, 0 - no match */ function acl_compare($acl1, $acl2) { diff --git a/plugins/attachment_reminder/attachment_reminder.php b/plugins/attachment_reminder/attachment_reminder.php index 74df25f61..633374621 100644 --- a/plugins/attachment_reminder/attachment_reminder.php +++ b/plugins/attachment_reminder/attachment_reminder.php @@ -1,6 +1,6 @@ code != 0) { print "Cannot login: ". $mesg->error; } else { - # Wyszukanie usera wg filtra + # Wyszukanie users wg filtra $PAR{'filter'} =~ s/\%login/$PAR{'user'}/; my @search_args = ( base => $PAR{'base'}, diff --git a/plugins/squirrelmail_usercopy/squirrelmail_usercopy.php b/plugins/squirrelmail_usercopy/squirrelmail_usercopy.php index c038a3292..12fd5b542 100644 --- a/plugins/squirrelmail_usercopy/squirrelmail_usercopy.php +++ b/plugins/squirrelmail_usercopy/squirrelmail_usercopy.php @@ -192,7 +192,7 @@ class squirrelmail_usercopy extends rcube_plugin } } - // parse addres book file + // parse address book file if (filesize($abookfile)) { foreach (file($abookfile) as $line) { $line = $this->convert_charset(rtrim($line), $file_charset); @@ -234,7 +234,7 @@ class squirrelmail_usercopy extends rcube_plugin $sql_result = $db->query('SELECT * FROM ' . $db->quote_identifier($address_table) .' WHERE `owner` = ?', $uname); // ? is replaced with emailaddress - // parse addres book + // parse address book while ($sql_array = $db->fetch_assoc($sql_result) ) { // fetch one row from result $rec['name'] = rcube_charset::convert(rtrim($sql_array['nickname']), $db_charset); $rec['firstname'] = rcube_charset::convert(rtrim($sql_array['firstname']), $db_charset); diff --git a/program/include/rcmail.php b/program/include/rcmail.php index e88161c62..783d52bcd 100644 --- a/program/include/rcmail.php +++ b/program/include/rcmail.php @@ -493,7 +493,7 @@ class rcmail extends rcube } /** - * Perfom login to the mail server and to the webmail service. + * Perform login to the mail server and to the webmail service. * This will also create a new user entry if auto_create_user is configured. * * @param string $username Mail storage (IMAP) user name @@ -1194,7 +1194,7 @@ class rcmail extends rcube * * @param mixed $date Date representation (string, timestamp or DateTime object) * @param string $format Date format to use - * @param bool $convert Enables date convertion according to user timezone + * @param bool $convert Enables date conversion according to user timezone * * @return string Formatted date string */ diff --git a/program/include/rcmail_output_html.php b/program/include/rcmail_output_html.php index 61d9d7958..cc093d992 100644 --- a/program/include/rcmail_output_html.php +++ b/program/include/rcmail_output_html.php @@ -277,7 +277,7 @@ EOF; { $this->skin_paths[] = $skin_path; - // read meta file and check for dependecies + // read meta file and check for dependencies $meta = @file_get_contents(RCUBE_INSTALL_PATH . $skin_path . '/meta.json'); $meta = @json_decode($meta, true); @@ -788,7 +788,7 @@ EOF; } /** - * Callback funtion for preg_replace_callback() in parse_with_globals() + * Callback function for preg_replace_callback() in parse_with_globals() */ protected function globals_callback($matches) { diff --git a/program/js/treelist.js b/program/js/treelist.js index 7ea0d012c..2f70e84ff 100644 --- a/program/js/treelist.js +++ b/program/js/treelist.js @@ -32,7 +32,7 @@ /** * Roundcube Treelist widget class - * @contructor + * @constructor */ function rcube_treelist_widget(node, p) { diff --git a/program/lib/Roundcube/html.php b/program/lib/Roundcube/html.php index 2cad9df99..cc163a6fc 100644 --- a/program/lib/Roundcube/html.php +++ b/program/lib/Roundcube/html.php @@ -65,7 +65,7 @@ class html * * @param string $tagname Tag name * @param array $attrib Tag attributes as key/value pairs - * @param string $content Optinal Tag content (creates a container tag) + * @param string $content Optional Tag content (creates a container tag) * @param array $allowed List with allowed attributes, omit to allow all * * @return string The XHTML tag @@ -630,7 +630,7 @@ class html_textarea extends html * $select->add(array('Switzerland','Germany'), array('CH','DE')); * * // generate pulldown with selection 'Switzerland' and return html-code - * // as second argument the same attributes available to instanciate can be used + * // as second argument the same attributes available to instantiate can be used * print $select->show('CH'); * * diff --git a/program/lib/Roundcube/rcube.php b/program/lib/Roundcube/rcube.php index 3694c5c4b..173d2878b 100644 --- a/program/lib/Roundcube/rcube.php +++ b/program/lib/Roundcube/rcube.php @@ -39,7 +39,7 @@ class rcube const DEBUG_LINE_LENGTH = 4096; /** - * Singleton instace of rcube + * Singleton instance of rcube * * @var rcube */ @@ -53,21 +53,21 @@ class rcube public $config; /** - * Instace of database class. + * Instance of database class. * * @var rcube_db */ public $db; /** - * Instace of Memcache class. + * Instance of Memcache class. * * @var Memcache */ public $memcache; /** - * Instace of rcube_session class. + * Instance of rcube_session class. * * @var rcube_session */ diff --git a/program/lib/Roundcube/rcube_addressbook.php b/program/lib/Roundcube/rcube_addressbook.php index 7a0285037..ceaaa1101 100644 --- a/program/lib/Roundcube/rcube_addressbook.php +++ b/program/lib/Roundcube/rcube_addressbook.php @@ -668,7 +668,7 @@ abstract class rcube_addressbook * @param string $search Search value * @param int $mode Search mode * - * @return bool Comparision result + * @return bool Comparison result */ protected function compare_search_value($colname, $value, $search, $mode) { diff --git a/program/lib/Roundcube/rcube_charset.php b/program/lib/Roundcube/rcube_charset.php index 2f87b8266..9ed6f946e 100644 --- a/program/lib/Roundcube/rcube_charset.php +++ b/program/lib/Roundcube/rcube_charset.php @@ -144,7 +144,7 @@ class rcube_charset else if (!empty($aliases[$m[1]])) { $result = 'ISO-8859-'.$aliases[$m[1]]; } - // iconv requires convertion of e.g. LATIN-1 to LATIN1 + // iconv requires conversion of e.g. LATIN-1 to LATIN1 else { $result = $str; } diff --git a/program/lib/Roundcube/rcube_db.php b/program/lib/Roundcube/rcube_db.php index 29965845f..9cfdcaee8 100644 --- a/program/lib/Roundcube/rcube_db.php +++ b/program/lib/Roundcube/rcube_db.php @@ -522,7 +522,7 @@ class rcube_db /** * Helper method to handle DB errors. - * This by default logs the error but could be overriden by a driver implementation + * This by default logs the error but could be overridden by a driver implementation * * @param string $query Query that triggered the error * @@ -778,7 +778,7 @@ class rcube_db /** * Release resources related to the last query result. * When we know we don't need to access the last query result we can destroy it - * and release memory. Usefull especially if the query returned big chunk of data. + * and release memory. Useful especially if the query returned big chunk of data. */ public function reset() { diff --git a/program/lib/Roundcube/rcube_db_oracle.php b/program/lib/Roundcube/rcube_db_oracle.php index 21aea4cbd..846fa27fa 100644 --- a/program/lib/Roundcube/rcube_db_oracle.php +++ b/program/lib/Roundcube/rcube_db_oracle.php @@ -191,7 +191,7 @@ class rcube_db_oracle extends rcube_db /** * Helper method to handle DB errors. - * This by default logs the error but could be overriden by a driver implementation + * This by default logs the error but could be overridden by a driver implementation * * @param string Query that triggered the error * @return mixed Result to be stored and returned diff --git a/program/lib/Roundcube/rcube_html2text.php b/program/lib/Roundcube/rcube_html2text.php index ee625886a..bd57ca23a 100644 --- a/program/lib/Roundcube/rcube_html2text.php +++ b/program/lib/Roundcube/rcube_html2text.php @@ -692,7 +692,7 @@ class rcube_html2text */ private function _toupper($str) { - // string can containg HTML tags + // string can containing HTML tags $chunks = preg_split('/(<[^>]*>)/', $str, null, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); // convert toupper only the text between HTML tags diff --git a/program/lib/Roundcube/rcube_imap.php b/program/lib/Roundcube/rcube_imap.php index 4d90d5711..e2984c1c1 100644 --- a/program/lib/Roundcube/rcube_imap.php +++ b/program/lib/Roundcube/rcube_imap.php @@ -308,7 +308,7 @@ class rcube_imap extends rcube_storage /** * Set internal folder reference. - * All operations will be perfomed on this folder. + * All operations will be performed on this folder. * * @param string $folder Folder name */ @@ -2798,7 +2798,7 @@ class rcube_imap extends rcube_storage /* -------------------------------- - * folder managment + * folder management * --------------------------------*/ /** diff --git a/program/lib/Roundcube/rcube_imap_cache.php b/program/lib/Roundcube/rcube_imap_cache.php index be9ef486f..926203c3a 100644 --- a/program/lib/Roundcube/rcube_imap_cache.php +++ b/program/lib/Roundcube/rcube_imap_cache.php @@ -449,7 +449,7 @@ class rcube_imap_cache * * @param string $mailbox Folder name * @param rcube_message_header $message Message data - * @param bool $force Skips message in-cache existance check + * @param bool $force Skips message in-cache existence check */ function add_message($mailbox, $message, $force = false) { diff --git a/program/lib/Roundcube/rcube_imap_generic.php b/program/lib/Roundcube/rcube_imap_generic.php index d7245c2bb..3dac8a55c 100644 --- a/program/lib/Roundcube/rcube_imap_generic.php +++ b/program/lib/Roundcube/rcube_imap_generic.php @@ -4065,7 +4065,7 @@ class rcube_imap_generic /** * Write the given debug text to the current debug output handler. * - * @param string $message Debug mesage text. + * @param string $message Debug message text. * * @since 0.5-stable */ diff --git a/program/lib/Roundcube/rcube_ldap_generic.php b/program/lib/Roundcube/rcube_ldap_generic.php index 2c6c0739d..a46fb897d 100644 --- a/program/lib/Roundcube/rcube_ldap_generic.php +++ b/program/lib/Roundcube/rcube_ldap_generic.php @@ -100,7 +100,7 @@ class rcube_ldap_generic extends Net_LDAP3 /** * Returns the last LDAP error occurred * - * @return mixed Error message string or null if no error occured + * @return mixed Error message string or null if no error occurred */ function get_error() { diff --git a/program/lib/Roundcube/rcube_message.php b/program/lib/Roundcube/rcube_message.php index 7ac31f8bc..eff9b47bc 100644 --- a/program/lib/Roundcube/rcube_message.php +++ b/program/lib/Roundcube/rcube_message.php @@ -28,7 +28,7 @@ class rcube_message { /** - * Instace of framework class. + * Instance of framework class. * * @var rcube */ diff --git a/program/lib/Roundcube/rcube_mime.php b/program/lib/Roundcube/rcube_mime.php index d9d9c55be..54f7d106a 100644 --- a/program/lib/Roundcube/rcube_mime.php +++ b/program/lib/Roundcube/rcube_mime.php @@ -42,7 +42,7 @@ class rcube_mime /** * Returns message/object character set name * - * @return string Characted set name + * @return string Character set name */ public static function get_charset() { diff --git a/program/lib/Roundcube/rcube_smtp.php b/program/lib/Roundcube/rcube_smtp.php index b5930495d..2181a1d6c 100644 --- a/program/lib/Roundcube/rcube_smtp.php +++ b/program/lib/Roundcube/rcube_smtp.php @@ -186,7 +186,7 @@ class rcube_smtp * * @param string Sender e-Mail address * - * @param mixed Either a comma-seperated list of recipients + * @param mixed Either a comma-separated list of recipients * (RFC822 compliant), or an array of recipients, * each RFC822 valid. This may contain recipients not * specified in the headers, for Bcc:, resending @@ -448,7 +448,7 @@ class rcube_smtp * bare addresses (forward paths) that can be passed to sendmail * or an smtp server with the rcpt to: command. * - * @param mixed Either a comma-seperated list of recipients + * @param mixed Either a comma-separated list of recipients * (RFC822 compliant), or an array of recipients, * each RFC822 valid. * diff --git a/program/lib/Roundcube/rcube_spellchecker.php b/program/lib/Roundcube/rcube_spellchecker.php index 29c9a93b5..a0c340fd7 100644 --- a/program/lib/Roundcube/rcube_spellchecker.php +++ b/program/lib/Roundcube/rcube_spellchecker.php @@ -255,7 +255,7 @@ class rcube_spellchecker } /** - * Check if the specified word is an exception accoring to + * Check if the specified word is an exception according to * spellcheck options. * * @param string $word The word diff --git a/program/lib/Roundcube/rcube_storage.php b/program/lib/Roundcube/rcube_storage.php index 387b3d09b..d5bcf27a5 100644 --- a/program/lib/Roundcube/rcube_storage.php +++ b/program/lib/Roundcube/rcube_storage.php @@ -177,7 +177,7 @@ abstract class rcube_storage /** * Set internal folder reference. - * All operations will be perfomed on this folder. + * All operations will be performed on this folder. * * @param string $folder Folder name */ @@ -434,7 +434,7 @@ abstract class rcube_storage * @param int $uid Message UID * @param string $part Part number * @param rcube_message_part $o_part Part object created by get_structure() - * @param mixed $print True to print part, ressource to write part contents in + * @param mixed $print True to print part, resource to write part contents in * @param resource $fp File pointer to save the message part * @param boolean $skip_charset_conv Disables charset conversion * @@ -608,7 +608,7 @@ abstract class rcube_storage /* -------------------------------- - * folder managment + * folder management * --------------------------------*/ /** @@ -849,7 +849,7 @@ abstract class rcube_storage */ public function set_special_folders($specials) { - // should be overriden by storage class if backend supports special folders (SPECIAL-USE) + // should be overridden by storage class if backend supports special folders (SPECIAL-USE) unset($this->icache['special-folders']); } diff --git a/program/localization/index.inc b/program/localization/index.inc index 6fdb9db35..bc8229026 100644 --- a/program/localization/index.inc +++ b/program/localization/index.inc @@ -20,7 +20,7 @@ +-----------------------------------------------------------------------+ */ -// langage codes according to ISO 639-1 +// language codes according to ISO 639-1 // country codes according to ISO 3166-1 (Alpha-2) // original names from http://www.mediaglyphs.org/mg/?p=langnames diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index 2cec5eafb..8ef4986d3 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -1473,7 +1473,7 @@ function rcmail_html4inline($body, $container_id, $body_class='', &$attributes=a unset($GLOBALS['rcmail_html_container_id']); $body = preg_replace(array( - // add comments arround html and other tags + // add comments around html and other tags '/(]*>)/i', '/(<\?xml[^>]*>)/i', '/(<\/?html[^>]*>)/i', diff --git a/program/steps/mail/get.inc b/program/steps/mail/get.inc index 62c9e4372..fd2d781e1 100644 --- a/program/steps/mail/get.inc +++ b/program/steps/mail/get.inc @@ -696,7 +696,7 @@ class rcmail_attachment_handler if ($error == rcube_imap_generic::ERROR_BAD) { ob_end_clean(); - // Get action is often executed simultanously. + // Get action is often executed simultaneously. // Some servers have MAXPERIP or other limits. // To workaround this we'll wait for some time // and try again (once). diff --git a/program/steps/mail/search_contacts.inc b/program/steps/mail/search_contacts.inc index 2ee0fc808..e3f8ced22 100644 --- a/program/steps/mail/search_contacts.inc +++ b/program/steps/mail/search_contacts.inc @@ -12,7 +12,7 @@ | See the README file for a full license statement. | | | | PURPOSE: | - | Search contacts from the adress book widget | + | Search contacts from the address book widget | | | +-----------------------------------------------------------------------+ | Author: Thomas Bruederli | diff --git a/skins/larry/templates/compose.html b/skins/larry/templates/compose.html index 3dcc48c04..92b0eecda 100644 --- a/skins/larry/templates/compose.html +++ b/skins/larry/templates/compose.html @@ -134,7 +134,7 @@ - +

From 8a0d50468218b3d309611606590241957bd0352d Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Mon, 13 Mar 2017 11:55:08 +0100 Subject: [PATCH 13/68] Indent fixes --- plugins/managesieve/lib/Roundcube/rcube_sieve.php | 11 ++++++----- .../managesieve/lib/Roundcube/rcube_sieve_script.php | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/plugins/managesieve/lib/Roundcube/rcube_sieve.php b/plugins/managesieve/lib/Roundcube/rcube_sieve.php index 437a7db03..75f94af78 100644 --- a/plugins/managesieve/lib/Roundcube/rcube_sieve.php +++ b/plugins/managesieve/lib/Roundcube/rcube_sieve.php @@ -1,7 +1,7 @@ sieve->disconnect(); } @@ -178,15 +179,15 @@ class rcube_sieve $this->errorLines[] = array("line" => $matches[1], "msg" => null); } } - } + } } - + return $this->_set_error(self::ERROR_INSTALL); } return true; } - + /** * Returns the current error line within the saved sieve script */ diff --git a/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php b/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php index 8dbab5f75..774be4623 100644 --- a/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php +++ b/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php @@ -1,7 +1,7 @@ Date: Fri, 17 Mar 2017 08:53:45 +0100 Subject: [PATCH 14/68] Use jQuery 3.2.0 --- CHANGELOG | 1 + jsdeps.json | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 3ef5c3c6f..9d11cbf2f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG Roundcube Webmail =========================== +- Update to jQuery 3.2.0 - Plugin API: Call message_part_structure hook for sub-parts of multipart/alternative message (#5678) - Enigma: Always use detached signatures (#5624) - Enigma: Fix handling of messages with nested PGP encrypted parts (#5634) diff --git a/jsdeps.json b/jsdeps.json index 8b6cb0820..53efaa58c 100644 --- a/jsdeps.json +++ b/jsdeps.json @@ -3,13 +3,13 @@ { "lib": "jquery", "name": "jQuery", - "version": "3.1.1", - "url": "https://code.jquery.com/jquery-3.1.1.min.js", + "version": "3.2.0", + "url": "https://code.jquery.com/jquery-3.2.0.min.js", "dest": "program/js/jquery.min.js", - "sha1": "f647a6d37dc4ca055ced3cf64bbc1f490070acba", + "sha1": "0baf29230047c9cd896f14c59618c9948ea79451", "license": "MIT", "copyright": "Copyright 2005, 2015 jQuery Foundation, Inc.", - "source": "https://github.com/jquery/jquery/tree/3.1.1" + "source": "https://github.com/jquery/jquery/tree/3.2.0" }, { "lib": "jstz", From 7347c22af8446f886303b535cba80ba1d1b4e3fa Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 17 Mar 2017 09:20:38 +0100 Subject: [PATCH 15/68] Update to TinyMCE 4.5.5 --- CHANGELOG | 1 + jsdeps.json | 8 ++++---- program/js/editor.js | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 9d11cbf2f..d41450764 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,7 @@ CHANGELOG Roundcube Webmail =========================== - Update to jQuery 3.2.0 +- Update to TinyMCE 4.5.5 - Plugin API: Call message_part_structure hook for sub-parts of multipart/alternative message (#5678) - Enigma: Always use detached signatures (#5624) - Enigma: Fix handling of messages with nested PGP encrypted parts (#5634) diff --git a/jsdeps.json b/jsdeps.json index 53efaa58c..f3581577a 100644 --- a/jsdeps.json +++ b/jsdeps.json @@ -35,10 +35,10 @@ }, { "lib": "tinymce", - "version": "4.5.1", - "url": "http://download.ephox.com/tinymce/community/tinymce_4.5.1.zip", + "version": "4.5.5", + "url": "http://download.ephox.com/tinymce/community/tinymce_4.5.5.zip", "dest": "program/js", - "sha1": "e358301ac9fefafcd0ee21643c6aaed2c8b83470", + "sha1": "ebac7eda8dea59e42b46349882d3d1e9c265bbbf", "license": "LGPL", "copyright": "Copyright (c) 1999-2015 Ephox Corp. All rights reserved", "rm": "program/js/tinymce", @@ -55,7 +55,7 @@ }, { "lib": "tinymce-langs", - "version": "4.5.1", + "version": "4.5.5", "url": "https://tinymce-services.azurewebsites.net/1/i18n/download?langs=ar,hy,az,eu,be,bs,bg_BG,ca,zh_CN,zh_TW,hr,cs,cs_CZ,da,nl,en_CA,en_GB,eo,et,fo,fi,fr_FR,fr_CH,gd,gl,ka_GE,de,de_AT,el,he_IL,hi_IN,hu_HU,is_IS,id,ga,it,ja,kab,km_KH,ko_KR,ku,ku_IQ,lv,lt,lb,mk_MK,ml_IN,nb_NO,oc,fa,fa_IR,pl,pt_BR,pt_PT,ro,ru,sk,sl_SI,es,es_MX,sv_SE,tg,ta,ta_IN,tt,th_TH,tr,tr_TR,ug,uk,uk_UA,vi,vi_VN,cy", "dest": "program/js/tinymce" }, diff --git a/program/js/editor.js b/program/js/editor.js index f4dc555d8..84ab80989 100644 --- a/program/js/editor.js +++ b/program/js/editor.js @@ -39,7 +39,7 @@ function rcube_text_editor(config, id) abs_url = location.href.replace(/[?#].*$/, '').replace(/\/$/, ''), conf = { selector: '#' + ($('#' + id).is('.mce_editor') ? id : 'fake-editor-id'), - cache_suffix: 's=4050100', + cache_suffix: 's=4050500', theme: 'modern', language: config.lang, content_css: rcmail.assets_path('program/resources/tinymce/content.css'), From 9eefa47e459db8e358e0913e9d51b7e405a1ee5c Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 17 Mar 2017 10:13:26 +0100 Subject: [PATCH 16/68] Fix codemirror re-installation When re-installing a dependency with 'map' entries containing * character these dest folders were not properly cleaned up before moving new files to them. It's because path with * does not work in is_dir(). --- bin/install-jsdeps.sh | 10 +++++++--- jsdeps.json | 8 ++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/bin/install-jsdeps.sh b/bin/install-jsdeps.sh index c39f5bb8a..7a27aeecd 100755 --- a/bin/install-jsdeps.sh +++ b/bin/install-jsdeps.sh @@ -213,8 +213,12 @@ function extract_zipfile($package, $srcfile) $extract = $CACHEDIR . '/' . $package['lib'] . '-extract'; exec(sprintf('%s -o %s -d %s', $UNZIP, escapeshellarg($srcfile), $extract), $out, $retval); + // get the root folder of the extracted package + $extract_tree = glob("$extract/*", GLOB_ONLYDIR); + $sourcedir = $extract_tree[0]; + foreach ($package['map'] as $src => $dest) { - echo "Installing files $extract/$src into $destdir/$dest\n"; + echo "Installing files $sourcedir/$src into $destdir/$dest\n"; // make sure the destination's parent directory exists if (strpos($dest, '/') !== false) { @@ -225,11 +229,11 @@ function extract_zipfile($package, $srcfile) } // avoid copying source directory as a child into destination - if (is_dir($extract . '/' . $src) && is_dir($destdir . '/' . $dest)) { + if (is_dir($sourcedir . '/' . $src) && is_dir($destdir . '/' . $dest)) { exec(sprintf('rm -rf %s/%s', $destdir, $dest)); } - exec(sprintf('mv -f %s/%s %s/%s', $extract, $src, $destdir, $dest), $out, $retval); + exec(sprintf('mv -f %s/%s %s/%s', $sourcedir, $src, $destdir, $dest), $out, $retval); if ($retval !== 0) { echo "ERROR: Failed to move $src into $destdir/$dest; " . join('; ' . $out) . "\n"; } diff --git a/jsdeps.json b/jsdeps.json index f3581577a..3fc9f68f1 100644 --- a/jsdeps.json +++ b/jsdeps.json @@ -43,7 +43,7 @@ "copyright": "Copyright (c) 1999-2015 Ephox Corp. All rights reserved", "rm": "program/js/tinymce", "map": { - "tinymce/js/tinymce": "tinymce" + "js/tinymce": "tinymce" }, "omit": [ "tinymce/license.txt", @@ -78,9 +78,9 @@ "sha1": "3b767c2e3acd6796e54ed19ed2ac0755fcf87984", "license": "MIT", "map": { - "*/lib": "lib", - "*/addon/selection": "addon/selection", - "*/mode/sieve": "mode/sieve" + "lib": "lib", + "addon/selection": "addon/selection", + "mode/sieve": "mode/sieve" } } ] From 6271b88bab4a53b476a55da2875dc81d136a9b72 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 17 Mar 2017 10:49:13 +0100 Subject: [PATCH 17/68] Fix so settings/upload.inc could not be used by plugins (#5694) --- CHANGELOG | 1 + program/steps/settings/upload.inc | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index d41450764..b9589785e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -24,6 +24,7 @@ CHANGELOG Roundcube Webmail - Managesieve: Fix possible defect in handling \r\n in scripts (#5685) - Fix/rephrase "unsaved changes" warning when cancelling a draft (#5610) - Fix XSS issue in handling of a style tag inside of an svg element +- Fix so settings/upload.inc could not be used by plugins (#5694) RELEASE 1.3-beta ---------------- diff --git a/program/steps/settings/upload.inc b/program/steps/settings/upload.inc index 0cf7ae60c..5e91f1d20 100644 --- a/program/steps/settings/upload.inc +++ b/program/steps/settings/upload.inc @@ -27,6 +27,11 @@ if (!empty($_GET['_progress'])) { $from = rcube_utils::get_input_value('_from', rcube_utils::INPUT_GET); $type = preg_replace('/(add|edit)-/', '', $from); +// Plugins in Settings may use this file for some uploads (#5694) +// Make sure it does not contain a dot, which is a special character +// when using rcube_session::append() below +$type = str_replace('.', '-', $type); + if ($RCMAIL->action == 'upload-display') { $id = 'undefined'; From f69807674afc009d1714e231f904cea21b3e22bf Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 17 Mar 2017 10:53:26 +0100 Subject: [PATCH 18/68] Rephrase log entry --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index b9589785e..c2aa733b7 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -24,7 +24,7 @@ CHANGELOG Roundcube Webmail - Managesieve: Fix possible defect in handling \r\n in scripts (#5685) - Fix/rephrase "unsaved changes" warning when cancelling a draft (#5610) - Fix XSS issue in handling of a style tag inside of an svg element -- Fix so settings/upload.inc could not be used by plugins (#5694) +- Fix bug where settings/upload.inc could not be used by plugins (#5694) RELEASE 1.3-beta ---------------- From b1688a60ad6b4475bc7d2cb69d7e3f1c6769345a Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sat, 18 Mar 2017 09:33:17 +0100 Subject: [PATCH 19/68] Add CVE identifier --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index c2aa733b7..c0019bb16 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -23,7 +23,7 @@ CHANGELOG Roundcube Webmail - Managesieve: Fix parser issue with empty lines between comments (#5657) - Managesieve: Fix possible defect in handling \r\n in scripts (#5685) - Fix/rephrase "unsaved changes" warning when cancelling a draft (#5610) -- Fix XSS issue in handling of a style tag inside of an svg element +- Fix XSS issue in handling of a style tag inside of an svg element [CVE-2017-6820] - Fix bug where settings/upload.inc could not be used by plugins (#5694) RELEASE 1.3-beta From 9b554cd3d579f8ecadf2c442a3e34b863f101925 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Mon, 20 Mar 2017 09:15:50 +0100 Subject: [PATCH 20/68] Remove redundant spaces from generated contact names --- config/defaults.inc.php | 10 +++++----- program/lib/Roundcube/rcube_addressbook.php | 8 ++++++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/config/defaults.inc.php b/config/defaults.inc.php index 3641ccfb3..767ee0b83 100644 --- a/config/defaults.inc.php +++ b/config/defaults.inc.php @@ -1044,11 +1044,11 @@ $config['addressbook_pagesize'] = 50; // sort contacts by this col (preferably either one of name, firstname, surname) $config['addressbook_sort_col'] = 'surname'; -// the way how contact names are displayed in the list -// 0: display name -// 1: (prefix) firstname middlename surname (suffix) -// 2: (prefix) surname firstname middlename (suffix) -// 3: (prefix) surname, firstname middlename (suffix) +// The way how contact names are displayed in the list. +// 0: prefix firstname middlename surname suffix (only if display name is not set) +// 1: firstname middlename surname +// 2: surname firstname middlename +// 3: surname, firstname middlename $config['addressbook_name_listing'] = 0; // use this timezone to display date/time diff --git a/program/lib/Roundcube/rcube_addressbook.php b/program/lib/Roundcube/rcube_addressbook.php index ceaaa1101..e4b523dc7 100644 --- a/program/lib/Roundcube/rcube_addressbook.php +++ b/program/lib/Roundcube/rcube_addressbook.php @@ -506,8 +506,11 @@ abstract class rcube_addressbook $contact = rcube::get_instance()->plugins->exec_hook('contact_displayname', $contact); $fn = $contact['name']; - if (!$fn) // default display name composition according to vcard standard - $fn = trim(join(' ', array_filter(array($contact['prefix'], $contact['firstname'], $contact['middlename'], $contact['surname'], $contact['suffix'])))); + // default display name composition according to vcard standard + if (!$fn) { + $fn = join(' ', array_filter(array($contact['prefix'], $contact['firstname'], $contact['middlename'], $contact['surname'], $contact['suffix']))); + $fn = trim(preg_replace('/\s+/', ' ', $fn)); + } // use email address part for name $email = self::get_col_values('email', $contact, true); @@ -557,6 +560,7 @@ abstract class rcube_addressbook } $fn = trim($fn, ', '); + $fn = preg_replace('/\s+/', ' ', $fn); // fallbacks... if ($fn === '') { From 0b41da158d101f9d5c71331d0e46a9edf59e6e23 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 21 Mar 2017 08:47:20 +0100 Subject: [PATCH 21/68] Use jQuery 3.2.1 --- CHANGELOG | 2 +- jsdeps.json | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index c0019bb16..9969f048e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,7 +1,7 @@ CHANGELOG Roundcube Webmail =========================== -- Update to jQuery 3.2.0 +- Update to jQuery 3.2.1 - Update to TinyMCE 4.5.5 - Plugin API: Call message_part_structure hook for sub-parts of multipart/alternative message (#5678) - Enigma: Always use detached signatures (#5624) diff --git a/jsdeps.json b/jsdeps.json index 3fc9f68f1..4a96a8803 100644 --- a/jsdeps.json +++ b/jsdeps.json @@ -3,13 +3,13 @@ { "lib": "jquery", "name": "jQuery", - "version": "3.2.0", - "url": "https://code.jquery.com/jquery-3.2.0.min.js", + "version": "3.2.1", + "url": "https://code.jquery.com/jquery-3.2.1.min.js", "dest": "program/js/jquery.min.js", - "sha1": "0baf29230047c9cd896f14c59618c9948ea79451", + "sha1": "1055018c28ab41087ef9ccefe411606893dabea2", "license": "MIT", "copyright": "Copyright 2005, 2015 jQuery Foundation, Inc.", - "source": "https://github.com/jquery/jquery/tree/3.2.0" + "source": "https://github.com/jquery/jquery/tree/3.2.1" }, { "lib": "jstz", From 9374599c3c73d8e61a5ad3d0f0b5763d68c2a148 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 21 Mar 2017 10:50:41 +0100 Subject: [PATCH 22/68] Fix require entry for crypt_gpg also in Enigma's composer.json --- plugins/enigma/composer.json | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/plugins/enigma/composer.json b/plugins/enigma/composer.json index fa63a3d19..7357c01d6 100644 --- a/plugins/enigma/composer.json +++ b/plugins/enigma/composer.json @@ -12,10 +12,6 @@ } ], "repositories": [ - { - "type": "pear", - "url": "http://pear.php.net/" - }, { "type": "composer", "url": "http://plugins.roundcube.net" @@ -24,6 +20,6 @@ "require": { "php": ">=5.3.0", "roundcube/plugin-installer": "~0.1.6", - "pear-pear.php.net/crypt_gpg": "~1.6.0@beta" + "pear/crypt_gpg": "~1.6.0" } } From 306c901a15c8e6f5e480bcd2f430013f9a58733c Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 21 Mar 2017 10:51:41 +0100 Subject: [PATCH 23/68] Remove redundant entry --- plugins/managesieve/composer.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/plugins/managesieve/composer.json b/plugins/managesieve/composer.json index afdda5175..024ac4b44 100644 --- a/plugins/managesieve/composer.json +++ b/plugins/managesieve/composer.json @@ -16,10 +16,6 @@ "type": "composer", "url": "https://plugins.roundcube.net" }, - { - "type": "pear", - "url": "https://pear.php.net/" - }, { "type": "vcs", "url": "https://github.com/roundcube/Net_Sieve.git" From 5a53d521c824e1aedfa3cd7d41ba76b88e632c79 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 21 Mar 2017 12:32:51 +0100 Subject: [PATCH 24/68] Fix permission of temporary files and removal of them when generating thumbnails --- program/steps/mail/get.inc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/program/steps/mail/get.inc b/program/steps/mail/get.inc index fd2d781e1..47977def0 100644 --- a/program/steps/mail/get.inc +++ b/program/steps/mail/get.inc @@ -87,7 +87,6 @@ if (!empty($_GET['_thumb']) && $attachment->is_valid()) { if ($imgtype = $image->resize($thumbnail_size, $cache_file, true)) { $mimetype = 'image/' . $imgtype; - unlink($orig_name); } else { // Resize failed, we need to check the file mimetype @@ -95,6 +94,8 @@ if (!empty($_GET['_thumb']) && $attachment->is_valid()) { $_GET['_thumb'] = 0; $_REQUEST['_embed'] = 1; } + + unlink($orig_name); } if (!empty($_GET['_thumb'])) { @@ -598,6 +599,7 @@ class rcmail_attachment_handler $this->body(0, $fp); $this->body_file = $filename; fclose($fp); + @chmod(filename, 0600); return true; } From 89a41340643bfc7d22090f2cc5ffe3e87163638b Mon Sep 17 00:00:00 2001 From: dfukagaw28 Date: Wed, 22 Mar 2017 09:30:36 +0200 Subject: [PATCH 25/68] Add support for DelSp=Yes messages (#5702) --- program/lib/Roundcube/rcube_mime.php | 13 +++++++++--- program/lib/Roundcube/rcube_text2html.php | 5 ++++- program/steps/mail/compose.inc | 4 ++-- program/steps/mail/func.inc | 9 ++++++--- tests/Framework/Mime.php | 14 +++++++++++++ tests/Framework/Text2Html.php | 24 +++++++++++++++++++++++ 6 files changed, 60 insertions(+), 9 deletions(-) diff --git a/program/lib/Roundcube/rcube_mime.php b/program/lib/Roundcube/rcube_mime.php index 54f7d106a..a6c09c845 100644 --- a/program/lib/Roundcube/rcube_mime.php +++ b/program/lib/Roundcube/rcube_mime.php @@ -437,12 +437,13 @@ class rcube_mime /** * Interpret a format=flowed message body according to RFC 2646 * - * @param string $text Raw body formatted as flowed text - * @param string $mark Mark each flowed line with specified character + * @param string $text Raw body formatted as flowed text + * @param string $mark Mark each flowed line with specified character + * @param boolean $delsp Remove the trailing space of each flowed line * * @return string Interpreted text with unwrapped lines and stuffed space removed */ - public static function unfold_flowed($text, $mark = null) + public static function unfold_flowed($text, $mark = null, $delsp = false) { $text = preg_split('/\r?\n/', $text); $last = -1; @@ -464,6 +465,9 @@ class rcube_mime && isset($text[$last]) && $text[$last][strlen($text[$last])-1] == ' ' && !preg_match('/^>+ {0,1}$/', $text[$last]) ) { + if ($delsp) { + $text[$last] = substr($text[$last], 0, -1); + } $text[$last] .= $line; unset($text[$idx]); @@ -487,6 +491,9 @@ class rcube_mime && $text[$last] != '-- ' && $text[$last][strlen($text[$last])-1] == ' ' ) { + if ($delsp) { + $text[$last] = substr($text[$last], 0, -1); + } $text[$last] .= $line; unset($text[$idx]); diff --git a/program/lib/Roundcube/rcube_text2html.php b/program/lib/Roundcube/rcube_text2html.php index 73e8b788c..ce8c37799 100644 --- a/program/lib/Roundcube/rcube_text2html.php +++ b/program/lib/Roundcube/rcube_text2html.php @@ -48,6 +48,8 @@ class rcube_text2html 'space' => "\xC2\xA0", // enables format=flowed parser 'flowed' => false, + // enables delsp=yes parser + 'delsp' => false, // enables wrapping for non-flowed text 'wrap' => true, // line-break tag @@ -150,7 +152,8 @@ class rcube_text2html if ($this->config['flowed']) { $flowed_char = 0x01; - $text = rcube_mime::unfold_flowed($text, chr($flowed_char)); + $delsp = $this->config['delsp']; + $text = rcube_mime::unfold_flowed($text, chr($flowed_char), $delsp); } // search for patterns like links and e-mail addresses and replace with tokens diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc index b6f4195ad..982cbb727 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -910,7 +910,7 @@ function rcmail_compose_part_body($part, $isHtml = false) } // add HTML formatting - $body = rcmail_plain_body($body, $part->ctype_parameters['format'] == 'flowed'); + $body = rcmail_plain_body($body, $part->ctype_parameters['format'] == 'flowed', $part->ctype_parameters['delsp'] == 'yes'); } } else { @@ -927,7 +927,7 @@ function rcmail_compose_part_body($part, $isHtml = false) } else { if ($part->ctype_secondary == 'plain' && $part->ctype_parameters['format'] == 'flowed') { - $body = rcube_mime::unfold_flowed($body); + $body = rcube_mime::unfold_flowed($body, null, $part->ctype_parameters['delsp'] == 'yes'); } // try to remove the signature diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index 8ef4986d3..e09ba6365 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -956,7 +956,9 @@ function rcmail_print_body($body, $part, $p = array()) // plaintext postprocessing if ($part->ctype_secondary == 'plain') { - $body = rcmail_plain_body($body, $part->ctype_parameters['format'] == 'flowed'); + $flowed = $part->ctype_parameters['format'] == 'flowed'; + $delsp = $part->ctype_parameters['delsp'] == 'yes'; + $body = rcmail_plain_body($body, $flowed, $delsp); } // allow post-processing of the message body @@ -974,9 +976,10 @@ function rcmail_print_body($body, $part, $p = array()) * * @return string Formatted HTML string */ -function rcmail_plain_body($body, $flowed = false) +function rcmail_plain_body($body, $flowed = false, $delsp = false) { - $options = array('flowed' => $flowed, 'wrap' => !$flowed, 'replacer' => 'rcmail_string_replacer'); + $options = array('flowed' => $flowed, 'wrap' => !$flowed, 'replacer' => 'rcmail_string_replacer', + 'delsp' => $delsp); $text2html = new rcube_text2html($body, false, $options); $body = $text2html->get_html(); diff --git a/tests/Framework/Mime.php b/tests/Framework/Mime.php index f3f0d0b81..bbab0e64b 100644 --- a/tests/Framework/Mime.php +++ b/tests/Framework/Mime.php @@ -170,6 +170,20 @@ class Framework_Mime extends PHPUnit_Framework_TestCase $this->assertEquals($unfolded, rcube_mime::unfold_flowed($flowed), "Test correct unfolding of quoted lines [2]"); } + /** + * Test format=flowed delsp=yes unfolding (RFC3676) + */ + function test_unfold_flowed_delsp() + { + $flowed = "そしてジョバンニはすぐうしろの天気輪の柱が \r\n" + ."いつかぼんやりした三角標の形になって、しば \r\n" + ."らく蛍のように、ぺかぺか消えたりともったり \r\n" + ."しているのを見ました。"; + $unfolded = "そしてジョバンニはすぐうしろの天気輪の柱がいつかぼんやりした三角標の形になって、しばらく蛍のように、ぺかぺか消えたりともったりしているのを見ました。"; + + $this->assertEquals($unfolded, rcube_mime::unfold_flowed($flowed, null, true), "Test correct unfolding of flowed DelSp=Yes lines"); + } + /** * Test wordwrap() */ diff --git a/tests/Framework/Text2Html.php b/tests/Framework/Text2Html.php index 03c4bd097..c85e44a4c 100644 --- a/tests/Framework/Text2Html.php +++ b/tests/Framework/Text2Html.php @@ -19,6 +19,7 @@ class Framework_Text2Html extends PHPUnit_Framework_TestCase 'break' => '
', 'links' => false, 'flowed' => false, + 'delsp' => false, 'wrap' => false, 'space' => '_', // replace UTF-8 non-breaking space for simpler testing 'nobr_start' => '>', @@ -70,7 +71,30 @@ class Framework_Text2Html extends PHPUnit_Framework_TestCase $data[] = array(">aaaa \n>bbbb\ncccc dddd", "
aaaa bbbb
>cccc_dddd<", $options); $data[] = array("\x02\x03", ">\x02\x03<", $options); + $options['flowed'] = true; + $options['delsp'] = true; + + $data[] = array(" aaaa", "aaaa", $options); + $data[] = array("aaaa aaaa", ">aaaa_aaaa<", $options); + $data[] = array("aaaa aaaa", ">aaaa__aaaa<", $options); + $data[] = array("aaaa aaaa", ">aaaa___aaaa<", $options); + $data[] = array("aaaa\taaaa", ">aaaa____aaaa<", $options); + $data[] = array("aaaa\naaaa", "aaaa
aaaa", $options); + $data[] = array("aaaa\n aaaa", "aaaa
aaaa", $options); + $data[] = array("aaaa\n aaaa", "aaaa
>_aaaa<", $options); + $data[] = array("aaaa\n aaaa", "aaaa
>__aaaa<", $options); + $data[] = array("\taaaa", ">____aaaa<", $options); + $data[] = array("\naaaa", "
aaaa", $options); + $data[] = array("\n aaaa", "
aaaa", $options); + $data[] = array("\n aaaa", "
>_aaaa<", $options); + $data[] = array("\n aaaa", "
>__aaaa<", $options); + $data[] = array("aaaa\n\nbbbb", "aaaa

bbbb", $options); + $data[] = array(">aaaa \n>aaaa", "
aaaaaaaa
", $options); + $data[] = array(">aaaa\n>aaaa", "
aaaa
aaaa
", $options); + $data[] = array(">aaaa \n>bbbb\ncccc dddd", "
aaaabbbb
>cccc_dddd<", $options); + $options['flowed'] = false; + $options['delsp'] = false; $options['wrap'] = true; $data[] = array(">>aaaa bbbb\n>>\n>>>\n>cccc\n\ndddd eeee", From 92566880385b92a83db586899dbf2d86fc7dc4d9 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Wed, 22 Mar 2017 08:31:39 +0100 Subject: [PATCH 26/68] Update changelog --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 9969f048e..231d9c4f3 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG Roundcube Webmail =========================== +- Add support for DelSp=Yes in format=flowed messages (#5702) - Update to jQuery 3.2.1 - Update to TinyMCE 4.5.5 - Plugin API: Call message_part_structure hook for sub-parts of multipart/alternative message (#5678) From 13ae4d79696f8b104ea39e15a98df64df7029fac Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Wed, 22 Mar 2017 08:37:51 +0100 Subject: [PATCH 27/68] Ignore js deps (#5704) --- .gitignore | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.gitignore b/.gitignore index 30b18a9a4..2d4e54deb 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,11 @@ composer.json composer.phar composer.lock vendor + +# javascript dependencies +plugins/enigma/openpgp.min.js +plugins/managesieve/codemirror/ +program/js/jquery.min.js +program/js/jstz.min.js +program/js/publickey.js +program/js/tinymce/ From 19fcc35a5521511eb6d00d06c6573e425b68fff0 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 31 Mar 2017 09:45:21 +0200 Subject: [PATCH 28/68] Fix regression in LDAP fuzzy search where it always used prefix search instead (#5713) --- CHANGELOG | 1 + program/lib/Roundcube/rcube_ldap.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 231d9c4f3..7112ace19 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -26,6 +26,7 @@ CHANGELOG Roundcube Webmail - Fix/rephrase "unsaved changes" warning when cancelling a draft (#5610) - Fix XSS issue in handling of a style tag inside of an svg element [CVE-2017-6820] - Fix bug where settings/upload.inc could not be used by plugins (#5694) +- Fix regression in LDAP fuzzy search where it always used prefix search instead (#5713) RELEASE 1.3-beta ---------------- diff --git a/program/lib/Roundcube/rcube_ldap.php b/program/lib/Roundcube/rcube_ldap.php index 201b67703..444ce05e2 100644 --- a/program/lib/Roundcube/rcube_ldap.php +++ b/program/lib/Roundcube/rcube_ldap.php @@ -840,7 +840,7 @@ class rcube_ldap extends rcube_addressbook } // compose a full-text-like search filter - $filter = rcube_ldap_generic::fulltext_search_filter($value, $attributes, $mode); + $filter = rcube_ldap_generic::fulltext_search_filter($value, $attributes, $mode & ~rcube_addressbook::SEARCH_GROUPS); } // add required (non empty) fields filter From b314dfc5483571aea9901b6394d316abb2661888 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 31 Mar 2017 13:28:54 +0200 Subject: [PATCH 29/68] Fix (restore) Tab key behaviour in autocomplete popup (#5659) And make it to jump to the next field after inserting selected autocomplete entry. --- program/js/app.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/program/js/app.js b/program/js/app.js index 9079b4ddd..17b9b301c 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -5407,6 +5407,12 @@ function rcube_webmail() return rcube_event.cancel(e); + case 9: // tab + if (rcube_event.get_modifier(e) == SHIFT_KEY || !this.ksearch_visible()) { + this.ksearch_hide(); + return; + } + case 13: // enter if (!this.ksearch_visible()) return false; @@ -5415,9 +5421,9 @@ function rcube_webmail() this.insert_recipient(this.ksearch_selected); this.ksearch_hide(); - return rcube_event.cancel(e); + // Don't cancel on Tab, we want to jump to the next field (#5659) + return key == 9 ? null : rcube_event.cancel(e); - case 9: // tab case 27: // escape this.ksearch_hide(); return; From 34446e00ca97ba1db2a14f359c44a8560f5e66e7 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sat, 1 Apr 2017 09:45:07 +0200 Subject: [PATCH 30/68] Fix bug where namespace prefix could not be truncated on folders list if show_real_foldernames=true (#5695) --- CHANGELOG | 1 + program/include/rcmail.php | 25 +++++++++++++++++-------- program/steps/settings/edit_folder.inc | 9 +++++---- program/steps/settings/folders.inc | 5 +++-- 4 files changed, 26 insertions(+), 14 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 7112ace19..b8dedd16c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -27,6 +27,7 @@ CHANGELOG Roundcube Webmail - Fix XSS issue in handling of a style tag inside of an svg element [CVE-2017-6820] - Fix bug where settings/upload.inc could not be used by plugins (#5694) - Fix regression in LDAP fuzzy search where it always used prefix search instead (#5713) +- Fix bug where namespace prefix could not be truncated on folders list if show_real_foldernames=true (#5695) RELEASE 1.3-beta ---------------- diff --git a/program/include/rcmail.php b/program/include/rcmail.php index 783d52bcd..208d1560e 100644 --- a/program/include/rcmail.php +++ b/program/include/rcmail.php @@ -1689,12 +1689,13 @@ class rcmail extends rcube * Try to localize the given IMAP folder name. * UTF-7 decode it in case no localized text was found * - * @param string $name Folder name - * @param bool $with_path Enable path localization + * @param string $name Folder name + * @param bool $with_path Enable path localization + * @param bool $path_remove Remove the path * * @return string Localized folder name in UTF-8 encoding */ - public function localize_foldername($name, $with_path = false) + public function localize_foldername($name, $with_path = false, $path_remove = false) { $realnames = $this->config->get('show_real_foldernames'); @@ -1702,12 +1703,20 @@ class rcmail extends rcube return $this->gettext($folder_class); } + $storage = $this->get_storage(); + $delimiter = $storage->get_hierarchy_delimiter(); + + // Remove the path + if ($path_remove) { + if (strpos($name, $delimiter)) { + $path = explode($delimiter, $name); + $name = array_pop($path); + } + } // try to localize path of the folder - if ($with_path && !$realnames) { - $storage = $this->get_storage(); - $delimiter = $storage->get_hierarchy_delimiter(); - $path = explode($delimiter, $name); - $count = count($path); + else if ($with_path && !$realnames) { + $path = explode($delimiter, $name); + $count = count($path); if ($count > 1) { for ($i = 1; $i < $count; $i++) { diff --git a/program/steps/settings/edit_folder.inc b/program/steps/settings/edit_folder.inc index 8ddc17e65..c16f2cabd 100644 --- a/program/steps/settings/edit_folder.inc +++ b/program/steps/settings/edit_folder.inc @@ -86,20 +86,21 @@ function rcmail_folder_form($attrib) // Location (name) if ($options['protected']) { - $foldername = str_replace($delimiter, ' » ', rcube::Q($RCMAIL->localize_folderpath($mbox))); + $foldername = str_replace($delimiter, ' » ', rcube::Q($RCMAIL->localize_foldername($mbox, false, true))); } else if ($options['norename']) { $foldername = rcube::Q($folder); } else { - if (isset($_POST['_name'])) + if (isset($_POST['_name'])) { $folder = trim(rcube_utils::get_input_value('_name', rcube_utils::INPUT_POST, true)); + } $foldername = new html_inputfield(array('name' => '_name', 'id' => '_name', 'size' => 30)); $foldername = $foldername->show($folder); - if ($options['special']) { - $foldername .= ' (' . rcube::Q($RCMAIL->localize_foldername($mbox)) .')'; + if ($options['special'] && ($sname = $RCMAIL->localize_foldername($mbox, false, true)) != $folder) { + $foldername .= ' (' . rcube::Q($sname) .')'; } } diff --git a/program/steps/settings/folders.inc b/program/steps/settings/folders.inc index 345eb4785..a7fab763e 100644 --- a/program/steps/settings/folders.inc +++ b/program/steps/settings/folders.inc @@ -277,12 +277,13 @@ function rcmail_subscription_form($attrib) foreach ($list_folders as $i => $folder) { $sub_key = array_search($folder['id'], $a_subscribed); $subscribed = $sub_key !== false; - $protected = $folder['id'] == 'INBOX' || ($protect_default && isset($special_folders[$folder['id']])); + $special = $folder['id'] == 'INBOX' || isset($special_folders[$folder['id']]); + $protected = $folder['id'] == 'INBOX' || ($protect_default && $special); $noselect = false; $classes = array(); $folder_utf8 = rcube_charset::convert($folder['id'], 'UTF7-IMAP'); - $display_folder = rcube::Q($protected ? $RCMAIL->localize_foldername($folder['id']) : $folder['name']); + $display_folder = rcube::Q($special ? $RCMAIL->localize_foldername($folder['id'], false, true) : $folder['name']); if ($folder['virtual']) { $classes[] = 'virtual'; From e160e48069f9d1409f1f2977edc86ae3c2c611c7 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Mon, 3 Apr 2017 12:06:23 +0200 Subject: [PATCH 31/68] Fix undesired effects when postgres database uses different timezone than PHP host (#5708) Allow passing DateTime variables as query arguments. Their value will be converted to date/time input string in format specific to the database type (with timezone on postgres). --- CHANGELOG | 1 + program/lib/Roundcube/rcube_db.php | 9 ++++++++- program/lib/Roundcube/rcube_db_oracle.php | 4 ++++ program/lib/Roundcube/rcube_db_pgsql.php | 15 +++++++++++++++ program/lib/Roundcube/rcube_user.php | 4 ++-- 5 files changed, 30 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 7112ace19..93c768953 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -27,6 +27,7 @@ CHANGELOG Roundcube Webmail - Fix XSS issue in handling of a style tag inside of an svg element [CVE-2017-6820] - Fix bug where settings/upload.inc could not be used by plugins (#5694) - Fix regression in LDAP fuzzy search where it always used prefix search instead (#5713) +- Fix undesired effects when postgres database uses different timezone than PHP host (#5708) RELEASE 1.3-beta ---------------- diff --git a/program/lib/Roundcube/rcube_db.php b/program/lib/Roundcube/rcube_db.php index 9cfdcaee8..2e4d01fdf 100644 --- a/program/lib/Roundcube/rcube_db.php +++ b/program/lib/Roundcube/rcube_db.php @@ -47,6 +47,8 @@ class rcube_db // column/table quotes 'identifier_start' => '"', 'identifier_end' => '"', + // date/time input format + 'datetime_format' => 'Y-m-d H:i:s', ); const DEBUG_LINE_LENGTH = 4096; @@ -818,6 +820,10 @@ class rcube_db return 'NULL'; } + if ($input instanceof DateTime) { + return $this->quote($input->format($this->options['datetime_format'])); + } + if ($type == 'ident') { return $this->quote_identifier($input); } @@ -970,10 +976,11 @@ class rcube_db * @param int $timestamp Unix timestamp * * @return string Date string in db-specific format + * @deprecated */ public function fromunixtime($timestamp) { - return date("'Y-m-d H:i:s'", $timestamp); + return $this->quote(date($this->options['datetime_format'], $timestamp)); } /** diff --git a/program/lib/Roundcube/rcube_db_oracle.php b/program/lib/Roundcube/rcube_db_oracle.php index 846fa27fa..fb1cd2351 100644 --- a/program/lib/Roundcube/rcube_db_oracle.php +++ b/program/lib/Roundcube/rcube_db_oracle.php @@ -327,6 +327,10 @@ class rcube_db_oracle extends rcube_db return 'NULL'; } + if ($input instanceof DateTime) { + return $this->quote($input->format($this->options['datetime_format'])); + } + if ($type == 'ident') { return $this->quote_identifier($input); } diff --git a/program/lib/Roundcube/rcube_db_pgsql.php b/program/lib/Roundcube/rcube_db_pgsql.php index aa7809370..d0d707a4a 100644 --- a/program/lib/Roundcube/rcube_db_pgsql.php +++ b/program/lib/Roundcube/rcube_db_pgsql.php @@ -28,6 +28,21 @@ class rcube_db_pgsql extends rcube_db { public $db_provider = 'postgres'; + /** + * Object constructor + * + * @param string $db_dsnw DSN for read/write operations + * @param string $db_dsnr Optional DSN for read only operations + * @param bool $pconn Enables persistent connections + */ + public function __construct($db_dsnw, $db_dsnr = '', $pconn = false) + { + parent::__construct($db_dsnw, $db_dsnr, $pconn); + + // use date/time input format with timezone spec. + $this->options['datetime_format'] = 'c'; + } + /** * Driver-specific configuration of database connection * diff --git a/program/lib/Roundcube/rcube_user.php b/program/lib/Roundcube/rcube_user.php index 32679ead9..ad442436c 100644 --- a/program/lib/Roundcube/rcube_user.php +++ b/program/lib/Roundcube/rcube_user.php @@ -503,10 +503,10 @@ class rcube_user $this->db->query( "UPDATE " . $this->db->table_name('users', true) - . " SET `failed_login` = " . $this->db->fromunixtime($failed_login->format('U')) + . " SET `failed_login` = ?" . ", `failed_login_counter` = " . ($counter ?: "`failed_login_counter` + 1") . " WHERE `user_id` = ?", - $this->ID); + $failed_login, $this->ID); } } From 065b16df123424d0771eaae86f928b3f90582e52 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 4 Apr 2017 09:12:40 +0200 Subject: [PATCH 32/68] Update to TinyMCE 4.5.6 --- CHANGELOG | 2 +- jsdeps.json | 8 ++++---- program/js/editor.js | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index ea57b6794..0dacbcc77 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -3,7 +3,7 @@ CHANGELOG Roundcube Webmail - Add support for DelSp=Yes in format=flowed messages (#5702) - Update to jQuery 3.2.1 -- Update to TinyMCE 4.5.5 +- Update to TinyMCE 4.5.6 - Plugin API: Call message_part_structure hook for sub-parts of multipart/alternative message (#5678) - Enigma: Always use detached signatures (#5624) - Enigma: Fix handling of messages with nested PGP encrypted parts (#5634) diff --git a/jsdeps.json b/jsdeps.json index 4a96a8803..ff1f7b8f8 100644 --- a/jsdeps.json +++ b/jsdeps.json @@ -35,10 +35,10 @@ }, { "lib": "tinymce", - "version": "4.5.5", - "url": "http://download.ephox.com/tinymce/community/tinymce_4.5.5.zip", + "version": "4.5.6", + "url": "http://download.ephox.com/tinymce/community/tinymce_4.5.6.zip", "dest": "program/js", - "sha1": "ebac7eda8dea59e42b46349882d3d1e9c265bbbf", + "sha1": "47e14121e2841072a5e7d1d952ded0b0368b9d57", "license": "LGPL", "copyright": "Copyright (c) 1999-2015 Ephox Corp. All rights reserved", "rm": "program/js/tinymce", @@ -55,7 +55,7 @@ }, { "lib": "tinymce-langs", - "version": "4.5.5", + "version": "4.5.6", "url": "https://tinymce-services.azurewebsites.net/1/i18n/download?langs=ar,hy,az,eu,be,bs,bg_BG,ca,zh_CN,zh_TW,hr,cs,cs_CZ,da,nl,en_CA,en_GB,eo,et,fo,fi,fr_FR,fr_CH,gd,gl,ka_GE,de,de_AT,el,he_IL,hi_IN,hu_HU,is_IS,id,ga,it,ja,kab,km_KH,ko_KR,ku,ku_IQ,lv,lt,lb,mk_MK,ml_IN,nb_NO,oc,fa,fa_IR,pl,pt_BR,pt_PT,ro,ru,sk,sl_SI,es,es_MX,sv_SE,tg,ta,ta_IN,tt,th_TH,tr,tr_TR,ug,uk,uk_UA,vi,vi_VN,cy", "dest": "program/js/tinymce" }, diff --git a/program/js/editor.js b/program/js/editor.js index 84ab80989..dc9a7ded4 100644 --- a/program/js/editor.js +++ b/program/js/editor.js @@ -39,7 +39,7 @@ function rcube_text_editor(config, id) abs_url = location.href.replace(/[?#].*$/, '').replace(/\/$/, ''), conf = { selector: '#' + ($('#' + id).is('.mce_editor') ? id : 'fake-editor-id'), - cache_suffix: 's=4050500', + cache_suffix: 's=4050600', theme: 'modern', language: config.lang, content_css: rcmail.assets_path('program/resources/tinymce/content.css'), From 72f19c079f42b5121e727612ef64ccc55fed6aab Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Thu, 6 Apr 2017 12:17:59 +0200 Subject: [PATCH 33/68] Installer: Fix DB schema initialization on MS SQL Server --- CHANGELOG | 1 + program/lib/Roundcube/rcube_db.php | 21 +++++++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 0dacbcc77..663906b2c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -29,6 +29,7 @@ CHANGELOG Roundcube Webmail - Fix regression in LDAP fuzzy search where it always used prefix search instead (#5713) - Fix bug where namespace prefix could not be truncated on folders list if show_real_foldernames=true (#5695) - Fix undesired effects when postgres database uses different timezone than PHP host (#5708) +- Installer: Fix DB schema initialization on MS SQL Server RELEASE 1.3-beta ---------------- diff --git a/program/lib/Roundcube/rcube_db.php b/program/lib/Roundcube/rcube_db.php index 2e4d01fdf..b5409fb3c 100644 --- a/program/lib/Roundcube/rcube_db.php +++ b/program/lib/Roundcube/rcube_db.php @@ -1326,19 +1326,32 @@ class rcube_db { $sql = $this->fix_table_names($sql); $buff = ''; + $exec = ''; foreach (explode("\n", $sql) as $line) { - if (preg_match('/^--/', $line) || trim($line) == '') + $trimmed = trim($line); + if ($trimmed == '' || preg_match('/^--/', $trimmed)) { continue; + } + + if ($trimmed == 'GO') { + $exec = $buff; + } + else if ($trimmed[strlen($trimmed)-1] == ';') { + $exec = $buff . substr(rtrim($line), 0, -1); + } - $buff .= $line . "\n"; - if (preg_match('/(;|^GO)$/', trim($line))) { - $this->query($buff); + if ($exec) { + $this->query($exec); $buff = ''; + $exec = ''; if ($this->db_error) { break; } } + else { + $buff .= $line . "\n"; + } } return !$this->db_error; From 99fb6bce8d88215277abcb7483042c5c5fecec5a Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Mon, 10 Apr 2017 09:17:32 +0200 Subject: [PATCH 34/68] Bump Net_Socket version --- composer.json-dist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json-dist b/composer.json-dist index 36c385d2f..6bedea949 100644 --- a/composer.json-dist +++ b/composer.json-dist @@ -19,7 +19,7 @@ "require": { "php": ">=5.4.0", "pear/pear-core-minimal": "~1.10.1", - "pear/net_socket": "~1.0.12", + "pear/net_socket": "~1.2.1", "pear/auth_sasl": "~1.1.0", "pear/net_idna2": "~0.2.0", "pear/mail_mime": "~1.10.0", From 712875bde1b0f1d7d7b40422122ed6f9c7996c41 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Mon, 10 Apr 2017 13:22:09 +0200 Subject: [PATCH 35/68] Fix bug where base_dn setting was ignored inside group_filters (#5720) --- CHANGELOG | 1 + program/lib/Roundcube/rcube_ldap.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 663906b2c..c8f9d7567 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -30,6 +30,7 @@ CHANGELOG Roundcube Webmail - Fix bug where namespace prefix could not be truncated on folders list if show_real_foldernames=true (#5695) - Fix undesired effects when postgres database uses different timezone than PHP host (#5708) - Installer: Fix DB schema initialization on MS SQL Server +- Fix bug where base_dn setting was ignored inside group_filters (#5720) RELEASE 1.3-beta ---------------- diff --git a/program/lib/Roundcube/rcube_ldap.php b/program/lib/Roundcube/rcube_ldap.php index 444ce05e2..e166df3b2 100644 --- a/program/lib/Roundcube/rcube_ldap.php +++ b/program/lib/Roundcube/rcube_ldap.php @@ -912,7 +912,7 @@ class rcube_ldap extends rcube_addressbook protected function extended_search($count = false) { $prop = $this->group_id ? $this->group_data : $this->prop; - $base_dn = $this->group_id ? $this->groups_base_dn : $this->base_dn; + $base_dn = $this->group_id ? $prop['base_dn'] : $this->base_dn; $attrs = $count ? array('dn') : $this->prop['attributes']; $entries = array(); From 938dd4670bee27bd46fbf7d64cd0526eeb24669f Mon Sep 17 00:00:00 2001 From: Kay Marquardt Date: Mon, 10 Apr 2017 13:38:16 +0200 Subject: [PATCH 36/68] extend plugin password to avoid sudo (use ssh instead calling chpasswd) (#5654) Use proc_open() instead of popen() to catch error messages from called wrapper. Create new wrapper chpass-wrapper-expect.py --- plugins/password/README | 19 ++- plugins/password/config.inc.php.dist | 26 +++- plugins/password/drivers/chpasswd.php | 45 +++++- .../password/helpers/chpass-wrapper-expect.py | 143 ++++++++++++++++++ plugins/password/helpers/chpass-wrapper.py | 93 ++++++++++-- 5 files changed, 299 insertions(+), 27 deletions(-) create mode 100644 plugins/password/helpers/chpass-wrapper-expect.py diff --git a/plugins/password/README b/plugins/password/README index 8f3305a03..a27082b68 100644 --- a/plugins/password/README +++ b/plugins/password/README @@ -262,6 +262,9 @@ Attached wrapper script (helpers/chpass-wrapper.py) restricts password changes to uids >= 1000 and can deny requests based on a blacklist. + + For a more secure setup see the notes in section sudo or use the new wrapper + chpass-wrapper-expect.py, for usage see there. 2.12. LDAP - no PEAR (ldap_simple) @@ -317,7 +320,9 @@ Driver to change user password via the 'expect' command. See config.inc.php.dist file for configuration description. - + + For easyer and more secure of the expect script a new wrapper is + is provided: chpass-wrapper-expect.py, see there and sudo for setup 2.18. Samba (smb) ----------------------------------- @@ -375,11 +380,21 @@ 4. Sudo setup ------------- + try to be more secure and use dovecot or pam methods + if this is not possible in your setup you can increase security by + sudo to a wrapper, where you can implement some security meassures + + 1. two wrappers are provided by this plugin: chpass-wrapper.py / chpass-wrapper_expect.py + 2. move wrapper out of the default location to a random place + 3. change permissons of wrapper to root:www 770 to avoid changes by user or webserver + 4. add some security meassures, i.e. limit userids where password can be changed + 5. allow webserver sudo for wrapper only (se below) + Some drivers that execute system commands (like chpasswd) require use of sudo command. Here's a sample for CentOS 7: # cat </etc/sudoers.d/99-roundcubemail - apache ALL=NOPASSWD:/usr/sbin/chpasswd + apache ALL=NOPASSWD://roundcube/wrapper/chpass-wrapper.py Defaults:apache !requiretty < +// allowing sudo chpasswd directly IMHO opens a security hole! +// any script on the webserver can change password for every user. +// $config['password_chpasswd_cmd'] = 'sudo /usr/sbin/chpasswd 2>/dev/null'; + +// try to be more secure and use other methods +// if this is not possible in your setup, you can increase security by +// sudo to a wrapper, where you can implement some security meassures: +// 1. a simple wraper is provided by this plugin: helpers/chpasswrapper.py +// 2. move wrapper out of default location to a random place +// 3. change permissons of wrapper to root:www 770 to avoid changes by user or webserver +// 4. add some security meassures, i.e. limit userids where password can be changed +// 5. allow webserver sudo for wrapper only (see README) +// $config['password_chpasswd_cmd'] = 'sudo //roundcube/wrapper/chpass-wrapper.py'; + +// IMHO the most flexible and secure method for users with interactive shell access is to use ssh with expect +// I modifed the chpasss driver to provide the old password needed, additionally it pass the script response in case of error. + +// 1. use my wrapper for the nice expect script provided by this plugin: helpers/chpass-wrapper-expect.py +// 2. move wrapper out of default location to a random place +// 3. change permissons of wrapper to root:www 770 to avoid changes by user or webserver +// 4. edit arguments to provide loginmethod and hostname. +// 5. remove sudo rules you may have applied (see README) +$config['password_chpasswd_cmd'] = '//roundcube/wrapper/chpass-wrapper-expect.py -ssh -host localhost'; // XMail Driver options diff --git a/plugins/password/drivers/chpasswd.php b/plugins/password/drivers/chpasswd.php index 45c56dba3..7c6b34b25 100644 --- a/plugins/password/drivers/chpasswd.php +++ b/plugins/password/drivers/chpasswd.php @@ -8,8 +8,9 @@ * * For installation instructions please read the README file. * - * @version 2.0 + * @version 3.0 * @author Alex Cartwright + * @author rewrtitten by KaM * * Copyright (C) 2005-2013, The Roundcube Dev Team * @@ -34,12 +35,43 @@ class rcube_chpasswd_password $cmd = rcmail::get_instance()->config->get('password_chpasswd_cmd'); $username = $_SESSION['username']; - $handle = popen($cmd, "w"); - fwrite($handle, "$username:$newpass\n"); + // change popen to proc_open to chatch responses from command + $desc = array( + 0 => array('pipe', 'r'), // 0 is STDIN for process + 1 => array('pipe', 'w'), // 1 is STDOUT for process + 2 => array('file', strtok(cmd, ' ') . '-error.log', 'a') // 2 is STDERR for process + ); - if (pclose($handle) == 0) { - return PASSWORD_SUCCESS; + // spawn the sub process + $process = proc_open($cmd, $desc, $pipes); + + // does sub prescess exist? + if (is_resource($process)) { + // send send username and new pass to chpasswd command / warpper + fwrite($pipes[0], "$username:$newpass\n"); + // new: send old passwd for expect sript, works also with chpasswd + fwrite($pipes[0], "$currpass\n"); + fclose($pipes[0]); + + // read response from sub process + $message = stream_get_contents($pipes[1]); + + // all done! Clean up + fclose($pipes[1]); + fclose($pipes[2]); + + if (!proc_close($process)) { + return PASSWORD_SUCCESS; + } + else { + // return response in case of error + return array( + 'code' => PASSWORD_ERROR, + 'message' => "
" . $message + ); + } } + // sub process failed! else { rcube::raise_error(array( 'code' => 600, @@ -48,7 +80,4 @@ class rcube_chpasswd_password 'message' => "Password plugin: Unable to execute $cmd" ), true, false); } - - return PASSWORD_ERROR; - } } diff --git a/plugins/password/helpers/chpass-wrapper-expect.py b/plugins/password/helpers/chpass-wrapper-expect.py new file mode 100644 index 000000000..34cf6a57a --- /dev/null +++ b/plugins/password/helpers/chpass-wrapper-expect.py @@ -0,0 +1,143 @@ +#!/usr/bin/env python +# +# use passwd-expect to login to host and change password +# you need to install expect on the webserver host +# i.e. "apt-get install expect" or "yast -i expect" +# +# you need an writeable .ssh dir in webserver homedir +# you can test this by do ssh user@host as webserver +# +# Parameter: +# -ssh use ssh for connetion to host (default) +# -host hostname connect to hostname (default localhost) +# -timeout # 0 - 99 time in s to wait for response +# +# all other parameters are passed to passwd-expect, see there. +# +""" +// 2017-02-13: Remarks by Kay Marquardt kay@rrr.de +// allowing sudo chpasswd directly opens a security hole! +// any script on the webserver can change password for every user, incl. root + +// IMHO the most flexible and secure method for users with interactive shell access is to use ssh with an expect script +// I modifed the chpasss driver to provide the old password needed, additionally it pass the script response in case of error. + +// 1. I wrote a wrapper (this script) for expect script provided by this plugin. +// 2. move wrapper out of default location to a random place +// 3. change permissons of wrapper to root:www 770 to avoid changes by user or webserver +// 4. I add some security meassures(see README) +// 5. remove sudo rules you may have applied (see README) +""" + +# path to ecpect and script name (has to be in the same dir as this script) +# "which expect" show the path to expect programm +expect = '/usr/bin/expect' +script = 'passwd-expect' + +TIMEOUT= 10 + +import os, sys, pwd, re +import subprocess, signal + + +# get args for script and extract hostname for us +hostname='localhost' +scriptargs = '' +count=1 +while(count < len(sys.argv)): + # get hostname + if sys.argv[count] == '-host': + hostname = sys.argv[count+1] + # local only args, do not pass + try: + if sys.argv[count] == '-timeout': + count += 2 + TIMEOUT=int(sys.argv[count-1]) + continue + except ValueError: + continue + # pass all other args + scriptargs += ' ' + sys.argv[count] + count += 1 + + +# read username:password\noldpasswd with timeout +class TimeoutException(Exception): # Custom exception class + pass +def timeout_handler(signum, frame): # Custom signal handler + raise TimeoutException +signal.signal(signal.SIGALRM, timeout_handler) + +# set timeout +signal.alarm(TIMEOUT) +try: + try: + username, password = sys.stdin.readline().split(':', 1) + oldpassw = sys.stdin.readline() + except ValueError, e: + sys.exit('Malformed input') + +except TimeoutException: + sys.exit('Timeout while reading input') +else: + # clear timeout + signal.alarm(0) + + +# add user to BLACKLIST and/or /etc/ftpusers to disable password change +BLACKLIST = [ + # add blacklisted users here + 'ftp', +] + +# add /etc/ftpusers to BLACKLIST if exist +try: + with open("/etc/ftpusers", "r") as ins: + for line in ins: + if line.startswith('#'): + continue + BLACKLIST.append(line.rstrip('\n')) + +except IOError: + # only catch error and continue + pass + + +# check if user is blacklisted for password change +if username in BLACKLIST: + sys.exit('Changing password for user %s is forbidden (user blacklisted)!' % + username) + + +# check if user exit and is allowed to chage password +if hostname == 'localhost': + try: + user = pwd.getpwnam(username) + except KeyError, e: + sys.exit('No such user: %s' % username) + + if user.pw_uid < 1000: + sys.exit('Changing the password for user %s is forbidden (system user)!' % + username) + + +path= os.path.dirname(os.path.realpath(sys.argv[0])) + +# script has to be in same directory +if scriptargs == '': scriptargs = ' -ssh -host ' + hostname +cmd = expect + ' ' + os.path.dirname(os.path.realpath(sys.argv[0])) + '/' + script + scriptargs + ' -log \|cat' + +# set timeout +signal.alarm(TIMEOUT) +try: + handle = subprocess.Popen( cmd, shell=True, stdin = subprocess.PIPE) + handle.communicate('%s\n%s\n%s' % (username, oldpassw.rstrip('\r\n'), password)) +except TimeoutException: + sys.exit('Timeout while changing password (wrong old password)') +else: + # clear timeout + signal.alarm(0) + + +sys.exit(handle.returncode) + diff --git a/plugins/password/helpers/chpass-wrapper.py b/plugins/password/helpers/chpass-wrapper.py index 61bba849e..428deef99 100644 --- a/plugins/password/helpers/chpass-wrapper.py +++ b/plugins/password/helpers/chpass-wrapper.py @@ -1,32 +1,95 @@ #!/usr/bin/env python +# +# extended wrapper to /user/sbin/chpasswd +# - file based blacklist (/etc/ftpusers) +# - timeout for reading and writing -import sys -import pwd -import subprocess +TIMEOUT= 10 -BLACKLIST = ( +import os, sys, pwd, re +import subprocess, signal + + +# get args for script +scriptargs = '' +count=1 +while(count < len(sys.argv)): + # local only args, do not pass + try: + if sys.argv[count] == '-timeout': + count += 2 + TIMEOUT=int(sys.argv[count-1]) + continue + except ValueError: + continue + # pass all other args + scriptargs += ' ' + sys.argv[count] + count += 1 + +# read username:password\noldpasswd with timeout +class TimeoutException(Exception): # Custom exception class + pass +def timeout_handler(signum, frame): # Custom signal handler + raise TimeoutException +signal.signal(signal.SIGALRM, timeout_handler) + +# set timeout +signal.alarm(TIMEOUT) +try: + try: + username, password = sys.stdin.readline().split(':', 1) + except ValueError, e: + sys.exit('Malformed input') + +except TimeoutException: + sys.exit('Timeout while reading input') +else: + # clear timeout + signal.alarm(0) + +# add user to BLACKLIST and/or /etc/ftpusers to disable password change +BLACKLIST = [ # add blacklisted users here - #'user1', -) + 'ftp', +] +# add /etc/ftpusers to BLACKLIST if exist try: - username, password = sys.stdin.readline().split(':', 1) -except ValueError, e: - sys.exit('Malformed input') + with open("/etc/ftpusers", "r") as ins: + for line in ins: + if line.startswith('#'): + continue + BLACKLIST.append(line.rstrip('\n')) + +except IOError: + # only catch error and continue + pass +# check if user is blacklisted for password change +if username in BLACKLIST: + sys.exit('Changing password for user %s is forbidden (user blacklisted)!' % + username) + + +# check if user exit and is allowed to chage password try: user = pwd.getpwnam(username) except KeyError, e: sys.exit('No such user: %s' % username) if user.pw_uid < 1000: - sys.exit('Changing the password for user id < 1000 is forbidden') - -if username in BLACKLIST: - sys.exit('Changing password for user %s is forbidden (user blacklisted)' % + sys.exit('Changing the password for user %s is forbidden (system user)!' % username) -handle = subprocess.Popen('/usr/sbin/chpasswd', stdin = subprocess.PIPE) -handle.communicate('%s:%s' % (username, password)) +# set timeout +signal.alarm(TIMEOUT) +try: + handle = subprocess.Popen('/usr/sbin/chpasswd', stdin = subprocess.PIPE) + handle.communicate('%s:%s' % (username, password)) +except TimeoutException: + sys.exit('Timeout while changing password') +else: + # clear timeout + signal.alarm(0) sys.exit(handle.returncode) From 40b51b9dc96fadeafd944c4039107a01aa106f40 Mon Sep 17 00:00:00 2001 From: Joel Gerber Date: Mon, 10 Apr 2017 07:38:40 -0400 Subject: [PATCH 37/68] Add Log to STDOUT Feature (#5721) Primarily useful for PHP applications running under PHP-FPM which in turn is running within a Docker container. But also it is generally useful in any situation where you want to be able to send the logs directly to your terminal when debugging &etc. --- config/defaults.inc.php | 2 +- installer/config.php | 4 ++-- program/lib/Roundcube/rcube.php | 7 +++++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/config/defaults.inc.php b/config/defaults.inc.php index 767ee0b83..bd6937c15 100644 --- a/config/defaults.inc.php +++ b/config/defaults.inc.php @@ -66,7 +66,7 @@ $config['db_max_allowed_packet'] = null; // system error reporting, sum of: 1 = log; 4 = show $config['debug_level'] = 1; -// log driver: 'syslog' or 'file'. +// log driver: 'syslog', 'stdout' or 'file'. $config['log_driver'] = 'file'; // date format for log entries diff --git a/installer/config.php b/installer/config.php index 19a65bbca..75607187d 100644 --- a/installer/config.php +++ b/installer/config.php @@ -216,11 +216,11 @@ echo '
'; '_log_driver', 'id' => "cfglogdriver")); -$select_log_driver->add(array('file', 'syslog'), array('file', 'syslog')); +$select_log_driver->add(array('file', 'syslog', 'stdout'), array('file', 'syslog', 'stdout')); echo $select_log_driver->show($RCI->getprop('log_driver', 'file')); ?> -
How to do logging? 'file' - write to files in the log directory, 'syslog' - use the syslog facility.
+
How to do logging? 'file' - write to files in the log directory, 'syslog' - use the syslog facility, 'stdout' writes to the process' STDOUT file descriptor.
log_dir
diff --git a/program/lib/Roundcube/rcube.php b/program/lib/Roundcube/rcube.php index 173d2878b..7c9d5ccd7 100644 --- a/program/lib/Roundcube/rcube.php +++ b/program/lib/Roundcube/rcube.php @@ -1221,6 +1221,13 @@ class rcube return syslog($prio, $line); } + // write message with file name when configured to log to STDOUT + if ($log_driver == 'stdout') { + $stdout = "php://stdout"; + $line = "$name: $line"; + return file_put_contents($stdout, $line, FILE_APPEND) !== false; + } + // log_driver == 'file' is assumed here $line = sprintf("[%s]: %s\n", $date, $line); From 6ba41836b6fda8f7efa197837f95a632670bbb37 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 11 Apr 2017 08:53:34 +0200 Subject: [PATCH 38/68] Revert "extend plugin password to avoid sudo (use ssh instead calling chpasswd) (#5654)" This reverts commit 938dd4670bee27bd46fbf7d64cd0526eeb24669f. --- plugins/password/README | 19 +-- plugins/password/config.inc.php.dist | 26 +--- plugins/password/drivers/chpasswd.php | 45 +----- .../password/helpers/chpass-wrapper-expect.py | 143 ------------------ plugins/password/helpers/chpass-wrapper.py | 93 ++---------- 5 files changed, 27 insertions(+), 299 deletions(-) delete mode 100644 plugins/password/helpers/chpass-wrapper-expect.py diff --git a/plugins/password/README b/plugins/password/README index a27082b68..8f3305a03 100644 --- a/plugins/password/README +++ b/plugins/password/README @@ -262,9 +262,6 @@ Attached wrapper script (helpers/chpass-wrapper.py) restricts password changes to uids >= 1000 and can deny requests based on a blacklist. - - For a more secure setup see the notes in section sudo or use the new wrapper - chpass-wrapper-expect.py, for usage see there. 2.12. LDAP - no PEAR (ldap_simple) @@ -320,9 +317,7 @@ Driver to change user password via the 'expect' command. See config.inc.php.dist file for configuration description. - - For easyer and more secure of the expect script a new wrapper is - is provided: chpass-wrapper-expect.py, see there and sudo for setup + 2.18. Samba (smb) ----------------------------------- @@ -380,21 +375,11 @@ 4. Sudo setup ------------- - try to be more secure and use dovecot or pam methods - if this is not possible in your setup you can increase security by - sudo to a wrapper, where you can implement some security meassures - - 1. two wrappers are provided by this plugin: chpass-wrapper.py / chpass-wrapper_expect.py - 2. move wrapper out of the default location to a random place - 3. change permissons of wrapper to root:www 770 to avoid changes by user or webserver - 4. add some security meassures, i.e. limit userids where password can be changed - 5. allow webserver sudo for wrapper only (se below) - Some drivers that execute system commands (like chpasswd) require use of sudo command. Here's a sample for CentOS 7: # cat </etc/sudoers.d/99-roundcubemail - apache ALL=NOPASSWD://roundcube/wrapper/chpass-wrapper.py + apache ALL=NOPASSWD:/usr/sbin/chpasswd Defaults:apache !requiretty < -// allowing sudo chpasswd directly IMHO opens a security hole! -// any script on the webserver can change password for every user. -// $config['password_chpasswd_cmd'] = 'sudo /usr/sbin/chpasswd 2>/dev/null'; - -// try to be more secure and use other methods -// if this is not possible in your setup, you can increase security by -// sudo to a wrapper, where you can implement some security meassures: -// 1. a simple wraper is provided by this plugin: helpers/chpasswrapper.py -// 2. move wrapper out of default location to a random place -// 3. change permissons of wrapper to root:www 770 to avoid changes by user or webserver -// 4. add some security meassures, i.e. limit userids where password can be changed -// 5. allow webserver sudo for wrapper only (see README) -// $config['password_chpasswd_cmd'] = 'sudo //roundcube/wrapper/chpass-wrapper.py'; - -// IMHO the most flexible and secure method for users with interactive shell access is to use ssh with expect -// I modifed the chpasss driver to provide the old password needed, additionally it pass the script response in case of error. - -// 1. use my wrapper for the nice expect script provided by this plugin: helpers/chpass-wrapper-expect.py -// 2. move wrapper out of default location to a random place -// 3. change permissons of wrapper to root:www 770 to avoid changes by user or webserver -// 4. edit arguments to provide loginmethod and hostname. -// 5. remove sudo rules you may have applied (see README) -$config['password_chpasswd_cmd'] = '//roundcube/wrapper/chpass-wrapper-expect.py -ssh -host localhost'; +// Command to use (see "Sudo setup" in README) +$config['password_chpasswd_cmd'] = 'sudo /usr/sbin/chpasswd 2> /dev/null'; // XMail Driver options diff --git a/plugins/password/drivers/chpasswd.php b/plugins/password/drivers/chpasswd.php index 7c6b34b25..45c56dba3 100644 --- a/plugins/password/drivers/chpasswd.php +++ b/plugins/password/drivers/chpasswd.php @@ -8,9 +8,8 @@ * * For installation instructions please read the README file. * - * @version 3.0 + * @version 2.0 * @author Alex Cartwright - * @author rewrtitten by KaM * * Copyright (C) 2005-2013, The Roundcube Dev Team * @@ -35,43 +34,12 @@ class rcube_chpasswd_password $cmd = rcmail::get_instance()->config->get('password_chpasswd_cmd'); $username = $_SESSION['username']; - // change popen to proc_open to chatch responses from command - $desc = array( - 0 => array('pipe', 'r'), // 0 is STDIN for process - 1 => array('pipe', 'w'), // 1 is STDOUT for process - 2 => array('file', strtok(cmd, ' ') . '-error.log', 'a') // 2 is STDERR for process - ); + $handle = popen($cmd, "w"); + fwrite($handle, "$username:$newpass\n"); - // spawn the sub process - $process = proc_open($cmd, $desc, $pipes); - - // does sub prescess exist? - if (is_resource($process)) { - // send send username and new pass to chpasswd command / warpper - fwrite($pipes[0], "$username:$newpass\n"); - // new: send old passwd for expect sript, works also with chpasswd - fwrite($pipes[0], "$currpass\n"); - fclose($pipes[0]); - - // read response from sub process - $message = stream_get_contents($pipes[1]); - - // all done! Clean up - fclose($pipes[1]); - fclose($pipes[2]); - - if (!proc_close($process)) { - return PASSWORD_SUCCESS; - } - else { - // return response in case of error - return array( - 'code' => PASSWORD_ERROR, - 'message' => "
" . $message - ); - } + if (pclose($handle) == 0) { + return PASSWORD_SUCCESS; } - // sub process failed! else { rcube::raise_error(array( 'code' => 600, @@ -80,4 +48,7 @@ class rcube_chpasswd_password 'message' => "Password plugin: Unable to execute $cmd" ), true, false); } + + return PASSWORD_ERROR; + } } diff --git a/plugins/password/helpers/chpass-wrapper-expect.py b/plugins/password/helpers/chpass-wrapper-expect.py deleted file mode 100644 index 34cf6a57a..000000000 --- a/plugins/password/helpers/chpass-wrapper-expect.py +++ /dev/null @@ -1,143 +0,0 @@ -#!/usr/bin/env python -# -# use passwd-expect to login to host and change password -# you need to install expect on the webserver host -# i.e. "apt-get install expect" or "yast -i expect" -# -# you need an writeable .ssh dir in webserver homedir -# you can test this by do ssh user@host as webserver -# -# Parameter: -# -ssh use ssh for connetion to host (default) -# -host hostname connect to hostname (default localhost) -# -timeout # 0 - 99 time in s to wait for response -# -# all other parameters are passed to passwd-expect, see there. -# -""" -// 2017-02-13: Remarks by Kay Marquardt kay@rrr.de -// allowing sudo chpasswd directly opens a security hole! -// any script on the webserver can change password for every user, incl. root - -// IMHO the most flexible and secure method for users with interactive shell access is to use ssh with an expect script -// I modifed the chpasss driver to provide the old password needed, additionally it pass the script response in case of error. - -// 1. I wrote a wrapper (this script) for expect script provided by this plugin. -// 2. move wrapper out of default location to a random place -// 3. change permissons of wrapper to root:www 770 to avoid changes by user or webserver -// 4. I add some security meassures(see README) -// 5. remove sudo rules you may have applied (see README) -""" - -# path to ecpect and script name (has to be in the same dir as this script) -# "which expect" show the path to expect programm -expect = '/usr/bin/expect' -script = 'passwd-expect' - -TIMEOUT= 10 - -import os, sys, pwd, re -import subprocess, signal - - -# get args for script and extract hostname for us -hostname='localhost' -scriptargs = '' -count=1 -while(count < len(sys.argv)): - # get hostname - if sys.argv[count] == '-host': - hostname = sys.argv[count+1] - # local only args, do not pass - try: - if sys.argv[count] == '-timeout': - count += 2 - TIMEOUT=int(sys.argv[count-1]) - continue - except ValueError: - continue - # pass all other args - scriptargs += ' ' + sys.argv[count] - count += 1 - - -# read username:password\noldpasswd with timeout -class TimeoutException(Exception): # Custom exception class - pass -def timeout_handler(signum, frame): # Custom signal handler - raise TimeoutException -signal.signal(signal.SIGALRM, timeout_handler) - -# set timeout -signal.alarm(TIMEOUT) -try: - try: - username, password = sys.stdin.readline().split(':', 1) - oldpassw = sys.stdin.readline() - except ValueError, e: - sys.exit('Malformed input') - -except TimeoutException: - sys.exit('Timeout while reading input') -else: - # clear timeout - signal.alarm(0) - - -# add user to BLACKLIST and/or /etc/ftpusers to disable password change -BLACKLIST = [ - # add blacklisted users here - 'ftp', -] - -# add /etc/ftpusers to BLACKLIST if exist -try: - with open("/etc/ftpusers", "r") as ins: - for line in ins: - if line.startswith('#'): - continue - BLACKLIST.append(line.rstrip('\n')) - -except IOError: - # only catch error and continue - pass - - -# check if user is blacklisted for password change -if username in BLACKLIST: - sys.exit('Changing password for user %s is forbidden (user blacklisted)!' % - username) - - -# check if user exit and is allowed to chage password -if hostname == 'localhost': - try: - user = pwd.getpwnam(username) - except KeyError, e: - sys.exit('No such user: %s' % username) - - if user.pw_uid < 1000: - sys.exit('Changing the password for user %s is forbidden (system user)!' % - username) - - -path= os.path.dirname(os.path.realpath(sys.argv[0])) - -# script has to be in same directory -if scriptargs == '': scriptargs = ' -ssh -host ' + hostname -cmd = expect + ' ' + os.path.dirname(os.path.realpath(sys.argv[0])) + '/' + script + scriptargs + ' -log \|cat' - -# set timeout -signal.alarm(TIMEOUT) -try: - handle = subprocess.Popen( cmd, shell=True, stdin = subprocess.PIPE) - handle.communicate('%s\n%s\n%s' % (username, oldpassw.rstrip('\r\n'), password)) -except TimeoutException: - sys.exit('Timeout while changing password (wrong old password)') -else: - # clear timeout - signal.alarm(0) - - -sys.exit(handle.returncode) - diff --git a/plugins/password/helpers/chpass-wrapper.py b/plugins/password/helpers/chpass-wrapper.py index 428deef99..61bba849e 100644 --- a/plugins/password/helpers/chpass-wrapper.py +++ b/plugins/password/helpers/chpass-wrapper.py @@ -1,95 +1,32 @@ #!/usr/bin/env python -# -# extended wrapper to /user/sbin/chpasswd -# - file based blacklist (/etc/ftpusers) -# - timeout for reading and writing -TIMEOUT= 10 +import sys +import pwd +import subprocess -import os, sys, pwd, re -import subprocess, signal - - -# get args for script -scriptargs = '' -count=1 -while(count < len(sys.argv)): - # local only args, do not pass - try: - if sys.argv[count] == '-timeout': - count += 2 - TIMEOUT=int(sys.argv[count-1]) - continue - except ValueError: - continue - # pass all other args - scriptargs += ' ' + sys.argv[count] - count += 1 - -# read username:password\noldpasswd with timeout -class TimeoutException(Exception): # Custom exception class - pass -def timeout_handler(signum, frame): # Custom signal handler - raise TimeoutException -signal.signal(signal.SIGALRM, timeout_handler) - -# set timeout -signal.alarm(TIMEOUT) -try: - try: - username, password = sys.stdin.readline().split(':', 1) - except ValueError, e: - sys.exit('Malformed input') - -except TimeoutException: - sys.exit('Timeout while reading input') -else: - # clear timeout - signal.alarm(0) - -# add user to BLACKLIST and/or /etc/ftpusers to disable password change -BLACKLIST = [ +BLACKLIST = ( # add blacklisted users here - 'ftp', -] + #'user1', +) -# add /etc/ftpusers to BLACKLIST if exist try: - with open("/etc/ftpusers", "r") as ins: - for line in ins: - if line.startswith('#'): - continue - BLACKLIST.append(line.rstrip('\n')) - -except IOError: - # only catch error and continue - pass + username, password = sys.stdin.readline().split(':', 1) +except ValueError, e: + sys.exit('Malformed input') -# check if user is blacklisted for password change -if username in BLACKLIST: - sys.exit('Changing password for user %s is forbidden (user blacklisted)!' % - username) - - -# check if user exit and is allowed to chage password try: user = pwd.getpwnam(username) except KeyError, e: sys.exit('No such user: %s' % username) if user.pw_uid < 1000: - sys.exit('Changing the password for user %s is forbidden (system user)!' % + sys.exit('Changing the password for user id < 1000 is forbidden') + +if username in BLACKLIST: + sys.exit('Changing password for user %s is forbidden (user blacklisted)' % username) -# set timeout -signal.alarm(TIMEOUT) -try: - handle = subprocess.Popen('/usr/sbin/chpasswd', stdin = subprocess.PIPE) - handle.communicate('%s:%s' % (username, password)) -except TimeoutException: - sys.exit('Timeout while changing password') -else: - # clear timeout - signal.alarm(0) +handle = subprocess.Popen('/usr/sbin/chpasswd', stdin = subprocess.PIPE) +handle.communicate('%s:%s' % (username, password)) sys.exit(handle.returncode) From 68396698eccc124e1238454ee02940c6fcdb16f5 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 11 Apr 2017 08:55:36 +0200 Subject: [PATCH 39/68] Update changelog --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index c8f9d7567..49851229d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG Roundcube Webmail =========================== +- Support logging to php://stdout (#5721) - Add support for DelSp=Yes in format=flowed messages (#5702) - Update to jQuery 3.2.1 - Update to TinyMCE 4.5.6 From 3e53ac74912f38731d45825ff718afd72a511c0d Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 11 Apr 2017 13:12:20 +0200 Subject: [PATCH 40/68] Remove note about mail() function --- program/steps/mail/search_contacts.inc | 2 +- program/steps/mail/sendmail.inc | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/program/steps/mail/search_contacts.inc b/program/steps/mail/search_contacts.inc index e3f8ced22..a249c922f 100644 --- a/program/steps/mail/search_contacts.inc +++ b/program/steps/mail/search_contacts.inc @@ -12,7 +12,7 @@ | See the README file for a full license statement. | | | | PURPOSE: | - | Search contacts from the address book widget | + | Search contacts from the address book widget | | | +-----------------------------------------------------------------------+ | Author: Thomas Bruederli | diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc index afaa7ac84..ce7020a60 100644 --- a/program/steps/mail/sendmail.inc +++ b/program/steps/mail/sendmail.inc @@ -12,9 +12,7 @@ | See the README file for a full license statement. | | | | PURPOSE: | - | Compose a new mail message with all headers and attachments | - | and send it using the PEAR::Net_SMTP class or with PHP mail() | - | | + | Compose a new mail message and send it or store as draft | +-----------------------------------------------------------------------+ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ From 3bbe218b83a14c51c756aed9911617f3bdf3e2bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20Bj=C3=B8rnson-Langen?= Date: Tue, 18 Apr 2017 10:17:18 +0200 Subject: [PATCH 41/68] Password plugin: Added missing default values (#5726) * Added correct default values for password plugin (ldap backends only) * Sync default values in config.inc.php.dist with code. --- plugins/password/config.inc.php.dist | 4 ++-- plugins/password/drivers/gearman.php | 2 +- plugins/password/drivers/ldap.php | 18 +++++++++--------- plugins/password/drivers/ldap_simple.php | 11 ++++++----- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/plugins/password/config.inc.php.dist b/plugins/password/config.inc.php.dist index 75777e47d..ffcbf6639 100644 --- a/plugins/password/config.inc.php.dist +++ b/plugins/password/config.inc.php.dist @@ -178,7 +178,7 @@ $config['password_ldap_version'] = '3'; $config['password_ldap_basedn'] = 'dc=exemple,dc=com'; // LDAP connection method -// There is two connection method for changing a user's LDAP password. +// There are two connection methods for changing a user's LDAP password. // 'user': use user credential (recommended, require password_confirm_current=true) // 'admin': use admin credential (this mode require password_ldap_adminDN and password_ldap_adminPW) // Default: 'user' @@ -448,7 +448,7 @@ $config['password_expect_params'] = ''; // %t - hostname without the first part // %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part) $config['password_smb_host'] = 'localhost'; -// Location of smbpasswd binary +// Location of smbpasswd binary (default: /usr/bin/smbpasswd) $config['password_smb_cmd'] = '/usr/bin/smbpasswd'; // gearman driver options diff --git a/plugins/password/drivers/gearman.php b/plugins/password/drivers/gearman.php index 983aee046..f4074f682 100644 --- a/plugins/password/drivers/gearman.php +++ b/plugins/password/drivers/gearman.php @@ -39,7 +39,7 @@ class rcube_gearman_password ); $gmc = new GearmanClient(); - $gmc->addServer($rcmail->config->get('password_gearman_host')); + $gmc->addServer($rcmail->config->get('password_gearman_host', 'localhost')); $result = $gmc->doNormal('setPassword', json_encode($payload)); $success = json_decode($result); diff --git a/plugins/password/drivers/ldap.php b/plugins/password/drivers/ldap.php index c605242e3..411de2582 100644 --- a/plugins/password/drivers/ldap.php +++ b/plugins/password/drivers/ldap.php @@ -65,10 +65,10 @@ class rcube_ldap_password 'binddn' => $binddn, 'bindpw' => $bindpw, 'basedn' => $rcmail->config->get('password_ldap_basedn'), - 'host' => $rcmail->config->get('password_ldap_host'), - 'port' => $rcmail->config->get('password_ldap_port'), + 'host' => $rcmail->config->get('password_ldap_host', 'localhost'), + 'port' => $rcmail->config->get('password_ldap_port', '389'), 'starttls' => $rcmail->config->get('password_ldap_starttls'), - 'version' => $rcmail->config->get('password_ldap_version'), + 'version' => $rcmail->config->get('password_ldap_version', '3'), ); // Connecting using the configuration array @@ -79,13 +79,13 @@ class rcube_ldap_password return PASSWORD_CONNECT_ERROR; } - $force = $rcmail->config->get('password_ldap_force_replace'); - $pwattr = $rcmail->config->get('password_ldap_pwattr'); + $force = $rcmail->config->get('password_ldap_force_replace', true); + $pwattr = $rcmail->config->get('password_ldap_pwattr', 'userPassword'); $lchattr = $rcmail->config->get('password_ldap_lchattr'); $smbpwattr = $rcmail->config->get('password_ldap_samba_pwattr'); $smblchattr = $rcmail->config->get('password_ldap_samba_lchattr'); $samba = $rcmail->config->get('password_ldap_samba'); - $encodage = $rcmail->config->get('password_ldap_encodage'); + $encodage = $rcmail->config->get('password_ldap_encodage', 'crypt'); // Support multiple userPassword values where desired. // multiple encodings can be specified separated by '+' (e.g. "cram-md5+ssha") @@ -161,10 +161,10 @@ class rcube_ldap_password $ldapConfig = array ( 'basedn' => $rcmail->config->get('password_ldap_basedn'), - 'host' => $rcmail->config->get('password_ldap_host'), - 'port' => $rcmail->config->get('password_ldap_port'), + 'host' => $rcmail->config->get('password_ldap_host', 'localhost'), + 'port' => $rcmail->config->get('password_ldap_port', '389'), 'starttls' => $rcmail->config->get('password_ldap_starttls'), - 'version' => $rcmail->config->get('password_ldap_version'), + 'version' => $rcmail->config->get('password_ldap_version', '3'), ); // allow anonymous searches diff --git a/plugins/password/drivers/ldap_simple.php b/plugins/password/drivers/ldap_simple.php index 5b8220577..e16aa505c 100644 --- a/plugins/password/drivers/ldap_simple.php +++ b/plugins/password/drivers/ldap_simple.php @@ -37,8 +37,8 @@ class rcube_ldap_simple_password $this->debug = $rcmail->config->get('ldap_debug'); - $ldap_host = $rcmail->config->get('password_ldap_host'); - $ldap_port = $rcmail->config->get('password_ldap_port'); + $ldap_host = $rcmail->config->get('password_ldap_host', 'localhost'); + $ldap_port = $rcmail->config->get('password_ldap_port', '389'); $this->_debug("C: Connect to $ldap_host:$ldap_port"); @@ -59,7 +59,8 @@ class rcube_ldap_simple_password $this->_debug("S: OK"); // Set protocol version - ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, $rcmail->config->get('password_ldap_version')); + ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, + $rcmail->config->get('password_ldap_version', '3')); // Start TLS if ($rcmail->config->get('password_ldap_starttls')) { @@ -106,11 +107,11 @@ class rcube_ldap_simple_password } $lchattr = $rcmail->config->get('password_ldap_lchattr'); - $pwattr = $rcmail->config->get('password_ldap_pwattr'); + $pwattr = $rcmail->config->get('password_ldap_pwattr', 'userPassword'); $smbpwattr = $rcmail->config->get('password_ldap_samba_pwattr'); $smblchattr = $rcmail->config->get('password_ldap_samba_lchattr'); $samba = $rcmail->config->get('password_ldap_samba'); - $pass_mode = $rcmail->config->get('password_ldap_encodage'); + $pass_mode = $rcmail->config->get('password_ldap_encodage', 'crypt'); $crypted_pass = password::hash_password($passwd, $pass_mode); // Support password_ldap_samba option for backward compat. From 01656221a41b73623456dcafb42924eff38406ae Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Wed, 19 Apr 2017 13:13:07 +0200 Subject: [PATCH 42/68] Update localization --- plugins/acl/localization/fy_NL.inc | 46 +- plugins/acl/localization/kab.inc | 49 ++ plugins/acl/localization/sq_AL.inc | 10 +- plugins/acl/localization/sr_CS.inc | 4 + plugins/acl/localization/zh_TW.inc | 65 ++- plugins/archive/localization/en_GB.inc | 1 + plugins/archive/localization/fy_NL.inc | 32 ++ plugins/archive/localization/ia.inc | 1 + plugins/archive/localization/kab.inc | 26 + plugins/archive/localization/lt_LT.inc | 1 + plugins/archive/localization/nl_NL.inc | 1 + plugins/archive/localization/sr_CS.inc | 3 +- plugins/archive/localization/zh_TW.inc | 13 +- .../localization/fy_NL.inc | 20 + .../localization/zh_TW.inc | 4 +- plugins/enigma/localization/cy_GB.inc | 2 + plugins/enigma/localization/de_DE.inc | 2 + plugins/enigma/localization/el_GR.inc | 1 + plugins/enigma/localization/en_GB.inc | 11 + plugins/enigma/localization/es_ES.inc | 2 + plugins/enigma/localization/he_IL.inc | 2 + plugins/enigma/localization/id_ID.inc | 3 + plugins/enigma/localization/ja_JP.inc | 2 + plugins/enigma/localization/ko_KR.inc | 2 + plugins/enigma/localization/lt_LT.inc | 9 +- plugins/enigma/localization/nl_NL.inc | 3 + plugins/enigma/localization/pl_PL.inc | 2 + plugins/enigma/localization/ru_RU.inc | 2 + plugins/enigma/localization/sk_SK.inc | 2 + plugins/enigma/localization/sq_AL.inc | 24 +- plugins/enigma/localization/sv_SE.inc | 4 +- plugins/enigma/localization/zh_TW.inc | 123 +++++ plugins/help/localization/fy_NL.inc | 1 + plugins/help/localization/sq_AL.inc | 2 +- plugins/help/localization/zh_TW.inc | 3 +- .../hide_blockquote/localization/fy_NL.inc | 21 + .../hide_blockquote/localization/zh_TW.inc | 2 +- plugins/managesieve/localization/cs_CZ.inc | 2 +- plugins/managesieve/localization/de_CH.inc | 2 + plugins/managesieve/localization/en_GB.inc | 3 + plugins/managesieve/localization/fi_FI.inc | 24 + plugins/managesieve/localization/he_IL.inc | 2 + plugins/managesieve/localization/ia.inc | 9 + plugins/managesieve/localization/id_ID.inc | 2 + plugins/managesieve/localization/ko_KR.inc | 8 + plugins/managesieve/localization/lt_LT.inc | 6 + plugins/managesieve/localization/nl_NL.inc | 2 + plugins/managesieve/localization/pl_PL.inc | 4 +- plugins/managesieve/localization/sq_AL.inc | 24 +- plugins/managesieve/localization/sv_SE.inc | 12 +- plugins/managesieve/localization/zh_TW.inc | 187 ++++--- plugins/markasjunk/localization/fy_NL.inc | 2 + plugins/markasjunk/localization/sq_AL.inc | 6 +- .../new_user_dialog/localization/fy_NL.inc | 20 + .../new_user_dialog/localization/zh_TW.inc | 4 +- .../newmail_notifier/localization/fr_FR.inc | 2 +- .../newmail_notifier/localization/fy_NL.inc | 10 +- .../newmail_notifier/localization/sq_AL.inc | 2 +- .../newmail_notifier/localization/zh_TW.inc | 14 +- plugins/password/localization/cs_CZ.inc | 2 +- plugins/password/localization/de_CH.inc | 4 + plugins/password/localization/fr_FR.inc | 8 +- plugins/password/localization/fy_NL.inc | 19 + plugins/password/localization/ia.inc | 4 + plugins/password/localization/lt_LT.inc | 4 + plugins/password/localization/nl_NL.inc | 4 + plugins/password/localization/sq_AL.inc | 4 +- plugins/password/localization/sr_CS.inc | 5 + plugins/password/localization/zh_TW.inc | 15 +- .../localization/fy_NL.inc | 19 + .../localization/zh_TW.inc | 2 +- plugins/userinfo/localization/fy_NL.inc | 3 + .../vcard_attachments/localization/cy_GB.inc | 2 + .../vcard_attachments/localization/de_CH.inc | 2 + .../vcard_attachments/localization/de_DE.inc | 2 + .../vcard_attachments/localization/el_GR.inc | 1 + .../vcard_attachments/localization/en_GB.inc | 2 + .../vcard_attachments/localization/es_ES.inc | 2 + .../vcard_attachments/localization/fr_FR.inc | 6 +- .../vcard_attachments/localization/fy_NL.inc | 22 + .../vcard_attachments/localization/he_IL.inc | 2 + .../vcard_attachments/localization/hu_HU.inc | 2 + plugins/vcard_attachments/localization/ia.inc | 2 + .../vcard_attachments/localization/id_ID.inc | 2 + .../vcard_attachments/localization/it_IT.inc | 6 +- .../vcard_attachments/localization/ja_JP.inc | 2 + .../vcard_attachments/localization/ko_KR.inc | 2 + .../vcard_attachments/localization/lt_LT.inc | 2 + .../vcard_attachments/localization/nl_NL.inc | 2 + .../vcard_attachments/localization/pl_PL.inc | 2 + .../vcard_attachments/localization/pt_PT.inc | 2 + .../vcard_attachments/localization/ru_RU.inc | 2 + .../vcard_attachments/localization/sk_SK.inc | 2 + .../vcard_attachments/localization/sq_AL.inc | 4 +- .../vcard_attachments/localization/sv_SE.inc | 2 + .../vcard_attachments/localization/tr_TR.inc | 2 + .../vcard_attachments/localization/zh_TW.inc | 4 +- plugins/zipdownload/localization/fy_NL.inc | 4 + program/localization/ar_SA/messages.inc | 1 - program/localization/ast/messages.inc | 1 - program/localization/az_AZ/messages.inc | 1 - program/localization/be_BE/messages.inc | 1 - program/localization/bg_BG/messages.inc | 1 - program/localization/bn_BD/labels.inc | 13 + program/localization/bn_BD/messages.inc | 1 - program/localization/br/messages.inc | 1 - program/localization/bs_BA/messages.inc | 1 - program/localization/ca_ES/messages.inc | 1 - program/localization/cs_CZ/messages.inc | 1 - program/localization/cy_GB/labels.inc | 1 + program/localization/cy_GB/messages.inc | 2 +- program/localization/da_DK/messages.inc | 1 - program/localization/de_CH/labels.inc | 10 + program/localization/de_CH/messages.inc | 6 +- program/localization/de_DE/messages.inc | 2 +- program/localization/el_GR/labels.inc | 4 + program/localization/el_GR/messages.inc | 2 +- program/localization/en_CA/messages.inc | 1 - program/localization/en_GB/labels.inc | 11 + program/localization/en_GB/messages.inc | 7 +- program/localization/eo/messages.inc | 1 - program/localization/es_419/messages.inc | 1 - program/localization/es_AR/messages.inc | 1 - program/localization/es_ES/labels.inc | 1 + program/localization/es_ES/messages.inc | 2 +- program/localization/et_EE/labels.inc | 27 + program/localization/et_EE/messages.inc | 1 - program/localization/eu_ES/messages.inc | 1 - program/localization/fa_AF/messages.inc | 1 - program/localization/fa_IR/messages.inc | 1 - program/localization/fi_FI/messages.inc | 1 - program/localization/fo_FO/messages.inc | 1 - program/localization/fr_FR/labels.inc | 4 +- program/localization/fr_FR/messages.inc | 6 +- program/localization/fy_NL/labels.inc | 498 +++++++++++++++++- program/localization/fy_NL/messages.inc | 195 ++++++- program/localization/ga_IE/messages.inc | 1 - program/localization/gl_ES/messages.inc | 1 - program/localization/he_IL/labels.inc | 6 + program/localization/he_IL/messages.inc | 4 +- program/localization/hi_IN/messages.inc | 1 - program/localization/hr_HR/messages.inc | 1 - program/localization/hu_HU/messages.inc | 2 +- program/localization/hy_AM/messages.inc | 1 - program/localization/ia/labels.inc | 24 +- program/localization/ia/messages.inc | 12 +- program/localization/id_ID/labels.inc | 5 + program/localization/id_ID/messages.inc | 6 +- program/localization/index.inc | 1 + program/localization/is_IS/messages.inc | 1 - program/localization/it_IT/labels.inc | 67 +-- program/localization/it_IT/messages.inc | 65 +-- program/localization/ja_JP/messages.inc | 2 +- program/localization/ka_GE/messages.inc | 1 - program/localization/km_KH/messages.inc | 1 - program/localization/ko_KR/labels.inc | 6 + program/localization/ko_KR/messages.inc | 5 +- program/localization/ku/messages.inc | 1 - program/localization/lb_LU/messages.inc | 1 - program/localization/lt_LT/labels.inc | 10 + program/localization/lt_LT/messages.inc | 6 +- program/localization/lv_LV/messages.inc | 1 - program/localization/mk_MK/messages.inc | 1 - program/localization/mr_IN/messages.inc | 1 - program/localization/ms_MY/messages.inc | 1 - program/localization/nb_NO/messages.inc | 1 - program/localization/ne_NP/messages.inc | 1 - program/localization/nl_BE/messages.inc | 1 - program/localization/nl_NL/labels.inc | 10 + program/localization/nl_NL/messages.inc | 6 +- program/localization/nn_NO/messages.inc | 1 - program/localization/pl_PL/messages.inc | 1 - program/localization/ps/messages.inc | 1 - program/localization/pt_BR/messages.inc | 1 - program/localization/pt_PT/messages.inc | 2 +- program/localization/ro_RO/messages.inc | 1 - program/localization/ru_RU/labels.inc | 1 + program/localization/ru_RU/messages.inc | 2 +- program/localization/si_LK/messages.inc | 1 - program/localization/sk_SK/labels.inc | 1 + program/localization/sk_SK/messages.inc | 2 +- program/localization/sl_SI/messages.inc | 1 - program/localization/sq_AL/labels.inc | 21 +- program/localization/sq_AL/messages.inc | 40 +- program/localization/sr_CS/labels.inc | 30 ++ program/localization/sr_CS/messages.inc | 32 +- program/localization/sv_SE/labels.inc | 1 + program/localization/sv_SE/messages.inc | 2 +- program/localization/ta_IN/messages.inc | 1 - program/localization/th_TH/messages.inc | 1 - program/localization/tr_TR/labels.inc | 104 ++-- program/localization/tr_TR/messages.inc | 8 +- program/localization/uk_UA/messages.inc | 1 - program/localization/vi_VN/messages.inc | 1 - program/localization/zh_CN/messages.inc | 1 - program/localization/zh_TW/labels.inc | 280 ++++++---- program/localization/zh_TW/messages.inc | 188 ++++--- 197 files changed, 2198 insertions(+), 620 deletions(-) create mode 100644 plugins/acl/localization/kab.inc create mode 100644 plugins/archive/localization/fy_NL.inc create mode 100644 plugins/archive/localization/kab.inc create mode 100644 plugins/attachment_reminder/localization/fy_NL.inc create mode 100644 plugins/enigma/localization/zh_TW.inc create mode 100644 plugins/hide_blockquote/localization/fy_NL.inc create mode 100644 plugins/new_user_dialog/localization/fy_NL.inc create mode 100644 plugins/subscriptions_option/localization/fy_NL.inc create mode 100644 plugins/vcard_attachments/localization/fy_NL.inc diff --git a/plugins/acl/localization/fy_NL.inc b/plugins/acl/localization/fy_NL.inc index aba204945..38e3bb477 100644 --- a/plugins/acl/localization/fy_NL.inc +++ b/plugins/acl/localization/fy_NL.inc @@ -15,9 +15,47 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ */ +$labels['sharing'] = 'Dielen'; +$labels['myrights'] = 'Tagong Rjochten'; $labels['username'] = 'Brûker:'; -$labels['acldelete'] = 'Fuortsmite'; -$labels['shortacld'] = 'Fuortsmite'; -$labels['shortaclt'] = 'Fuortsmite'; -$labels['shortacldelete'] = 'Fuortsmite'; +$labels['advanced'] = 'Avansearre modus'; +$labels['newuser'] = 'Ynfier taheakje'; +$labels['editperms'] = 'Bewurkje tagongsrjochten'; +$labels['actions'] = 'Tagong aksjes...'; +$labels['anyone'] = 'Alle brûkers (eltsenien)'; +$labels['anonymous'] = 'Gasten (anonym)'; +$labels['identifier'] = 'Identifikator'; +$labels['acll'] = 'Opsykje'; +$labels['aclr'] = 'Lêzen berjochten'; +$labels['acls'] = 'Bewarje Sjoen steat'; +$labels['aclw'] = 'Skriuw flaggen'; +$labels['acli'] = 'Ynfoegje (Kopiearje yn)'; +$labels['aclp'] = 'Pleatse'; +$labels['aclc'] = 'Underlizzende mappen oanmeitsje'; +$labels['aclk'] = 'Underlizzende mappen oanmeitsje'; +$labels['acld'] = 'Berjochten wiskje'; +$labels['aclt'] = 'Berjochten wiskje'; +$labels['aclx'] = 'Map ferwiderje'; +$labels['acla'] = 'Beheare'; +$labels['aclfull'] = 'Folsleine kontrôle'; +$labels['aclother'] = 'Oars'; +$labels['aclread'] = 'Lêze'; +$labels['aclwrite'] = 'Skriuwe'; +$labels['acldelete'] = 'Ferwiderje'; +$labels['shortacll'] = 'Opsykje'; +$labels['shortaclr'] = 'Lêze'; +$labels['shortacls'] = 'Hâlde'; +$labels['shortaclw'] = 'Skriuwe'; +$labels['shortacli'] = 'Ynfoegje'; +$labels['shortaclp'] = 'Pleatse'; +$labels['shortaclc'] = 'Oanmeitsje'; +$labels['shortaclk'] = 'Oanmeitsje'; +$labels['shortacld'] = 'Ferwiderje'; +$labels['shortaclt'] = 'Ferwiderje'; +$labels['shortaclx'] = 'Map ferwiderje'; +$labels['shortacla'] = 'Beheare'; +$labels['shortaclother'] = 'Oars'; +$labels['shortaclread'] = 'Lêze'; +$labels['shortaclwrite'] = 'Skriuwe'; +$labels['shortacldelete'] = 'Ferwiderje'; ?> diff --git a/plugins/acl/localization/kab.inc b/plugins/acl/localization/kab.inc new file mode 100644 index 000000000..fba321a01 --- /dev/null +++ b/plugins/acl/localization/kab.inc @@ -0,0 +1,49 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Beṭṭu'; +$labels['myrights'] = 'Izerfan n unekcum'; +$labels['username'] = 'Aseqdac:'; +$labels['advanced'] = 'Askar leqqayen'; +$labels['newuser'] = 'Rnu anekcam'; +$labels['editperms'] = 'Ẓreg tisirag'; +$labels['actions'] = 'Tigawin n izerfan n unekcum...'; +$labels['anyone'] = 'Akk iseqdacen (yal yiwen)'; +$labels['anonymous'] = 'Inebgawen (udrigen)'; +$labels['identifier'] = 'Sulu'; +$labels['acll'] = 'Nadi'; +$labels['aclr'] = 'Ɣer iznan'; +$labels['aclp'] = 'Aru izen'; +$labels['aclc'] = 'Rnu ikaramen isnawanen'; +$labels['aclk'] = 'Rnu ikaramen isnawanen'; +$labels['acld'] = 'Kkes iznan'; +$labels['aclt'] = 'Ɣer iznan'; +$labels['acle'] = 'Sfeḍ'; +$labels['aclx'] = 'Kkes akaram'; +$labels['acla'] = 'Sefrek'; +$labels['acln'] = 'Rnu tizmilin i yiznan'; +$labels['shortaclk'] = 'Rnu'; +$labels['shortacld'] = 'Kkes'; +$labels['shortaclt'] = 'Kkes'; +$labels['shortacla'] = 'Sefrek'; +$labels['shortacln'] = 'Rnu tazmilt'; +$labels['shortaclother'] = 'Ayen-nniḍen'; +$labels['shortaclread'] = 'Ɣeṛ'; +$labels['shortaclwrite'] = 'Aru'; +$labels['shortacldelete'] = 'Kkes'; +$messages['deleting'] = 'Kkes akk izerfan n unekcum...'; +?> diff --git a/plugins/acl/localization/sq_AL.inc b/plugins/acl/localization/sq_AL.inc index 41ecc9566..d70c87800 100644 --- a/plugins/acl/localization/sq_AL.inc +++ b/plugins/acl/localization/sq_AL.inc @@ -87,10 +87,10 @@ $messages['saving'] = 'Po ruhen të drejtash hyrjeje…'; $messages['updatesuccess'] = 'U ndryshuan me sukses të drejta hyrjeje'; $messages['deletesuccess'] = 'U fshinë me sukses të drejta hyrjeje'; $messages['createsuccess'] = 'U shtuan me sukses të drejta hyrjeje'; -$messages['updateerror'] = 'I pazoti të përditësojë të drejta hyrjeje'; -$messages['deleteerror'] = 'I pazoti të fshijë të drejta hyrjeje'; -$messages['createerror'] = 'I pazoti të shtojë të drejta hyrjeje'; +$messages['updateerror'] = 'S’arrihet të përditësohen të drejta hyrjeje'; +$messages['deleteerror'] = 'S’arrihet të fshihen të drejta hyrjeje'; +$messages['createerror'] = 'S’arrihet të shtohen të drejta hyrjeje'; $messages['deleteconfirm'] = 'Jeni i sigurt, doni t’i hiqni të drejta hyrjeje përdoruesit(ve) të përzgjedhur?'; -$messages['norights'] = 'Nuk janë specifikuar të drejta!'; -$messages['nouser'] = 'Nuk është specifikuar emër përdoruesi!'; +$messages['norights'] = 'S’janë specifikuar të drejta!'; +$messages['nouser'] = 'S’është specifikuar emër përdoruesi!'; ?> diff --git a/plugins/acl/localization/sr_CS.inc b/plugins/acl/localization/sr_CS.inc index 38e335a3c..4bb294d8f 100644 --- a/plugins/acl/localization/sr_CS.inc +++ b/plugins/acl/localization/sr_CS.inc @@ -45,6 +45,10 @@ $labels['shortaclr'] = 'Прочитана'; $labels['shortacls'] = 'Задржи'; $labels['shortaclw'] = 'Пиши'; $labels['shortacli'] = 'Убаци'; +$labels['shortaclc'] = 'Направи'; +$labels['shortaclk'] = 'Направи'; +$labels['shortacld'] = 'Обриши'; +$labels['shortaclt'] = 'Обриши'; $labels['shortaclother'] = 'Друго'; $labels['shortaclread'] = 'Читање'; $labels['shortaclwrite'] = 'Упис'; diff --git a/plugins/acl/localization/zh_TW.inc b/plugins/acl/localization/zh_TW.inc index d9c5d9770..c7f0488ba 100644 --- a/plugins/acl/localization/zh_TW.inc +++ b/plugins/acl/localization/zh_TW.inc @@ -15,29 +15,32 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ */ -$labels['sharing'] = '分享'; +$labels['sharing'] = '共享'; $labels['myrights'] = '存取權限'; $labels['username'] = '使用者:'; +$labels['advanced'] = '進階模式'; $labels['newuser'] = '新增項目'; -$labels['actions'] = '權限設定'; -$labels['anyone'] = '所有使用者 (anyone)'; -$labels['anonymous'] = '訪客 (anonymous)'; -$labels['identifier'] = '識別'; +$labels['editperms'] = '編輯權限'; +$labels['actions'] = '權限設定...'; +$labels['anyone'] = '所有使用者 (任何人)'; +$labels['anonymous'] = '訪客 (匿名)'; +$labels['identifier'] = '識別碼'; $labels['acll'] = '尋找'; -$labels['aclr'] = '讀取訊息'; +$labels['aclr'] = '讀取郵件'; $labels['acls'] = '保持上線狀態'; -$labels['aclw'] = '寫入標幟'; -$labels['acli'] = '插入(複製到這裡)'; +$labels['aclw'] = '寫入旗標'; +$labels['acli'] = '插入 (複製到這裡)'; $labels['aclp'] = '發表'; $labels['aclc'] = '建立子資料夾'; $labels['aclk'] = '建立子資料夾'; -$labels['acld'] = '刪除訊息'; -$labels['aclt'] = '刪除訊息'; +$labels['acld'] = '刪除郵件'; +$labels['aclt'] = '刪除郵件'; $labels['acle'] = '刪去'; $labels['aclx'] = '刪除資料夾'; $labels['acla'] = '管理者'; +$labels['acln'] = '評注郵件'; $labels['aclfull'] = '完全控制'; -$labels['aclother'] = '其它'; +$labels['aclother'] = '其他'; $labels['aclread'] = '讀取'; $labels['aclwrite'] = '寫入'; $labels['acldelete'] = '刪除'; @@ -54,27 +57,33 @@ $labels['shortaclt'] = '刪除'; $labels['shortacle'] = '刪去'; $labels['shortaclx'] = '資料夾刪除'; $labels['shortacla'] = '管理者'; -$labels['shortaclother'] = '其它'; +$labels['shortacln'] = '評注'; +$labels['shortaclother'] = '其他'; $labels['shortaclread'] = '讀取'; $labels['shortaclwrite'] = '寫入'; $labels['shortacldelete'] = '刪除'; -$labels['longacll'] = '此資料夾權限可以訂閱和瀏覽'; -$labels['longaclr'] = '資料夾能被打開與讀取'; -$labels['longacls'] = '能修改訊息標幟'; -$labels['longaclw'] = '內容旗標和關鍵字可以變更,不包含已檢視和刪除的'; -$labels['longacli'] = '訊息能寫入或複製到資料夾'; -$labels['longaclp'] = '訊息能被投遞到這個資料夾'; -$labels['longaclc'] = '這個資料夾之下可以建子資料夾(或重新命名)'; -$labels['longaclk'] = '這個資料夾之下可以建子資料夾(或重新命名)'; -$labels['longacld'] = '能修改訊息刪除標幟'; -$labels['longaclt'] = '能修改訊息刪除標幟'; -$labels['longacle'] = '能抹除訊息'; -$labels['longaclx'] = '資料夾能被刪除或重新命名'; +$labels['longacll'] = '此資料夾可以觀看和訂閱'; +$labels['longaclr'] = '此資料夾可以開啟並讀取'; +$labels['longacls'] = '能修改郵件旗標'; +$labels['longaclw'] = '郵件旗標和關鍵字可以變更,不包含已檢視和刪除的'; +$labels['longacli'] = '郵件能寫入或複製到資料夾'; +$labels['longaclp'] = '郵件能發表到此資料夾'; +$labels['longaclc'] = '這個資料夾之下可以建子資料夾 (或重新命名)'; +$labels['longaclk'] = '這個資料夾之下可以建子資料夾 (或重新命名)'; +$labels['longacld'] = '能修改郵件刪除旗標'; +$labels['longaclt'] = '能修改郵件刪除旗標'; +$labels['longacle'] = '能刪去郵件'; +$labels['longaclx'] = '資料夾能刪除或重新命名'; $labels['longacla'] = '能變更資料夾權限'; +$labels['longacln'] = '郵件共享的元資料 (評注) 能更改'; $labels['longaclfull'] = '完全控制包含資料夾管理'; -$labels['longaclread'] = '資料夾能被打開與讀取'; -$labels['longaclwrite'] = '信件可以被標記、編寫或複製到資料夾'; -$labels['longacldelete'] = '訊息能被刪除'; +$labels['longaclread'] = '資料夾能開啟並讀取'; +$labels['longaclwrite'] = '郵件可以標記、寫入或複製到資料夾'; +$labels['longacldelete'] = '郵件能刪除'; +$labels['longaclother'] = '其他權限'; +$labels['ariasummaryacltable'] = '權限清單'; +$labels['arialabelaclactions'] = '清單動作'; +$labels['arialabelaclform'] = '權限表單'; $messages['deleting'] = '刪除權限...'; $messages['saving'] = '儲存權限...'; $messages['updatesuccess'] = '權限變更完成'; @@ -83,7 +92,7 @@ $messages['createsuccess'] = '權限新增完成'; $messages['updateerror'] = '無法更新權限'; $messages['deleteerror'] = '無法刪除權限'; $messages['createerror'] = '無法新增權限'; -$messages['deleteconfirm'] = '您確定要刪除所選取使用者的權限嗎?'; +$messages['deleteconfirm'] = '確定要刪除所選使用者的權限嗎?'; $messages['norights'] = '沒有指定任何權限'; $messages['nouser'] = '沒有指定用戶名稱'; ?> diff --git a/plugins/archive/localization/en_GB.inc b/plugins/archive/localization/en_GB.inc index 06b78fb2a..a6a5f6d80 100644 --- a/plugins/archive/localization/en_GB.inc +++ b/plugins/archive/localization/en_GB.inc @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'Month (e.g. Archive/2012/06)'; $labels['archivetypefolder'] = 'Original folder'; $labels['archivetypesender'] = 'Sender email'; $labels['unkownsender'] = 'unknown'; +$labels['readonarchive'] = 'Mark the message as read on archive'; ?> diff --git a/plugins/archive/localization/fy_NL.inc b/plugins/archive/localization/fy_NL.inc new file mode 100644 index 000000000..059e68f75 --- /dev/null +++ b/plugins/archive/localization/fy_NL.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Argyf'; +$labels['buttontitle'] = 'Pleats yn argyf'; +$labels['archived'] = 'Mei sukses nei argyf ferpleatst'; +$labels['archivedreload'] = 'Mei sukses nei argyf ferpleatst. Ferfarskje dizze side om de nije argyf mappen te sjen.'; +$labels['archiveerror'] = 'Guon berjochten koenen net ferpleatst wurde nei it argyf'; +$labels['archivefolder'] = 'Argyf'; +$labels['settingstitle'] = 'Argyf'; +$labels['archivetype'] = 'Ferdiel argyf troch'; +$labels['archivetypeyear'] = 'Jier (bygelyks Argyf/2012)'; +$labels['archivetypemonth'] = 'Moanne (bygelyks Argyf/2012/06)'; +$labels['archivetypefolder'] = 'Oarspronklike map'; +$labels['archivetypesender'] = 'Stjoerder e-post'; +$labels['unkownsender'] = 'ûnbekend'; +$labels['readonarchive'] = 'Markearje it berjocht as lêzen op argyf'; +?> diff --git a/plugins/archive/localization/ia.inc b/plugins/archive/localization/ia.inc index aa0d43200..d91040c4e 100644 --- a/plugins/archive/localization/ia.inc +++ b/plugins/archive/localization/ia.inc @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'Mense (p.ex. Archivo/2012/06)'; $labels['archivetypefolder'] = 'Dossier original'; $labels['archivetypesender'] = 'E-mail del expeditor'; $labels['unkownsender'] = 'incognite'; +$labels['readonarchive'] = 'Marcar le message como legite in le archivo'; ?> diff --git a/plugins/archive/localization/kab.inc b/plugins/archive/localization/kab.inc new file mode 100644 index 000000000..ae7dd4f07 --- /dev/null +++ b/plugins/archive/localization/kab.inc @@ -0,0 +1,26 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Ḥrez'; +$labels['buttontitle'] = 'Ḥrez izen-agi'; +$labels['archived'] = 'Aḥraz yedda akken iwata'; +$labels['archivefolder'] = 'Aḥraz'; +$labels['settingstitle'] = 'Aḥraz'; +$labels['archivetypeyear'] = 'Aseggas(md. Aḥraz/2012)'; +$labels['archivetypesender'] = 'Imayl n umazan'; +$labels['unkownsender'] = 'arussin'; +?> diff --git a/plugins/archive/localization/lt_LT.inc b/plugins/archive/localization/lt_LT.inc index 2448596a2..67f8bd303 100644 --- a/plugins/archive/localization/lt_LT.inc +++ b/plugins/archive/localization/lt_LT.inc @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'Mėnesis (pvz. Archyvas/2012/06)'; $labels['archivetypefolder'] = 'Tikrasis aplankas'; $labels['archivetypesender'] = 'Siuntėjo el. pašto adresas'; $labels['unkownsender'] = 'nežinomas'; +$labels['readonarchive'] = 'Archyvuojant, žymėti laišką kaip skaitytą'; ?> diff --git a/plugins/archive/localization/nl_NL.inc b/plugins/archive/localization/nl_NL.inc index e1bc1bc89..4703b7682 100644 --- a/plugins/archive/localization/nl_NL.inc +++ b/plugins/archive/localization/nl_NL.inc @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'Maand (bijv. Archief/2012/06)'; $labels['archivetypefolder'] = 'Originele map'; $labels['archivetypesender'] = 'Afzender e-mail'; $labels['unkownsender'] = 'onbekend'; +$labels['readonarchive'] = 'Markeer bericht al gelezen op archiveren'; ?> diff --git a/plugins/archive/localization/sr_CS.inc b/plugins/archive/localization/sr_CS.inc index a4c86a818..729509769 100644 --- a/plugins/archive/localization/sr_CS.inc +++ b/plugins/archive/localization/sr_CS.inc @@ -27,5 +27,6 @@ $labels['archivetypeyear'] = 'години (нпр. Архива/2015)'; $labels['archivetypemonth'] = 'месецу (нпр. Архива/2015/03)'; $labels['archivetypefolder'] = 'изворној фасцикли'; $labels['archivetypesender'] = 'адреси пошиљаоца'; -$labels['unkownsender'] = 'непознат'; +$labels['unkownsender'] = 'непознато'; +$labels['readonarchive'] = 'Поруку означи као прочитану при архивирању'; ?> diff --git a/plugins/archive/localization/zh_TW.inc b/plugins/archive/localization/zh_TW.inc index ae4b779e5..36cb07d85 100644 --- a/plugins/archive/localization/zh_TW.inc +++ b/plugins/archive/localization/zh_TW.inc @@ -17,15 +17,16 @@ */ $labels['buttontext'] = '封存'; $labels['buttontitle'] = '封存此信件'; -$labels['archived'] = '已成功封存'; -$labels['archivedreload'] = '封存動作完成.重新載入頁面瀏覽新的封存資料夾'; -$labels['archiveerror'] = '部分資訊無法完成封存'; +$labels['archived'] = '成功封存'; +$labels['archivedreload'] = '封存動作完成。要重新載入頁面,才能看到新的封存資料夾'; +$labels['archiveerror'] = '部分信件無法完成封存'; $labels['archivefolder'] = '封存'; $labels['settingstitle'] = '封存'; -$labels['archivetype'] = '封存檔案切割方式'; -$labels['archivetypeyear'] = '年分(例如: 封存/2012)'; -$labels['archivetypemonth'] = '月份(例如: 封存/2012/06)'; +$labels['archivetype'] = '封存檔案切割方式:'; +$labels['archivetypeyear'] = '年分 (例如: 封存/2012)'; +$labels['archivetypemonth'] = '月分 (例如: 封存/2012/06)'; $labels['archivetypefolder'] = '原始資料夾'; $labels['archivetypesender'] = '寄件者電子信箱'; $labels['unkownsender'] = '未知'; +$labels['readonarchive'] = '將封存的郵件標示為已讀取'; ?> diff --git a/plugins/attachment_reminder/localization/fy_NL.inc b/plugins/attachment_reminder/localization/fy_NL.inc new file mode 100644 index 000000000..ecf80e813 --- /dev/null +++ b/plugins/attachment_reminder/localization/fy_NL.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Hawwo jo ferjitten in bestân ta te heakjen?"; +$messages['reminderoption'] = "Herinnerje oer ferjitten taheaksels"; +$messages['keywords'] = "bestân,triem,hechtsje,ferbûn,taheak,ynsletten,CV,brief"; diff --git a/plugins/attachment_reminder/localization/zh_TW.inc b/plugins/attachment_reminder/localization/zh_TW.inc index aaa91cd24..df7d75d0b 100644 --- a/plugins/attachment_reminder/localization/zh_TW.inc +++ b/plugins/attachment_reminder/localization/zh_TW.inc @@ -15,6 +15,6 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ */ -$messages['forgotattachment'] = "您似乎忘記加入附件了,你確定要寄出?"; +$messages['forgotattachment'] = "似乎忘記加入附件,確定要寄出嗎?"; $messages['reminderoption'] = "提醒加入附件"; -$messages['keywords'] = "附件,附加,附檔,附上,附加檔案"; +$messages['keywords'] = "附件,檔案,附加,附檔,附上,履歷,封面"; diff --git a/plugins/enigma/localization/cy_GB.inc b/plugins/enigma/localization/cy_GB.inc index 8e19af863..db3701dd3 100644 --- a/plugins/enigma/localization/cy_GB.inc +++ b/plugins/enigma/localization/cy_GB.inc @@ -92,10 +92,12 @@ $messages['sigerror'] = 'Llofnod heb ei ddilysu. Gwall mewnol.'; $messages['decryptok'] = 'Neges wedi ei ddadgryptio.'; $messages['decrypterror'] = 'Dadgryptio wedi methu.'; $messages['decryptnokey'] = 'Dadgryptio wedi methu. Allwedd breifat heb ei ganfod: ID Allwedd: $keyid.'; +$messages['decryptbadpass'] = 'Dadgryptio wedi methu. Cyfrinair annilys.'; $messages['decryptnopass'] = 'Dadgryptio wedi methu. Mae angen cyfrinair.'; $messages['decryptpartial'] = 'Dadgryptiwyd y neges, ond roedd darn o gorff y neges heb ei amgryptio'; $messages['signerror'] = 'Llofnodi wedi methu.'; $messages['signnokey'] = 'Llofnodi wedi methu. Allwedd breifat heb ei ganfod.'; +$messages['signbadpass'] = 'Llofnodi wedi methu. Cyfrinair annilys.'; $messages['signnopass'] = 'Llofnodi wedi methu. Mae angen cyfrinair.'; $messages['encrypterror'] = 'Amgryptio wedi methu.'; $messages['encryptnokey'] = 'Amgryptio wedi methu. Allwedd cyhoeddus heb ei ganfod ar gyfer $email.'; diff --git a/plugins/enigma/localization/de_DE.inc b/plugins/enigma/localization/de_DE.inc index 441c7d7c4..44c3a4d9d 100644 --- a/plugins/enigma/localization/de_DE.inc +++ b/plugins/enigma/localization/de_DE.inc @@ -92,10 +92,12 @@ $messages['sigerror'] = 'Unbestätigte Signatur. Interner Fehler.'; $messages['decryptok'] = 'Nachricht entschlüsselt.'; $messages['decrypterror'] = 'Entschlüsselung fehlgeschlagen.'; $messages['decryptnokey'] = 'Entschlüsselung fehlgeschlagen. Privater Schlüssel wurde nicht gefunden. Schlüsselkennung: $keyid.'; +$messages['decryptbadpass'] = 'Entschlüsselung fehlgeschlagen. Passwort ungültig.'; $messages['decryptnopass'] = 'Entschlüsselung fehlgeschlagen. Schlüsselpasswort wird benötigt.'; $messages['decryptpartial'] = 'Nachricht entschlüsselt, aber ein Teil der Nachricht wurde nicht verschlüsselt.'; $messages['signerror'] = 'Signierung fehlgeschlagen.'; $messages['signnokey'] = 'Signierung fehlgeschlagen. Privater Schlüssel wurde nicht gefunden.'; +$messages['signbadpass'] = 'Signierung fehlgeschlagen. Passwort ungültig.'; $messages['signnopass'] = 'Signierung fehlgeschlagen. Schlüsselpasswort wird benötigt.'; $messages['encrypterror'] = 'Verschlüsselung fehlgeschlagen.'; $messages['encryptnokey'] = 'Verschlüsselung fehlgeschlagen. Öffentlicher Schlüssel für $email nicht gefunden'; diff --git a/plugins/enigma/localization/el_GR.inc b/plugins/enigma/localization/el_GR.inc index d8f25301d..0b3723f1c 100644 --- a/plugins/enigma/localization/el_GR.inc +++ b/plugins/enigma/localization/el_GR.inc @@ -81,6 +81,7 @@ $labels['keyexportprompt'] = 'Θέλετε να συμπεριληφθούν τ $labels['onlypubkeys'] = 'Εξαγωγή Δημοσίων Κλειδιών Μόνο'; $labels['withprivkeys'] = 'Εξαγωγή Μυστικών Κλειδιών'; $labels['findkey'] = 'Αναζήτηση στον(ους) εξυπηρετητή(ές) κλειδιών'; +$labels['keyimportlabel'] = 'Εισαγωγή από αρχείο'; $messages['sigvalid'] = 'Επαληθευμένη υπογραφή από τον $sender.'; $messages['sigvalidpartial'] = 'Επαληθευμένη υπογραφή από τον $sender, αλλά τμήμα του κειμένου δεν έχει υπογραφεί.'; $messages['siginvalid'] = 'Άκυρη υπογραφή από τον $sender.'; diff --git a/plugins/enigma/localization/en_GB.inc b/plugins/enigma/localization/en_GB.inc index 605fdfe4c..ea88a7721 100644 --- a/plugins/enigma/localization/en_GB.inc +++ b/plugins/enigma/localization/en_GB.inc @@ -77,6 +77,12 @@ $labels['enterkeypasstitle'] = 'Enter key passphrase'; $labels['enterkeypass'] = 'A passphrase is needed to unlock the secret key ($keyid) for user: $user.'; $labels['arialabelkeyexportoptions'] = 'Keys export options'; $labels['attachpubkeymsg'] = 'Attach my public key'; +$labels['keyexportprompt'] = 'Do you want to include secret keys in the saved OpenPGP keys file?'; +$labels['onlypubkeys'] = 'Export Public Keys Only'; +$labels['withprivkeys'] = 'Export Secret Keys'; +$labels['findkey'] = 'Search on key server(s)'; +$labels['keyimportlabel'] = 'Import from file'; +$labels['keyimportsearchlabel'] = 'Search on key server(s)'; $messages['sigvalid'] = 'Verified signature from $sender.'; $messages['sigvalidpartial'] = 'Verified signature from $sender, but part of the body was not signed.'; $messages['siginvalid'] = 'Invalid signature from $sender.'; @@ -86,14 +92,17 @@ $messages['sigerror'] = 'Unverified signature. Internal error.'; $messages['decryptok'] = 'Message decrypted.'; $messages['decrypterror'] = 'Decryption failed.'; $messages['decryptnokey'] = 'Decryption failed. Private key not found. Key ID: $keyid.'; +$messages['decryptbadpass'] = 'Decryption failed. Invalid password.'; $messages['decryptnopass'] = 'Decryption failed. Key password required.'; $messages['decryptpartial'] = 'Message decrypted, but part of the body was not encrypted.'; $messages['signerror'] = 'Signing failed.'; $messages['signnokey'] = 'Signing failed. Private key not found.'; +$messages['signbadpass'] = 'Signing failed. Invalid password.'; $messages['signnopass'] = 'Signing failed. Key password required.'; $messages['encrypterror'] = 'Encryption failed.'; $messages['encryptnokey'] = 'Encryption failed. Public key not found for $email.'; $messages['nokeysfound'] = 'No keys found'; +$messages['keynotfound'] = 'Key not found!'; $messages['keyopenerror'] = 'Unable to get key information! Internal error.'; $messages['keylisterror'] = 'Unable to list keys! Internal error.'; $messages['keysimportfailed'] = 'Unable to import key(s)! Internal error.'; @@ -103,10 +112,12 @@ $messages['keyremoveconfirm'] = 'Are you sure, you want to delete selected key(s $messages['keyremovesuccess'] = 'Key(s) deleted successfully'; $messages['keyremoveerror'] = 'Unable to delete selected key(s).'; $messages['keyimporttext'] = 'You can import private and public key(s) or revocation signatures in ASCII-Armor format.'; +$messages['keyimportsearchtext'] = 'You can search for public keys by key identifier, user name or email address and then import them directly.'; $messages['formerror'] = 'Please fill in the form. All fields are required!'; $messages['passwordsdiffer'] = 'Passwords do not match!'; $messages['keygenerateerror'] = 'Failed to generate a key pair'; $messages['keygeneratesuccess'] = 'A key pair generated and imported successfully.'; $messages['keygennosupport'] = 'Your web browser does not support cryptography. Unable to generate a key pair!'; +$messages['noidentselected'] = 'You have to select at least one identity for the key!'; $messages['nonameident'] = 'Identity must have a user name defined!'; ?> diff --git a/plugins/enigma/localization/es_ES.inc b/plugins/enigma/localization/es_ES.inc index 2ee88125f..0bfb6b84b 100644 --- a/plugins/enigma/localization/es_ES.inc +++ b/plugins/enigma/localization/es_ES.inc @@ -92,10 +92,12 @@ $messages['sigerror'] = 'Firma no verificada. Error interno.'; $messages['decryptok'] = 'Mensaje desenciptado.'; $messages['decrypterror'] = 'Desenciptación fallida.'; $messages['decryptnokey'] = 'Desenciptación fallida. Clave privada no encontrada. ID de Clave: $keyid.'; +$messages['decryptbadpass'] = 'Descifrado fallido. Contraseña inválida.'; $messages['decryptnopass'] = 'Desencriptado fallido. Contraseña requerida.'; $messages['decryptpartial'] = 'Mensaje descifrado, pero parte del cuerpo no estaba cifrado.'; $messages['signerror'] = 'Firmado fallido.'; $messages['signnokey'] = 'Firmado fallido. Clave privada no encontrada.'; +$messages['signbadpass'] = 'Firma fallida. Contraseña inválida.'; $messages['signnopass'] = 'Acceso fallido. Contraseña requerida.'; $messages['encrypterror'] = 'Encriptación fallida.'; $messages['encryptnokey'] = 'Encriptación fallida. Clave pública no encontrada para $email.'; diff --git a/plugins/enigma/localization/he_IL.inc b/plugins/enigma/localization/he_IL.inc index c5e90cea4..eac121c19 100644 --- a/plugins/enigma/localization/he_IL.inc +++ b/plugins/enigma/localization/he_IL.inc @@ -92,10 +92,12 @@ $messages['sigerror'] = 'חתימה לא מאומתת. שגיאה פנימית.' $messages['decryptok'] = 'הודעה פוענחה.'; $messages['decrypterror'] = 'הפיענוח נכשל.'; $messages['decryptnokey'] = 'הפיענוח נכשל. לא נמצא מפתח פרטי. קוד מפתח: keyid$.'; +$messages['decryptbadpass'] = 'פיענוח נכשל. סיסמה שגויה.'; $messages['decryptnopass'] = 'פענוח נכשל. נדרשת סיסמת מפתח.'; $messages['decryptpartial'] = 'ההודעה פוענחה אבל חלק מגוף ההודעה כלל לא הוצפן'; $messages['signerror'] = 'חתימה נכשלה.'; $messages['signnokey'] = 'חתימה נכשלה. לא נמצא מפתח פרטי.'; +$messages['signbadpass'] = 'חתימה נכשלה. סיסמה שגויה.'; $messages['signnopass'] = 'חיתום נכשל. נדרשת סיסמת מפתח.'; $messages['encrypterror'] = 'הצפנה נכשלה.'; $messages['encryptnokey'] = 'הצפנה נכשלה. לא נמצא מפתח ציבורי עבור mail$.'; diff --git a/plugins/enigma/localization/id_ID.inc b/plugins/enigma/localization/id_ID.inc index c82d32dd0..c15ac9e4f 100644 --- a/plugins/enigma/localization/id_ID.inc +++ b/plugins/enigma/localization/id_ID.inc @@ -92,10 +92,12 @@ $messages['sigerror'] = 'Tanda tangan tak terverifikasi. Kesalahan internal.'; $messages['decryptok'] = 'Pesan didekripsi.'; $messages['decrypterror'] = 'Dekripsi gagal.'; $messages['decryptnokey'] = 'Dekripsi gagal. Kunci privat tak ditemukan. ID kunci: $keyid.'; +$messages['decryptbadpass'] = 'Dekripsi gagal. Kata sandi tidak valid.'; $messages['decryptnopass'] = 'Dekripsi gagal. Kata sandi kunci diperlukan.'; $messages['decryptpartial'] = 'Pesan didekripsi, tapi sebagian isi tidak dienkripsi.'; $messages['signerror'] = 'Penandatanganan gagal.'; $messages['signnokey'] = 'Penandatanganan gagal. Kunci privat tak ditemukan.'; +$messages['signbadpass'] = 'Penandatanganan gagal. Kata sandi tidak valid.'; $messages['signnopass'] = 'Penandatanganan gagal. Kata sandi kunci diperlukan.'; $messages['encrypterror'] = 'Enkripsi gagal.'; $messages['encryptnokey'] = 'Enkripsi gagal. Kunci publik tak ditemukan untuk $email.'; @@ -116,5 +118,6 @@ $messages['passwordsdiffer'] = 'Kata sandi tidak cocok!'; $messages['keygenerateerror'] = 'Gagal membuat suatu pasangan kunci'; $messages['keygeneratesuccess'] = 'Suatu pasangan kunci dibuat dan sukses diimpor.'; $messages['keygennosupport'] = 'Peramban web Anda tidak mendukung kriptografi. Tidak bisa membuat suatu pasangan kunci!'; +$messages['noidentselected'] = 'Anda mesti memilih paling tidak satu identitas untuk kunci!'; $messages['nonameident'] = 'Identitas mesti mengandung nama pengguna!'; ?> diff --git a/plugins/enigma/localization/ja_JP.inc b/plugins/enigma/localization/ja_JP.inc index b2e826ed5..d031b2baf 100644 --- a/plugins/enigma/localization/ja_JP.inc +++ b/plugins/enigma/localization/ja_JP.inc @@ -92,10 +92,12 @@ $messages['sigerror'] = '署名を検証できません。内部エラーです $messages['decryptok'] = 'メッセージを復号しました。'; $messages['decrypterror'] = '復号できませんでした。'; $messages['decryptnokey'] = '復号できませんでした。次のキーIDの秘密鍵がありません: $keyid'; +$messages['decryptbadpass'] = '復号できませんでした。パスワードが正しくありません。'; $messages['decryptnopass'] = '復号できませんでした。キーのパスワードが必要です。'; $messages['decryptpartial'] = 'メッセージを復号しました。しかし、本文の一部は暗号化していませんでした。'; $messages['signerror'] = '署名できませんでした。'; $messages['signnokey'] = '署名できませんでした。秘密鍵がありません。'; +$messages['signbadpass'] = 'サインインできませんでした。パスワードが正しくありません。'; $messages['signnopass'] = '署名できませんでした。キーのパスワードが必要です。'; $messages['encrypterror'] = '暗号化できませんでした。'; $messages['encryptnokey'] = '暗号化できませんでした。$emailへの公開鍵がありません。'; diff --git a/plugins/enigma/localization/ko_KR.inc b/plugins/enigma/localization/ko_KR.inc index b3da3ab39..51599afd3 100644 --- a/plugins/enigma/localization/ko_KR.inc +++ b/plugins/enigma/localization/ko_KR.inc @@ -92,10 +92,12 @@ $messages['sigerror'] = '검증되지 않은 서명. 내부 오류.'; $messages['decryptok'] = '메시지가 복호화됨.'; $messages['decrypterror'] = '복호화에 실패함.'; $messages['decryptnokey'] = '복호화에 실패함. 비공개 키를 찾을 수 없음. 키 ID: $keyid.'; +$messages['decryptbadpass'] = '복호화에 실패함. 잘못된 암호.'; $messages['decryptnopass'] = '복호화에 실패함. 키 암호가 필요합니다.'; $messages['decryptpartial'] = '메시지가 복호화됐지만 본문 일부가 암호화 되지 않았습니다.'; $messages['signerror'] = '서명 추가에 실패함.'; $messages['signnokey'] = '서명 추가에 실패함. 비공개 키를 찾을 수 없음.'; +$messages['signbadpass'] = '서명에 실패함. 잘못된 암호.'; $messages['signnopass'] = '서명 추가에 실패함. 키 암호가 필요합니다.'; $messages['encrypterror'] = '암호화에 실패함.'; $messages['encryptnokey'] = '암호화에 실패함. $email에 대한 공개 키를 찾을 수 없음.'; diff --git a/plugins/enigma/localization/lt_LT.inc b/plugins/enigma/localization/lt_LT.inc index 7eaa716f6..7c6cba982 100644 --- a/plugins/enigma/localization/lt_LT.inc +++ b/plugins/enigma/localization/lt_LT.inc @@ -47,7 +47,7 @@ $labels['userid'] = 'ID'; $labels['valid'] = 'galioja'; $labels['supportencryption'] = 'Įgalinti laiškų šifravimą ir pasirašymą'; $labels['supportsignatures'] = 'Įgalinti laiškų parašų tikrinimą'; -$labels['supportdecryption'] = 'Įgalinti laiškų dešifravimą'; +$labels['supportdecryption'] = 'Įgalinti laiškų iššifravimą'; $labels['signdefault'] = 'Numatytai pasirašinėti visus laiškus'; $labels['encryptdefault'] = 'Numatytai šifruoti visus laiškus'; $labels['attachpubkeydefault'] = 'Visada prisegti mano viešąjį raktą prie laiško.'; @@ -92,10 +92,12 @@ $messages['sigerror'] = 'Parašo galiojimas nepatikrintas. Įvyko vidinė klaida $messages['decryptok'] = 'Laiškas iššifruotas.'; $messages['decrypterror'] = 'Iššifruoti nepavyko.'; $messages['decryptnokey'] = 'Iššifruoti nepavyko. Nerastas privatusis raktas. Rakto ID: $keyid.'; -$messages['decryptnopass'] = 'Nepavyko dešifruoti, reikalingas rakto slaptažodis.'; -$messages['decryptpartial'] = 'Laiškas dešifruotas, nors dalis laiško ir nebuvo užšifruota.'; +$messages['decryptbadpass'] = 'Iššifravimas nepavyko. Neteisingas slaptažodis.'; +$messages['decryptnopass'] = 'Nepavyko iššifruoti, reikalingas rakto slaptažodis.'; +$messages['decryptpartial'] = 'Laiškas iššifruotas, nors dalis laiško ir nebuvo užšifruota.'; $messages['signerror'] = 'Pasirašyti nepavyko.'; $messages['signnokey'] = 'Pasirašyti nepavyko. Nerastas privatusis raktas.'; +$messages['signbadpass'] = 'Pasirašyti nepavyko. Neteisingas slaptažodis.'; $messages['signnopass'] = 'Nepavyko pasirašyti, reikalingas rakto slaptažodis.'; $messages['encrypterror'] = 'Užšifruoti nepavyko.'; $messages['encryptnokey'] = 'Užšifruoti nepavyko. Nerastas viešasis $email raktas.'; @@ -116,5 +118,6 @@ $messages['passwordsdiffer'] = 'Slaptažodžiai nesutampa!'; $messages['keygenerateerror'] = 'Nepavyko sugeneruoti raktų poros.'; $messages['keygeneratesuccess'] = 'Raktų pora sėkmingai sugeneruota ir importuota.'; $messages['keygennosupport'] = 'Jūsų naršyklėje kriptografija nepalaikoma. Raktų poros sugeneruoti nepavyko!'; +$messages['noidentselected'] = 'Jūs turite raktui pasirinkti bent vieną tapatybę!'; $messages['nonameident'] = 'Tapatybei turi būti nurodytas naudotojo vardas!'; ?> diff --git a/plugins/enigma/localization/nl_NL.inc b/plugins/enigma/localization/nl_NL.inc index 8e6e9059d..f2f8e7e25 100644 --- a/plugins/enigma/localization/nl_NL.inc +++ b/plugins/enigma/localization/nl_NL.inc @@ -92,10 +92,12 @@ $messages['sigerror'] = 'Niet-geverifieerde ondertekening. Interne fout.'; $messages['decryptok'] = 'Bericht ontsleuteld.'; $messages['decrypterror'] = 'Ontsleutelen mislukt.'; $messages['decryptnokey'] = 'Ontsleutelen mislukt. Geheime sleutel niet gevonden. Sleutel-ID: $keyid.'; +$messages['decryptbadpass'] = 'Ontsleutelen mislukt. Verkeerde wachtwoord.'; $messages['decryptnopass'] = 'Ontsleutelen mislukt. Sleutelwachtwoord vereist.'; $messages['decryptpartial'] = 'Bericht ontsleuteld, maar een deel van de inhoud was niet versleuteld.'; $messages['signerror'] = 'Ondertekenen mislukt.'; $messages['signnokey'] = 'Ondertekenen mislukt. Geheime sleutel niet gevonden.'; +$messages['signbadpass'] = 'Ondertekenen mislukt. Verkeerde sleutel.'; $messages['signnopass'] = 'Ondertekenen mislukt. Sleutelwachtwoord vereist.'; $messages['encrypterror'] = 'Versleutelen mislukt.'; $messages['encryptnokey'] = 'Onsleutelen mislukt. Publieke sleutel niet gevonden voor $email.'; @@ -116,5 +118,6 @@ $messages['passwordsdiffer'] = 'Wachtwoorden komen niet overeen!'; $messages['keygenerateerror'] = 'Genereren van een sleutelpaar is mislukt'; $messages['keygeneratesuccess'] = 'Een sleutelpaar is succesvol gegenereerd en geïmporteerd.'; $messages['keygennosupport'] = 'Uw webbrowser ondersteunt geen cryptografie. Sleutelpaar genereren is mislukt!'; +$messages['noidentselected'] = 'Je dient minimaal een identiteit te selecteren voor de sleutel!'; $messages['nonameident'] = 'Identiteit moet een gebruikersnaam hebben!'; ?> diff --git a/plugins/enigma/localization/pl_PL.inc b/plugins/enigma/localization/pl_PL.inc index 78c1125c0..1969c10f6 100644 --- a/plugins/enigma/localization/pl_PL.inc +++ b/plugins/enigma/localization/pl_PL.inc @@ -92,10 +92,12 @@ $messages['sigerror'] = 'Podpis niezweryfikowany. Błąd wewnętrzny.'; $messages['decryptok'] = 'Wiadomość odszyfrowana.'; $messages['decrypterror'] = 'Nie udało się odszyfrować wiadomości.'; $messages['decryptnokey'] = 'Odszyfrowanie nie powiodło się. Brak klucza prywatnego. ID klucza: $keyid.'; +$messages['decryptbadpass'] = 'Odszyfrowanie nie powiodło się. Hasło jest nieprawidłowe.'; $messages['decryptnopass'] = 'Odszyfrowanie nie powiodło się. Hasło jest wymagane.'; $messages['decryptpartial'] = 'Wiadomość odszyfrowana, ale jej część nie była zaszyfrowana.'; $messages['signerror'] = 'Błąd podpisywania.'; $messages['signnokey'] = 'Błąd podpisywania. Nie znaleziono klucza prywatnego.'; +$messages['signbadpass'] = 'Błąd podpisywania. Hasło jest nieprawidłowe.'; $messages['signnopass'] = 'Błąd podpisywania. Wymagane hasło klucza.'; $messages['encrypterror'] = 'Błąd szyfrowania.'; $messages['encryptnokey'] = 'Błąd szyfrowania. Nie znaleziono klucza publicznego dla $email.'; diff --git a/plugins/enigma/localization/ru_RU.inc b/plugins/enigma/localization/ru_RU.inc index b8aaab5cd..999ba0bfb 100644 --- a/plugins/enigma/localization/ru_RU.inc +++ b/plugins/enigma/localization/ru_RU.inc @@ -92,10 +92,12 @@ $messages['sigerror'] = 'Непроверенная подпись. Внутре $messages['decryptok'] = 'Сообщение расшифровано.'; $messages['decrypterror'] = 'Сбой расшифровки.'; $messages['decryptnokey'] = 'Сбой расшифровки. Закрытый ключ не найден. ID ключа: $keyid.'; +$messages['decryptbadpass'] = 'Сбой расшифровки. Неверный пароль.'; $messages['decryptnopass'] = 'Сбой расшифровки. Требуется ключ пароля.'; $messages['decryptpartial'] = 'Сообщение расшифровано, но часть сообщения не была зашифрована.'; $messages['signerror'] = 'Сбой подписания.'; $messages['signnokey'] = 'Сбой подписания. Закрытый ключ не найден.'; +$messages['signbadpass'] = 'Сбой подписания. Неверный пароль.'; $messages['signnopass'] = 'Сбой подписания. Требуется ключ пароля.'; $messages['encrypterror'] = 'Сбой шифрования.'; $messages['encryptnokey'] = 'Сбой шифрования. Не найден открытый ключ для $email.'; diff --git a/plugins/enigma/localization/sk_SK.inc b/plugins/enigma/localization/sk_SK.inc index d4b42399b..f6b88c067 100644 --- a/plugins/enigma/localization/sk_SK.inc +++ b/plugins/enigma/localization/sk_SK.inc @@ -92,10 +92,12 @@ $messages['sigerror'] = 'Neoverený podpis. Interná chyba.'; $messages['decryptok'] = 'Správa bola dešifrovaná.'; $messages['decrypterror'] = 'Dešifrovanie nebolo úspešné.'; $messages['decryptnokey'] = 'Dešifrovanie nebolo úspešné. Súkromný kľúč sa nenašiel. ID kľúča: $keyid.'; +$messages['decryptbadpass'] = 'Dešifrovanie bolo neúspešné. Neplatné heslo.'; $messages['decryptnopass'] = 'Dešifrovanie nebolo úspešné. Vyžaduje sa kľúčové heslo.'; $messages['decryptpartial'] = 'Správa bola dešifrovaná, ale časť jej tela nebola zašifrovaná.'; $messages['signerror'] = 'Vloženie podpisu bolo neúspešné.'; $messages['signnokey'] = 'Vloženie podpisu bolo neúspešné. Nenašiel sa súkromný kľúč.'; +$messages['signbadpass'] = 'Podpisovanie bolo neúspešné. Neplatné heslo.'; $messages['signnopass'] = 'Vloženie podpisu nebolo úspešné. Vyžaduje sa kľúčové heslo.'; $messages['encrypterror'] = 'Šifrovanie nebolo úspešné.'; $messages['encryptnokey'] = 'Šifrovanie nebolo úspešné. Nenašiel sa verejný kľúč pre $email.'; diff --git a/plugins/enigma/localization/sq_AL.inc b/plugins/enigma/localization/sq_AL.inc index 274f95ab7..d617faf5b 100644 --- a/plugins/enigma/localization/sq_AL.inc +++ b/plugins/enigma/localization/sq_AL.inc @@ -47,7 +47,7 @@ $labels['userid'] = 'ID'; $labels['valid'] = 'i vlefshëm'; $labels['supportencryption'] = 'Aktivizo fshehtëzim dhe nënshkrim mesazhesh'; $labels['supportsignatures'] = 'Aktivizo verifikim nënshkrimesh mesazhi'; -$labels['supportdecryption'] = 'Aktivizo çfshehtëzim mesazhi'; +$labels['supportdecryption'] = 'Aktivizo shfshehtëzim mesazhi'; $labels['signdefault'] = 'Si parazgjedhje, nënshkruaji krejt mesazhet'; $labels['encryptdefault'] = 'Si parazgjedhje, fshehtëzoji krejt mesazhet'; $labels['attachpubkeydefault'] = 'Bashkëngjite kyçin tim publik, si parazgjedhje'; @@ -71,7 +71,7 @@ $labels['key2048'] = '2048 bite - parazgjedhje'; $labels['key4096'] = '4096 bite - më i sigurt'; $labels['keygenerating'] = 'Po prodhohen kyçe…'; $labels['encryptionoptions'] = 'Mundësi fshehtëzimi…'; -$labels['encryptmsg'] = 'Fshehtëzoje këtë mesazj'; +$labels['encryptmsg'] = 'Fshehtëzoje këtë mesazh'; $labels['signmsg'] = 'Nënshkruaje në mënyrë dixhitale këtë mesazh'; $labels['enterkeypasstitle'] = 'Jepni frazëkalim kyçi'; $labels['enterkeypass'] = 'Frazëkalimi është i nevojshëm për të zhbllokuar kyçin e fshehtë ($keyid) për përdoruesin: $user.'; @@ -89,12 +89,12 @@ $messages['siginvalid'] = 'Nënshkrim i pavlefshëm nga $sender.'; $messages['sigunverified'] = 'Nënshkrim i paverifikuar. Dëshmia s’u verifikua. ID Dëshmie: $keyid.'; $messages['signokey'] = 'Nënshkrim i paverifikuar. S’u gjet kyç. ID Kyçi: $keyid.'; $messages['sigerror'] = 'Nënshkrim i paverifikuar. Gabim i brendshëm.'; -$messages['decryptok'] = 'Mesazhi u çfshehtëzua.'; -$messages['decrypterror'] = 'Çfshehtëzimi dështoi.'; -$messages['decryptnokey'] = 'Çfshehtëzimi dështoi. S’u gjet kyç privat. ID Kyçi: $keyid.'; +$messages['decryptok'] = 'Mesazhi u shfshehtëzua.'; +$messages['decrypterror'] = 'Shfshehtëzimi dështoi.'; +$messages['decryptnokey'] = 'Shfshehtëzimi dështoi. S’u gjet kyç privat. ID Kyçi: $keyid.'; $messages['decryptbadpass'] = 'Shfshehtëzimi dështoi. Fjalëkalim i pavlefshëm.'; -$messages['decryptnopass'] = 'Çfshehtëzimi dështoi. Lypset fjalëkalim kyçi.'; -$messages['decryptpartial'] = 'Mesazhi u çfshehtëzua, por një pjesë e lëndë s’u çfshehtëzua.'; +$messages['decryptnopass'] = 'Shfshehtëzimi dështoi. Lypset fjalëkalim kyçi.'; +$messages['decryptpartial'] = 'Mesazhi u shfshehtëzua, por një pjesë e lëndë s’u shfshehtëzua.'; $messages['signerror'] = 'Nënshkrimi dështoi.'; $messages['signnokey'] = 'Nënshkrimi dështoi. S’u gjet kyç privat.'; $messages['signbadpass'] = 'Hyrja dështoi. Fjalëkalim i pavlefshëm.'; @@ -103,21 +103,21 @@ $messages['encrypterror'] = 'Fshehtëzimi dështoi.'; $messages['encryptnokey'] = 'Fshehtëzimi dështoi. S’u gjet kyç publik për $email'; $messages['nokeysfound'] = 'S’u gjetën kyçe'; $messages['keynotfound'] = 'S’u gjet kyç!'; -$messages['keyopenerror'] = 'I pazoti të marrë të dhëna kyçi! Gabim i brendshëm.'; -$messages['keylisterror'] = 'I pazoti të paraqesë kyçe! Gabim i brendshëm.'; -$messages['keysimportfailed'] = 'I pazoti të importojë kyç(e)! Gabim i brendshëm.'; +$messages['keyopenerror'] = 'S’arrihet të merren të dhëna kyçi! Gabim i brendshëm.'; +$messages['keylisterror'] = 'S’arrihet të paraqiten kyçe! Gabim i brendshëm.'; +$messages['keysimportfailed'] = 'S’arrihet të importohen kyç(e)! Gabim i brendshëm.'; $messages['keysimportsuccess'] = 'Kyçi(et) u importuan me sukses. Të importuar: $new, të pandryshuar: $old.'; $messages['keyremoving'] = 'Po hiqet kyçi(et)…'; $messages['keyremoveconfirm'] = 'Jeni i sigurt se doni të fshihet kyçi(et) i përzgjedhur?'; $messages['keyremovesuccess'] = 'Kyçi(et) u fshi me sukses'; -$messages['keyremoveerror'] = 'I pazoti të fshijë kyçin(et) e përzgjedhur?'; +$messages['keyremoveerror'] = 'S’arrihet të fshihen kyçin(et) e përzgjedhur?'; $messages['keyimporttext'] = 'Mund të importoni kyç(e) privatë dhe publikë ose nënshkrime shfuqizimesh në formatin ASCII-Armor.'; $messages['keyimportsearchtext'] = 'Për kyçe publikë mund të kërkoni sipas identifikuesi kyçi, emri përdoruesi ose adrese email dhe mandej t’i importoni ata drejtpërsëdrejti.'; $messages['formerror'] = 'Ju lutemi, plotësoni formularin. Janë të domosdoshme krejt fushat!'; $messages['passwordsdiffer'] = 'Fjalëkalimet nuk përputhen!'; $messages['keygenerateerror'] = 'Dështoi prodhimi i një çifti kyçesh'; $messages['keygeneratesuccess'] = 'U prodhua dhe importua me sukses një çift kyçesh.'; -$messages['keygennosupport'] = 'Shfletuesi juaj nuk e mbulon kriptografinë. I pazoti të prodhojë një çift kyçesh!'; +$messages['keygennosupport'] = 'Shfletuesi juaj nuk e mbulon kriptografinë. S’arrihet të prodhohet çift kyçesh!'; $messages['noidentselected'] = 'Duhet të përzgjidhni të paktën një identitet për kyçin!'; $messages['nonameident'] = 'Identiteti duhet të ketë të përkufizuar një emër përdoruesi!'; ?> diff --git a/plugins/enigma/localization/sv_SE.inc b/plugins/enigma/localization/sv_SE.inc index 9e3a4a711..d5c67ee64 100644 --- a/plugins/enigma/localization/sv_SE.inc +++ b/plugins/enigma/localization/sv_SE.inc @@ -59,7 +59,7 @@ $labels['importkeys'] = 'Importera nycklar'; $labels['exportkeys'] = 'Exportera nycklar'; $labels['keyactions'] = 'Hantera nycklar...'; $labels['keyremove'] = 'Ta bort'; -$labels['keydisable'] = 'Deaktivera'; +$labels['keydisable'] = 'Avaktivera'; $labels['keyrevoke'] = 'Upphäv'; $labels['keysend'] = 'Skicka offentlig nyckel i meddelande'; $labels['keychpass'] = 'Ändra lösenord'; @@ -92,10 +92,12 @@ $messages['sigerror'] = 'Overifierad signatur. Internt fel.'; $messages['decryptok'] = 'Meddelandet är dekrypterat.'; $messages['decrypterror'] = 'Dekrypteringen misslyckades.'; $messages['decryptnokey'] = 'Dekrypteringen misslyckades. Privat nyckel otillgänglig. Nyckel-ID: $keyid.'; +$messages['decryptbadpass'] = 'Dekrypteringen misslyckades. Fel lösenord.'; $messages['decryptnopass'] = 'Dekrypteringen misslyckades. Ange nyckelns lösenord.'; $messages['decryptpartial'] = 'Meddelandet är dekrypterat, men meddelandet var delvis okrypterat.'; $messages['signerror'] = 'Signeringen misslyckades.'; $messages['signnokey'] = 'Signeringen misslyckades. Privat nyckel otillgänglig.'; +$messages['signbadpass'] = 'Signeringen misslyckades. Fel lösenord.'; $messages['signnopass'] = 'Signeringen misslyckades. Ange nyckelns lösenord.'; $messages['encrypterror'] = 'Krypteringen misslyckades.'; $messages['encryptnokey'] = 'Krypteringen misslyckades. Offentlig nyckel otillgänglig för $email.'; diff --git a/plugins/enigma/localization/zh_TW.inc b/plugins/enigma/localization/zh_TW.inc new file mode 100644 index 000000000..3967d3093 --- /dev/null +++ b/plugins/enigma/localization/zh_TW.inc @@ -0,0 +1,123 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/ +*/ +$labels['encryption'] = '加密'; +$labels['enigmacerts'] = 'S/MIME 憑證'; +$labels['enigmakeys'] = 'PGP 金鑰'; +$labels['keysfromto'] = '金鑰:由 $from 至 $to (共 $count 個)'; +$labels['keyname'] = '名稱'; +$labels['keyid'] = '金鑰 ID'; +$labels['keyuserid'] = '使用者 ID'; +$labels['keytype'] = '金鑰類型'; +$labels['fingerprint'] = '指紋'; +$labels['subkeys'] = '子金鑰'; +$labels['basicinfo'] = '基本資訊'; +$labels['userids'] = '額外使用者'; +$labels['typepublickey'] = '公鑰'; +$labels['typekeypair'] = '金鑰對'; +$labels['keyattfound'] = '本郵件有附帶的 PGP 金鑰'; +$labels['keyattimport'] = '匯入金鑰'; +$labels['typesign'] = '簽署'; +$labels['typeencrypt'] = '加密'; +$labels['typecert'] = '認證'; +$labels['typeauth'] = '身份核對'; +$labels['subkeyid'] = 'ID'; +$labels['subkeyalgo'] = '演算法'; +$labels['subkeycreated'] = '建立時間:'; +$labels['subkeyexpires'] = '過期時間:'; +$labels['subkeyusage'] = '使用情況'; +$labels['expiresnever'] = '從未使用'; +$labels['unknown'] = '不明'; +$labels['uservalid'] = '有效'; +$labels['userid'] = 'ID'; +$labels['valid'] = '有效'; +$labels['supportencryption'] = '啟用郵件加密及簽署'; +$labels['supportsignatures'] = '啟用郵件簽名驗證'; +$labels['supportdecryption'] = '啟用郵件解密'; +$labels['signdefault'] = '預設簽署所有郵件'; +$labels['encryptdefault'] = '預設加密所有郵件'; +$labels['attachpubkeydefault'] = '預設附上我的公開 PGP 金鑰'; +$labels['passwordtime'] = '為以下項目保留私密金鑰密碼:'; +$labels['nminutes'] = '$m 分鐘'; +$labels['wholesession'] = '整個工作階段'; +$labels['createkeys'] = '建立新的金鑰對'; +$labels['importkeys'] = '匯入金鑰'; +$labels['exportkeys'] = '匯出金鑰'; +$labels['keyactions'] = '金鑰動作...'; +$labels['keyremove'] = '移除'; +$labels['keydisable'] = '停用'; +$labels['keyrevoke'] = '撤銷'; +$labels['keysend'] = '在郵件傳送公開金鑰'; +$labels['keychpass'] = '更改密碼'; +$labels['newkeyident'] = '身份:'; +$labels['newkeypass'] = '密碼:'; +$labels['newkeypassconfirm'] = '確認密碼:'; +$labels['newkeysize'] = '金鑰大小:'; +$labels['key2048'] = '2048 位元 - 預設'; +$labels['key4096'] = '4096 位元 - 較安全'; +$labels['keygenerating'] = '正在製作金鑰...'; +$labels['encryptionoptions'] = '加密選項...'; +$labels['encryptmsg'] = '加密本郵件'; +$labels['signmsg'] = '數位簽署本郵件'; +$labels['enterkeypasstitle'] = '輸入金鑰密語'; +$labels['enterkeypass'] = '需要密語才能為使用者 $user 解鎖密鑰 ($keyid)'; +$labels['arialabelkeyexportoptions'] = '金鑰匯出選項'; +$labels['attachpubkeymsg'] = '附上我的公開金鑰'; +$labels['keyexportprompt'] = '是否包括儲存在 OpenPGP 金鑰檔案的密鑰?'; +$labels['onlypubkeys'] = '僅匯出公開金鑰'; +$labels['withprivkeys'] = '匯出密鑰'; +$labels['findkey'] = '在金鑰伺服器搜尋'; +$labels['keyimportlabel'] = '從檔案匯入'; +$labels['keyimportsearchlabel'] = '在金鑰伺服器搜尋'; +$messages['sigvalid'] = '來自 $sender 的已驗證簽名'; +$messages['sigvalidpartial'] = '來自 $sender 的已驗證簽名,但內文部分並未簽署'; +$messages['siginvalid'] = '來自 $sender 的無效簽名'; +$messages['sigunverified'] = '未驗證的簽名。憑證無驗證。憑證 ID:$keyid'; +$messages['signokey'] = '未驗證的簽名。找不到公開金鑰。金鑰 ID:$keyid'; +$messages['sigerror'] = '未驗證的簽名。內部出錯'; +$messages['decryptok'] = '郵件已解密'; +$messages['decrypterror'] = '解密失敗'; +$messages['decryptnokey'] = '解密失敗。找不到私密金鑰。金鑰 ID:$keyid'; +$messages['decryptbadpass'] = '解密失敗。密碼無效'; +$messages['decryptnopass'] = '解密失敗。必需要金鑰的密碼'; +$messages['decryptpartial'] = '郵件已解密,但內文部分未有加密'; +$messages['signerror'] = '簽名失敗'; +$messages['signnokey'] = '簽名失敗。找不到私密金鑰'; +$messages['signbadpass'] = '簽名失敗。密碼無效'; +$messages['signnopass'] = '簽名失敗。必須要金鑰密碼'; +$messages['encrypterror'] = '加密失敗'; +$messages['encryptnokey'] = '加密失敗。找不到用於 $email 的公開金鑰'; +$messages['nokeysfound'] = '找不到金鑰'; +$messages['keynotfound'] = '找不到金鑰!'; +$messages['keyopenerror'] = '無法取得金鑰資訊!內部出錯'; +$messages['keylisterror'] = '無法列出金鑰!內部出錯'; +$messages['keysimportfailed'] = '無法匯入金鑰!內部出錯'; +$messages['keysimportsuccess'] = '成功匯入金鑰。匯入:$new,不變:$old'; +$messages['keyremoving'] = '正在移除金鑰...'; +$messages['keyremoveconfirm'] = '是否確定要刪除所選的金鑰?'; +$messages['keyremovesuccess'] = '成功刪除金鑰'; +$messages['keyremoveerror'] = '無法刪除所選的金鑰'; +$messages['keyimporttext'] = '可用 ASCII-Armor 格式匯入私密及公開金鑰,或撤銷金鑰'; +$messages['keyimportsearchtext'] = '可用金鑰識別碼、使用者名稱或電郵位址搜尋公開金鑰,然後直接匯入'; +$messages['formerror'] = '請填好表格,所有欄位都是必須的!'; +$messages['passwordsdiffer'] = '密碼不符!'; +$messages['keygenerateerror'] = '未能產生金鑰對'; +$messages['keygeneratesuccess'] = '成功產生並匯入金鑰對'; +$messages['keygennosupport'] = '您的網項瀏覽器不支援加密機制,故此無法產生金鑰對!'; +$messages['noidentselected'] = '要為金鑰選取至少一個身份!'; +$messages['nonameident'] = '身份必須要有使用者名稱!'; +?> diff --git a/plugins/help/localization/fy_NL.inc b/plugins/help/localization/fy_NL.inc index 3e852a7ce..6b24012a5 100644 --- a/plugins/help/localization/fy_NL.inc +++ b/plugins/help/localization/fy_NL.inc @@ -18,4 +18,5 @@ $labels['help'] = 'Help'; $labels['about'] = 'Oer'; $labels['license'] = 'Lisinsje'; +$labels['csrfinfo'] = 'Lês mear oer CSRF en hoe\'t wy jo beskermje'; ?> diff --git a/plugins/help/localization/sq_AL.inc b/plugins/help/localization/sq_AL.inc index 8812e3c61..535755e4b 100644 --- a/plugins/help/localization/sq_AL.inc +++ b/plugins/help/localization/sq_AL.inc @@ -18,5 +18,5 @@ $labels['help'] = 'Ndihmë'; $labels['about'] = 'Rreth'; $labels['license'] = 'Licencë'; -$labels['csrfinfo'] = 'Lexoni më teprë rreth CSRF-së dhe se si ju mbrojmë'; +$labels['csrfinfo'] = 'Lexoni më tepër rreth CSRF-së dhe se si ju mbrojmë'; ?> diff --git a/plugins/help/localization/zh_TW.inc b/plugins/help/localization/zh_TW.inc index 59c7d8aae..f8c5654eb 100644 --- a/plugins/help/localization/zh_TW.inc +++ b/plugins/help/localization/zh_TW.inc @@ -17,5 +17,6 @@ */ $labels['help'] = '說明'; $labels['about'] = '關於'; -$labels['license'] = '許可證'; +$labels['license'] = '授權'; +$labels['csrfinfo'] = '閱讀更多有關「跨站偽造要求(CSRF)」的資訊,並了解我們的軟體如何防止您受騙'; ?> diff --git a/plugins/hide_blockquote/localization/fy_NL.inc b/plugins/hide_blockquote/localization/fy_NL.inc new file mode 100644 index 000000000..9995dd18e --- /dev/null +++ b/plugins/hide_blockquote/localization/fy_NL.inc @@ -0,0 +1,21 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Hide-Blockquote plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/ +*/ +$labels['hide'] = 'Ferstopje'; +$labels['show'] = 'Fertoane'; +$labels['quotelimit'] = 'Sitaasje ferstopje at rigel telling grutter is as'; +?> diff --git a/plugins/hide_blockquote/localization/zh_TW.inc b/plugins/hide_blockquote/localization/zh_TW.inc index 0fcca729a..015fd4bbc 100644 --- a/plugins/hide_blockquote/localization/zh_TW.inc +++ b/plugins/hide_blockquote/localization/zh_TW.inc @@ -17,5 +17,5 @@ */ $labels['hide'] = '隱藏'; $labels['show'] = '顯示'; -$labels['quotelimit'] = '隱藏引文當行數大於'; +$labels['quotelimit'] = '當行數大於此數目,就隱藏引文:'; ?> diff --git a/plugins/managesieve/localization/cs_CZ.inc b/plugins/managesieve/localization/cs_CZ.inc index 0b392a7d5..8361f89c6 100644 --- a/plugins/managesieve/localization/cs_CZ.inc +++ b/plugins/managesieve/localization/cs_CZ.inc @@ -52,7 +52,7 @@ $labels['messagesrules'] = 'Pravidla pro příchozí zprávu:'; $labels['messagesactions'] = '...vykonej následující akce:'; $labels['add'] = 'Přidej'; $labels['del'] = 'Smaž'; -$labels['sender'] = 'Odesílatel'; +$labels['sender'] = 'Sender'; $labels['recipient'] = 'Příjemce'; $labels['vacationaddr'] = 'Mé e-mailové adresy:'; $labels['vacationdays'] = 'Počet dnů mezi automatickými odpověďmi:'; diff --git a/plugins/managesieve/localization/de_CH.inc b/plugins/managesieve/localization/de_CH.inc index dba3a402a..36732ce13 100644 --- a/plugins/managesieve/localization/de_CH.inc +++ b/plugins/managesieve/localization/de_CH.inc @@ -70,6 +70,7 @@ $labels['filtersetadd'] = 'Filtersatz anlegen'; $labels['filtersetdel'] = 'Aktuellen Filtersatz löschen'; $labels['filtersetact'] = 'Aktuellen Filtersatz aktivieren'; $labels['filtersetdeact'] = 'Aktuellen Filtersatz deaktivieren'; +$labels['filterseteditraw'] = 'Filtersatz bearbeiten'; $labels['filterdef'] = 'Filterdefinition'; $labels['filtersetname'] = 'Filtersatzname'; $labels['newfilterset'] = 'Neuer Filtersatz'; @@ -217,6 +218,7 @@ $messages['setdeleteerror'] = 'Serverfehler beim Löschen des gewählten Filters $messages['setactivated'] = 'Filtersatz erfolgreich aktiviert.'; $messages['setdeactivated'] = 'Filtersatz erfolgreich deaktiviert.'; $messages['setdeleted'] = 'Filtersatz erfolgreich gelöscht.'; +$messages['setupdated'] = 'Filtersatz erfolgreich gespeichert.'; $messages['setdeleteconfirm'] = 'Sind Sie sicher, dass Sie den ausgewählten Filtersatz löschen möchten?'; $messages['setcreateerror'] = 'Serverfehler beim Erstellen des Filtersatzes.'; $messages['setcreated'] = 'Filter erfolgreich erstellt.'; diff --git a/plugins/managesieve/localization/en_GB.inc b/plugins/managesieve/localization/en_GB.inc index 0a0fbba57..27cc917f2 100644 --- a/plugins/managesieve/localization/en_GB.inc +++ b/plugins/managesieve/localization/en_GB.inc @@ -70,6 +70,7 @@ $labels['filtersetadd'] = 'Add filters set'; $labels['filtersetdel'] = 'Delete current filters set'; $labels['filtersetact'] = 'Activate current filters set'; $labels['filtersetdeact'] = 'Deactivate current filters set'; +$labels['filterseteditraw'] = 'Edit filter set'; $labels['filterdef'] = 'Filter definition'; $labels['filtersetname'] = 'Filters set name'; $labels['newfilterset'] = 'New filters set'; @@ -124,6 +125,7 @@ $labels['filtercreate'] = 'Create filter'; $labels['usedata'] = 'Use following data in the filter:'; $labels['nextstep'] = 'Next Step'; $labels['...'] = '...'; +$labels['string'] = 'String'; $labels['currdate'] = 'Current date'; $labels['datetest'] = 'Date'; $labels['dateheader'] = 'header:'; @@ -216,6 +218,7 @@ $messages['setdeleteerror'] = 'Unable to delete selected filters set. Server err $messages['setactivated'] = 'Filters set activated successfully.'; $messages['setdeactivated'] = 'Filters set deactivated successfully.'; $messages['setdeleted'] = 'Filters set deleted successfully.'; +$messages['setupdated'] = 'Filters set updated successfully.'; $messages['setdeleteconfirm'] = 'Are you sure, you want to delete selected filters set?'; $messages['setcreateerror'] = 'Unable to create filters set. Server error occurred.'; $messages['setcreated'] = 'Filters set created successfully.'; diff --git a/plugins/managesieve/localization/fi_FI.inc b/plugins/managesieve/localization/fi_FI.inc index a8b65f676..98639026e 100644 --- a/plugins/managesieve/localization/fi_FI.inc +++ b/plugins/managesieve/localization/fi_FI.inc @@ -58,6 +58,7 @@ $labels['vacationaddr'] = 'Sähköpostiosoitteeni:'; $labels['vacationdays'] = 'Viestien lähetysväli (päivissä):'; $labels['vacationinterval'] = 'Viestien lähetysväli:'; $labels['vacationreason'] = 'Viestin runko (loman syy):'; +$labels['vacationfrom'] = 'Vastauksen lähetysosoite:'; $labels['vacationsubject'] = 'Viestin aihe:'; $labels['days'] = 'päivää'; $labels['seconds'] = 'sekuntia'; @@ -69,8 +70,10 @@ $labels['filtersetadd'] = 'Lisää suodatinasetus'; $labels['filtersetdel'] = 'Poista nykyiset suodatinasetukset'; $labels['filtersetact'] = 'Aktivoi nykyinen suodattimien asetus'; $labels['filtersetdeact'] = 'Poista käytöstä nykyinen suodattimien asetus'; +$labels['filterseteditraw'] = 'Muokkaa suodatinasetusta'; $labels['filterdef'] = 'Suodattimen määrittely'; $labels['filtersetname'] = 'Suodattimien asetuksen nimi'; +$labels['newfilterset'] = 'Uusi suodatinasetus'; $labels['active'] = 'aktiivinen'; $labels['none'] = 'Ei mikään'; $labels['fromset'] = 'sarjasta'; @@ -157,6 +160,7 @@ $labels['default'] = 'oletus'; $labels['vacation'] = 'Loma'; $labels['vacation.reply'] = 'Vastausviesti'; $labels['vacation.advanced'] = 'Lisäasetukset'; +$labels['vacation.from'] = 'Vastauksen lähetysosoite'; $labels['vacation.subject'] = 'Aihe'; $labels['vacation.body'] = 'Sisältö'; $labels['vacation.start'] = 'Loman alku'; @@ -170,6 +174,8 @@ $labels['vacation.keep'] = 'Säilytä'; $labels['vacation.discard'] = 'Hylkää'; $labels['vacation.redirect'] = 'Ohjaa uudelleen osoitteeseen'; $labels['vacation.copy'] = 'Lähetä kopio osoitteeseen'; +$labels['arialabelfiltersetactions'] = 'Suodatinasetuksen toiminnot'; +$labels['ariasummaryfiltersetslist'] = 'Suodatinasetuslista'; $labels['filterstitle'] = 'Muokkaa saapuvan postin suodattimia'; $labels['vacationtitle'] = 'Muokkaa poissaolosääntöä'; $labels['message'] = 'Viesti'; @@ -181,12 +187,30 @@ $messages['filtersaved'] = 'Suodatin tallennettu onnistuneesti.'; $messages['filtersaveerror'] = 'Suodattimen tallennus epäonnistui palvelinvirheen vuoksi.'; $messages['filterformerror'] = 'Suodatinlomake sisältää virheitä.'; $messages['filterdeleteconfirm'] = 'Haluatko varmasti poistaa valitun suodattimen?'; +$messages['ruledeleteconfirm'] = 'Haluatko varmasti poistaa valitun säännön?'; +$messages['actiondeleteconfirm'] = 'Haluatko varmasti poistaa valitun toimenpiteen?'; $messages['forbiddenchars'] = 'Virheellisiä merkkejä kentässä.'; $messages['cannotbeempty'] = 'Kenttä ei voi olla tyhjä.'; $messages['ruleexist'] = 'Suodatin samalla nimellä on jo olemassa.'; +$messages['setactivateerror'] = 'Palvelinvirheestä johtuen suodatinasetuksia ei voitu tallentaa.'; +$messages['setdeactivateerror'] = 'Palvelinvirheestä johtuen suodatinasetuksia ei voitu kytkeä pois päältä.'; +$messages['setdeleteerror'] = 'Palvelinvirheestä johtuen suodatinasetuksia ei voitu poistaa.'; +$messages['setactivated'] = 'Suodatinasetukset kytketty päälle.'; +$messages['setdeactivated'] = 'Suodatinasetukset kytketty pois päältä.'; +$messages['setdeleted'] = 'Suodatinasetukset poistettu.'; +$messages['setupdated'] = 'Suodatinasetukset päivitetty.'; +$messages['setdeleteconfirm'] = 'Oletko varma että haluat poistaa valitut suodatinasetukset?'; +$messages['setcreateerror'] = 'Palvelinvirheestä johtuen suodatinasetuksia ei voitu luoda.'; +$messages['setcreated'] = 'Suodatinasetukset luotiin onnistuneesti.'; +$messages['activateerror'] = 'Palvelinvirheestä johtuen valittuja suodattimia ei voitu ottaa käyttöön.'; +$messages['deactivateerror'] = 'Palvelinvirheestä johtuen valittuja suodattimia ei voitu kytkeä pois käytöstä.'; +$messages['deactivated'] = 'Suodattimet kytketty pois käytöstä.'; +$messages['activated'] = 'Suodattimet otettu käyttöön.'; $messages['moved'] = 'Suodatin siirretty onnistuneesti.'; +$messages['moveerror'] = 'Palvelinvirheestä johtuen suodatinta ei voitu siirtää.'; $messages['nametoolong'] = 'Nimi on liian pitkä.'; $messages['namereserved'] = 'Varattu nimi.'; +$messages['setexist'] = 'Suodatinasetus on jo olemassa.'; $messages['saveerror'] = 'Tietojen tallennus epäonnistui palvelinvirheen vuoksi.'; $messages['vacationsaved'] = 'Lomatiedot tallennettu onnistuneesti.'; $messages['emptyvacationbody'] = 'Lomaviestin sisältö vaaditaan!'; diff --git a/plugins/managesieve/localization/he_IL.inc b/plugins/managesieve/localization/he_IL.inc index 393bc23c8..fc11aec77 100644 --- a/plugins/managesieve/localization/he_IL.inc +++ b/plugins/managesieve/localization/he_IL.inc @@ -70,6 +70,7 @@ $labels['filtersetadd'] = 'הוספה של קבוצת מסננים'; $labels['filtersetdel'] = 'מחיקה של מסננים נוכחיים'; $labels['filtersetact'] = 'הפעלה של מסננים נוכחיים'; $labels['filtersetdeact'] = 'השבתה של מסננים נוכחיים'; +$labels['filterseteditraw'] = 'עריכת סינון'; $labels['filterdef'] = 'הגדרת מסנן'; $labels['filtersetname'] = 'שם של קבוצת מסננים'; $labels['newfilterset'] = 'קבוצת מסננים חדשה'; @@ -217,6 +218,7 @@ $messages['setdeleteerror'] = 'לא ניתן למחוק רשימת מסננים $messages['setactivated'] = 'ערכת המסננים הופעלה בהצלחה.'; $messages['setdeactivated'] = 'ערכת המסננים נוטרלה בהצלחה.'; $messages['setdeleted'] = 'ערכת המסננים נמחקה בהצלחה.'; +$messages['setupdated'] = 'הסינון נשמר'; $messages['setdeleteconfirm'] = 'האם אכן ברצונך למחוק את ערכת המסננים הנבחרת?'; $messages['setcreateerror'] = 'לא ניתן ליצור ערכת מסננים. אירעה שגיאה בצד השרת.'; $messages['setcreated'] = 'ערכת המסננים נוצרה בהצלחה.'; diff --git a/plugins/managesieve/localization/ia.inc b/plugins/managesieve/localization/ia.inc index 3837023bb..ddee9be1f 100644 --- a/plugins/managesieve/localization/ia.inc +++ b/plugins/managesieve/localization/ia.inc @@ -54,6 +54,7 @@ $labels['add'] = 'Adder'; $labels['del'] = 'Deler'; $labels['sender'] = 'Expeditor'; $labels['recipient'] = 'Destinatario'; +$labels['vacationaddr'] = 'Mi adresses de e-mail:'; $labels['vacationdays'] = 'Frequentia de invio de messages (in dies):'; $labels['vacationinterval'] = 'Frequentia de invio de messages:'; $labels['vacationreason'] = 'Texto del message (motivo del absentia):'; @@ -68,6 +69,7 @@ $labels['filtersetadd'] = 'Adder gruppo de filtros'; $labels['filtersetdel'] = 'Deler le gruppo de filtros actual'; $labels['filtersetact'] = 'Activar le gruppo de filtros actual'; $labels['filtersetdeact'] = 'Disactivar le gruppo de filtros actual'; +$labels['filterseteditraw'] = 'Modificar gruppo de filtros'; $labels['filterdef'] = 'Definition del filtro'; $labels['filtersetname'] = 'Nomine del gruppo de filtros'; $labels['newfilterset'] = 'Nove gruppo de filtros'; @@ -169,6 +171,7 @@ $labels['vacation.end'] = 'Fin del vacantias'; $labels['vacation.status'] = 'Stato'; $labels['vacation.on'] = 'Active'; $labels['vacation.off'] = 'Non active'; +$labels['vacation.addresses'] = 'Mi adresses de e-mail'; $labels['vacation.interval'] = 'Intervallo de responsa'; $labels['vacation.after'] = 'Mitter le regula de vacantias post'; $labels['vacation.saving'] = 'Salveguarda datos...'; @@ -185,12 +188,17 @@ $labels['ariasummaryfilterslist'] = 'Lista de filtros'; $labels['ariasummaryfiltersetslist'] = 'Lista de gruppos de filtros'; $labels['filterstitle'] = 'Modificar filtros de e-mail entrante'; $labels['vacationtitle'] = 'Modificar regula de absentia'; +$labels['message'] = 'Message'; +$labels['duplicate'] = 'es duplicate'; +$labels['notduplicate'] = 'non es duplicate'; +$labels['duplicate.uniqueid'] = 'identificator:'; $messages['filterunknownerror'] = 'Error de servitor incognite.'; $messages['filterconnerror'] = 'Impossibile connecter al servitor.'; $messages['filterdeleteerror'] = 'Impossibile deler le filtro. Un error de servitor ha occurrite.'; $messages['filterdeleted'] = 'Le filtro ha essite delite.'; $messages['filtersaved'] = 'Le filtro ha essite salveguardate.'; $messages['filtersaveerror'] = 'Impossibile salveguardar le filtro. Un error de servitor ha occurrite.'; +$messages['filterformerror'] = 'Le forma del filtro contine errores.'; $messages['filterdeleteconfirm'] = 'Es vos secur de voler deler le filtro seligite?'; $messages['ruledeleteconfirm'] = 'Es vos secur de voler deler le regula seligite?'; $messages['actiondeleteconfirm'] = 'Es vos secur de voler deler le action seligite?'; @@ -220,4 +228,5 @@ $messages['invaliddateformat'] = 'Le formato del data o del parte de data non es $messages['saveerror'] = 'Impossibile salveguardar le datos. Un error de servitor ha occurrite.'; $messages['vacationsaved'] = 'Le datos del vacantias ha essite salveguardate.'; $messages['emptyvacationbody'] = 'Le texto del message de vacantias es obligatori.'; +$messages['duplicate.conflict.err'] = 'Ambe le capite e le identificator unic non es permittite.'; ?> diff --git a/plugins/managesieve/localization/id_ID.inc b/plugins/managesieve/localization/id_ID.inc index 9d26140f0..91b82833b 100644 --- a/plugins/managesieve/localization/id_ID.inc +++ b/plugins/managesieve/localization/id_ID.inc @@ -70,6 +70,7 @@ $labels['filtersetadd'] = 'Tambahkan himpunan filter'; $labels['filtersetdel'] = 'Hapus himpunan filter yang sekarang'; $labels['filtersetact'] = 'Aktifkan himpunan filter ayng sekarang'; $labels['filtersetdeact'] = 'Matikan himpunan filter ayng sekarang'; +$labels['filterseteditraw'] = 'Sunting set penyaring'; $labels['filterdef'] = 'Definisi filter'; $labels['filtersetname'] = 'Nama himpunan filter'; $labels['newfilterset'] = 'Himpunan filter baru'; @@ -217,6 +218,7 @@ $messages['setdeleteerror'] = 'Tidak dapat menghapus kumpulan penyaringan terpil $messages['setactivated'] = 'Kumpulan penyaringan berhasil dihidupkan.'; $messages['setdeactivated'] = 'Kumpulan penyaringan berhasil dimatikan.'; $messages['setdeleted'] = 'Kumpulan penyaringan berhasil dihapus.'; +$messages['setupdated'] = 'Set penyaring sukses dimutakhirkan.'; $messages['setdeleteconfirm'] = 'Yakin ingin menghapus kumpulan penyaringan terpilih?'; $messages['setcreateerror'] = 'Tidak bisa membuat kumpulan penyaringan. Terjadi kesalahan pada server'; $messages['setcreated'] = 'Kumpulan penyaringan berhasul dibuat.'; diff --git a/plugins/managesieve/localization/ko_KR.inc b/plugins/managesieve/localization/ko_KR.inc index 7823bacb0..700a78221 100644 --- a/plugins/managesieve/localization/ko_KR.inc +++ b/plugins/managesieve/localization/ko_KR.inc @@ -70,6 +70,7 @@ $labels['filtersetadd'] = '필터 세트 추가'; $labels['filtersetdel'] = '현재 필터 세트를 삭제'; $labels['filtersetact'] = '현재 필터 세트 활성화'; $labels['filtersetdeact'] = '현재 필터 세트 비활성화'; +$labels['filterseteditraw'] = '필터 세트 편집'; $labels['filterdef'] = '필터 정의'; $labels['filtersetname'] = '필터 세트명'; $labels['newfilterset'] = '새 필터 세트'; @@ -193,13 +194,18 @@ $labels['vacationtitle'] = '자리비움 규칙 편집'; $labels['message'] = '메시지'; $labels['duplicate'] = '중복임'; $labels['notduplicate'] = '중복 아님'; +$labels['duplicate.handle'] = '취급'; +$labels['duplicate.header'] = '머리글:'; $labels['duplicate.uniqueid'] = '식별자:'; +$labels['duplicate.seconds'] = '타임아웃 (초):'; +$labels['duplicate.last'] = '마지막 실행과 관련'; $messages['filterunknownerror'] = '알수 없는 서버 오류.'; $messages['filterconnerror'] = '서버에 연결할 수 없습니다.'; $messages['filterdeleteerror'] = '필터를 삭제할 수 없습니다. 서버 오류가 발생했습니다.'; $messages['filterdeleted'] = '필터가 성공적으로 삭제되었습니다.'; $messages['filtersaved'] = '필터가 성공적으로 저장되었습니다.'; $messages['filtersaveerror'] = '필터를 저장할 수 없습니다. 서버 오류가 발생했습니다.'; +$messages['filterformerror'] = '필터 양식에 오류가 포함되어 있음.'; $messages['filterdeleteconfirm'] = '정말로 선택한 필터를 삭제하시겠습니까?'; $messages['ruledeleteconfirm'] = '정말로 선택한 규칙을 삭제하시겠습니까?'; $messages['actiondeleteconfirm'] = '정말로 선택한 동작을 삭제하시겠습니까?'; @@ -212,6 +218,7 @@ $messages['setdeleteerror'] = '선택한 필터 세트를 삭제할 수 없습 $messages['setactivated'] = '필터 세트가 성공적으로 활성화되었습니다.'; $messages['setdeactivated'] = '필터 세트가 성공적으로 비활성화되었습니다.'; $messages['setdeleted'] = '필터 세트가 성공적으로 삭제되었습니다.'; +$messages['setupdated'] = '필터 세트가 성공적으로 업데이트 됨.'; $messages['setdeleteconfirm'] = '정말로 선택한 필터 세트를 삭제하시겠습니까?'; $messages['setcreateerror'] = '선택한 필터 세트를 생성할 수 없습니다. 서버 오류가 발생했습니다.'; $messages['setcreated'] = '필터 세트가 성공적으로 생성되었습니다.'; @@ -229,4 +236,5 @@ $messages['invaliddateformat'] = '유효하지 않은 날짜 또는 날짜 일 $messages['saveerror'] = '데이터를 저장할 수 없습니다.. 서버 오류가 발생했습니다.'; $messages['vacationsaved'] = '휴가 데이터가 성공적으로 저장되었습니다.'; $messages['emptyvacationbody'] = '휴가 메시지의 본문이 필요합니다!'; +$messages['duplicate.conflict.err'] = '머리글 및 유일 식별자가 허용되지 않음.'; ?> diff --git a/plugins/managesieve/localization/lt_LT.inc b/plugins/managesieve/localization/lt_LT.inc index c8cd8f55d..e1e725051 100644 --- a/plugins/managesieve/localization/lt_LT.inc +++ b/plugins/managesieve/localization/lt_LT.inc @@ -70,6 +70,7 @@ $labels['filtersetadd'] = 'Pridėti filtrų rinkinį'; $labels['filtersetdel'] = 'Pašalinti šį filtrų rinkinį'; $labels['filtersetact'] = 'Įgalinti šį filtrų rinkinį'; $labels['filtersetdeact'] = 'Išjungti šį filtrų rinkinį'; +$labels['filterseteditraw'] = 'Taisyti filtrų rinkinį'; $labels['filterdef'] = 'Filtro aprašas'; $labels['filtersetname'] = 'Filtrų rinkinio pavadinimas'; $labels['newfilterset'] = 'Naujas filtrų rinkinys'; @@ -124,6 +125,7 @@ $labels['filtercreate'] = 'Kurti filtrą'; $labels['usedata'] = 'Filtrui naudoti šiuos duomenis:'; $labels['nextstep'] = 'Kitas žingsnis'; $labels['...'] = '…'; +$labels['string'] = 'Eilutė'; $labels['currdate'] = 'Šiandienos data'; $labels['datetest'] = 'Data'; $labels['dateheader'] = 'antraštė:'; @@ -192,8 +194,11 @@ $labels['vacationtitle'] = 'Redaguoti ne-biure taisyklę'; $labels['message'] = 'Laiškas'; $labels['duplicate'] = 'yra dubliuojamas'; $labels['notduplicate'] = 'nėra dubliuojamas'; +$labels['duplicate.handle'] = 'doroklė:'; $labels['duplicate.header'] = 'antraštė:'; $labels['duplicate.uniqueid'] = 'identifikatorius:'; +$labels['duplicate.seconds'] = 'laiko limitas (sekundžių):'; +$labels['duplicate.last'] = 'santykinai paskutinio vykdymo'; $messages['filterunknownerror'] = 'Nežinoma serverio klaida.'; $messages['filterconnerror'] = 'Neįmanoma užmegzti ryšio su serveriu.'; $messages['filterdeleteerror'] = 'Nepavyksta ištrinti filtro. Įvyko serverio klaida.'; @@ -213,6 +218,7 @@ $messages['setdeleteerror'] = 'Neįmanoma panaikinti pasirinkto filtrų rinkinio $messages['setactivated'] = 'Filtrų rinkinys sėkmingai aktyvuotas.'; $messages['setdeactivated'] = 'Filtrų rinkinys sėkmingai deaktyvuotas.'; $messages['setdeleted'] = 'Filtrų rinkinys sėkmingai panaikintas.'; +$messages['setupdated'] = 'Filtrų rinkinys sėkmingai atnaujintas.'; $messages['setdeleteconfirm'] = 'Ar jūs esate tikri, jog norite panaikinti pasirinktą filtrų rinkinį?'; $messages['setcreateerror'] = 'Neįmanoma sukurti filtrų rinkinio. Įvyko serverio klaida.'; $messages['setcreated'] = 'Filtrų rinkinys sėkmingai sukurtas.'; diff --git a/plugins/managesieve/localization/nl_NL.inc b/plugins/managesieve/localization/nl_NL.inc index 351806758..f5e2d9837 100644 --- a/plugins/managesieve/localization/nl_NL.inc +++ b/plugins/managesieve/localization/nl_NL.inc @@ -70,6 +70,7 @@ $labels['filtersetadd'] = 'Nieuwe filterset'; $labels['filtersetdel'] = 'Verwijder huidige filterset'; $labels['filtersetact'] = 'Huidige filterset activeren'; $labels['filtersetdeact'] = 'Huidige filterset uitschakelen'; +$labels['filterseteditraw'] = 'Filterset bewerken'; $labels['filterdef'] = 'Filterdefinitie'; $labels['filtersetname'] = 'Filtersetnaam'; $labels['newfilterset'] = 'Nieuwe filterset'; @@ -217,6 +218,7 @@ $messages['setdeleteerror'] = 'Filterset kon niet verwijderd worden. Er trad een $messages['setactivated'] = 'Filterset succesvol geactiveerd.'; $messages['setdeactivated'] = 'Filterset succesvol gedeactiveerd.'; $messages['setdeleted'] = 'Filterset succesvol verwijderd.'; +$messages['setupdated'] = 'Filterset succesvol bijgewerkt.'; $messages['setdeleteconfirm'] = 'Weet u zeker dat u de geselecteerde filterset wilt verwijderen?'; $messages['setcreateerror'] = 'Filterset kon niet aangemaakt worden. Er trad een serverfout op.'; $messages['setcreated'] = 'Filterset succesvol aangemaakt.'; diff --git a/plugins/managesieve/localization/pl_PL.inc b/plugins/managesieve/localization/pl_PL.inc index 536a8c5cd..9b80eddad 100644 --- a/plugins/managesieve/localization/pl_PL.inc +++ b/plugins/managesieve/localization/pl_PL.inc @@ -224,8 +224,8 @@ $messages['setcreateerror'] = 'Nie można utworzyć zbioru filtrów. Błąd serw $messages['setcreated'] = 'Zbiór filtrów został utworzony pomyślnie.'; $messages['activateerror'] = 'Nie można włączyć wybranych filtrów. Błąd serwera.'; $messages['deactivateerror'] = 'Nie można wyłączyć wybranych filtrów. Błąd serwera.'; -$messages['deactivated'] = 'Filtr(y) włączono pomyślnie.'; -$messages['activated'] = 'Filtr(y) wyłączono pomyślnie.'; +$messages['deactivated'] = 'Filtr(y) wyłączono pomyślnie.'; +$messages['activated'] = 'Filtr(y) włączono pomyślnie.'; $messages['moved'] = 'Filter został przeniesiony pomyślnie.'; $messages['moveerror'] = 'Nie można przenieść wybranego filtra. Błąd serwera.'; $messages['nametoolong'] = 'Zbyt długa nazwa.'; diff --git a/plugins/managesieve/localization/sq_AL.inc b/plugins/managesieve/localization/sq_AL.inc index bc54b1b3a..0350952f2 100644 --- a/plugins/managesieve/localization/sq_AL.inc +++ b/plugins/managesieve/localization/sq_AL.inc @@ -194,11 +194,11 @@ $labels['duplicate.uniqueid'] = 'identifikues:'; $labels['duplicate.seconds'] = 'mbarim kohe (sekonda):'; $labels['duplicate.last'] = 'relative ndaj përmbushjes së fundit'; $messages['filterunknownerror'] = 'Gabim i panjohur shërbyesi.'; -$messages['filterconnerror'] = 'I pazoti të lidhet me shërbyesin.'; -$messages['filterdeleteerror'] = 'I pazoti të fshijë filtrin. Ndodhi gabim shërbyesi.'; +$messages['filterconnerror'] = 'S’arrihet të lidhet me shërbyesin.'; +$messages['filterdeleteerror'] = 'S’arrihet të fshihet filtri. Ndodhi gabim shërbyesi.'; $messages['filterdeleted'] = 'Grupi u fshi me sukses.'; $messages['filtersaved'] = 'Filtri u ruajt me sukses.'; -$messages['filtersaveerror'] = 'I pazoti të ruajë filtrin. Ndodhi një gabim shërbyesi.'; +$messages['filtersaveerror'] = 'S’arrihet të ruhet filtri. Ndodhi një gabim shërbyesi.'; $messages['filterformerror'] = 'Formulari i filtrit përmban gabime.'; $messages['filterdeleteconfirm'] = 'Doni vërtet të fshihet filtri i përzgjedhur?'; $messages['ruledeleteconfirm'] = 'Jeni i sigurt se doni të fshihet rregulli i përzgjedhur?'; @@ -206,29 +206,29 @@ $messages['actiondeleteconfirm'] = 'Jeni i sigurt se doni të fshihet veprimi i $messages['forbiddenchars'] = 'Shenja të ndaluara te fusha.'; $messages['cannotbeempty'] = 'Fusha s’mund të jetë e zbrazët.'; $messages['ruleexist'] = 'Ka tashmë një filtër me emrin e treguar.'; -$messages['setactivateerror'] = 'I pazoti të aktivizojë grupin e përzgjedhur të filtrave. Ndodhi një gabim shërbyesi.'; -$messages['setdeactivateerror'] = 'I pazoti të çaktivizojë grupin e përzgjedhur të filtrave. Ndodhi një gabim shërbyesi.'; -$messages['setdeleteerror'] = 'I pazoti të fshijë grupin e përzgjedhur të filtrave. Ndodhi një gabim shërbyesi.'; +$messages['setactivateerror'] = 'S’arrihet të aktivizohet grupi i përzgjedhur i filtrave. Ndodhi një gabim shërbyesi.'; +$messages['setdeactivateerror'] = 'S’arrihet të çaktivizohet grupi i përzgjedhur i filtrave. Ndodhi një gabim shërbyesi.'; +$messages['setdeleteerror'] = 'S’arrihet të fshihet grupi i përzgjedhur i filtrave. Ndodhi një gabim shërbyesi.'; $messages['setactivated'] = 'Grupi i filtrave u aktivizua me sukses.'; $messages['setdeactivated'] = 'Grupi i filtrave u çaktivizua me sukses.'; $messages['setdeleted'] = 'Grupi i filtrave u fshi me sukses.'; $messages['setupdated'] = 'Grupi i filtrave u përditësua me sukses.'; $messages['setdeleteconfirm'] = 'Jeni i sigurt se doni të fshihet grupi i përzgjedhur i filtrave?'; -$messages['setcreateerror'] = 'I pazoti të krijojë grup filtrash. Ndodhi gabim shërbyesi.'; +$messages['setcreateerror'] = 'S’arrihet të krijohet grup filtrash. Ndodhi gabim shërbyesi.'; $messages['setcreated'] = 'Grupi i filtrave u krijua me sukses.'; -$messages['activateerror'] = 'I pazoti të aktivizojë filtrin(at) e përzgjedhur. Ndodhi një gabim shërbyesi.'; -$messages['deactivateerror'] = 'I pazoti të çaktivizojë filtrin(at) e përzgjedhur. Ndodhi një gabim shërbyesi.'; +$messages['activateerror'] = 'S’arrihet të aktivizohet filtri(at) e përzgjedhur. Ndodhi një gabim shërbyesi.'; +$messages['deactivateerror'] = 'S’arrihet të çaktivizohet filtri(at) e përzgjedhur. Ndodhi një gabim shërbyesi.'; $messages['deactivated'] = 'Filtri(at) u çaktivizua me sukses.'; $messages['activated'] = 'Filtri(at) u aktivizua me sukses.'; $messages['moved'] = 'Filtri u lëviz me sukses.'; -$messages['moveerror'] = 'I pazoti të lëvizë filtrin e përzgjedhur. Ndodhi një gabim shërbyesi.'; +$messages['moveerror'] = 'S’arrihet të lëvizet filtri i përzgjedhur. Ndodhi një gabim shërbyesi.'; $messages['nametoolong'] = 'Emër shumë i gjatë.'; $messages['namereserved'] = 'Emër i rezervuar.'; $messages['setexist'] = 'Ka tashmë një grup të tillë.'; $messages['nodata'] = 'Duhet përzgjedhur të paktën një pozicion!'; $messages['invaliddateformat'] = 'Format i pavlefshëm date ose pjese date'; -$messages['saveerror'] = 'I pazoti të ruajë të dhëna. Ndodhi një gabim shërbyesi.'; +$messages['saveerror'] = 'S’arrihet të ruhen të dhëna. Ndodhi një gabim shërbyesi.'; $messages['vacationsaved'] = 'Data e pushimeve u ruajt me sukses.'; $messages['emptyvacationbody'] = 'Lënda e mesazhit të pushimeve është e domosdoshme!'; -$messages['duplicate.conflict.err'] = 'Nuk lejohet përdorimi i njëkohshëm i kryes dhe identifikuesit unik.'; +$messages['duplicate.conflict.err'] = 'S’lejohet përdorimi i njëkohshëm i kryes dhe identifikuesit unik.'; ?> diff --git a/plugins/managesieve/localization/sv_SE.inc b/plugins/managesieve/localization/sv_SE.inc index 91231d2ef..67b6b716a 100644 --- a/plugins/managesieve/localization/sv_SE.inc +++ b/plugins/managesieve/localization/sv_SE.inc @@ -63,13 +63,13 @@ $labels['vacationsubject'] = 'Meddelandeämne:'; $labels['days'] = 'Dagar'; $labels['seconds'] = 'Sekunder'; $labels['rulestop'] = 'Avsluta filtrering'; -$labels['enable'] = 'Aktivera/deaktivera'; +$labels['enable'] = 'Aktivera/avaktivera'; $labels['filterset'] = 'Filtergrupp'; $labels['filtersets'] = 'Filtergrupper'; $labels['filtersetadd'] = 'Ny filtergrupp'; $labels['filtersetdel'] = 'Ta bort filtergrupp'; $labels['filtersetact'] = 'Aktivera filtergrupp'; -$labels['filtersetdeact'] = 'Deaktivera filtergrupp'; +$labels['filtersetdeact'] = 'Avaktivera filtergrupp'; $labels['filterseteditraw'] = 'Ändra filtergrupp'; $labels['filterdef'] = 'Filterdefinition'; $labels['filtersetname'] = 'Filtergruppsnamn'; @@ -78,7 +78,7 @@ $labels['active'] = 'aktiv'; $labels['none'] = 'ingen'; $labels['fromset'] = 'från grupp'; $labels['fromfile'] = 'från fil'; -$labels['filterdisabled'] = 'Filter deaktiverat'; +$labels['filterdisabled'] = 'Filter avaktiverat'; $labels['countisgreaterthan'] = 'antal är större än'; $labels['countisgreaterthanequal'] = 'antal är större än eller lika med'; $labels['countislessthan'] = 'antal är mindre än'; @@ -216,16 +216,16 @@ $messages['setactivateerror'] = 'Filtergruppen kunde inte aktiveras på grund av $messages['setdeactivateerror'] = 'Filtergruppen kunde inte deaktiveras på grund av serverfel'; $messages['setdeleteerror'] = 'Filtergruppen kunde inte tas bort på grund av serverfel'; $messages['setactivated'] = 'Filtergruppen är aktiverad'; -$messages['setdeactivated'] = 'Filtergruppen är deaktiverad'; +$messages['setdeactivated'] = 'Filtergruppen är avaktiverad'; $messages['setdeleted'] = 'Filtergruppen är borttagen'; $messages['setupdated'] = 'Filtergruppen är ändrad'; $messages['setdeleteconfirm'] = 'Vill du ta bort filtergruppen?'; $messages['setcreateerror'] = 'Filtergruppen kunde inte läggas till på grund av serverfel'; $messages['setcreated'] = 'Filtergruppen har lagts till'; $messages['activateerror'] = 'Kunde inte aktivera filter på grund av serverfel.'; -$messages['deactivateerror'] = 'Kunde inte deaktivera filter på grund av serverfel.'; +$messages['deactivateerror'] = 'Kunde inte avaktivera filter på grund av serverfel.'; $messages['deactivated'] = 'Filter aktiverat.'; -$messages['activated'] = 'Filter deaktiverat.'; +$messages['activated'] = 'Filter avaktiverat.'; $messages['moved'] = 'Filter flyttat.'; $messages['moveerror'] = 'Kunde inte flytta filter på grund av serverfel.'; $messages['nametoolong'] = 'För långt namn.'; diff --git a/plugins/managesieve/localization/zh_TW.inc b/plugins/managesieve/localization/zh_TW.inc index 667278726..4b8f63842 100644 --- a/plugins/managesieve/localization/zh_TW.inc +++ b/plugins/managesieve/localization/zh_TW.inc @@ -15,17 +15,17 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/ */ -$labels['filters'] = '篩選器'; -$labels['managefilters'] = '設定篩選器'; -$labels['filtername'] = '篩選器名稱'; -$labels['newfilter'] = '建立新篩選器'; -$labels['filteradd'] = '增加篩選器'; -$labels['filterdel'] = '刪除篩選器'; +$labels['filters'] = '篩選'; +$labels['managefilters'] = '設定篩選'; +$labels['filtername'] = '篩選名稱'; +$labels['newfilter'] = '建立新篩選'; +$labels['filteradd'] = '加入篩選'; +$labels['filterdel'] = '刪除篩選'; $labels['moveup'] = '上移'; $labels['movedown'] = '下移'; $labels['filterallof'] = '符合所有規則'; $labels['filteranyof'] = '符合任一條規則'; -$labels['filterany'] = '所有信件'; +$labels['filterany'] = '所有郵件'; $labels['filtercontains'] = '包含'; $labels['filternotcontains'] = '不包含'; $labels['filteris'] = '等於'; @@ -38,69 +38,75 @@ $labels['filterregex'] = '符合正規表達式'; $labels['filternotregex'] = '不符合正規表達式'; $labels['filterunder'] = '小於'; $labels['filterover'] = '大於'; -$labels['addrule'] = '新增規則'; +$labels['addrule'] = '加入規則'; $labels['delrule'] = '刪除規則'; -$labels['messagemoveto'] = '將信件移至'; -$labels['messageredirect'] = '將信件轉寄至'; -$labels['messagecopyto'] = '複製訊息至'; -$labels['messagesendcopy'] = '寄送訊息複本至'; -$labels['messagereply'] = '以下列內容回覆'; -$labels['messagedelete'] = '刪除信件'; -$labels['messagediscard'] = '刪除信件並以下列內容回覆'; +$labels['messagemoveto'] = '將郵件移至'; +$labels['messageredirect'] = '將郵件轉寄至'; +$labels['messagecopyto'] = '將郵件複製至'; +$labels['messagesendcopy'] = '寄送郵件複本至'; +$labels['messagereply'] = '用以下內容回覆'; +$labels['messagedelete'] = '刪除郵件'; +$labels['messagediscard'] = '刪除郵件並用以下內容回覆'; $labels['messagekeep'] = '在收件匣保留郵件'; -$labels['messagesrules'] = '對新收到的信件:'; -$labels['messagesactions'] = '執行下列動作:'; -$labels['add'] = '新增'; +$labels['messagesrules'] = '對新收到的郵件:'; +$labels['messagesactions'] = '執行以下動作:'; +$labels['add'] = '加入'; $labels['del'] = '刪除'; $labels['sender'] = '寄件者'; $labels['recipient'] = '收件者'; +$labels['vacationaddr'] = '我的電郵位址:'; $labels['vacationdays'] = '多久回覆一次(單位:天):'; -$labels['vacationreason'] = '信件內容(休假原因):'; -$labels['vacationsubject'] = '訊息主旨:'; +$labels['vacationinterval'] = '多久回覆一次:'; +$labels['vacationreason'] = '郵件內容(休假原因):'; +$labels['vacationfrom'] = '回覆寄件者位址:'; +$labels['vacationsubject'] = '郵件主旨:'; $labels['days'] = '天'; $labels['seconds'] = '秒'; $labels['rulestop'] = '停止評估規則'; $labels['enable'] = '啟用/停用'; -$labels['filterset'] = '篩選器集合'; -$labels['filtersets'] = '篩選器集合'; -$labels['filtersetadd'] = '加入篩選器集合'; -$labels['filtersetdel'] = '刪除目前的篩選器集合'; -$labels['filtersetact'] = '啟用目前的篩選器集合'; -$labels['filtersetdeact'] = '停用目前的篩選器集合'; -$labels['filterdef'] = '篩選器定義'; -$labels['filtersetname'] = '篩選器集合名稱'; -$labels['newfilterset'] = '建立篩選器集合'; +$labels['filterset'] = '篩選集合'; +$labels['filtersets'] = '篩選集合'; +$labels['filtersetadd'] = '加入篩選集合'; +$labels['filtersetdel'] = '刪除目前的篩選集合'; +$labels['filtersetact'] = '啟用目前的篩選集合'; +$labels['filtersetdeact'] = '停用目前的篩選集合'; +$labels['filterseteditraw'] = '編輯篩選集合'; +$labels['filterdef'] = '篩選定義'; +$labels['filtersetname'] = '篩選集合名稱'; +$labels['newfilterset'] = '建立篩選集合'; $labels['active'] = '啟用'; $labels['none'] = '無'; $labels['fromset'] = '從集合'; -$labels['fromfile'] = '重檔案'; -$labels['filterdisabled'] = '篩選器已停用'; -$labels['countisgreaterthan'] = '計數大於'; -$labels['countisgreaterthanequal'] = '計數大於或等於'; -$labels['countislessthan'] = '計數小於'; +$labels['fromfile'] = '從檔案'; +$labels['filterdisabled'] = '篩選已停用'; +$labels['countisgreaterthan'] = '數量大於'; +$labels['countisgreaterthanequal'] = '數量大於或等於'; +$labels['countislessthan'] = '數量小於'; $labels['countislessthanequal'] = '數量小於或等於'; $labels['countequals'] = '數量等於'; +$labels['countnotequals'] = '數量不等於'; $labels['valueisgreaterthan'] = '值大於'; -$labels['valueisgreaterthanequal'] = '值大於等於'; +$labels['valueisgreaterthanequal'] = '值大於或等於'; $labels['valueislessthan'] = '值小於'; $labels['valueislessthanequal'] = '值小於或等於'; $labels['valueequals'] = '值等於'; -$labels['setflags'] = '設定標幟'; -$labels['addflags'] = '新增標記到訊息'; -$labels['removeflags'] = '移除訊息標記'; -$labels['flagread'] = '讀取'; -$labels['flagdeleted'] = '刪除'; +$labels['valuenotequals'] = '值不等於'; +$labels['setflags'] = '設定旗標'; +$labels['addflags'] = '新增旗標到郵件'; +$labels['removeflags'] = '移除郵件旗標'; +$labels['flagread'] = '已讀'; +$labels['flagdeleted'] = '已刪除'; $labels['flaganswered'] = '已經回覆'; -$labels['flagflagged'] = '已加標記的郵件'; +$labels['flagflagged'] = '已加旗標'; $labels['flagdraft'] = '草稿'; $labels['setvariable'] = '設定變數'; $labels['setvarname'] = '變數名稱:'; $labels['setvarvalue'] = '變數值:'; $labels['setvarmodifiers'] = '修改:'; -$labels['varlower'] = '低於'; -$labels['varupper'] = '高於'; -$labels['varlowerfirst'] = '第一個字低於'; -$labels['varupperfirst'] = '第一個字高於'; +$labels['varlower'] = '小楷'; +$labels['varupper'] = '大楷'; +$labels['varlowerfirst'] = '第一個字母小楷'; +$labels['varupperfirst'] = '第一個字母大楷'; $labels['varquotewildcard'] = '跳脫字元'; $labels['varlength'] = '長度'; $labels['notify'] = '寄送通知'; @@ -112,33 +118,42 @@ $labels['notifyimportance'] = '重要性:'; $labels['notifyimportancelow'] = '低'; $labels['notifyimportancenormal'] = '一般'; $labels['notifyimportancehigh'] = '高'; -$labels['filtercreate'] = '建立郵件規則'; -$labels['usedata'] = '於規則中使用轉寄時間'; +$labels['notifymethodmailto'] = '電郵'; +$labels['notifymethodtel'] = '電話'; +$labels['notifymethodsms'] = 'SMS'; +$labels['filtercreate'] = '建立篩選'; +$labels['usedata'] = '於篩選使用以下資料:'; $labels['nextstep'] = '下一步'; $labels['...'] = '…'; -$labels['currdate'] = '現在時間'; +$labels['string'] = '字串'; +$labels['currdate'] = '現在日期'; $labels['datetest'] = '日期'; +$labels['dateheader'] = '標頭:'; $labels['year'] = '年'; $labels['month'] = '月'; $labels['day'] = '日'; $labels['date'] = '日期 (yyyy-mm-dd)'; -$labels['julian'] = '日期 (Julian Day)'; +$labels['julian'] = '日期 (儒略曆)'; +$labels['hour'] = '小時'; +$labels['minute'] = '分鐘'; +$labels['second'] = '秒'; $labels['time'] = '時間 (hh:mm:ss)'; $labels['iso8601'] = '日期 (ISO8601)'; $labels['std11'] = '日期 (RFC2822)'; $labels['zone'] = '時區'; +$labels['weekday'] = '週幾 (0-6)'; $labels['advancedopts'] = '進階選項'; $labels['body'] = '內文'; $labels['address'] = '郵件位址'; $labels['envelope'] = '信封'; $labels['modifier'] = '修改:'; $labels['text'] = '文字'; -$labels['undecoded'] = '未解碼(raw)'; +$labels['undecoded'] = '未解碼 (原始)'; $labels['contenttype'] = '內容類型'; -$labels['modtype'] = '型態:'; +$labels['modtype'] = '類型:'; $labels['allparts'] = '全部'; $labels['domain'] = '網域'; -$labels['localpart'] = '本機連接埠'; +$labels['localpart'] = '本機部分'; $labels['user'] = '使用者'; $labels['detail'] = '細節'; $labels['comparator'] = '比較:'; @@ -146,26 +161,80 @@ $labels['default'] = '預設'; $labels['octet'] = '嚴謹模式(八位元組)'; $labels['asciicasemap'] = '不區分大小寫(採用ASCII-Casemap)'; $labels['asciinumeric'] = '數字類型(ascii-numeric)'; +$labels['index'] = '索引:'; +$labels['indexlast'] = '向後'; +$labels['vacation'] = '休假'; +$labels['vacation.reply'] = '回覆郵件'; +$labels['vacation.advanced'] = '進階設定'; +$labels['vacation.from'] = '回覆寄件者位址'; +$labels['vacation.subject'] = '主旨'; +$labels['vacation.body'] = '內文'; +$labels['vacation.start'] = '休假開始'; +$labels['vacation.end'] = '休假結束'; +$labels['vacation.status'] = '狀態'; +$labels['vacation.on'] = '開'; +$labels['vacation.off'] = '關'; +$labels['vacation.addresses'] = '我的電子郵件位址'; +$labels['vacation.interval'] = '回覆間隔'; +$labels['vacation.after'] = '將休假規則置於此項目之後:'; +$labels['vacation.saving'] = '正在儲存資料...'; +$labels['vacation.action'] = '對收到的郵件的動作'; +$labels['vacation.keep'] = '保留'; +$labels['vacation.discard'] = '丟棄'; +$labels['vacation.redirect'] = '重定向至'; +$labels['vacation.copy'] = '傳送複本至'; +$labels['filladdresses'] = '填入我所有的位址'; +$labels['arialabelfiltersetactions'] = '篩選集合動作'; +$labels['arialabelfilteractions'] = '篩選動作'; +$labels['arialabelfilterform'] = '篩選內容'; +$labels['ariasummaryfilterslist'] = '篩選清單'; +$labels['ariasummaryfiltersetslist'] = '篩選集合清單'; +$labels['filterstitle'] = '編輯「收到郵件的篩選」'; +$labels['vacationtitle'] = '編輯「不在辦公室」規則'; +$labels['message'] = '郵件'; +$labels['duplicate'] = '重覆'; +$labels['notduplicate'] = '不是重覆'; +$labels['duplicate.handle'] = '處理常式:'; +$labels['duplicate.header'] = '標頭:'; +$labels['duplicate.uniqueid'] = '識別碼:'; +$labels['duplicate.seconds'] = '逾時 (秒):'; +$labels['duplicate.last'] = '相對於上次執行'; $messages['filterunknownerror'] = '未知的伺服器錯誤'; $messages['filterconnerror'] = '無法與伺服器連線'; +$messages['filterdeleteerror'] = '無法刪除篩選。伺服器出錯'; $messages['filterdeleted'] = '成功刪除篩選器'; $messages['filtersaved'] = '成功儲存篩選器。'; -$messages['filterdeleteconfirm'] = '您確定要刪除選擇的郵件規則嗎?'; -$messages['ruledeleteconfirm'] = '您確定要刪除選的規則嗎?'; -$messages['actiondeleteconfirm'] = '您確定要刪除選擇的動作嗎?'; +$messages['filtersaveerror'] = '無法儲存篩選。伺服器出錯'; +$messages['filterformerror'] = '篩選表單出錯'; +$messages['filterdeleteconfirm'] = '確定要刪除所選的郵件規則嗎?'; +$messages['ruledeleteconfirm'] = '確定要刪除所選的郵件規則嗎?'; +$messages['actiondeleteconfirm'] = '確定要刪除所選的動作嗎?'; $messages['forbiddenchars'] = '內容包含禁用字元'; $messages['cannotbeempty'] = '內容不能為空白'; $messages['ruleexist'] = '規則名稱重複'; +$messages['setactivateerror'] = '無法啟用所選的篩選集合。伺服器出錯'; +$messages['setdeactivateerror'] = '無法停用所選的篩選集合。伺服器出錯'; +$messages['setdeleteerror'] = '無法刪除所選的篩選集合。伺服器出錯'; $messages['setactivated'] = '篩選器集合成功啟用'; $messages['setdeactivated'] = '篩選器集合成功停用'; $messages['setdeleted'] = '篩選器集合成功刪除'; -$messages['setdeleteconfirm'] = '你確定要刪除選擇的篩選器集合嗎?'; +$messages['setupdated'] = '篩選集合成功更新'; +$messages['setdeleteconfirm'] = '確定要刪除所選的篩選集合嗎?'; +$messages['setcreateerror'] = '無法建立篩選集合。伺服器出錯'; $messages['setcreated'] = '篩選器集合成功建立'; -$messages['deactivated'] = '篩選器已啟用'; -$messages['activated'] = '篩選器已停用'; +$messages['activateerror'] = '無法啟用所選的篩選。伺服器出錯'; +$messages['deactivateerror'] = '無法停用所選的篩選。伺服器出錯'; +$messages['deactivated'] = '篩選器已停用'; +$messages['activated'] = '篩選器已啟用'; $messages['moved'] = '篩選器已移動'; +$messages['moveerror'] = '無法移動所選的篩選。伺服器出錯'; $messages['nametoolong'] = '名稱太長。'; $messages['namereserved'] = '保留名稱.'; -$messages['setexist'] = '設定已存在'; +$messages['setexist'] = '集合已存在'; $messages['nodata'] = '至少要選擇一個位置'; +$messages['invaliddateformat'] = '日期或時間部分格式無效'; +$messages['saveerror'] = '無法儲存資料。伺服器出錯'; +$messages['vacationsaved'] = '成功儲存休假資料。'; +$messages['emptyvacationbody'] = '休假郵件要有內容!'; +$messages['duplicate.conflict.err'] = '不允許標頭和識別碼都是獨一無二的'; ?> diff --git a/plugins/markasjunk/localization/fy_NL.inc b/plugins/markasjunk/localization/fy_NL.inc index 3291a962c..07e890ee3 100644 --- a/plugins/markasjunk/localization/fy_NL.inc +++ b/plugins/markasjunk/localization/fy_NL.inc @@ -16,4 +16,6 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/ */ $labels['buttontext'] = 'Spam'; +$labels['buttontitle'] = 'Markearje as Spam'; +$labels['reportedasjunk'] = 'Mei sukses melden as Spam'; ?> \ No newline at end of file diff --git a/plugins/markasjunk/localization/sq_AL.inc b/plugins/markasjunk/localization/sq_AL.inc index fc4dc1d03..e7ac15184 100644 --- a/plugins/markasjunk/localization/sq_AL.inc +++ b/plugins/markasjunk/localization/sq_AL.inc @@ -15,7 +15,7 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/ */ -$labels['buttontext'] = 'I padëshiruar'; -$labels['buttontitle'] = 'Vëri shenjë si I padëshiruar'; -$labels['reportedasjunk'] = 'U raportua me sukses si I padëshiruar'; +$labels['buttontext'] = 'I pavlerë'; +$labels['buttontitle'] = 'Vëri shenjë si I pavlerë'; +$labels['reportedasjunk'] = 'U raportua me sukses si I pavlerë'; ?> \ No newline at end of file diff --git a/plugins/new_user_dialog/localization/fy_NL.inc b/plugins/new_user_dialog/localization/fy_NL.inc new file mode 100644 index 000000000..aa60c99d7 --- /dev/null +++ b/plugins/new_user_dialog/localization/fy_NL.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail New User Dialog plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/ +*/ +$labels['identitydialogtitle'] = 'Foltôgje jo stjoerder identiteit'; +$labels['identitydialoghint'] = 'Dit fak ferskynt allinnich by de earste kear ynloggen.'; +?> \ No newline at end of file diff --git a/plugins/new_user_dialog/localization/zh_TW.inc b/plugins/new_user_dialog/localization/zh_TW.inc index 25f5883f7..9d1eb9823 100644 --- a/plugins/new_user_dialog/localization/zh_TW.inc +++ b/plugins/new_user_dialog/localization/zh_TW.inc @@ -15,6 +15,6 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/ */ -$labels['identitydialogtitle'] = '請完成您的身份資訊'; -$labels['identitydialoghint'] = '此視窗只會於第一次登入時出現。'; +$labels['identitydialogtitle'] = '請完成填寫您的身份資訊'; +$labels['identitydialoghint'] = '此視窗只會於第一次登入時出現'; ?> \ No newline at end of file diff --git a/plugins/newmail_notifier/localization/fr_FR.inc b/plugins/newmail_notifier/localization/fr_FR.inc index ab9be50d6..0c1d07dc0 100644 --- a/plugins/newmail_notifier/localization/fr_FR.inc +++ b/plugins/newmail_notifier/localization/fr_FR.inc @@ -16,7 +16,7 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/ */ $labels['basic'] = 'Afficher les notifications du navigateur pour les nouveaux courriels'; -$labels['desktop'] = 'Afficher les notifications de bureau pour les nouveaux courriels'; +$labels['desktop'] = 'Afficher les notifications de bureau pour les nouveaux courriels '; $labels['sound'] = 'Jouer le son pour les nouveaux courriels'; $labels['test'] = 'Test'; $labels['title'] = 'Nouveau courriel'; diff --git a/plugins/newmail_notifier/localization/fy_NL.inc b/plugins/newmail_notifier/localization/fy_NL.inc index 53347df15..28ea68735 100644 --- a/plugins/newmail_notifier/localization/fy_NL.inc +++ b/plugins/newmail_notifier/localization/fy_NL.inc @@ -15,6 +15,14 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/ */ +$labels['basic'] = 'Toan browser notifikaasjes op nij berjocht'; +$labels['desktop'] = 'Toan desktop notifikaasjes op nij berjocht'; +$labels['sound'] = 'Spylje it lûd op nij berjocht'; $labels['test'] = 'Test'; -$labels['title'] = 'Nije e-mail!'; +$labels['title'] = 'Nije e-post!'; +$labels['body'] = 'Jo hawwe in nij berjocht.'; +$labels['testbody'] = 'Dit is in test notifikaasje.'; +$labels['desktopdisabled'] = 'Desktop notifikaasjes binne útskeakele yn jo browser.'; +$labels['desktopunsupported'] = 'Jo browser stipet gjin desktop notifikaasjes.'; +$labels['desktoptimeout'] = 'Slút desktop notifikaasje'; ?> diff --git a/plugins/newmail_notifier/localization/sq_AL.inc b/plugins/newmail_notifier/localization/sq_AL.inc index 64374962b..9ffa4ca29 100644 --- a/plugins/newmail_notifier/localization/sq_AL.inc +++ b/plugins/newmail_notifier/localization/sq_AL.inc @@ -23,6 +23,6 @@ $labels['title'] = 'Email i ri!'; $labels['body'] = 'Morët një mesazh të ri.'; $labels['testbody'] = 'Ky është një njoftim test.'; $labels['desktopdisabled'] = 'Njoftimet për desktop janë të çaktivizuara te shfletuesi juaj.'; -$labels['desktopunsupported'] = 'Shfletuesi juaj nuk mbulon njoftime për dekstop.'; +$labels['desktopunsupported'] = 'Shfletuesi juaj nuk mbulon njoftime për desktop.'; $labels['desktoptimeout'] = 'Mbylle njoftimin për desktop'; ?> diff --git a/plugins/newmail_notifier/localization/zh_TW.inc b/plugins/newmail_notifier/localization/zh_TW.inc index c6d6c8a8f..c02f6b4fd 100644 --- a/plugins/newmail_notifier/localization/zh_TW.inc +++ b/plugins/newmail_notifier/localization/zh_TW.inc @@ -15,14 +15,14 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/ */ -$labels['basic'] = '當有新郵件顯示瀏覽器通知'; -$labels['desktop'] = '當有新郵件顯示桌面通知'; -$labels['sound'] = '當有新郵件播放音效'; +$labels['basic'] = '當有新郵件,顯示瀏覽器通知'; +$labels['desktop'] = '當有新郵件,顯示桌面通知'; +$labels['sound'] = '當有新郵件,播放音效'; $labels['test'] = '測試'; -$labels['title'] = '新郵件!'; -$labels['body'] = '您有一封新郵件'; +$labels['title'] = '有新郵件!'; +$labels['body'] = '收到一封新郵件'; $labels['testbody'] = '這是測試通知'; -$labels['desktopdisabled'] = '您的瀏覽器已停用桌面通知'; +$labels['desktopdisabled'] = '您的瀏覽器已停用桌面通知功能'; $labels['desktopunsupported'] = '您的瀏覽器不支援桌面通知功能'; -$labels['desktoptimeout'] = '自動關閉桌面通知'; +$labels['desktoptimeout'] = '關閉桌面通知'; ?> diff --git a/plugins/password/localization/cs_CZ.inc b/plugins/password/localization/cs_CZ.inc index 92651fd47..85ef6b89c 100644 --- a/plugins/password/localization/cs_CZ.inc +++ b/plugins/password/localization/cs_CZ.inc @@ -27,7 +27,7 @@ $messages['crypterror'] = 'Heslo se nepodařilo uložit. Chybí šifrovací funk $messages['connecterror'] = 'Heslo se nepodařilo uložit. Problém s připojením.'; $messages['internalerror'] = 'Heslo se nepodařilo uložit.'; $messages['passwordshort'] = 'Heslo musí mít alespoň $length znaků.'; -$messages['passwordweak'] = 'Heslo musí obsahovat alespoň jedno číslo a jedno interpuknční znaménko.'; +$messages['passwordweak'] = 'Heslo musí obsahovat alespoň jedno číslo a jedno interpunkční znaménko.'; $messages['passwordforbidden'] = 'Heslo obsahuje nepovolené znaky.'; $messages['firstloginchange'] = 'Vaše první přihlášení, změňte si prosím heslo.'; $messages['disablednotice'] = 'Z důvodu údržby systému není momentálně možné změnit heslo. Za chvíli by mělo být vše v pořádku, omlouváme se za tuto nepříjemnost.'; diff --git a/plugins/password/localization/de_CH.inc b/plugins/password/localization/de_CH.inc index 75c14d42a..6512dcad5 100644 --- a/plugins/password/localization/de_CH.inc +++ b/plugins/password/localization/de_CH.inc @@ -31,3 +31,7 @@ $messages['passwordweak'] = 'Passwort muss mindestens eine Zahl und ein Sonderze $messages['passwordforbidden'] = 'Passwort enthält unzulässige Zeichen.'; $messages['firstloginchange'] = 'Dies ist Ihre erste Anmeldung. Bitte ändern Sie Ihr Passwort.'; $messages['disablednotice'] = 'Das System befindet sich derzeit im Wartungszustand und eine Passwortänderung ist im Moment nicht möglich. Der normale Betrieb sollte bald wieder hergestellt sein. Wir bitten um Entschuldigung für die Unannehmlichkeiten.'; +$messages['passwinhistory'] = 'Dieses Passwort wurde bereits einmal verwendet.'; +$messages['samepasswd'] = 'Das neue Passwort muss sich von dem Alten unterscheiden.'; +$messages['passwdexpirewarning'] = 'Achtung! Ihr Passwort läuft am $expirationdatetime ab. Ändern Sie es rechtzeitig.'; +$messages['passwdexpired'] = 'Ihr Passwort ist abgelaufen, bitte ändern Sie es jetzt!'; diff --git a/plugins/password/localization/fr_FR.inc b/plugins/password/localization/fr_FR.inc index 49810e2b5..45383af16 100644 --- a/plugins/password/localization/fr_FR.inc +++ b/plugins/password/localization/fr_FR.inc @@ -31,7 +31,7 @@ $messages['passwordweak'] = 'Le mot de passe doit comporter au moins un chiffre $messages['passwordforbidden'] = 'Le mot de passe contient des caractères interdits.'; $messages['firstloginchange'] = 'Ceci est votre première connexion. Veuillez changer votre mot de passe.'; $messages['disablednotice'] = 'Le système est en cours de maintenance et les changements de mot de passe sont impossibles pour l\'instant. Tout devrait redevenir normal sous peu. Nous regrettons tout inconvénient que cette situation pourrait occasionner.'; -$messages['passwinhistory'] = 'Le mot de passe a déjà été utilisé précédemment.'; -$messages['samepasswd'] = 'Le nouveau mot de passe doit être différent du précédent.'; -$messages['passwdexpirewarning'] = 'Attention ! Votre mot de passe expirera prochainnement. Changez-le avant le $expirationdatetime.'; -$messages['passwdexpired'] = 'Votre mot de passe a expiré. Vous devez le changer maintenant !'; +$messages['passwinhistory'] = 'Ce mot de passe a déjà été utilisé précédemment.'; +$messages['samepasswd'] = 'Le nouveau mot de passe doit être différent de l\'ancien.'; +$messages['passwdexpirewarning'] = 'Avertissement ! Votre mot de passe arrivera prochainement à expiration. Changez-le avant le $expirationdatetime.'; +$messages['passwdexpired'] = 'Votre mot de passe est expiré, vous devez le changer maintenant !'; diff --git a/plugins/password/localization/fy_NL.inc b/plugins/password/localization/fy_NL.inc index b2be67d44..6098e0b21 100644 --- a/plugins/password/localization/fy_NL.inc +++ b/plugins/password/localization/fy_NL.inc @@ -15,4 +15,23 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/ */ +$labels['changepasswd'] = 'Wachtwurd feroarje'; +$labels['curpasswd'] = 'Aktueel wachtwurd:'; $labels['newpasswd'] = 'Nij wachtwurd:'; +$labels['confpasswd'] = 'Nij wachtwurd befêstigje:'; +$messages['nopassword'] = 'Fier in nij wachtwurd yn.'; +$messages['nocurpassword'] = 'Fier aktueel wachtwurd yn:'; +$messages['passwordincorrect'] = 'Ferkeard aktueel wachtwurd.'; +$messages['passwordinconsistency'] = 'Wachtwurden komme net oerien, besykje it nochris.'; +$messages['crypterror'] = 'Koe nij wachtwurd net bewarje. Fersifering funksje ûntbrekt.'; +$messages['connecterror'] = 'Koe nij wachtwurd net bewarje. Ferbining flater.'; +$messages['internalerror'] = 'Koe nij wachtwurd net bewarje.'; +$messages['passwordshort'] = 'Wachtwurd moat op syn minst $length tekens lang.'; +$messages['passwordweak'] = 'Wachtwurd moat op syn minst ien nûmer en ien lêstekens karakter befetsje.'; +$messages['passwordforbidden'] = 'Wachtwurd befettet ferbeane tekens.'; +$messages['firstloginchange'] = 'Dit is jo earste oanmelding. Wizigje asjobleaft jo wachtwurd.'; +$messages['disablednotice'] = 'It systeem is op dit stuit ûnder ûnderhâld en wachtwurd feroaring is net mooglik. Alles soe gau werom wêze moatte nei it normale. Sorry foar it ûngemak.'; +$messages['passwinhistory'] = 'Dit wachtwurd is al earder brûkt.'; +$messages['samepasswd'] = 'Nij wachtwurd moat oars wêze as it âlde.'; +$messages['passwdexpirewarning'] = 'Warskôging! Jo wachtwurd sil ynkoarten ferrinne, feroarje it foar $expirationdatetime.'; +$messages['passwdexpired'] = 'Jo wachtwurd is ferrûn, jo moatte it no feroarje!'; diff --git a/plugins/password/localization/ia.inc b/plugins/password/localization/ia.inc index f028625da..ce6e6107b 100644 --- a/plugins/password/localization/ia.inc +++ b/plugins/password/localization/ia.inc @@ -31,3 +31,7 @@ $messages['passwordweak'] = 'Le contrasigno debe includer al minus un numero e u $messages['passwordforbidden'] = 'Le contrasigno contine characteres interdicte.'; $messages['firstloginchange'] = 'Iste es vostre prime session. Per favor, cambia vostre contrasigno.'; $messages['disablednotice'] = 'Le systema es sub mantenentia e non es possibile cambiar le contrasigno in iste momento. Le systema retornara al functionamento normal bentosto. Nos offere nostre excusas pro omne inconveniente.'; +$messages['passwinhistory'] = 'Iste contrasigno jam esseva usate previemente.'; +$messages['samepasswd'] = 'Un nove contrasigno debe esser differente del vetule.'; +$messages['passwdexpirewarning'] = 'Attention! Vostre contrasigno expirara proximemente, cambia lo ante $expirationdatetime.'; +$messages['passwdexpired'] = 'Vostre contrasigno ha expirate, vos debe cambiar lo ora!'; diff --git a/plugins/password/localization/lt_LT.inc b/plugins/password/localization/lt_LT.inc index b9bd04a67..c2fd31f5b 100644 --- a/plugins/password/localization/lt_LT.inc +++ b/plugins/password/localization/lt_LT.inc @@ -31,3 +31,7 @@ $messages['passwordweak'] = 'Slaptažodyje turi būti bent vienas skaitmuo ir vi $messages['passwordforbidden'] = 'Slaptažodyje rasta neleistinų simbolių.'; $messages['firstloginchange'] = 'Tai yra pirmasis jūsų prisijungimas. Prašau, pasikeiskite savo slaptažodį.'; $messages['disablednotice'] = 'Sistema šiuo metu tvarkoma ir slaptažodžio pakeitimas negalimas. Netrukus viskas turėtų grįžti į įprastą būseną. Atsiprašome dėl nepatogumų.'; +$messages['passwinhistory'] = 'Šis slaptažodis jau buvo naudotas anksčiau.'; +$messages['samepasswd'] = 'Naujas slaptažodis turi būti kitoks nei senasis.'; +$messages['passwdexpirewarning'] = 'Įspėjimas! Jūsų slaptažodis greitai nustos galioti, pakeiskite jį iki $expirationdatetime.'; +$messages['passwdexpired'] = 'Jūsų slaptažodis nebegalioja, jūs turite pakeisti jį dabar!'; diff --git a/plugins/password/localization/nl_NL.inc b/plugins/password/localization/nl_NL.inc index 0aefa2b4a..7018da153 100644 --- a/plugins/password/localization/nl_NL.inc +++ b/plugins/password/localization/nl_NL.inc @@ -31,3 +31,7 @@ $messages['passwordweak'] = 'Het wachtwoord moet minimaal één cijfer en één $messages['passwordforbidden'] = 'Het wachtwoord bevat tekens die niet toegestaan zijn.'; $messages['firstloginchange'] = 'Dit is uw eerste aanmelding. Verander uw wachtwoord alstublieft.'; $messages['disablednotice'] = 'Het systeem is momenteel in onderhoud en wachtwoord wijzigen is op dit moment dus niet mogelijk. Alles werkt binnenkort weer naar behoren. Onze excuses voor het ongemak.'; +$messages['passwinhistory'] = 'Dit wachtwoord is al eerder gebruikt.'; +$messages['samepasswd'] = 'Het nieuwe paswoord dient verschillend ten opzichte van de oude te zijn.'; +$messages['passwdexpirewarning'] = 'Waarschuwing! je wachtwoord verloopt binnenkort, Wijzig het voor $vervaldatum.'; +$messages['passwdexpired'] = 'Je wachtwoord is verlopen, je dient het nu te wijzigen!'; diff --git a/plugins/password/localization/sq_AL.inc b/plugins/password/localization/sq_AL.inc index df6488463..3e5eeadc7 100644 --- a/plugins/password/localization/sq_AL.inc +++ b/plugins/password/localization/sq_AL.inc @@ -24,7 +24,7 @@ $messages['nocurpassword'] = 'Ju lutemi, futni fjalëkalimin e tanishëm.'; $messages['passwordincorrect'] = 'Fjalëkalimi i tanishëm është i pasaktë.'; $messages['passwordinconsistency'] = 'Fjalëkalimet nuk përputhen, ju lutemi, riprovoni.'; $messages['crypterror'] = 'S’u ruajt dot fjalëkalimi i ri. Mungon funksioni i Fshehtëzimit.'; -$messages['connecterror'] = 'S’u ruajt dot fjalëkalimi i ri. Gabim lidhjejej.'; +$messages['connecterror'] = 'S’u ruajt dot fjalëkalimi i ri. Gabim lidhjeje.'; $messages['internalerror'] = 'S’u ruajt dot fjalëkalimi i ri.'; $messages['passwordshort'] = 'Fjalëkalimi duhet të jetë të paktën $length shenja i gjatë.'; $messages['passwordweak'] = 'Fjalëkalimi duhet të përmbajë të paktën një numër dhe një shenjë pikësimi.'; @@ -32,6 +32,6 @@ $messages['passwordforbidden'] = 'Fjalëkalimi përmban shenja të ndaluara.'; $messages['firstloginchange'] = 'Kjo është hyrja juaj e parë. Ju lutemi, ndryshoni fjalëkalimin tuaj.'; $messages['disablednotice'] = 'Sistemi është hëpërhë nën gjendje punimesh mirëmbajtjeje dhe ndryshimi i fjalëkalimit s’është i mundur në këtë çast. Gjithçka do të duhej të ish kthyer në gjendje normale shumë shpejt. Kërkojmë ndjesë për çfarëdo siklet.'; $messages['passwinhistory'] = 'Ky fjalëkalim është përdorur një herë më parë.'; -$messages['samepasswd'] = 'Fjalëkalimi i ri duhet të jetë i ndryshëm nga i vjetri.'; +$messages['samepasswd'] = 'Fjalëkalimi i ri duhet të jetë i ndryshëm nga i vjetri.'; $messages['passwdexpirewarning'] = 'Kujdes! Fjalëkalimi juaj do të skadojë së shpejti, ndryshojeni para $expirationdatetime.'; $messages['passwdexpired'] = 'Fjalëkalimi juaj ka skaduar, lypset ta ndryshoni tani!'; diff --git a/plugins/password/localization/sr_CS.inc b/plugins/password/localization/sr_CS.inc index 5282c70a2..ea3c469c9 100644 --- a/plugins/password/localization/sr_CS.inc +++ b/plugins/password/localization/sr_CS.inc @@ -30,3 +30,8 @@ $messages['passwordshort'] = 'Лозинка мора имати најмање $messages['passwordweak'] = 'Лозинка мора да садржи најмање један број и један знак интерпункције.'; $messages['passwordforbidden'] = 'Лозинка садржи недозвољене знакове.'; $messages['firstloginchange'] = 'Ово је ваше прво пријављивање. Измените лозинку.'; +$messages['disablednotice'] = 'Систем је тренутно у фази ремонта и измена лозинке за сада није могућа. Све ће се ускоро вратити у нормалу. Извињавамо се због неугодности.'; +$messages['passwinhistory'] = 'Лозинка је раније већ коришћена.'; +$messages['samepasswd'] = 'Нова лозинка се мора разликовати од старе.'; +$messages['passwdexpirewarning'] = 'Упозорење! Ваша лозинка истиче ускоро. Промените је до $expirationdatetime.'; +$messages['passwdexpired'] = 'Ваша лозинка је истекла. Морате је изменити одмах!'; diff --git a/plugins/password/localization/zh_TW.inc b/plugins/password/localization/zh_TW.inc index dc1268044..b83614768 100644 --- a/plugins/password/localization/zh_TW.inc +++ b/plugins/password/localization/zh_TW.inc @@ -16,7 +16,7 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/ */ $labels['changepasswd'] = '更改密碼'; -$labels['curpasswd'] = '目前的密碼'; +$labels['curpasswd'] = '目前的密碼:'; $labels['newpasswd'] = '新密碼'; $labels['confpasswd'] = '確認新密碼'; $messages['nopassword'] = '請輸入新密碼'; @@ -26,7 +26,12 @@ $messages['passwordinconsistency'] = '密碼不相符,請重新輸入'; $messages['crypterror'] = '無法更新密碼:無加密機制'; $messages['connecterror'] = '無法更新密碼:連線失敗'; $messages['internalerror'] = '無法更新密碼'; -$messages['passwordshort'] = '您的密碼至少需 $length 個字元長'; -$messages['passwordweak'] = '您的新密碼至少需含有一個數字與一個標點符號'; -$messages['passwordforbidden'] = '您的密碼含有禁用字元'; -$messages['firstloginchange'] = '這是你第一次登入。請更改你的密碼。'; +$messages['passwordshort'] = '密碼至少需 $length 個字元'; +$messages['passwordweak'] = '新密碼至少需含有一個數字與一個標點符號'; +$messages['passwordforbidden'] = '密碼含有禁用字元'; +$messages['firstloginchange'] = '這是你第一次登入。請更改密碼。'; +$messages['disablednotice'] = '系統正在進行保養工作,故此無法更改密碼。系統很快會回復正常。抱歉!'; +$messages['passwinhistory'] = '此密碼之前已用過'; +$messages['samepasswd'] = '新密碼要和舊的不同'; +$messages['passwdexpirewarning'] = '警告!您的密碼很快會到期,請在 $expirationdatetime 之前更改'; +$messages['passwdexpired'] = '您的密碼已到期,請馬上更改!'; diff --git a/plugins/subscriptions_option/localization/fy_NL.inc b/plugins/subscriptions_option/localization/fy_NL.inc new file mode 100644 index 000000000..2b72e4476 --- /dev/null +++ b/plugins/subscriptions_option/localization/fy_NL.inc @@ -0,0 +1,19 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Subscriptions plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/ +*/ +$labels['useimapsubscriptions'] = 'Brûk IMAP Ynskriuwing'; +?> diff --git a/plugins/subscriptions_option/localization/zh_TW.inc b/plugins/subscriptions_option/localization/zh_TW.inc index fe8524a51..d3373d6be 100644 --- a/plugins/subscriptions_option/localization/zh_TW.inc +++ b/plugins/subscriptions_option/localization/zh_TW.inc @@ -15,5 +15,5 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/ */ -$labels['useimapsubscriptions'] = '使用IMAP訂閱'; +$labels['useimapsubscriptions'] = '使用 IMAP 訂閱'; ?> diff --git a/plugins/userinfo/localization/fy_NL.inc b/plugins/userinfo/localization/fy_NL.inc index 0ca51c51a..a553c9b4e 100644 --- a/plugins/userinfo/localization/fy_NL.inc +++ b/plugins/userinfo/localization/fy_NL.inc @@ -16,4 +16,7 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/ */ $labels['userinfo'] = 'Brûkersynformaasje'; +$labels['created'] = 'Oanmakke'; +$labels['lastlogin'] = 'Lêste kear ynlogge'; +$labels['defaultidentity'] = 'Standert Identiteit'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/cy_GB.inc b/plugins/vcard_attachments/localization/cy_GB.inc index 814ed0be4..86c813ad0 100644 --- a/plugins/vcard_attachments/localization/cy_GB.inc +++ b/plugins/vcard_attachments/localization/cy_GB.inc @@ -17,4 +17,6 @@ */ $labels['addvcardmsg'] = 'Ychwanegu vCard i\'r llyfr cyfeiriadau'; $labels['vcardsavefailed'] = 'Methwyd cadw\'r vCard'; +$labels['attachvcard'] = 'Atodi vCard'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/de_CH.inc b/plugins/vcard_attachments/localization/de_CH.inc index edee86fce..cda786904 100644 --- a/plugins/vcard_attachments/localization/de_CH.inc +++ b/plugins/vcard_attachments/localization/de_CH.inc @@ -17,4 +17,6 @@ */ $labels['addvcardmsg'] = 'Kontakt im Adressbuch speichern'; $labels['vcardsavefailed'] = 'Der Kontakt konnte nicht gespeichert werden'; +$labels['attachvcard'] = 'Als vCard anhängen'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/de_DE.inc b/plugins/vcard_attachments/localization/de_DE.inc index edee86fce..4ba91fdf4 100644 --- a/plugins/vcard_attachments/localization/de_DE.inc +++ b/plugins/vcard_attachments/localization/de_DE.inc @@ -17,4 +17,6 @@ */ $labels['addvcardmsg'] = 'Kontakt im Adressbuch speichern'; $labels['vcardsavefailed'] = 'Der Kontakt konnte nicht gespeichert werden'; +$labels['attachvcard'] = 'vCard anhängen'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/el_GR.inc b/plugins/vcard_attachments/localization/el_GR.inc index a59f6f556..ca5d1e09c 100644 --- a/plugins/vcard_attachments/localization/el_GR.inc +++ b/plugins/vcard_attachments/localization/el_GR.inc @@ -17,4 +17,5 @@ */ $labels['addvcardmsg'] = 'Προσθήκη vCard στο βιβλίο διευθύνσεων'; $labels['vcardsavefailed'] = 'Δεν είναι δυνατή η αποθήκευση του vCard'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/en_GB.inc b/plugins/vcard_attachments/localization/en_GB.inc index ac21ef96b..08c275d41 100644 --- a/plugins/vcard_attachments/localization/en_GB.inc +++ b/plugins/vcard_attachments/localization/en_GB.inc @@ -17,4 +17,6 @@ */ $labels['addvcardmsg'] = 'Add vCard to addressbook'; $labels['vcardsavefailed'] = 'Unable to save vCard'; +$labels['attachvcard'] = 'Attach vCard'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/es_ES.inc b/plugins/vcard_attachments/localization/es_ES.inc index 28ea13e84..02e597dd4 100644 --- a/plugins/vcard_attachments/localization/es_ES.inc +++ b/plugins/vcard_attachments/localization/es_ES.inc @@ -17,4 +17,6 @@ */ $labels['addvcardmsg'] = 'Añadir tarjeta vCard a la libreta de direcciones'; $labels['vcardsavefailed'] = 'No se pudo guardar la tarjeta vCard'; +$labels['attachvcard'] = 'Adjuntar vCard'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/fr_FR.inc b/plugins/vcard_attachments/localization/fr_FR.inc index 6bf588d81..4abbcd5a6 100644 --- a/plugins/vcard_attachments/localization/fr_FR.inc +++ b/plugins/vcard_attachments/localization/fr_FR.inc @@ -15,6 +15,8 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/ */ -$labels['addvcardmsg'] = 'Ajouter la vcard au carnet d\'adresses'; -$labels['vcardsavefailed'] = 'Impossible d\'enregistrer la vcard'; +$labels['addvcardmsg'] = 'Ajouter la vCard au carnet d\'adresses'; +$labels['vcardsavefailed'] = 'Impossible d\'enregistrer la vCard'; +$labels['attachvcard'] = 'Joindre la vCard'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/fy_NL.inc b/plugins/vcard_attachments/localization/fy_NL.inc new file mode 100644 index 000000000..42c435287 --- /dev/null +++ b/plugins/vcard_attachments/localization/fy_NL.inc @@ -0,0 +1,22 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Vcard Attachments plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/ +*/ +$labels['addvcardmsg'] = 'vCard oan adresboek tafoegje'; +$labels['vcardsavefailed'] = 'Koe vCard net bewarje'; +$labels['attachvcard'] = 'vCard taheakje'; +$labels['vcard'] = 'vCard'; +?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/he_IL.inc b/plugins/vcard_attachments/localization/he_IL.inc index 4a0a4cd4a..9271d23ab 100644 --- a/plugins/vcard_attachments/localization/he_IL.inc +++ b/plugins/vcard_attachments/localization/he_IL.inc @@ -17,4 +17,6 @@ */ $labels['addvcardmsg'] = 'הוספת כרטיס ביקור בפורמט vCard לספר הכתובות'; $labels['vcardsavefailed'] = 'לא ניתן לשמור את כרטיס הביקור vCard'; +$labels['attachvcard'] = 'צרפ/י קובץ חתימה (vCard)'; +$labels['vcard'] = 'קובץ חתימה (vCard)'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/hu_HU.inc b/plugins/vcard_attachments/localization/hu_HU.inc index e4d609f01..06c621e06 100644 --- a/plugins/vcard_attachments/localization/hu_HU.inc +++ b/plugins/vcard_attachments/localization/hu_HU.inc @@ -17,4 +17,6 @@ */ $labels['addvcardmsg'] = 'vCard hozzáadása a címjegyzékhez'; $labels['vcardsavefailed'] = 'Sikertelen a vCard mentése'; +$labels['attachvcard'] = 'vCard csatolása'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/ia.inc b/plugins/vcard_attachments/localization/ia.inc index 7b430f935..8897cef6a 100644 --- a/plugins/vcard_attachments/localization/ia.inc +++ b/plugins/vcard_attachments/localization/ia.inc @@ -17,4 +17,6 @@ */ $labels['addvcardmsg'] = 'Adder le vCard al adressario'; $labels['vcardsavefailed'] = 'Impossibile salveguardar le vCard'; +$labels['attachvcard'] = 'Attachar vCard'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/id_ID.inc b/plugins/vcard_attachments/localization/id_ID.inc index ea3a31abf..28784f2af 100644 --- a/plugins/vcard_attachments/localization/id_ID.inc +++ b/plugins/vcard_attachments/localization/id_ID.inc @@ -17,4 +17,6 @@ */ $labels['addvcardmsg'] = 'Tambahkan vCard ke buku alamat'; $labels['vcardsavefailed'] = 'Tidak dapat menyimpan vCard'; +$labels['attachvcard'] = 'Lampirkan vCard'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/it_IT.inc b/plugins/vcard_attachments/localization/it_IT.inc index fbe498f88..b9ea06211 100644 --- a/plugins/vcard_attachments/localization/it_IT.inc +++ b/plugins/vcard_attachments/localization/it_IT.inc @@ -15,6 +15,8 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/ */ -$labels['addvcardmsg'] = 'Aggiungi vCard alla Agenda'; -$labels['vcardsavefailed'] = 'Abilita a salvare vCard'; +$labels['addvcardmsg'] = 'Aggiungi vCard alla rubrica'; +$labels['vcardsavefailed'] = 'Impossibile salvare vCard'; +$labels['attachvcard'] = 'Allega vCard'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/ja_JP.inc b/plugins/vcard_attachments/localization/ja_JP.inc index 4cd738b08..b3b38f30d 100644 --- a/plugins/vcard_attachments/localization/ja_JP.inc +++ b/plugins/vcard_attachments/localization/ja_JP.inc @@ -17,4 +17,6 @@ */ $labels['addvcardmsg'] = 'vCardをアドレス帳に追加'; $labels['vcardsavefailed'] = 'vCardを保存できませんでした。'; +$labels['attachvcard'] = 'vCardを添付'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/ko_KR.inc b/plugins/vcard_attachments/localization/ko_KR.inc index fbbb73921..ef5b92385 100644 --- a/plugins/vcard_attachments/localization/ko_KR.inc +++ b/plugins/vcard_attachments/localization/ko_KR.inc @@ -17,4 +17,6 @@ */ $labels['addvcardmsg'] = '주소록에 vCard 추가'; $labels['vcardsavefailed'] = 'vCard를 저장할 수 없음'; +$labels['attachvcard'] = 'vCard 첨부'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/lt_LT.inc b/plugins/vcard_attachments/localization/lt_LT.inc index 468a9da70..1511fa0f2 100644 --- a/plugins/vcard_attachments/localization/lt_LT.inc +++ b/plugins/vcard_attachments/localization/lt_LT.inc @@ -17,4 +17,6 @@ */ $labels['addvcardmsg'] = 'Įtraukti vizitinę kortelę į adresų knygą'; $labels['vcardsavefailed'] = 'Įrašyti vizitinės kortelės nepavyko'; +$labels['attachvcard'] = 'Pridėti vCard'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/nl_NL.inc b/plugins/vcard_attachments/localization/nl_NL.inc index 748d6219d..2924f62be 100644 --- a/plugins/vcard_attachments/localization/nl_NL.inc +++ b/plugins/vcard_attachments/localization/nl_NL.inc @@ -17,4 +17,6 @@ */ $labels['addvcardmsg'] = 'Voeg vCard toe aan adresboek'; $labels['vcardsavefailed'] = 'Kan vCard niet opslaan'; +$labels['attachvcard'] = 'vCard toevoegen'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/pl_PL.inc b/plugins/vcard_attachments/localization/pl_PL.inc index 8da94369e..010219abb 100644 --- a/plugins/vcard_attachments/localization/pl_PL.inc +++ b/plugins/vcard_attachments/localization/pl_PL.inc @@ -17,4 +17,6 @@ */ $labels['addvcardmsg'] = 'Dodaj wizytówkę (vCard) do kontaktów'; $labels['vcardsavefailed'] = 'Nie można zapisać wizytówki (vCard)'; +$labels['attachvcard'] = 'Dołącz plik vCard'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/pt_PT.inc b/plugins/vcard_attachments/localization/pt_PT.inc index 9e5e11027..05d460d1b 100644 --- a/plugins/vcard_attachments/localization/pt_PT.inc +++ b/plugins/vcard_attachments/localization/pt_PT.inc @@ -17,4 +17,6 @@ */ $labels['addvcardmsg'] = 'Adicionar o vCard ao Livro de Endereços'; $labels['vcardsavefailed'] = 'Não foi possível guardar o vCard'; +$labels['attachvcard'] = 'Anexar vCard'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/ru_RU.inc b/plugins/vcard_attachments/localization/ru_RU.inc index 985cda443..e07229d99 100644 --- a/plugins/vcard_attachments/localization/ru_RU.inc +++ b/plugins/vcard_attachments/localization/ru_RU.inc @@ -17,4 +17,6 @@ */ $labels['addvcardmsg'] = 'Добавить в контакты'; $labels['vcardsavefailed'] = 'Не удалось сохранить vCard'; +$labels['attachvcard'] = 'Вложить vCard'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/sk_SK.inc b/plugins/vcard_attachments/localization/sk_SK.inc index ecbaac834..6de8bf594 100644 --- a/plugins/vcard_attachments/localization/sk_SK.inc +++ b/plugins/vcard_attachments/localization/sk_SK.inc @@ -17,4 +17,6 @@ */ $labels['addvcardmsg'] = 'Pridať vizitku vCard do adresára'; $labels['vcardsavefailed'] = 'Vizitku vCard nemožno uložiť'; +$labels['attachvcard'] = 'Pripojiť vizitku vCard'; +$labels['vcard'] = 'Vizitka vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/sq_AL.inc b/plugins/vcard_attachments/localization/sq_AL.inc index f5e3740ec..042f6c54c 100644 --- a/plugins/vcard_attachments/localization/sq_AL.inc +++ b/plugins/vcard_attachments/localization/sq_AL.inc @@ -16,5 +16,7 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/ */ $labels['addvcardmsg'] = 'Shtoje vCard-in te libër adresash'; -$labels['vcardsavefailed'] = 'I pazoti të ruajë vCard-in'; +$labels['vcardsavefailed'] = 'S’arrihet të ruhet vCard-i'; +$labels['attachvcard'] = 'Bashkëngjitni vCard'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/sv_SE.inc b/plugins/vcard_attachments/localization/sv_SE.inc index 2d0d928be..4c732e070 100644 --- a/plugins/vcard_attachments/localization/sv_SE.inc +++ b/plugins/vcard_attachments/localization/sv_SE.inc @@ -17,4 +17,6 @@ */ $labels['addvcardmsg'] = 'Lägg till vCard i adressbok'; $labels['vcardsavefailed'] = 'Kunde inte spara vCard'; +$labels['attachvcard'] = 'Bifoga vCard'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/tr_TR.inc b/plugins/vcard_attachments/localization/tr_TR.inc index 167bb5b21..6071e1866 100644 --- a/plugins/vcard_attachments/localization/tr_TR.inc +++ b/plugins/vcard_attachments/localization/tr_TR.inc @@ -17,4 +17,6 @@ */ $labels['addvcardmsg'] = 'Adres defterine vCard ekle'; $labels['vcardsavefailed'] = 'vCard kaydedilemedi'; +$labels['attachvcard'] = 'vCard Ekle'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/zh_TW.inc b/plugins/vcard_attachments/localization/zh_TW.inc index 639593bcf..9cfcf4e2f 100644 --- a/plugins/vcard_attachments/localization/zh_TW.inc +++ b/plugins/vcard_attachments/localization/zh_TW.inc @@ -15,6 +15,8 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/ */ -$labels['addvcardmsg'] = '加入 vCard 到通訊錄'; +$labels['addvcardmsg'] = '將 vCard 加入通訊錄'; $labels['vcardsavefailed'] = '無法儲存 vCard'; +$labels['attachvcard'] = '附上 vCard'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/zipdownload/localization/fy_NL.inc b/plugins/zipdownload/localization/fy_NL.inc index 96d69d0a7..756d5f9ac 100644 --- a/plugins/zipdownload/localization/fy_NL.inc +++ b/plugins/zipdownload/localization/fy_NL.inc @@ -15,4 +15,8 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/ */ +$labels['downloadall'] = 'Alle taheaksels ynlade'; +$labels['download'] = 'Ynlade...'; +$labels['downloadmbox'] = 'Mbox formaat (.zip)'; +$labels['downloadmaildir'] = 'Maildir formaat (.zip)'; $labels['downloademl'] = 'Boarne (.eml)'; diff --git a/program/localization/ar_SA/messages.inc b/program/localization/ar_SA/messages.inc index 95e8f97be..870637b9e 100644 --- a/program/localization/ar_SA/messages.inc +++ b/program/localization/ar_SA/messages.inc @@ -88,7 +88,6 @@ $messages['nosenderwarning'] = 'الرجاء إدخال عنوان البريد $messages['norecipientwarning'] = 'الرجاء إدخال اسم مستقبل واحد على الأقل'; $messages['nosubjectwarning'] = 'حقل "الموضوع" فارغ. هل تريد كتابة موضوعللرسالة؟'; $messages['nobodywarning'] = 'إرسال هذه الرسالة دون نص؟'; -$messages['notsentwarning'] = 'لم يتم إرسال الرسالة. هل تريد تجاهلالرسالة؟'; $messages['restoresavedcomposedata'] = 'يوجد رسالة سابقة ولاكن غير مرسلة.\n\nالموضوع: $subject\nحفظ: $date\n\n هل تريد بالفعل استعادة هذة الرسالة ؟'; $messages['noldapserver'] = 'الرجاء اختيار خادم ldap للبحث فيه'; $messages['nosearchname'] = 'الرجاء إدخال اسم مراسل أو عنوان بريدإلكتروني'; diff --git a/program/localization/ast/messages.inc b/program/localization/ast/messages.inc index 78366132b..cf527814e 100644 --- a/program/localization/ast/messages.inc +++ b/program/localization/ast/messages.inc @@ -82,7 +82,6 @@ $messages['nopagesizewarning'] = 'Por favor, introduz un tamañu de páxina.'; $messages['norecipientwarning'] = 'Por favor, introduz polo menos un destinatariu'; $messages['nosubjectwarning'] = 'El campo "Asuntu" ta vacíu. ¿Quies rellenalu agora?'; $messages['nobodywarning'] = '¿Quies unviar esti mensaxe ensin testu?'; -$messages['notsentwarning'] = 'Nun s\'unvió\'l mensaxe. ¿Quies desanicialu?'; $messages['restoresavedcomposedata'] = 'Alcontróse un mensaxe redactáu anterior ensin unviar.n\nAsuntu: $subject\nGuardáu: $date\n\n¿Quies restaurar esti mensaxe?'; $messages['noldapserver'] = 'Por favor, escueyi un sirvidor LDAP pa buscar.'; $messages['nosearchname'] = 'Por favor, introduz un nome o una direición de corréu-e.'; diff --git a/program/localization/az_AZ/messages.inc b/program/localization/az_AZ/messages.inc index 9b0aa7512..c5791d873 100644 --- a/program/localization/az_AZ/messages.inc +++ b/program/localization/az_AZ/messages.inc @@ -80,7 +80,6 @@ $messages['nopagesizewarning'] = 'Lütfən, səhifənin ölçüsünü daxil edin $messages['norecipientwarning'] = 'Lütfən, qəbul edənin ünvanını daxil edin'; $messages['nosubjectwarning'] = '"Mövzu" sahəsi boşdur. Mövzu daxil etmək istəyirsiniz?'; $messages['nobodywarning'] = 'Məktub boş göndərilsin?'; -$messages['notsentwarning'] = 'Məktub göndərilmədi. Göndərilmədən imtina etmək istəyirsiniz?'; $messages['restoresavedcomposedata'] = 'Əvvəlki göndərildi, ancaq göndərilməyən məktub da tapıldı.\n\nSubject: $subject\nSaved: $date\n\nSiz bu məktubu bərpa etmək istəyirsiniz?'; $messages['noldapserver'] = 'Lütfən, axtarış üçün LDAP server seçin'; $messages['nosearchname'] = 'Lütfən, ad və ya e-poçt əlavə edin'; diff --git a/program/localization/be_BE/messages.inc b/program/localization/be_BE/messages.inc index 494ce8b6a..b0b9d434a 100644 --- a/program/localization/be_BE/messages.inc +++ b/program/localization/be_BE/messages.inc @@ -82,7 +82,6 @@ $messages['nopagesizewarning'] = 'Задайце памер старонкі.'; $messages['norecipientwarning'] = 'Задайце хаця-б аднаго атрымальніка.'; $messages['nosubjectwarning'] = 'Тэма ліста не зададзена. Ці жадаеце задаць яе зараз?'; $messages['nobodywarning'] = 'Адправіць гэта паведамленне без тэксту?'; -$messages['notsentwarning'] = 'Паведамленне не адпраўлена. Жадаеце скасаваць сваё паведамленне?'; $messages['restoresavedcomposedata'] = 'Было знойдзена ўжо складзенае, але не адпраўленае паведамленне.\n\nТэма: $subject\nЗахавана: $date\n\nЖадаеце аднавіць гэтае паведамленне?'; $messages['noldapserver'] = 'Задайце ldap-сервер для пошуку.'; $messages['nosearchname'] = 'Задайце імя кантакта альбо адрас электроннай пошты.'; diff --git a/program/localization/bg_BG/messages.inc b/program/localization/bg_BG/messages.inc index 048d96070..8ba1531e5 100644 --- a/program/localization/bg_BG/messages.inc +++ b/program/localization/bg_BG/messages.inc @@ -97,7 +97,6 @@ $messages['disclosedreciptitle'] = 'Твърде много публични п $messages['nosubjectwarning'] = 'Полето "Заглавие" е празно. Желаете ли да въведете заглавие сега?'; $messages['nosubjecttitle'] = 'Няма Заглавие'; $messages['nobodywarning'] = 'Изпрати това писмо без текст?'; -$messages['notsentwarning'] = 'Писмото не е изпратено. Желаете ли да бъде унищожено?'; $messages['restoresavedcomposedata'] = 'Намерено е неизпратено писмо, което е било в процес на създаване.\n\nОтносно: $subject\nЗапазено на: $date\n\nЖелаете ли да възстановите писмото?'; $messages['noldapserver'] = 'Изберете LDAP сървър за търсене.'; $messages['nosearchname'] = 'Моля въведете име на контакта или адрес на ел. поща.'; diff --git a/program/localization/bn_BD/labels.inc b/program/localization/bn_BD/labels.inc index b0d617de6..0cad5355b 100644 --- a/program/localization/bn_BD/labels.inc +++ b/program/localization/bn_BD/labels.inc @@ -31,6 +31,7 @@ $labels['trash'] = 'ডাস্টবিন'; $labels['junk'] = 'আজেবাজে মেইল'; $labels['subject'] = 'বিষয়'; $labels['from'] = 'প্রেরক'; +$labels['sender'] = 'প্রেরক'; $labels['to'] = 'প্রাপক'; $labels['cc'] = 'অনুলিপির ঠিকানা'; $labels['bcc'] = 'নাজানিয়ে অনুলিপির ঠিকানা'; @@ -43,8 +44,11 @@ $labels['mailboxlist'] = 'ফোল্ডার/মেইলবক্স'; $labels['messagesfromto'] = '$count মেইলের মধ্যে, $from হতে $to দেখানো হচ্ছে'; $labels['messagenrof'] = '$nr #মেইল/চিঠি , $count এর মধ্যে'; $labels['copy'] = 'অনুলিপির ঠিকানা'; +$labels['move'] = 'স্থানান্তর'; $labels['moveto'] = 'সরিয়ে ফেলুন..'; $labels['download'] = 'ডাউনলোড'; +$labels['open'] = 'খোলা'; +$labels['showattachment'] = 'দেখানো'; $labels['filename'] = 'ফাইলের নাম'; $labels['filesize'] = 'ফাইলের সাইজ'; $labels['addtoaddressbook'] = 'ঠিকানার বইতে ঢুকান'; @@ -90,6 +94,7 @@ $labels['today'] = 'আজকে'; $labels['checkmail'] = 'দেখুন নতুন কোনো মেইল/চিঠি এলো কিনা'; $labels['compose'] = 'নতুন মেইল/চিঠি লিখুন'; $labels['writenewmessage'] = 'নতুন মেইল/চিঠি লিখুন'; +$labels['reply'] = 'জবাব'; $labels['replytomessage'] = 'শুধু প্রেরকের কাছে উত্তর পাঠান'; $labels['replytoallmessage'] = 'প্রেরক ও এই চিঠির অন্যান্য প্রাপকদের কাছে উত্তর পাঠান'; $labels['forwardmessage'] = 'মেইল/চিঠি এগিয়ে দিন'; @@ -102,18 +107,26 @@ $labels['nextmessage'] = 'পরের মেইল/চিঠিটি দ $labels['lastmessage'] = 'শেষ মেইল/চিঠিটি দেখুন'; $labels['backtolist'] = 'মেইল/চিঠির তালিকায় ফিরে যান'; $labels['viewsource'] = 'মূল উৎসদেখুন'; +$labels['mark'] = 'দাগানো'; $labels['markmessages'] = 'মেইল/চিঠি (গুলো)'; $labels['markread'] = 'পড়া শেষ (read)'; $labels['markunread'] = 'নাদেখা (unread)'; $labels['markflagged'] = 'দাগানো (flagged)'; $labels['markunflagged'] = 'দাগহীন (unflagged)'; +$labels['more'] = 'আরো'; +$labels['first'] = 'প্রথম'; +$labels['last'] = 'শেষ'; +$labels['previous'] = 'পূর্ববর্তী'; +$labels['next'] = 'পরবর্তী'; $labels['select'] = 'বেছেনিন'; $labels['all'] = 'সবগুলো'; $labels['none'] = 'কোনোটাই না'; +$labels['isread'] = 'পড়'; $labels['unread'] = 'নাদেখা (unread)'; $labels['flagged'] = 'দাগানো (flagged)'; $labels['unanswered'] = 'উত্তর না দেওয়া গুলো'; $labels['filter'] = 'ছাকনি'; +$labels['list'] = 'তালিকা'; $labels['nonesort'] = 'কোনোটাই না'; $labels['compact'] = 'টাইটকরুন'; $labels['empty'] = 'খালিকরুন'; diff --git a/program/localization/bn_BD/messages.inc b/program/localization/bn_BD/messages.inc index f13144c58..84165bb37 100644 --- a/program/localization/bn_BD/messages.inc +++ b/program/localization/bn_BD/messages.inc @@ -51,7 +51,6 @@ $messages['nopagesizewarning'] = 'দয়া করে পৃষ্ঠার স $messages['norecipientwarning'] = 'দয়া করে একজন প্রাপক এর ই-মেইলটা লিখুন'; $messages['nosubjectwarning'] = 'বিষয় হিসাবে কিছু লেখা হয়নি, আপনি কি কিছু লিখবেন এখন বিষয় হিসাবে?'; $messages['nobodywarning'] = 'কোনো কিছু না লিখেই এই চিঠি পাঠিয়ে দেবেন?'; -$messages['notsentwarning'] = 'চিঠি পাঠানো হয়নি। চিঠিটা কি বাতিল করে দেবেন?'; $messages['noldapserver'] = 'দয়া করে একটি এল্ডাপ সারভার বেছে নিন সার্চ করার জন্যে'; $messages['nosearchname'] = 'দয়া করে একজনের নাম অথবা ই-মেইল লিখুন'; $messages['searchsuccessful'] = '$nr টা চিঠি পাওয়া গেছে'; diff --git a/program/localization/br/messages.inc b/program/localization/br/messages.inc index c1d1bef83..66ef1850b 100644 --- a/program/localization/br/messages.inc +++ b/program/localization/br/messages.inc @@ -94,7 +94,6 @@ $messages['nosenderwarning'] = 'Enankit chomlec\'h postel ar c\'haser.'; $messages['norecipientwarning'] = 'Ouzhpennit ur resever da nebeutañ mar plij ganeoc\'h'; $messages['nosubjectwarning'] = 'Dileun eo ar maezienn « Sujed » . C\'hoant hoc\'h eus da leuniañ anezhiñ diouzhtu ?'; $messages['nobodywarning'] = 'Kas ar c\'hemennad hep testenn ?'; -$messages['notsentwarning'] = 'N\'eo ket bet kaset ar c\'hemennad. C\'hoant hoc\'h eus dilezel ar c\'hemennad-se ?'; $messages['restoresavedcomposedata'] = 'Kavet ez eus bet ur gemennadenn skrivet ha n\'eo ket bet kaset.\n\nDanvez: $subject\nEnrollet: $date\n\nFellout a ra deoc\'h assav ar gemennadenn-mañ?'; $messages['noldapserver'] = 'Dizuit ur servijer LDAP evit ar glask'; $messages['nosearchname'] = 'Skrivit un anv darempred pe ur postel elektronek'; diff --git a/program/localization/bs_BA/messages.inc b/program/localization/bs_BA/messages.inc index 1d9cc1c59..6e3dc998a 100644 --- a/program/localization/bs_BA/messages.inc +++ b/program/localization/bs_BA/messages.inc @@ -82,7 +82,6 @@ $messages['nopagesizewarning'] = 'Molimo vas da upišete veličinu stranice.'; $messages['norecipientwarning'] = 'Molimo vas da upišete barem jednog primaoca.'; $messages['nosubjectwarning'] = 'Polje \'Naslov\' je prazno. Želite li unijeti naslov?'; $messages['nobodywarning'] = 'Želite li poslati poruku bez teksta?'; -$messages['notsentwarning'] = 'Poruka nije poslana. Želite li odbaciti ovu poruku?'; $messages['restoresavedcomposedata'] = 'Pronađena je prethodno napisana poruka koja nije poslana..\n\nTema:$subject\nSnimljeno: $date\n\nŽelite li vratiti ovu poruku?'; $messages['noldapserver'] = 'Molimo vas da odaberete LDAP server za pretragu.'; $messages['nosearchname'] = 'Molimo vas da upišete ime kontakta ili email adresu.'; diff --git a/program/localization/ca_ES/messages.inc b/program/localization/ca_ES/messages.inc index 6f04ddf4d..dda3e4f77 100644 --- a/program/localization/ca_ES/messages.inc +++ b/program/localization/ca_ES/messages.inc @@ -82,7 +82,6 @@ $messages['nopagesizewarning'] = 'Si us plau, introduïu una mida de pàgina.'; $messages['norecipientwarning'] = 'Si us plau, introduïu com a mínim un destinatari.'; $messages['nosubjectwarning'] = 'El camp "Assumpte" és buit. Voleu introduir-ne un ara?'; $messages['nobodywarning'] = 'Voleu enviar aquest missatge sense text?'; -$messages['notsentwarning'] = 'El missatge no s\'ha enviat. Voleu descartar el vostre missatge?'; $messages['restoresavedcomposedata'] = 'S\'ha trobat un missatge començat però que no ha estat enviat.\n\nAssumpte: $subject\nDesat: $date\n\nVoleu recuperar aquest missatge?'; $messages['noldapserver'] = 'Si us plau, seleccioneu un servidor LDAP per cercar.'; $messages['nosearchname'] = 'Si us plau, introduïu un nom de contacte o una adreça de correu.'; diff --git a/program/localization/cs_CZ/messages.inc b/program/localization/cs_CZ/messages.inc index 5fc282006..0b45e8fcb 100644 --- a/program/localization/cs_CZ/messages.inc +++ b/program/localization/cs_CZ/messages.inc @@ -94,7 +94,6 @@ $messages['nosenderwarning'] = 'Zadejte e-mailovou adresu odesílatele'; $messages['norecipientwarning'] = 'Zadejte, prosím, alespoň jednoho příjemce'; $messages['nosubjectwarning'] = 'Předmět nebyl vyplněn. Přejete si jej zadat nyní?'; $messages['nobodywarning'] = 'Opravdu chtete odeslat prázdnou zprávu?'; -$messages['notsentwarning'] = 'Zpráva nebyla odeslána. Přejete si zprávu zahodit?'; $messages['restoresavedcomposedata'] = 'Byla nalezena dříve vytvořená ale neodeslaná zpráva.\n\nPředmět: $subject\nUloženo: $date\n\nPřejete si obnovit tuto zprávu?'; $messages['noldapserver'] = 'Zvolte, prosím, LDAP server k hledání'; $messages['nosearchname'] = 'Zadejte, prosím, jméno nebo e-mail kontaktu'; diff --git a/program/localization/cy_GB/labels.inc b/program/localization/cy_GB/labels.inc index b23520ed1..d64585614 100644 --- a/program/localization/cy_GB/labels.inc +++ b/program/localization/cy_GB/labels.inc @@ -324,6 +324,7 @@ $labels['advsearch'] = 'Chwilio Uwch'; $labels['advanced'] = 'Uwch'; $labels['other'] = 'Arall'; $labels['printcontact'] = 'Cyswllt argraffu'; +$labels['qrcode'] = 'Cod QR'; $labels['typehome'] = 'Cartref'; $labels['typework'] = 'Gwaith'; $labels['typeother'] = 'Arall'; diff --git a/program/localization/cy_GB/messages.inc b/program/localization/cy_GB/messages.inc index 48cf9d025..07ef81325 100644 --- a/program/localization/cy_GB/messages.inc +++ b/program/localization/cy_GB/messages.inc @@ -97,7 +97,7 @@ $messages['disclosedreciptitle'] = 'Gormod o dderbynnwyr cyhoeddus'; $messages['nosubjectwarning'] = 'Mae\'r pennawd "Pwnc" yn wag. Hoffech chi roi un fewn nawr?'; $messages['nosubjecttitle'] = 'Dim pwnc'; $messages['nobodywarning'] = 'Danfon y neges hwn heb destun?'; -$messages['notsentwarning'] = 'Ni ddanfonwyd y neges. Hoffech chi gael gwared a\'r neges?'; +$messages['notsentwarning'] = 'Nid yw\'r neges wedi ei ddanfon a mae ganddo newidiadau heb ei gadw. Hoffech chi gael gwared a\'r newidiadau?'; $messages['restoresavedcomposedata'] = 'Cafwyd hyd i neges wedi ei ysgrifennu o\'r blaen ond heb ei ddanfon.\n\nPwnc: $subject\nCadwyd: $date\n\nYdych chi am adfer y neges?'; $messages['noldapserver'] = 'Dewiswch weinydd ldap i chwilio'; $messages['nosearchname'] = 'Rhowch enw cyswllt neu gyfeiriad e-bost'; diff --git a/program/localization/da_DK/messages.inc b/program/localization/da_DK/messages.inc index 6a554c905..9d097f13a 100644 --- a/program/localization/da_DK/messages.inc +++ b/program/localization/da_DK/messages.inc @@ -89,7 +89,6 @@ $messages['nosenderwarning'] = 'Indtast venligst afsenders e-mailadresse.'; $messages['norecipientwarning'] = 'Indtast mindst én modtager.'; $messages['nosubjectwarning'] = '\'Emne\'-feltet er tomt. Kunne du tænke dig at skrive et nu?'; $messages['nobodywarning'] = 'Send denne besked uden tekst?'; -$messages['notsentwarning'] = 'Beskeden er ikke sendt. Vil du kassere din besked?'; $messages['restoresavedcomposedata'] = 'En tidligere skreven men usendt besked blev fundet.\n\nEmne: $subject\nGemt: $date\n\nØnsker du at gendanne denne besked?'; $messages['noldapserver'] = 'Vælg venligst hvilken LDAP-server der skal søges i.'; $messages['nosearchname'] = 'Indtast venligst en kontakts navn eller e-mailadresse.'; diff --git a/program/localization/de_CH/labels.inc b/program/localization/de_CH/labels.inc index ccb591916..b83d18c8a 100644 --- a/program/localization/de_CH/labels.inc +++ b/program/localization/de_CH/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = 'Als ungelesen'; $labels['markflagged'] = 'Markierung hinzufügen'; $labels['markunflagged'] = 'Markierung entfernen'; $labels['moreactions'] = 'Mehr ...'; +$labels['markallread'] = 'Alle als gelesen markieren'; +$labels['folders-cur'] = 'Nur ausgewählten Ordner'; +$labels['folders-sub'] = 'Ausgewählter Ordner und seine Unterordner'; +$labels['folders-all'] = 'Alle Ordner'; $labels['more'] = 'Mehr'; $labels['back'] = 'Zurück'; $labels['options'] = 'Optionen'; @@ -172,6 +176,10 @@ $labels['listcolumns'] = 'Spalten'; $labels['listsorting'] = 'Sortierung'; $labels['listorder'] = 'Ordnung'; $labels['listmode'] = 'Anzeigemodus'; +$labels['layout'] = 'Layout'; +$labels['layoutwidescreen'] = 'Breitbild'; +$labels['layoutdesktop'] = 'Desktop'; +$labels['layoutlist'] = 'Liste'; $labels['folderactions'] = 'Ordneraktionen...'; $labels['compact'] = 'Packen'; $labels['empty'] = 'Leeren'; @@ -229,6 +237,7 @@ $labels['keyid'] = 'Schlüsselkennung'; $labels['keylength'] = 'Bits'; $labels['keyexpired'] = 'Abgelaufen'; $labels['keyrevoked'] = 'Widerrufen'; +$labels['bccinstead'] = 'Bcc verwenden'; $labels['editidents'] = 'Absender bearbeiten'; $labels['spellcheck'] = 'Rechtschreibung'; $labels['checkspelling'] = 'Rechtschreibung prüfen'; @@ -315,6 +324,7 @@ $labels['advsearch'] = 'Erweiterte Suche'; $labels['advanced'] = 'Erweitert'; $labels['other'] = 'Andere'; $labels['printcontact'] = 'Kontakt drucken'; +$labels['qrcode'] = 'QR-Code'; $labels['typehome'] = 'Zuhause'; $labels['typework'] = 'Arbeit'; $labels['typeother'] = 'Andere'; diff --git a/program/localization/de_CH/messages.inc b/program/localization/de_CH/messages.inc index bd8df3f64..b0de1cbe9 100644 --- a/program/localization/de_CH/messages.inc +++ b/program/localization/de_CH/messages.inc @@ -92,9 +92,12 @@ $messages['nonamewarning'] = 'Bitte geben Sie einen Namen ein.'; $messages['nopagesizewarning'] = 'Bitte geben Sie die Einträge pro Seite an.'; $messages['nosenderwarning'] = 'Bitte geben Sie die E-Mail-Adresse des Senders an.'; $messages['norecipientwarning'] = 'Bitte geben Sie mindestens einen Empfänger an.'; +$messages['disclosedrecipwarning'] = 'Alle Empfänger sehen die E-Mail Adressen der anderen Empfänger. Um deren Privatsphäre zu schützen, können Sie das Bcc-Feld verwenden.'; +$messages['disclosedreciptitle'] = 'Zu viele öffentliche Empfänger'; $messages['nosubjectwarning'] = 'Die Betreffzeile ist leer. Möchten Sie jetzt einen Betreff eingeben?'; +$messages['nosubjecttitle'] = 'Kein Betreff'; $messages['nobodywarning'] = 'Wollen Sie diese Nachricht ohne Inhalt senden?'; -$messages['notsentwarning'] = 'Ihre Nachricht wurde nicht gesendet. Wollen Sie die Nachricht verwerfen?'; +$messages['notsentwarning'] = 'Die Nachricht wurde noch nicht gesendet und hat nicht gespeicherte Änderungen. Möchten Sie die Änderungen verwerfen?'; $messages['restoresavedcomposedata'] = 'Eine zuvor verfasste aber nicht gesendete Nachricht wurde gefunden.\n\nBetreff: $subject\nGespeichert: $date\n\nWollen Sie diese Nachricht wiederherstellen?'; $messages['noldapserver'] = 'Bitte wählen Sie einen LDAP-Server aus'; $messages['nosearchname'] = 'Bitte geben Sie einen Namen oder eine E-Mail-Adresse ein.'; @@ -117,6 +120,7 @@ $messages['messageopenerror'] = 'Die Nachricht konnte nicht vom Server geladen w $messages['filelinkerror'] = 'Datei konnte nicht angehängt werden'; $messages['fileuploaderror'] = 'Der Dateiupload ist fehlgeschlagen.'; $messages['filesizeerror'] = 'Die Datei überschreitet die maximale Grösse von $size.'; +$messages['filecounterror'] = 'Sie können maximal $count Dateien auf einmal hochladen.'; $messages['msgsizeerror'] = 'Datei konnte nicht angehängt werden. Die maximale Grösse einer Nachricht ($size) wird damit überschritten.'; $messages['copysuccess'] = '$nr Kontakt(e) erfolgreich kopiert.'; $messages['movesuccess'] = '$nr Kontakt(e) erfolgreich verschoben.'; diff --git a/program/localization/de_DE/messages.inc b/program/localization/de_DE/messages.inc index 8deff4e4e..8b6c09471 100644 --- a/program/localization/de_DE/messages.inc +++ b/program/localization/de_DE/messages.inc @@ -97,7 +97,7 @@ $messages['disclosedreciptitle'] = 'Zu viele öffentliche Empfänger'; $messages['nosubjectwarning'] = 'Die Betreffzeile ist leer. Möchten Sie jetzt einen Betreff eingeben?'; $messages['nosubjecttitle'] = 'Kein Betreff'; $messages['nobodywarning'] = 'Diese Nachricht ohne Inhalt senden?'; -$messages['notsentwarning'] = 'Ihre Nachricht wurde nicht gesendet. Wollen Sie die Nachricht verwerfen?'; +$messages['notsentwarning'] = 'Die Nachricht wurde nicht gesendet und hat nicht gespeicherte Änderungen. Möchten Sie Ihre Änderungen verwerfen?'; $messages['restoresavedcomposedata'] = 'Es wurde ein nicht versandter Entwurf einer Nachricht gefunden.\n\nBetreff: $subject\nGespeichert am: $date\n\nMöchten Sie diese Nachricht wiederherstellen?'; $messages['noldapserver'] = 'Bitte wählen Sie einen LDAP-Server aus.'; $messages['nosearchname'] = 'Bitte geben Sie einen Namen oder eine E-Mail-Adresse ein.'; diff --git a/program/localization/el_GR/labels.inc b/program/localization/el_GR/labels.inc index 54ca2566e..64efca963 100644 --- a/program/localization/el_GR/labels.inc +++ b/program/localization/el_GR/labels.inc @@ -128,6 +128,8 @@ $labels['markunread'] = 'Ως μη-αναγνωσμένα'; $labels['markflagged'] = 'ως με σήμανση'; $labels['markunflagged'] = 'ως Χωρίς σήμανση'; $labels['moreactions'] = 'Περισσότερες ενέργειες...'; +$labels['markallread'] = 'Σημείωση όλων ως αναγνωσμένων'; +$labels['folders-all'] = 'Όλοι οι φάκελοι'; $labels['more'] = 'Περισσότερα'; $labels['back'] = 'Επιστροφή'; $labels['options'] = 'Επιλογές'; @@ -172,6 +174,8 @@ $labels['listcolumns'] = 'Στήλες'; $labels['listsorting'] = 'Ταξινόμηση στηλών'; $labels['listorder'] = 'Σειρά ταξινόμησης'; $labels['listmode'] = 'Προβολή σε λίστα'; +$labels['layoutdesktop'] = 'Επιφάνεια εργασίας'; +$labels['layoutlist'] = 'Λίστα'; $labels['folderactions'] = 'Ενέργειες στους φακέλους'; $labels['compact'] = 'Συμπίεση'; $labels['empty'] = 'Άδειασμα'; diff --git a/program/localization/el_GR/messages.inc b/program/localization/el_GR/messages.inc index a982c74f9..e737d7f0b 100644 --- a/program/localization/el_GR/messages.inc +++ b/program/localization/el_GR/messages.inc @@ -93,8 +93,8 @@ $messages['nopagesizewarning'] = 'Παρακαλώ εισάγετε μέγεθο $messages['nosenderwarning'] = 'Παρακαλώ εισάγετε τη διεύθυνση email του αποστολέα.'; $messages['norecipientwarning'] = 'Παρακαλώ εισάγετε τουλάχιστο έναν παραλήπτη.'; $messages['nosubjectwarning'] = 'Το πεδίο "Θέμα" είναι άδειο. Θέλετε να εισάγετε ένα τώρα;'; +$messages['nosubjecttitle'] = 'Κανένα θέμα'; $messages['nobodywarning'] = 'Αποστολή μηνύματος χωρίς κείμενο;'; -$messages['notsentwarning'] = 'Το μήνυμα δεν έχει σταλεί. Θέλετε να το απορρίψετε;'; $messages['restoresavedcomposedata'] = 'Υπάρχει ένα προηγούμενο πρόχειρο μήνυμα το οποίο δεν έχει σταλεί.\n\nΘέμα: $subject\Αποθηκεύτηκε: $date\n\nΘέλετε να το ανακτήσετε;'; $messages['noldapserver'] = 'Παρακαλώ επιλέξτε έναν διακομιστή LDAP για αναζήτηση.'; $messages['nosearchname'] = 'Παρακαλώ εισάγετε όνομα επαφής ή διεύθυνση e-mail.'; diff --git a/program/localization/en_CA/messages.inc b/program/localization/en_CA/messages.inc index 3ada04bd4..7bf01f838 100644 --- a/program/localization/en_CA/messages.inc +++ b/program/localization/en_CA/messages.inc @@ -81,7 +81,6 @@ $messages['nopagesizewarning'] = 'Please enter a page size.'; $messages['norecipientwarning'] = 'Please enter at least one recipient.'; $messages['nosubjectwarning'] = 'The "Subject" field is empty. Would you like to enter one now?'; $messages['nobodywarning'] = 'Send this message without text?'; -$messages['notsentwarning'] = 'Message has not been sent. Do you want to discard your message?'; $messages['restoresavedcomposedata'] = 'A previously composed but unsent message was found.\n\nSubject: $subject\nSaved: $date\n\nDo you want to restore this message?'; $messages['noldapserver'] = 'Please select an ldap server to search.'; $messages['nosearchname'] = 'Please enter a contact name or email address.'; diff --git a/program/localization/en_GB/labels.inc b/program/localization/en_GB/labels.inc index 6c943fa53..fb1dddc66 100644 --- a/program/localization/en_GB/labels.inc +++ b/program/localization/en_GB/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = 'As unread'; $labels['markflagged'] = 'As flagged'; $labels['markunflagged'] = 'As unflagged'; $labels['moreactions'] = 'More actions...'; +$labels['markallread'] = 'Mark all as read'; +$labels['folders-cur'] = 'Selected folder only'; +$labels['folders-sub'] = 'Selected folder and its subfolders'; +$labels['folders-all'] = 'All folders'; $labels['more'] = 'More'; $labels['back'] = 'Back'; $labels['options'] = 'Options'; @@ -172,6 +176,10 @@ $labels['listcolumns'] = 'List columns'; $labels['listsorting'] = 'Sorting column'; $labels['listorder'] = 'Sorting order'; $labels['listmode'] = 'List view mode'; +$labels['layout'] = 'Layout'; +$labels['layoutwidescreen'] = 'Widescreen'; +$labels['layoutdesktop'] = 'Desktop'; +$labels['layoutlist'] = 'List'; $labels['folderactions'] = 'Folder actions...'; $labels['compact'] = 'Compact'; $labels['empty'] = 'Empty'; @@ -229,6 +237,7 @@ $labels['keyid'] = 'Key ID'; $labels['keylength'] = 'Bits'; $labels['keyexpired'] = 'Expired'; $labels['keyrevoked'] = 'Revoked'; +$labels['bccinstead'] = 'Use Bcc'; $labels['editidents'] = 'Edit identities'; $labels['spellcheck'] = 'Spell'; $labels['checkspelling'] = 'Check spelling'; @@ -253,6 +262,7 @@ $labels['uploadprogress'] = '$percent ($current of $total)'; $labels['close'] = 'Close'; $labels['messageoptions'] = 'Message options...'; $labels['togglecomposeoptions'] = 'Toggle composition options'; +$labels['attachmentrename'] = 'Rename attachment'; $labels['low'] = 'Low'; $labels['lowest'] = 'Lowest'; $labels['normal'] = 'Normal'; @@ -314,6 +324,7 @@ $labels['advsearch'] = 'Advanced Search'; $labels['advanced'] = 'Advanced'; $labels['other'] = 'Other'; $labels['printcontact'] = 'Print contact'; +$labels['qrcode'] = 'QR Code'; $labels['typehome'] = 'Home'; $labels['typework'] = 'Work'; $labels['typeother'] = 'Other'; diff --git a/program/localization/en_GB/messages.inc b/program/localization/en_GB/messages.inc index 2782adba5..7f188714f 100644 --- a/program/localization/en_GB/messages.inc +++ b/program/localization/en_GB/messages.inc @@ -92,9 +92,12 @@ $messages['nonamewarning'] = 'Please enter a name.'; $messages['nopagesizewarning'] = 'Please enter a page size.'; $messages['nosenderwarning'] = 'Please enter sender email address.'; $messages['norecipientwarning'] = 'Please enter at least one recipient.'; +$messages['disclosedrecipwarning'] = 'All recipients will see each others e-mail addresses. To prevent this and protect their privacy you can use the Bcc field.'; +$messages['disclosedreciptitle'] = 'Too many public recipients'; $messages['nosubjectwarning'] = 'The "Subject" field is empty. Would you like to enter one now?'; +$messages['nosubjecttitle'] = 'No subject'; $messages['nobodywarning'] = 'Send this message without any text?'; -$messages['notsentwarning'] = 'Your message has not been sent. Do you want to discard it?'; +$messages['notsentwarning'] = 'The message has not been sent and has unsaved changes. Do you want to discard your changes?'; $messages['restoresavedcomposedata'] = 'A previously composed but unsent message was found.\n\nSubject: $subject\nSaved: $date\n\nDo you want to restore this message?'; $messages['noldapserver'] = 'Please select an LDAP server to search.'; $messages['nosearchname'] = 'Please enter a contact name or email address.'; @@ -117,6 +120,8 @@ $messages['messageopenerror'] = 'Could not load message from server.'; $messages['filelinkerror'] = 'Attaching the file failed.'; $messages['fileuploaderror'] = 'File upload failed.'; $messages['filesizeerror'] = 'The uploaded file exceeds the maximum size of $size.'; +$messages['filecounterror'] = 'You can upload maximum $count files at once.'; +$messages['msgsizeerror'] = 'Failed to attach a file. Maximum size of a message ($size) exceeded.'; $messages['copysuccess'] = 'Successfully copied $nr contacts.'; $messages['movesuccess'] = 'Successfully moved $nr contacts.'; $messages['copyerror'] = 'Could not copy any contacts.'; diff --git a/program/localization/eo/messages.inc b/program/localization/eo/messages.inc index 9c2d1cae5..13955597b 100644 --- a/program/localization/eo/messages.inc +++ b/program/localization/eo/messages.inc @@ -55,7 +55,6 @@ $messages['nopagesizewarning'] = 'Bonvolu enmeti paĝ-grando'; $messages['norecipientwarning'] = 'Bonvolu enmeti minumume unu ricevonto'; $messages['nosubjectwarning'] = 'La temkampo estas malplena. Ĉu vi volas skribi temon nun?'; $messages['nobodywarning'] = 'Ĉu sendi ĉi tiun mesaĝon sen teksto?'; -$messages['notsentwarning'] = 'Mesaĝo ne estas sendita. Ĉu vi volas forigi vian mesaĝon?'; $messages['noldapserver'] = 'Bonvolu elekti ldap-servilon por serĉado'; $messages['nosearchname'] = 'Bonvolu enmeti kontakt-nomon aŭ retpoŝt-adreson.'; $messages['searchsuccessful'] = 'trovis $nr mesaĝojn'; diff --git a/program/localization/es_419/messages.inc b/program/localization/es_419/messages.inc index a93c8ecb1..27b7f8dbc 100644 --- a/program/localization/es_419/messages.inc +++ b/program/localization/es_419/messages.inc @@ -82,7 +82,6 @@ $messages['nopagesizewarning'] = 'Por favor ingresa un tamaño de página.'; $messages['norecipientwarning'] = 'Por favor ingresa al menos un destinatario.'; $messages['nosubjectwarning'] = 'El campo "Asunto" está vacio. ¿Deseas ingresar uno ahora?'; $messages['nobodywarning'] = '¿Enviar este mensaje sin texto?'; -$messages['notsentwarning'] = 'El mensaje no ha sido enviado. ¿Deseas descartar este mensaje?'; $messages['restoresavedcomposedata'] = 'Se ha encontrado un mensaje escrito pero no enviado\n\nAsunto: $subject\nGuardado: $date\n\n¿Desea restaurar este mensaje?'; $messages['noldapserver'] = 'Por favor ingresa un servidor ldap para buscar.'; $messages['nosearchname'] = 'Por favor ingresa un nombre de contacto o dirección de correo electrónico.'; diff --git a/program/localization/es_AR/messages.inc b/program/localization/es_AR/messages.inc index 3c59e9fb8..b49dc708c 100644 --- a/program/localization/es_AR/messages.inc +++ b/program/localization/es_AR/messages.inc @@ -82,7 +82,6 @@ $messages['nopagesizewarning'] = 'Por favor, introduzca un tamaño de página'; $messages['norecipientwarning'] = 'Por favor, introduzca al menos un destinatario'; $messages['nosubjectwarning'] = 'El campo "Asunto" esta vacío. ¿Desea completarlo en este momento?'; $messages['nobodywarning'] = '¿Quiere enviar este mensaje sin texto?'; -$messages['notsentwarning'] = 'El mensaje no ha sido enviado. ¿Desea descartar su mensaje?'; $messages['restoresavedcomposedata'] = 'Se ha encontrado un mensaje redactado anteriormente que no ha sido enviado.\n\nAsunto: $subject\nGuardado: $date\n\nDeseas recuperar este mensaje?'; $messages['noldapserver'] = 'Por favor, seleccione un servidor LDAP para buscar'; $messages['nosearchname'] = 'Por favor, introduzca un nombre o la dirección de e-mail'; diff --git a/program/localization/es_ES/labels.inc b/program/localization/es_ES/labels.inc index 3fda99abe..e53b16373 100644 --- a/program/localization/es_ES/labels.inc +++ b/program/localization/es_ES/labels.inc @@ -324,6 +324,7 @@ $labels['advsearch'] = 'Búsqueda avanzada'; $labels['advanced'] = 'Avanzadas'; $labels['other'] = 'Otro'; $labels['printcontact'] = 'Imprimir contacto'; +$labels['qrcode'] = 'Código QR'; $labels['typehome'] = 'Casa'; $labels['typework'] = 'Trabajo'; $labels['typeother'] = 'Otro'; diff --git a/program/localization/es_ES/messages.inc b/program/localization/es_ES/messages.inc index 4237558de..80bfcf3c5 100644 --- a/program/localization/es_ES/messages.inc +++ b/program/localization/es_ES/messages.inc @@ -97,7 +97,7 @@ $messages['disclosedreciptitle'] = 'Demasiados destinatarios'; $messages['nosubjectwarning'] = 'El campo "Asunto" está vacío. ¿Desea completarlo en este momento?'; $messages['nosubjecttitle'] = 'Sin asunto'; $messages['nobodywarning'] = '¿Desea enviar este mensaje sin texto?'; -$messages['notsentwarning'] = 'El mensaje no ha sido enviado. ¿Desea descartar su mensaje?'; +$messages['notsentwarning'] = 'El mensaje no se ha enviado y tiene cambios sin guardar. ¿Quieres descartar los cambios?'; $messages['restoresavedcomposedata'] = 'Se ha encontrado un mensaje previamente redactado sin enviar.\n\nAsunto: $subject\nGuardado: $date\n\n¿Desea restaurar este mensaje?'; $messages['noldapserver'] = 'Por favor, seleccione un servidor LDAP para buscar.'; $messages['nosearchname'] = 'Por favor, ingrese un nombre de contacto o dirección de correo electrónico.'; diff --git a/program/localization/et_EE/labels.inc b/program/localization/et_EE/labels.inc index 138a1b54d..16271610e 100644 --- a/program/localization/et_EE/labels.inc +++ b/program/localization/et_EE/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = 'Mitte loetuks'; $labels['markflagged'] = 'Lisa lipik'; $labels['markunflagged'] = 'Eemalda lipik'; $labels['moreactions'] = 'Muud toimingud...'; +$labels['markallread'] = 'Märgi kõik loetuks'; +$labels['folders-cur'] = 'Valitud kaustad ainult'; +$labels['folders-sub'] = 'Valitud kaustad ja selle alamkaustad'; +$labels['folders-all'] = 'Kõik kaustad'; $labels['more'] = 'Rohkem'; $labels['back'] = 'Tagasi'; $labels['options'] = 'Valikud'; @@ -172,6 +176,10 @@ $labels['listcolumns'] = 'Näita veerge'; $labels['listsorting'] = 'Järjestus veerg'; $labels['listorder'] = 'Järjestus suund'; $labels['listmode'] = 'Nimekirja vaatamise režiim'; +$labels['layout'] = 'Paigutus'; +$labels['layoutwidescreen'] = 'Laiekraan'; +$labels['layoutdesktop'] = 'Lauaarvuti'; +$labels['layoutlist'] = 'Nimekiri'; $labels['folderactions'] = 'Kausta tegevused...'; $labels['compact'] = 'Tihenda'; $labels['empty'] = 'Tühjenda'; @@ -195,6 +203,12 @@ $labels['searchscope'] = 'Skoop'; $labels['currentfolder'] = 'Käesolev kaust'; $labels['subfolders'] = 'See ja alamkaust'; $labels['allfolders'] = 'Kõik kaustad'; +$labels['searchinterval-1W'] = 'vanemad kui nädal'; +$labels['searchinterval-1M'] = 'vanemad kui kuu'; +$labels['searchinterval-1Y'] = 'vanemad kui aasta'; +$labels['searchinterval1W'] = 'värskemad kui nädal'; +$labels['searchinterval1M'] = 'värskemad kui kuu'; +$labels['searchinterval1Y'] = 'värskemad kui aasta'; $labels['openinextwin'] = 'Ava uues aknas'; $labels['emlsave'] = 'Salvesta (.eml)'; $labels['changeformattext'] = 'Näita lihttekstina'; @@ -214,6 +228,13 @@ $labels['selectimage'] = 'Vali pilt'; $labels['addimage'] = 'Lisa pilt'; $labels['selectmedia'] = 'Vali film'; $labels['addmedia'] = 'Lisa film'; +$labels['encrypt'] = 'Krüpti'; +$labels['encryptmessage'] = 'Krüpti kiri'; +$labels['importpubkeys'] = 'Impordi avalikud võtmed'; +$labels['encryptedsendialog'] = 'Saadan krüptitud kirja'; +$labels['keyid'] = 'Võtme ID'; +$labels['keylength'] = 'Bitte'; +$labels['keyexpired'] = 'Aegunud'; $labels['editidents'] = 'Muuda Identiteete'; $labels['spellcheck'] = 'Õigekiri'; $labels['checkspelling'] = 'Kontrolli õigekirja'; @@ -221,6 +242,7 @@ $labels['resumeediting'] = 'Jätka muutmist'; $labels['revertto'] = 'Pööra tagasi'; $labels['restore'] = 'Taasta'; $labels['restoremessage'] = 'Taasta kiri?'; +$labels['ignore'] = 'Igroneeri'; $labels['responses'] = 'Vastused'; $labels['insertresponse'] = 'Lisa vastus'; $labels['manageresponses'] = 'Halda vastuseid'; @@ -233,6 +255,7 @@ $labels['responsetext'] = 'Vastuse sisu'; $labels['attach'] = 'Manusta'; $labels['attachments'] = 'Manused'; $labels['upload'] = 'Kinnita manus'; +$labels['uploadprogress'] = '$percent ($current / $total)'; $labels['close'] = 'Sulge'; $labels['messageoptions'] = 'Kirja valikud...'; $labels['low'] = 'Madal'; @@ -291,9 +314,12 @@ $labels['assistant'] = 'Assistent'; $labels['spouse'] = 'Abikaasa'; $labels['allfields'] = 'Kõik väljad'; $labels['search'] = 'Otsi'; +$labels['searchresult'] = 'Otsingutulemused'; $labels['advsearch'] = 'Täpsem otsing'; $labels['advanced'] = 'Edasijõudnutele'; $labels['other'] = 'Muu'; +$labels['printcontact'] = 'Prindi kontakt'; +$labels['qrcode'] = 'QR kood'; $labels['typehome'] = 'Kodu'; $labels['typework'] = 'Töö'; $labels['typeother'] = 'Muu'; @@ -334,6 +360,7 @@ $labels['exportall'] = 'Ekspordi kõik'; $labels['exportsel'] = 'Ekspordi valitud'; $labels['exportvcards'] = 'Ekspordi kontaktid vCardi formaadis'; $labels['newgroup'] = 'Loo uus grupp'; +$labels['addgroup'] = 'Lisa grupp'; $labels['grouprename'] = 'Nimeta grupp ümber'; $labels['groupdelete'] = 'Kustuta grupp'; $labels['groupremoveselected'] = 'Eemalda valitud kontaktid grupist'; diff --git a/program/localization/et_EE/messages.inc b/program/localization/et_EE/messages.inc index 33f1a5372..23d3ef87a 100644 --- a/program/localization/et_EE/messages.inc +++ b/program/localization/et_EE/messages.inc @@ -82,7 +82,6 @@ $messages['nopagesizewarning'] = 'Palun sisesta lehekülje suurus'; $messages['norecipientwarning'] = 'Palun sisesta vähemalt üks adressaat'; $messages['nosubjectwarning'] = 'Väli „Pealkiri“ on tühi. Soovid selle ära täita?'; $messages['nobodywarning'] = 'Saadan selle kirja ilma tekstita?'; -$messages['notsentwarning'] = 'Kirja saatmine nurjus. Soovid selle ära visata?'; $messages['restoresavedcomposedata'] = 'Eelnevalt loodud aga saatmatta kiri leiti.\n\nTeema: $subject\nSalvestatud: $date\n\nKas sa soovid antud kirja taastada?'; $messages['noldapserver'] = 'Palun vali otsinguks LDAPi server'; $messages['nosearchname'] = 'Palun sisesta kontakti nimi või e-posti aadress'; diff --git a/program/localization/eu_ES/messages.inc b/program/localization/eu_ES/messages.inc index daa02775c..4aa5ac8d3 100644 --- a/program/localization/eu_ES/messages.inc +++ b/program/localization/eu_ES/messages.inc @@ -94,7 +94,6 @@ $messages['nosenderwarning'] = 'Idatzi bidaltzailearen helbide elektronikoa'; $messages['norecipientwarning'] = 'Mesedez behintzat hartzaile bat idatzi'; $messages['nosubjectwarning'] = '"Gaia" eremua hutsik dago. Bat idatzi nahi al duzu?'; $messages['nobodywarning'] = 'Testu gabeko mezu hau bidali?'; -$messages['notsentwarning'] = 'Mezua ez da bidali. Mezua ezeztatu nahi al duzu?'; $messages['restoresavedcomposedata'] = 'Lehendik idatzitako baina bidali gabeko mezu bat aurkitu da.\n\nGaia:$subject\nGordeta:$date\n\nBerreskuratu nahi duzu mezu hau?'; $messages['noldapserver'] = 'Mesedez hautatu bilaketa egiteko LDAP zerbitzari bat'; $messages['nosearchname'] = 'Idatzi kontaktu izen bat edo helbide elektroniko bat'; diff --git a/program/localization/fa_AF/messages.inc b/program/localization/fa_AF/messages.inc index 1195844c2..95a69ae7b 100644 --- a/program/localization/fa_AF/messages.inc +++ b/program/localization/fa_AF/messages.inc @@ -81,7 +81,6 @@ $messages['nopagesizewarning'] = 'لطفاً اندازه يک صفحه را د $messages['norecipientwarning'] = 'لطفاً کم از کم يک آدرس گيرينده را نوشته / داخل کنيد'; $messages['nosubjectwarning'] = 'بخش مضمون خالي است آیا میخواهید که حالا یکی آنها را درج نمایید؟.'; $messages['nobodywarning'] = 'اين پيغام را بدون متن بفرستیم؟'; -$messages['notsentwarning'] = 'پيغام ارسال نه شده است آیا میخواهید که از این نامه صرف نظر نمایید'; $messages['noldapserver'] = 'لطفاً يک ايل دپ سرور را بخاطر جستجو انتخاب کنيد'; $messages['nosearchname'] = 'لطفاً يک نام تماس و يا هم يک ايميل ادرس را داخل کنيد'; $messages['searchsuccessful'] = '$nr پیام یافت شد'; diff --git a/program/localization/fa_IR/messages.inc b/program/localization/fa_IR/messages.inc index d928851f7..21b77b71c 100644 --- a/program/localization/fa_IR/messages.inc +++ b/program/localization/fa_IR/messages.inc @@ -82,7 +82,6 @@ $messages['nopagesizewarning'] = 'لطفا اندازه‌ی صفحه را وا $messages['norecipientwarning'] = 'لطفاً حداقل یک گیرنده وارد کنید.'; $messages['nosubjectwarning'] = 'قسمت "موضوع" خالی است. می‌خواهید اکنون وارد کنید؟'; $messages['nobodywarning'] = 'این پیغام بدون متن ارسال شود؟'; -$messages['notsentwarning'] = 'پیغام ارسال نشده است. آیا می‌خواهید پیغام را از بین ببرید؟'; $messages['restoresavedcomposedata'] = 'نامه قبلا نوشته و نفرستاده یافت شد.\n\nموضوع: $subject\n ذخیره شده: $date\n\nآیا می‌خواهید این پیغام را بازیابی نمایید؟'; $messages['noldapserver'] = 'لطفا یک سرور LDAP برای جست‌و‌جو انتخاب کنید.'; diff --git a/program/localization/fi_FI/messages.inc b/program/localization/fi_FI/messages.inc index f3eb8b59c..0479572f4 100644 --- a/program/localization/fi_FI/messages.inc +++ b/program/localization/fi_FI/messages.inc @@ -94,7 +94,6 @@ $messages['nosenderwarning'] = 'Anna lähettäjän sähköpostiosoite.'; $messages['norecipientwarning'] = 'Anna ainakin yksi vastaanottaja'; $messages['nosubjectwarning'] = '"Aihe"-kenttä on tyhjä. Haluatko kirjoittaa viestillesi aiheen?'; $messages['nobodywarning'] = 'Lähetetäänkö viesti ilman tekstiä?'; -$messages['notsentwarning'] = 'Viestiä ei lähetetty. Haluatko poistaa viestin?'; $messages['restoresavedcomposedata'] = 'Löydettiin aiemmin luotu, mutta lähettämätön viesti.\n\nAihe: $subject\nTallennettu: $date\n\nHaluatko palauttaa tämän viestin?'; $messages['noldapserver'] = 'Valitse LDAP-palvelin'; $messages['nosearchname'] = 'Anna yhteystiedon nimi tai sähköpostiosoite'; diff --git a/program/localization/fo_FO/messages.inc b/program/localization/fo_FO/messages.inc index 7c77da9a4..16989f411 100644 --- a/program/localization/fo_FO/messages.inc +++ b/program/localization/fo_FO/messages.inc @@ -94,7 +94,6 @@ $messages['nosenderwarning'] = 'Vinarliga skriva sendara teldupost búðstað.'; $messages['norecipientwarning'] = 'Vinarliga skriva minst ein móttakara.'; $messages['nosubjectwarning'] = 'Evna teigurin er tómur. Vilt tú skriva nakað í hann?'; $messages['nobodywarning'] = 'Send hesi boð uttan tekst?'; -$messages['notsentwarning'] = 'Boðini vóru ikki send. Ynskir tú strika hetta boð?'; $messages['restoresavedcomposedata'] = 'Eitt fyrrverandi skriva boð, men ósent, boð var funni.\n\nEvni: $subject\nGoymt: $date\n\nVilt tú endur stovna hetta boð?'; $messages['noldapserver'] = 'Vinarliga vel ein ldap ambatara fyri at leita.'; $messages['nosearchname'] = 'Vinarliga skriva eitt persón navn ella teldupost búðstað,'; diff --git a/program/localization/fr_FR/labels.inc b/program/localization/fr_FR/labels.inc index 0616c0a85..278b5b9ec 100644 --- a/program/localization/fr_FR/labels.inc +++ b/program/localization/fr_FR/labels.inc @@ -100,7 +100,7 @@ $labels['longnov'] = 'Novembre'; $labels['longdec'] = 'Décembre'; $labels['today'] = 'Aujourd\'hui'; $labels['refresh'] = 'Actualiser'; -$labels['checkmail'] = 'Vérifier les nouveaux courriels'; +$labels['checkmail'] = 'Relever les nouveaux courriels'; $labels['compose'] = 'Rédiger'; $labels['writenewmessage'] = 'Créer un nouveau courriel'; $labels['reply'] = 'Répondre'; @@ -447,7 +447,7 @@ $labels['alwaysbutplain'] = 'toujours, sauf lors d\'une réponse à un texte en $labels['showinlineimages'] = 'Afficher les images jointes sous le courriel'; $labels['autosavedraft'] = 'Enregistrer automatiquement un brouillon'; $labels['everynminutes'] = 'toutes les $n minute(s)'; -$labels['refreshinterval'] = 'Actualiser (vérifier les nouveaux courriels, etc.)'; +$labels['refreshinterval'] = 'Actualiser (relever les nouveaux courriels, etc.)'; $labels['never'] = 'jamais'; $labels['immediately'] = 'Immédiatement'; $labels['messagesdisplaying'] = 'Affichage des courriels'; diff --git a/program/localization/fr_FR/messages.inc b/program/localization/fr_FR/messages.inc index 838a56d72..19baa55ca 100644 --- a/program/localization/fr_FR/messages.inc +++ b/program/localization/fr_FR/messages.inc @@ -43,7 +43,7 @@ $messages['uploading'] = 'Téléversement du fichier...'; $messages['attaching'] = 'Ajout du fichier...'; $messages['uploadingmany'] = 'Téléversement des fichiers...'; $messages['loadingdata'] = 'Chargement des données...'; -$messages['checkingmail'] = 'Vérification des nouveaux courriels...'; +$messages['checkingmail'] = 'Relève des nouveaux courriels...'; $messages['sendingmessage'] = 'Envoi du courriel...'; $messages['messagesent'] = 'Le courriel a été envoyé avec succès.'; $messages['savingmessage'] = 'Enregistrement du courriel...'; @@ -97,7 +97,7 @@ $messages['disclosedreciptitle'] = 'Trop de destinataires publics'; $messages['nosubjectwarning'] = 'Le champ « Objet » est vide. Voudriez-vous le saisir maintenant ?'; $messages['nosubjecttitle'] = 'Aucun objet'; $messages['nobodywarning'] = 'Envoyer ce courriel sans texte ?'; -$messages['notsentwarning'] = 'Le courriel n\'a pas été envoyé. Voulez-vous abandonner ce courriel ?'; +$messages['notsentwarning'] = 'Le courriel n\'a pas été envoyé et contient des changements non enregistrés. Souhaitez-vous rejeter vos changements ?'; $messages['restoresavedcomposedata'] = 'Un courriel rédigé précédemment mais non envoyé a été trouvé.\n\nObjet : $subject\nEnregistré le : $date\n\nVoulez-vous restaurer ce courriel ?'; $messages['noldapserver'] = 'Veuillez choisir un serveur ldap à rechercher.'; $messages['nosearchname'] = 'Veuillez saisir un nom de contact ou une adresse de courriel.'; @@ -106,7 +106,7 @@ $messages['searchsuccessful'] = '$nr courriels trouvés.'; $messages['contactsearchsuccessful'] = '$nr contacts trouvés.'; $messages['searchnomatch'] = 'La recherche n\'a retourné aucun résultat.'; $messages['searching'] = 'Recherche...'; -$messages['checking'] = 'Vérification...'; +$messages['checking'] = 'Relève...'; $messages['stillsearching'] = 'Recherche toujours en cours...'; $messages['nospellerrors'] = 'Aucune faute d\'orthographe trouvée.'; $messages['folderdeleted'] = 'Le dossier a été effacé avec succès.'; diff --git a/program/localization/fy_NL/labels.inc b/program/localization/fy_NL/labels.inc index 9b8ba99af..d23d58688 100644 --- a/program/localization/fy_NL/labels.inc +++ b/program/localization/fy_NL/labels.inc @@ -18,18 +18,21 @@ $labels['welcome'] = 'Wolkom by $product'; $labels['username'] = 'Brûkersnamme'; $labels['password'] = 'Wachtwurd'; -$labels['server'] = 'Server'; +$labels['server'] = 'Tsjinner'; $labels['login'] = 'Ynlogge'; $labels['logout'] = 'Ôfmelde'; -$labels['mail'] = 'E-mail'; -$labels['settings'] = 'Ynstellingen'; +$labels['mail'] = 'E-post'; +$labels['settings'] = 'Ynstellings'; $labels['addressbook'] = 'Adresboek'; +$labels['inbox'] = 'Postfek Yn'; $labels['drafts'] = 'Konsepten'; -$labels['sent'] = 'Stjoerd'; +$labels['sent'] = 'Ferstjoerd'; $labels['trash'] = 'Jiskefet'; $labels['junk'] = 'Spam'; +$labels['show_real_foldernames'] = 'Lit echte nammen sjen foar spesjale mappen'; $labels['subject'] = 'Ûnderwerp'; $labels['from'] = 'Fan'; +$labels['sender'] = 'Stjoerder'; $labels['to'] = 'Oan'; $labels['cc'] = 'Cc'; $labels['bcc'] = 'Bcc'; @@ -39,14 +42,24 @@ $labels['date'] = 'Datum'; $labels['size'] = 'Grutte'; $labels['priority'] = 'Prioriteit'; $labels['organization'] = 'Organisaasje'; +$labels['readstatus'] = 'Lêzen status'; +$labels['listoptions'] = 'Lyst opsjes...'; $labels['mailboxlist'] = 'Mappen'; +$labels['messagesfromto'] = 'Berjochten $from nei $to fan $count'; +$labels['threadsfromto'] = 'Rigen $from oan $to fan $count'; $labels['messagenrof'] = 'Berjocht $nr fan $count'; -$labels['copy'] = 'Kopieare'; -$labels['move'] = 'Ferplaatse'; -$labels['download'] = 'Delhelje'; +$labels['fromtoshort'] = '$from – $to fan $count'; +$labels['copy'] = 'Kopiearje'; +$labels['move'] = 'Ferpleatse'; +$labels['moveto'] = 'Ferpleatse nei...'; +$labels['copyto'] = 'Kopiearje nei...'; +$labels['download'] = 'Ynlade'; +$labels['open'] = 'Iepenje'; $labels['showattachment'] = 'Toane'; -$labels['filename'] = 'Triemnamme'; -$labels['filesize'] = 'Triemgrutte'; +$labels['showanyway'] = 'Dochs toane'; +$labels['filename'] = 'Bestânsnamme'; +$labels['filesize'] = 'Bestânsgrutte'; +$labels['addtoaddressbook'] = 'Oan adresboek tafoegje'; $labels['sun'] = 'si'; $labels['mon'] = 'mo'; $labels['tue'] = 'ti'; @@ -87,55 +100,512 @@ $labels['longnov'] = 'novimber'; $labels['longdec'] = 'desimber'; $labels['today'] = 'Hjoed'; $labels['refresh'] = 'Ferfarskje'; +$labels['checkmail'] = 'Op nije berjochten kontrolearje'; +$labels['compose'] = 'Opstelle'; +$labels['writenewmessage'] = 'Nij berjocht oanmeitsje'; $labels['reply'] = 'Beäntwurdzje'; +$labels['replytomessage'] = 'Antwurd oan stjoerder'; +$labels['replytoallmessage'] = 'Antwurd nei lyst of nei stjoerder en alle ûntfangers'; +$labels['replyall'] = 'Antwurdzje alle'; +$labels['replylist'] = 'Antwurdzje lyst'; +$labels['forward'] = 'Trochstjoere'; +$labels['forwardinline'] = 'Ynsletten trochstjoere'; +$labels['forwardattachment'] = 'Trochstjoere as taheaksel'; +$labels['forwardmessage'] = 'Stjoer it berjocht troch'; +$labels['deletemessage'] = 'Berjocht wiskje'; +$labels['movemessagetotrash'] = 'Berjocht ferpleatse nei jiskefet'; +$labels['printmessage'] = 'Dit berjocht ôfdrukke'; +$labels['previousmessage'] = 'Lit foarige berjocht sjen'; +$labels['firstmessage'] = 'Lit earste berjocht sjen'; +$labels['nextmessage'] = 'Lit folgjende berjocht sjen'; +$labels['lastmessage'] = 'Lit lêste berjocht sjen'; +$labels['backtolist'] = 'Tebek nei berjochtlyst'; +$labels['viewsource'] = 'Toan boarne'; +$labels['mark'] = 'Markearje'; +$labels['markmessages'] = 'Markearje berjochten'; +$labels['markread'] = 'As lêzen'; +$labels['markunread'] = 'As net-lêzen'; +$labels['markflagged'] = 'As flagge'; +$labels['markunflagged'] = 'As net-flagge'; +$labels['moreactions'] = 'Mear aksjes...'; +$labels['markallread'] = 'Markearje alles as lêzen'; +$labels['folders-cur'] = 'Allinnich selektearre map'; +$labels['folders-sub'] = 'Selektearre map en ûnderlizzende mappen'; +$labels['folders-all'] = 'Alle mappen'; $labels['more'] = 'Mear'; -$labels['back'] = 'Werom'; +$labels['back'] = 'Tebek'; $labels['options'] = 'Opsjes'; +$labels['first'] = 'Earst'; +$labels['last'] = 'Lêst'; $labels['previous'] = 'Foarige'; $labels['next'] = 'Folgjende'; $labels['select'] = 'Selektearje'; $labels['all'] = 'Alle'; $labels['none'] = 'Gjin'; -$labels['attachment'] = 'Taheakke'; +$labels['currpage'] = 'Aktuele side'; +$labels['isread'] = 'Lêzen'; +$labels['unread'] = 'Net-lêzen'; +$labels['flagged'] = 'Flagge'; +$labels['unflagged'] = 'Net-flagge'; +$labels['unanswered'] = 'Unbeantwurde'; +$labels['withattachment'] = 'Mei taheaksel'; +$labels['deleted'] = 'Ferwidere'; +$labels['undeleted'] = 'Net ferwidere'; +$labels['replied'] = 'Antwurde'; +$labels['forwarded'] = 'Trochstjoerd'; +$labels['invert'] = 'Omkeart'; +$labels['filter'] = 'Filter'; +$labels['list'] = 'Lyst'; +$labels['threads'] = 'Streamen'; +$labels['expand-all'] = 'Alles útwreidzje'; +$labels['expand-unread'] = 'Net-lêzen útwreidzje'; +$labels['collapse-all'] = 'Alles ynsakje'; +$labels['threaded'] = 'Streamde'; +$labels['autoexpand_threads'] = 'Berjocht stream útwreidzje'; +$labels['do_expand'] = 'Alle streamen'; +$labels['expand_only_unread'] = 'Allinnich mei net-lêzen berjochten'; +$labels['fromto'] = 'Fan/Nei'; +$labels['flag'] = 'Flagge'; +$labels['attachment'] = 'Taheaksel'; $labels['nonesort'] = 'Gjin'; +$labels['sentdate'] = 'Ferstjoer datum'; +$labels['arrival'] = 'Oankomst datum'; +$labels['asc'] = 'oprinnend'; +$labels['desc'] = 'delgeande'; +$labels['listcolumns'] = 'Lyst kolommen'; +$labels['listsorting'] = 'Skiftsje kolom'; +$labels['listorder'] = 'Sorting oarder'; +$labels['listmode'] = 'Lyst werjefte modus'; +$labels['layout'] = 'Yndieling'; +$labels['layoutwidescreen'] = 'Breedbyld'; +$labels['layoutdesktop'] = 'Desktop'; +$labels['layoutlist'] = 'Lyst'; +$labels['folderactions'] = 'Map aksjes'; +$labels['compact'] = 'Kompakt'; +$labels['empty'] = 'Leech'; +$labels['importmessages'] = 'Berjochten ymportearje'; +$labels['quota'] = 'Skiifgebrûk'; +$labels['unknown'] = 'ûnbekend'; +$labels['unlimited'] = 'ûnbeheind'; +$labels['quotatype'] = 'Kwota type'; +$labels['quotatotal'] = 'Beheining'; +$labels['quotaused'] = 'Brûkt'; +$labels['quotastorage'] = 'Skiifromte'; +$labels['quotamessage'] = 'Oantal berjochten'; +$labels['quicksearch'] = 'Fluch sykje'; +$labels['resetsearch'] = 'Sykopdracht wiskje'; +$labels['searchmod'] = 'Syk modifikaasjes'; +$labels['msgtext'] = 'Hiele berjocht'; +$labels['body'] = 'Ynhâld'; $labels['type'] = 'Type'; $labels['namex'] = 'Namme'; +$labels['searchscope'] = 'Berik'; +$labels['currentfolder'] = 'Aktuele map'; +$labels['subfolders'] = 'Dizze en ûnderlizzende mappen'; +$labels['allfolders'] = 'Alle mappen'; +$labels['searchinterval-1W'] = 'Alder as in wike'; +$labels['searchinterval-1M'] = 'Alder as in moanne'; +$labels['searchinterval-1Y'] = 'Alder as in jier'; +$labels['searchinterval1W'] = 'Nijer as in wike'; +$labels['searchinterval1M'] = 'Nijer as in moanne'; +$labels['searchinterval1Y'] = 'Nijer as in jier'; +$labels['openinextwin'] = 'Iepenje yn nij finster'; +$labels['emlsave'] = 'Ynlade (.eml)'; +$labels['changeformattext'] = 'Toan yn gewoane tekst'; +$labels['changeformathtml'] = 'Toan yn HTML formaat'; +$labels['editasnew'] = 'Bewurkje as nij'; +$labels['send'] = 'Ferstjoere'; +$labels['sendmessage'] = 'Berjocht ferstjoere'; +$labels['savemessage'] = 'Bewarje as konsept'; +$labels['addattachment'] = 'In bestân taheakje'; +$labels['charset'] = 'Tekenset'; +$labels['editortype'] = 'Bewurker type'; +$labels['returnreceipt'] = 'Untfangst werom stjoere'; +$labels['dsn'] = 'Levering status notifikaasje'; +$labels['mailreplyintro'] = 'Op $date, skreau $sender:'; +$labels['originalmessage'] = 'Oarspronklik Berjocht'; +$labels['selectimage'] = 'Ofbylding selektearje'; +$labels['addimage'] = 'Ofbylding tafoegje'; $labels['selectmedia'] = 'Fideo selektearje'; +$labels['addmedia'] = 'Fideo tafoegje'; +$labels['encrypt'] = 'Fersiferje'; +$labels['encryptmessage'] = 'Berjocht fersiferje'; +$labels['encryptmessagemailvelope'] = 'Berjocht fersiferje mei Mailvelope'; +$labels['importpubkeys'] = 'Publike kaaien ymportearje'; +$labels['encryptedsendialog'] = 'Fersifere berjocht ferstjoere'; +$labels['keyid'] = 'Kaai ID'; +$labels['keylength'] = 'Bits'; +$labels['keyexpired'] = 'Ferrûn'; +$labels['keyrevoked'] = 'Ynlutsen'; +$labels['bccinstead'] = 'Bcc brûke'; +$labels['editidents'] = 'Identiteiten bewurkje'; +$labels['spellcheck'] = 'Stavering'; +$labels['checkspelling'] = 'Stavering kontrolearje'; +$labels['resumeediting'] = 'Bewurkje ferfetsje'; +$labels['revertto'] = 'Tebeksette nei'; +$labels['restore'] = 'Weromsette'; +$labels['restoremessage'] = 'Berjocht weromsette?'; +$labels['ignore'] = 'Negearje'; +$labels['responses'] = 'Antwurden'; +$labels['insertresponse'] = 'In antwurd ynfiere'; +$labels['manageresponses'] = 'Antwurden beheare'; +$labels['newresponse'] = 'Nij antwurd oanmeitsje'; +$labels['addresponse'] = 'Antwurd tafoegje'; +$labels['editresponse'] = 'Antwurd bewurkje'; +$labels['editresponses'] = 'Antwurden bewurkje'; $labels['responsename'] = 'Namme'; +$labels['responsetext'] = 'Antwurd tekst'; +$labels['attach'] = 'Taheakje'; +$labels['attachments'] = 'Taheaksels'; +$labels['upload'] = 'Oplade'; +$labels['uploadprogress'] = '$percent ($current fan $total)'; +$labels['close'] = 'Slúte'; +$labels['messageoptions'] = 'Berjocht opsjes...'; +$labels['togglecomposeoptions'] = 'Komposysje opsjes skeakelje'; +$labels['attachmentrename'] = 'Taheaksel omneame'; +$labels['low'] = 'Leech'; +$labels['lowest'] = 'Leechste'; +$labels['normal'] = 'Normaal'; +$labels['high'] = 'Heech'; +$labels['highest'] = 'Heechste'; +$labels['nosubject'] = '(gjin ûnderwerp)'; +$labels['showimages'] = 'Ofbyldings toane'; +$labels['alwaysshow'] = 'Ofbyldings fan $sender altyd toane'; +$labels['isdraft'] = 'Dit is in konsept berjocht'; $labels['andnmore'] = '$nr mear...'; +$labels['togglemoreheaders'] = 'Mear berjocht koppen toane'; +$labels['togglefullheaders'] = 'Ruwe berjocht koppen skeakelje'; $labels['htmltoggle'] = 'HTML'; +$labels['plaintoggle'] = 'Gewoane tekst'; +$labels['savesentmessagein'] = 'Bewarje ferstjoerd berjoch yn'; +$labels['dontsave'] = 'net bewarje'; +$labels['maxuploadsize'] = 'Maksimum bestâns grutte is $size'; +$labels['addcc'] = 'CC tafoegje'; +$labels['addbcc'] = 'BCC tafoegje'; +$labels['addreplyto'] = 'Reagearje-Op Tafoegje'; +$labels['addfollowupto'] = 'Ferfolch-Op Tafoegje'; +$labels['mdnrequest'] = 'De stjoerder fan dit berjocht hat frege om op de hichte brocht te wurden as jo dit berjocht lêzen hawwe. Wolle jo de ôfstjoerder op de hichte bringe?'; +$labels['receiptread'] = 'Weromstjoerd Untfangstbewiis (lêzen)'; +$labels['yourmessage'] = 'Dit is in Weromstjoerd Untfangstbewiis foar jo berjocht'; +$labels['receiptnote'] = 'Tink derom: Dit ûntfangstbewiis erkent allinnich dat it berjocht waard werjûn op de kompjûter fan ûntfanger. Der is gjin garânsje dat de ûntfanger de berjocht ynhâld lêzen of begrepen hat.'; +$labels['name'] = 'Skerm Namme'; +$labels['firstname'] = 'Foarnamme'; +$labels['surname'] = 'Achternamme'; +$labels['middlename'] = 'Twadde Namme'; +$labels['nameprefix'] = 'Foarheaksel'; +$labels['namesuffix'] = 'Efterheaksel'; +$labels['nickname'] = 'Skûlnamme'; +$labels['jobtitle'] = 'Funksjenamme'; +$labels['department'] = 'Ofdieling'; +$labels['gender'] = 'Geslacht'; +$labels['maidenname'] = 'Famkesnamme'; +$labels['email'] = 'E-post'; +$labels['phone'] = 'Telefoannûmer'; +$labels['address'] = 'Adres'; +$labels['street'] = 'Strjitte'; +$labels['locality'] = 'Doarp/Stêd'; +$labels['zipcode'] = 'Postkoade'; +$labels['region'] = 'Provinsje'; $labels['country'] = 'Lân'; +$labels['birthday'] = 'Jierdei'; +$labels['anniversary'] = 'Troudei'; +$labels['website'] = 'Webstee'; +$labels['instantmessenger'] = 'IM'; +$labels['notes'] = 'Notysjes'; +$labels['male'] = 'man'; +$labels['female'] = 'frou'; +$labels['manager'] = 'Behearder'; +$labels['assistant'] = 'Assistint'; +$labels['spouse'] = 'Echtgenoat'; +$labels['allfields'] = 'Alle fjilden'; +$labels['search'] = 'Sykje'; +$labels['searchresult'] = 'Syk risseltaten'; +$labels['advsearch'] = 'Avansearre Sykje'; +$labels['advanced'] = 'Avansearre'; +$labels['other'] = 'Oars'; +$labels['printcontact'] = 'Kontakt ôfdrukke'; +$labels['qrcode'] = 'QR Koade'; +$labels['typehome'] = 'Thús'; +$labels['typework'] = 'Wurk'; +$labels['typeother'] = 'Oars'; +$labels['typemobile'] = 'Mobyl'; +$labels['typemain'] = 'Foarnaamste'; +$labels['typehomefax'] = 'Fax Thús'; +$labels['typeworkfax'] = 'Fax Wurk'; +$labels['typecar'] = 'Auto'; +$labels['typepager'] = 'Pieper'; +$labels['typevideo'] = 'Fideo'; +$labels['typeassistant'] = 'Assistint'; +$labels['typehomepage'] = 'Thússide'; +$labels['typeblog'] = 'Blog'; +$labels['typeprofile'] = 'Profyl'; +$labels['addfield'] = 'Fjild tafoegje'; $labels['addcontact'] = 'Kontakt tafoegje'; $labels['editcontact'] = 'Kontakt bewurkje'; $labels['contacts'] = 'Kontakten'; +$labels['contactproperties'] = 'Kontakt eigenskippen'; +$labels['contactnameandorg'] = 'Namme en Organisaasje'; +$labels['personalinfo'] = 'Persoanlike ynformaasje'; +$labels['contactphoto'] = 'Kontakt foto'; $labels['edit'] = 'Bewurkje'; $labels['cancel'] = 'Annulearje'; +$labels['save'] = 'Bewarje'; $labels['delete'] = 'Fuortsmite'; +$labels['rename'] = 'Omneame'; $labels['addphoto'] = 'Tafoegje'; +$labels['replacephoto'] = 'Ferfange'; +$labels['uploadphoto'] = 'Foto oplade'; +$labels['newcontact'] = 'Nij kontakt oanmeitsje'; +$labels['deletecontact'] = 'Selektearre kontakten ferwiderje'; +$labels['composeto'] = 'Skriuw berjocht oan'; +$labels['contactsfromto'] = 'Kontakten $from oant $to fan $count'; +$labels['print'] = 'Ofdrukke'; +$labels['export'] = 'Eksportearje'; +$labels['exportall'] = 'Alles eksportearje'; +$labels['exportsel'] = 'Selektearre eksportearje'; +$labels['exportvcards'] = 'Kontakten eksportearje yn vCard formaat'; +$labels['newgroup'] = 'Nije groep oanmeitsje'; $labels['addgroup'] = 'Groep tafoegje'; -$labels['groupdelete'] = 'Groep fuortsmite'; +$labels['grouprename'] = 'Groep omneame'; +$labels['groupdelete'] = 'Groep ferwiderje'; +$labels['groupremoveselected'] = 'Selektearre kontakten út groep ferwiderje'; +$labels['uponelevel'] = 'Ien nivo omheech'; +$labels['previouspage'] = 'Lit foarige side sjen'; +$labels['firstpage'] = 'Lit earste side sjen'; +$labels['nextpage'] = 'Lit folgjende side sjen'; +$labels['lastpage'] = 'Lit lêste side sjen'; $labels['group'] = 'Groep'; +$labels['groups'] = 'Groepen'; +$labels['listgroup'] = 'Groep leden yn lyst'; +$labels['personaladrbook'] = 'Persoanlike adressen'; +$labels['searchsave'] = 'Sykopdracht bewarje'; +$labels['searchdelete'] = 'Sykopdracht wiskje'; +$labels['import'] = 'Ymportearje'; +$labels['importcontacts'] = 'Kontakten ymportearje'; +$labels['importfromfile'] = 'Ymportearje út bestân'; +$labels['importtarget'] = 'Kontakten tafoegje oan'; +$labels['importreplace'] = 'It hiele adresboek ferfange'; +$labels['importgroups'] = 'Ymportearje groep opdrachten'; +$labels['importgroupsall'] = 'Alle (meitsje groepen oan wêr nedich)'; +$labels['importgroupsexisting'] = 'Allinnich foar besteande groepen'; +$labels['importdesc'] = 'Jo kinne kontakten út in besteand adresboek oplade.
Wy stypje it ymportearjen fan besteande adressen út devCard of CSV (komma-skeiden) gegevens formaat.'; $labels['done'] = 'Klear'; +$labels['settingsfor'] = 'Ynstellings foar'; $labels['about'] = 'Oer'; $labels['preferences'] = 'Foarkarren'; -$labels['htmlmessage'] = 'HTML-berjocht'; +$labels['userpreferences'] = 'Brûkers foarkarren'; +$labels['editpreferences'] = 'Brûkers foarkarren bewurkje'; +$labels['identities'] = 'Identiteiten'; +$labels['manageidentities'] = 'Identiteiten beheare'; +$labels['newidentity'] = 'Nije identiteit oanmeitsje'; +$labels['addidentity'] = 'Identiteit tafoegje'; +$labels['editidentity'] = 'Identiteit bewurkje'; +$labels['preferhtml'] = 'Toan HTML'; +$labels['defaultcharset'] = 'Standert Teken Set'; +$labels['htmlmessage'] = 'HTML Berjocht'; +$labels['messagepart'] = 'Diel'; +$labels['digitalsig'] = 'Digitale Hantekening'; +$labels['dateformat'] = 'Datum formaat'; +$labels['timeformat'] = 'Tiid formaat'; +$labels['prettydate'] = 'Moaie datums'; +$labels['setdefault'] = 'Set standert'; +$labels['autodetect'] = 'Auto'; $labels['language'] = 'Taal'; $labels['timezone'] = 'Tiidsône'; -$labels['newmessage'] = 'Nij berjocht'; +$labels['pagesize'] = 'Rigen per side'; +$labels['signature'] = 'Hantekening'; +$labels['dstactive'] = 'Simmertiid'; +$labels['showinextwin'] = 'Berjocht yn nij finster iepenje'; +$labels['composeextwin'] = 'Skriuw yn in nij finster'; +$labels['htmleditor'] = 'Skriuw HTML berjochten'; +$labels['htmlonreply'] = 'Allinnich op HTML berjocht antwurdzje'; +$labels['htmlonreplyandforward'] = 'op trochstjoerd of antwurd nei HTML berjocht'; +$labels['htmlsignature'] = 'HTML hantekening'; +$labels['showemail'] = 'Toan e-post adres mei skermnamme'; +$labels['previewpane'] = 'Toan foarbyld skerm'; +$labels['skin'] = 'Omjouwings tema'; +$labels['logoutclear'] = 'Jiskefet leechje by útloggen'; +$labels['logoutcompact'] = 'Komprimearje Postfek YN by útloggen'; +$labels['uisettings'] = 'Brûkers omjouwing'; +$labels['serversettings'] = 'Tsjinner Ynstellings'; +$labels['mailboxview'] = 'Postfek Yndieling'; +$labels['mdnrequests'] = 'Op fersyk by ûntfangstbewiis'; +$labels['askuser'] = 'freegje my'; +$labels['autosend'] = 'stjoer ûntfangstbewiis '; +$labels['autosendknown'] = 'stjoer ûntfangstbewiis nei kontakten, oars my freegje'; +$labels['autosendknownignore'] = 'stjoer ûntfangstbewiis nei kontakten, oars negearje'; +$labels['ignorerequest'] = 'fersyk negearje'; +$labels['readwhendeleted'] = 'Markearje berjocht as lêzen by wiskjen'; +$labels['flagfordeletion'] = 'Berjocht flagje foar wiskjen yn pleats fan wiskjen'; +$labels['skipdeleted'] = 'Wiske berjochten net sjen litte'; +$labels['deletealways'] = 'As berjochten nei Jiskefet ferpleatse mislearret, wiskje'; +$labels['deletejunk'] = 'Berjochten yn Jiskefet fuort wiskje'; +$labels['showremoteimages'] = 'Werjaan eksterne ynsletten ôfbyldings'; +$labels['fromknownsenders'] = 'fan bekende stjoerders'; +$labels['always'] = 'altyd'; +$labels['alwaysbutplain'] = 'Altyd, útsein as antwurde wurd yn gewoane tekst'; +$labels['showinlineimages'] = 'Lit taheake ôfbyldings ûnder it berjocht sjen'; +$labels['autosavedraft'] = 'Konsept automatysk bewarje'; +$labels['everynminutes'] = 'eltse $n minút(en)'; +$labels['refreshinterval'] = 'Ferfarskje (op nije berjochten kontrolearje, ensaf.)'; +$labels['never'] = 'nea'; +$labels['immediately'] = 'fuortendaliks'; +$labels['messagesdisplaying'] = 'Berjochten Toane'; +$labels['messagescomposition'] = 'Berjochten Skriuwe'; +$labels['mimeparamfolding'] = 'Taheaksel nammen'; +$labels['2231folding'] = 'Fol RFC 2231 (Thunderbird)'; +$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)'; +$labels['2047folding'] = 'Fol RFC 2047 (other)'; +$labels['force7bit'] = 'Brûk MIME fersifering foar 8-bit tekens'; +$labels['savelocalstorage'] = "Bewarje yn lokale opslach fan de browser (tydlik)"; +$labels['advancedoptions'] = 'Avansearre opsjes'; +$labels['toggleadvancedoptions'] = 'Avansearre opsjes skeakelje'; +$labels['focusonnewmessage'] = 'Fokus browser finster by nij berjocht'; +$labels['checkallfolders'] = 'Kontrolearje alle mappen op nije berjochten'; +$labels['displaynext'] = 'Nij wiskjen/ferpleatsen fan berjocht, toan folgjende berjocht'; +$labels['defaultfont'] = 'Standert lettertype fan HTML berjocht'; +$labels['mainoptions'] = 'Haad Opsjes'; +$labels['browseroptions'] = 'Browser Opsjes'; +$labels['section'] = 'Seleksje'; +$labels['maintenance'] = 'Underhâld'; +$labels['newmessage'] = 'Nij Berjocht'; +$labels['signatureoptions'] = 'Hantekening Opsjes'; +$labels['whenreplying'] = 'By beäntwurdzjen'; +$labels['replyempty'] = 'It oarspronklike berjocht net sitearje'; +$labels['replytopposting'] = 'begjinne nij berjocht boppe de sitaat'; +$labels['replybottomposting'] = 'begjinne nij berjocht ûnder de sitaat'; +$labels['replyremovesignature'] = 'By it beäntwurdzjen oarspronklike hântekening fan berjocht wiskje'; +$labels['autoaddsignature'] = 'Automatysk hantekening tafoegje'; +$labels['newmessageonly'] = 'allinnich nije berjochten'; +$labels['replyandforwardonly'] = 'by antwurdzjen en trochstjoeren'; +$labels['insertsignature'] = 'Hantekening ynfoegje'; +$labels['sigbelow'] = 'Hantekening ûnder it siteare berjocht'; +$labels['sigseparator'] = 'Forsearje standert skiedingsteken yn hantekenings'; +$labels['previewpanemarkread'] = 'Markearje foarbyld berjochten as lêzen'; +$labels['afternseconds'] = 'nei $n sekonden'; +$labels['reqmdn'] = 'Freegje altyd in ûntfangstbewiis'; +$labels['reqdsn'] = 'Freegje altyd in levering status notifikaasje'; +$labels['replysamefolder'] = 'Set antwurden yn de map fan it berjocht dêr\'t op antwurde wurd'; +$labels['defaultabook'] = 'Standert adresboek'; +$labels['autocompletesingle'] = 'Sla alternative e-post adressen oer yn autokompleet'; +$labels['listnamedisplay'] = 'Kontakten yn lyst as'; +$labels['spellcheckbeforesend'] = 'Kontrolearje de stavering foar it ferstjoeren fan in berjocht'; +$labels['spellcheckoptions'] = 'Staverings Opsjes'; +$labels['spellcheckignoresyms'] = 'Negearje wurden mei symboalen'; +$labels['spellcheckignorenums'] = 'Negearje wurden mei sifers'; +$labels['spellcheckignorecaps'] = 'Negearje wurden mei alle letters as haadletters'; +$labels['addtodict'] = 'Taheakje oan wurdboek'; +$labels['mailtoprotohandler'] = 'Registrearje protokol handler foar mailto: keppelings'; +$labels['standardwindows'] = 'Omgean mei popups as standert finsters'; +$labels['forwardmode'] = 'Berjocht trochstjoeren'; +$labels['inline'] = 'ynsletten'; +$labels['asattachment'] = 'as taheaksel'; +$labels['replyallmode'] = 'Standert aksje foar [Alles beäntwurdzje] knop'; +$labels['replyalldefault'] = 'op alles antwurdzje'; +$labels['replyalllist'] = 'allinnich antwurdzje nei mailing lyst (wêr fûn)'; +$labels['folder'] = 'Map'; $labels['folders'] = 'Mappen'; +$labels['foldername'] = 'Map namme'; +$labels['subscribed'] = 'Ynskreaun'; $labels['messagecount'] = 'Berjochten'; +$labels['create'] = 'Oanmeitsje'; +$labels['createfolder'] = 'Nije map oanmeitsje'; +$labels['managefolders'] = 'Mappen beheare'; +$labels['specialfolders'] = 'Spesjale Mappen'; +$labels['properties'] = 'Eigenskippen'; +$labels['folderproperties'] = 'Map eigenskippen'; +$labels['parentfolder'] = 'Boppelizzende map'; +$labels['location'] = 'Lokaasje'; +$labels['info'] = 'Ynformaasje'; +$labels['getfoldersize'] = 'Klik om map grutte te krijen'; +$labels['changesubscription'] = 'Klik om ynskriuwing te feroarjen'; +$labels['foldertype'] = 'Map Type'; +$labels['personalfolder'] = 'Privee Map'; +$labels['otherfolder'] = 'Oare Brûker\'s Map'; +$labels['sharedfolder'] = 'Publike Map'; +$labels['findfolders'] = 'Mappen fine'; +$labels['namespace.personal'] = 'Persoanlik'; +$labels['namespace.other'] = 'Oare brûkers'; +$labels['namespace.shared'] = 'Dielt'; +$labels['sortby'] = 'Sortearje op'; +$labels['sortasc'] = 'Sortearje oprinnend'; +$labels['sortdesc'] = 'Sortearje delgeand'; +$labels['undo'] = 'Ungedien meitsje'; +$labels['installedplugins'] = 'Ynstallearre ynstekkers'; +$labels['plugin'] = 'Ynstekker'; $labels['version'] = 'Ferzje'; $labels['source'] = 'Boarne'; $labels['license'] = 'Lisinsje'; +$labels['support'] = 'Krij help'; $labels['B'] = 'B'; $labels['KB'] = 'KB'; $labels['MB'] = 'MB'; $labels['GB'] = 'GB'; $labels['unicode'] = 'Unicode'; $labels['english'] = 'Ingelsk'; +$labels['westerneuropean'] = 'West Europeesk'; +$labels['easterneuropean'] = 'East Europeesk'; +$labels['southeasterneuropean'] = 'Súd-East Europeesk'; +$labels['baltic'] = 'Baltysk'; +$labels['cyrillic'] = 'Syrillysk'; +$labels['arabic'] = 'Arabysk'; $labels['greek'] = 'Gryksk'; +$labels['hebrew'] = 'Hebrieuwsk'; $labels['turkish'] = 'Turksk'; +$labels['nordic'] = 'Noardsk'; +$labels['thai'] = 'Taisk'; +$labels['celtic'] = 'Keltysk'; +$labels['vietnamese'] = 'Fietnameesk'; $labels['japanese'] = 'Japansk'; $labels['korean'] = 'Koreaansk'; $labels['chinese'] = 'Sineesk'; +$labels['arialabeltopnav'] = 'Finster kontrôle'; +$labels['arialabeltasknav'] = 'Applikaasje taken'; +$labels['arialabeltoolbar'] = 'Applikaasje arkbalke'; +$labels['arialabelactivetask'] = 'Aktive taak'; +$labels['arialabelmessagessearchfilter'] = 'E-post fermelding filter'; +$labels['arialabelmailsearchform'] = 'E-post berjocht syk formulier'; +$labels['arialabelcontactsearchform'] = 'Kontakt syk formulier'; +$labels['arialabelmailquicksearchbox'] = 'E-post sykje ynbring'; +$labels['arialabelquicksearchbox'] = 'Sykje ynbring'; +$labels['arialabelfoldersearchfilter'] = 'Map fermelding filter'; +$labels['arialabelfoldersearchform'] = 'Map syk formulier'; +$labels['arialabelfolderlist'] = 'E-post map seleksje'; +$labels['arialabelmessagelist'] = 'E-post Berjocht Fermelding'; +$labels['arialabelmailpreviewframe'] = 'Berjocht foarbyld'; +$labels['arialabelmailboxmenu'] = 'Map aksje menu'; +$labels['arialabellistselectmenu'] = 'Lyst seleksje menu'; +$labels['arialabelthreadselectmenu'] = 'Stream fermelding menu'; +$labels['arialabelmessagelistoptions'] = 'Berjocht lyst werjefte en sortearjen opsjes'; +$labels['arialabelmailimportdialog'] = 'Berjocht ymport skerm'; +$labels['arialabelmessagenav'] = 'Berjocht navigaasje'; +$labels['arialabelmessagebody'] = 'Berjocht Ynhâld'; +$labels['arialabelmessageactions'] = 'Berjocht aksjes'; +$labels['arialabelcontactquicksearch'] = 'Kontakten syk formulier'; +$labels['arialabelcontactsearchbox'] = 'Kontakt syk ynbring'; +$labels['arialabelmessageheaders'] = 'Berjocht koppen'; +$labels['arialabelforwardingoptions'] = 'Trochstjoer opsjes'; +$labels['arialabelreplyalloptions'] = 'Antwurdzje-alle opsjes'; +$labels['arialabelmoremessageactions'] = 'Mear berjocht aksjes'; +$labels['arialabelmarkmessagesas'] = 'Markearje selektearre berjochten as...'; +$labels['arialabelcomposeoptions'] = 'Skriuw opsjes'; +$labels['arialabelresponsesmenu'] = 'Ynblikte antwurden menu'; +$labels['arialabelattachmentuploadform'] = 'Taheaksel oplaad formulier'; +$labels['arialabelattachmentpreview'] = 'Taheaksel foarbyld'; +$labels['ariasummarycomposecontacts'] = 'Lyst fan kontakten en groepen te selektearjen as ûntfangers'; +$labels['arialabelcontactexportoptions'] = 'Kontakt eksport opsjes'; +$labels['arialabelabookgroupoptions'] = 'Adresboek/groep opsjes'; +$labels['arialabelpreferencesform'] = 'Foarkarren formulier'; +$labels['arialabelidentityeditfrom'] = 'Identiteit bewurkings formulier'; +$labels['arialabelresonseeditfrom'] = 'Antwurd bewurkings formulier'; +$labels['arialabelsearchterms'] = 'Syktermen'; +$labels['helplistnavigation'] = 'Lyst toetseboerd navigaasje'; +$labels['helplistkeyboardnavigation'] = "Pylken op/del: Beweegje rige fokus/seleksje. +Spatie: Selektearje fokuse rige. +Shift + op/del: Selektearje oanfoljende rige boppe/ûnder. +Ctrl + Spatie: Foegje fokuse rige ta oan seleksje/ferwiderje fan seleksje."; +$labels['helplistkeyboardnavmessages'] = "Pylken rjochts/lofts: útwreidzje/ynsakje berjocht stream (allinnich yn stream modus). +Enter: Iepenje it selektearre/fokuse berjocht. +Delete: Ferpleats selektearre berjocht nei jiskefet."; +$labels['helplistkeyboardnavcontacts'] = "Enter: Iepenje it selektearre/fokuse kontakt."; ?> diff --git a/program/localization/fy_NL/messages.inc b/program/localization/fy_NL/messages.inc index aede48492..d38a3ea04 100644 --- a/program/localization/fy_NL/messages.inc +++ b/program/localization/fy_NL/messages.inc @@ -15,7 +15,196 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/ */ -$messages['servererror'] = 'Serverflater!'; -$messages['dberror'] = 'Databaseflater!'; +$messages['errortitle'] = 'Der is in flater bard!'; +$messages['loginfailed'] = 'Ynloggen mislearre.'; +$messages['cookiesdisabled'] = 'Jo browser akseptearret gjin koekjes.'; +$messages['sessionerror'] = 'Jo sesje is ûnjildich of ferrûn.'; +$messages['storageerror'] = 'Ferbining mei opslach tsjinner mislearre.'; +$messages['servererror'] = 'Tsjinner Flater!'; +$messages['servererrormsg'] = 'Tsjinner Flater: $msg'; +$messages['accountlocked'] = 'Ynloggen te faak mislearre. Besykje it letter nochris.'; +$messages['connerror'] = 'Ferbinings Flater (Kin de tsjinner net berikke)!'; +$messages['dberror'] = 'Databank Flater!'; +$messages['windowopenerror'] = 'De popup finster waard blokkearre!'; +$messages['requesttimedout'] = 'Fersyk ferrûn'; +$messages['errorreadonly'] = 'Koe operaasje net útfiere. Map kin allinnich lêzen wurde.'; +$messages['errornoperm'] = 'Koe operaasje net útfiere. Tastimming wegere.'; +$messages['erroroverquota'] = 'Koe operaasje net útfiere. Gjin frije skiifromte.'; +$messages['erroroverquotadelete'] = 'Gjin frije skiifromte. Brûk Shift + DEL om in berjocht te wiskjen.'; +$messages['invalidrequest'] = 'Ûnjildich fersyk! Gjin data waard bewarre.'; +$messages['invalidhost'] = 'Unjildige tsjinner namme.'; +$messages['nomessagesfound'] = 'Gjin berjochten fûn yn dit postfek.'; +$messages['loggedout'] = 'Jo hawwe de sesje mei súkses beëinige. Oant sjen!'; +$messages['mailboxempty'] = 'Postfek is leech'; $messages['nomessages'] = 'Gjin berjochten'; -$messages['smtperror'] = 'SMTP-flater: $msg'; +$messages['refreshing'] = 'Ferfarskje...'; +$messages['loading'] = 'Lade...'; +$messages['uploading'] = 'Bestân oplade...'; +$messages['attaching'] = 'Bestân tafoegje...'; +$messages['uploadingmany'] = 'Bestânnen oplade...'; +$messages['loadingdata'] = 'Data lade...'; +$messages['checkingmail'] = 'Kontrolearje op nije berjochten...'; +$messages['sendingmessage'] = 'Berjocht ferstjoere...'; +$messages['messagesent'] = 'Berjocht mei sukses ferstjoerd.'; +$messages['savingmessage'] = 'Berjocht bewarje...'; +$messages['messagesaved'] = 'Berjocht bewarre yn ûntwerpen.'; +$messages['successfullysaved'] = 'Mei sukses bewarre.'; +$messages['savingresponse'] = 'Antwurd tekst bewarje...'; +$messages['deleteresponseconfirm'] = 'Wolle jo dizze antwurd tekst echt wiskje?'; +$messages['addedsuccessfully'] = 'Kontakt mei sukses taheakke oan adresboek.'; +$messages['contactexists'] = 'In kontakt mei deselde e-post adres bestiet al.'; +$messages['contactnameexists'] = 'In kontakt mei deselde namme bestiet al.'; +$messages['blockedimages'] = 'Om jo privacy te beskermjen binne eksterne ôfbyldingen blokkeare yn dit berjocht.'; +$messages['encryptedmessage'] = 'Dit is in fersifere berjocht en kin net werjûn wurde. Sorry!'; +$messages['externalmessagedecryption'] = 'Dit is in fersifere berjocht en kin ûntsifere wurde mei jo browser ekstinsje.'; +$messages['nopubkeyfor'] = 'Gjin jildich iepenbiere kaai fûn foar $email'; +$messages['nopubkeyforsender'] = 'Gjin jildich iepenbiere kaai fûn foar jo stjoerder identiteit. Wolle jo it berjocht allinnich foar de ûntfangers fersiferje?'; +$messages['encryptnoattachments'] = 'Al oanbeane taheaksels kinne net fersifere wurde. Asjebleaft op \'e nij taheakje yn de fersifering bewurker.'; +$messages['searchpubkeyservers'] = 'Wolle jo op publike kaai tsjinners sykje nei de missende kaaien?'; +$messages['encryptpubkeysfound'] = 'De folgjende publike kaaien binne fûn:'; +$messages['keyservererror'] = 'Kaai kin net fan de kaai tsjinner helle wurde'; +$messages['keyimportsuccess'] = 'Publike kaai $key suksesfol ymportearre yn jo kaai ring'; +$messages['nocontactsfound'] = 'Gjin kontakten fûn.'; +$messages['contactnotfound'] = 'De opfrege kontakt waard net fûn.'; +$messages['contactsearchonly'] = 'Fier wat syktermen yn om kontakten te finen'; +$messages['sendingfailed'] = 'Berjocht koe net ferstjoerd wurde.'; +$messages['senttooquickly'] = 'Wachtsje $sec sekonde(n) foar it ferstjoeren fan dit berjocht.'; +$messages['errorsavingsent'] = 'Der barde in flater ûnder it bewarjen fan ferstjoerd berjocht.'; +$messages['errorsaving'] = 'Der barde in flater ûnder it bewarjen.'; +$messages['errormoving'] = 'Koe berjocht(en) net ferpleatse.'; +$messages['errorcopying'] = 'Koe berjocht(en) net kopieare.'; +$messages['errordeleting'] = 'Koe berjocht(en) net wiskje.'; +$messages['errormarking'] = 'Koe berjocht(en) net markearje.'; +$messages['deletecontactconfirm'] = 'Wolle jo selektearre kontakt(en) echt wiskje?'; +$messages['deletegroupconfirm'] = 'Wolle jo selektearre groep echt wiskje?'; +$messages['deletemessagesconfirm'] = 'Wolle jo selektearre berjocht(en) echt wiskje?'; +$messages['deletefolderconfirm'] = 'Wolle jo dizze map echt wiskje?'; +$messages['purgefolderconfirm'] = 'Wolle jo echt alle berjochten yn dizze map wiskje?'; +$messages['contactdeleting'] = 'Kontakt(en) wiskje...'; +$messages['groupdeleting'] = 'Groep wiskje...'; +$messages['folderdeleting'] = 'Map wiskje...'; +$messages['foldermoving'] = 'Map ferpleatse...'; +$messages['foldersubscribing'] = 'Ynskriuwe map...'; +$messages['folderunsubscribing'] = 'Utskriuwe map...'; +$messages['formincomplete'] = 'It formulier wie net hielendal ynfolle.'; +$messages['noemailwarning'] = 'Fier in jildich e-post adres yn.'; +$messages['nonamewarning'] = 'Fier in namme yn.'; +$messages['nopagesizewarning'] = 'Fier in side grutte yn.'; +$messages['nosenderwarning'] = 'Fier stjoerder e-post adres yn.'; +$messages['norecipientwarning'] = 'Fier op syn minst ien ûntfanger yn.'; +$messages['disclosedrecipwarning'] = 'Alle ûntfangers sjoche de oare e-post adressen. Om dat te foarkommen en harren privacy te beskermjen kinne jo gebrûk meitsje fan it Bcc fjild.'; +$messages['disclosedreciptitle'] = 'Tefolle iepenbiere ûntfangers'; +$messages['nosubjectwarning'] = 'It "Underwerp" fjild is leech. Wolle jo no ien ynfiere?'; +$messages['nosubjecttitle'] = 'Gjin ûnderwerp'; +$messages['nobodywarning'] = 'Dit berjocht sûnder tekst ferstjoere?'; +$messages['notsentwarning'] = 'It berjocht is net ferstjoerd en hat net-bewarre feroarings. Wolle jo de feroarings fuort smite?'; +$messages['restoresavedcomposedata'] = 'In earder komponearre mar net-ferstjoerd berjocht waard fûn.\n\nSubject: $subject\nSaved: $date\n\nWolle jo dit berjocht weromsette?'; +$messages['noldapserver'] = 'Selektearje in LDAP-tsjinner om troch te sykjen.'; +$messages['nosearchname'] = 'Fier in kontakt namme of e-post adres yn.'; +$messages['notuploadedwarning'] = 'Noch net alle taheaksels binne opladen. Jo kinne wachtsje of it opladen ôfbrekke.'; +$messages['searchsuccessful'] = '$nr berjochten fûn.'; +$messages['contactsearchsuccessful'] = '$nr kontakten fûn.'; +$messages['searchnomatch'] = 'Sykjen hat gjin risseltaten opsmiten.'; +$messages['searching'] = 'Sykje...'; +$messages['checking'] = 'Kontrolearje...'; +$messages['stillsearching'] = 'Noch oan it sykjen...'; +$messages['nospellerrors'] = 'Gjin stavering flaters fûn.'; +$messages['folderdeleted'] = 'Map mei sukses wiske.'; +$messages['foldersubscribed'] = 'Map mei sukses ynskreaun.'; +$messages['folderunsubscribed'] = 'Map mei sukses útskreaun.'; +$messages['folderpurged'] = 'Map mei sukses lege.'; +$messages['folderexpunged'] = 'Map mei sukses komprimearre.'; +$messages['deletedsuccessfully'] = 'Mei sukses wiske.'; +$messages['converting'] = 'Opmaak wiskje...'; +$messages['messageopenerror'] = 'Koe berjocht net fan tsjinner lade.'; +$messages['filelinkerror'] = 'Taheakjen fan bestân mislearre.'; +$messages['fileuploaderror'] = 'Bestân oplade mislearre.'; +$messages['filesizeerror'] = 'It opladen bestân is grutter as de maksimale grutte fan $size.'; +$messages['filecounterror'] = 'Jo kinne maksimaal $count bestânnen yn ien kear oplade.'; +$messages['msgsizeerror'] = 'Bestân taheakje mislearre. Maksimum grutte fan in berjocht ($size) oer gien.'; +$messages['copysuccess'] = 'Mei sukses $nr kontakten kopiearre.'; +$messages['movesuccess'] = 'Mei sukses $nr kontakten ferpleatst.'; +$messages['copyerror'] = 'Koe gjin kontakten kopiearje.'; +$messages['moveerror'] = 'Koe gjin kontakten ferpleatse.'; +$messages['sourceisreadonly'] = 'Dizze adres boarne kin allinnich lêzen wurde.'; +$messages['errorsavingcontact'] = 'Koe kontakt adres net bewarje.'; +$messages['movingmessage'] = 'Berjocht(en) ferpleatse...'; +$messages['copyingmessage'] = 'Berjocht(en) kopiearje...'; +$messages['copyingcontact'] = 'Kontakt(en) kopiearje...'; +$messages['movingcontact'] = 'Kontakt(en) ferpleatse...'; +$messages['deletingmessage'] = 'Berjocht(en) wiskje...'; +$messages['markingmessage'] = 'Berjocht(en) markearje...'; +$messages['addingmember'] = 'Kontakt(en) oan de groep tafoegje...'; +$messages['removingmember'] = 'Kontakt(en) út de groep ferwiderje...'; +$messages['receiptsent'] = 'Mei súkses in lêzen ûntfangstbewiis ferstjoerd.'; +$messages['errorsendingreceipt'] = 'Koe it ûntfangstbewiis net stjoere.'; +$messages['deleteidentityconfirm'] = 'Wolle jo echt dizze identiteit wiskje?'; +$messages['nodeletelastidentity'] = 'Jo kinne dizze identiteit net wiskje, it is jo lêste.'; +$messages['forbiddencharacter'] = 'Mapnamme befettet in ferbean karakter.'; +$messages['selectimportfile'] = 'Selektearje in bestân om op te laden.'; +$messages['addresswriterror'] = 'It selektearre adres boek is net skriuwber.'; +$messages['contactaddedtogroup'] = 'De kontakten mei sukses oan dizze groep taheakke.'; +$messages['contactremovedfromgroup'] = 'De kontakten mei sukses út dizze groep ferwidere.'; +$messages['nogroupassignmentschanged'] = 'Gjin groep opdrachten feroare.'; +$messages['importwait'] = 'Ymportearjen, in amerijke...'; +$messages['importformaterror'] = 'Ymport mislearre! It opladen bestân is net in jildich ymport data bestân.'; +$messages['importconfirm'] = 'Mei sukses ymportearre $inserted kontakten'; +$messages['importconfirmskipped'] = 'Oerslein $skipped besteande weardes'; +$messages['importmessagesuccess'] = 'Mei sukses $nr berjochten ymportearre'; +$messages['importmessageerror'] = 'Ymport mislearre! It opladen bestân is net in jildich berjocht of postfek bestân'; +$messages['opnotpermitted'] = 'Operaasje net tastien!'; +$messages['nofromaddress'] = 'E-post adres mist yn selektearre identiteit.'; +$messages['editorwarning'] = 'Troch te wiskeljen fan berwurker kin tekst opmaak ferlern gean. Wolle jo trochgean?'; +$messages['httpreceivedencrypterror'] = 'In fatale konfiguraasje flater. Nim fuortendaliks kontakt op mei jo systeembehearder. Jo berjocht kin net stjoerd wurde.'; +$messages['smtpconnerror'] = 'SMTP Flater ($code): Ferbining mei tsjinner mislearre.'; +$messages['smtpautherror'] = 'SMTP Flater ($code): Ferifikaasje mislearre.'; +$messages['smtpfromerror'] = 'SMTP Flater ($code): Stjoerder fêststelle mislearre "$from" ($msg).'; +$messages['smtptoerror'] = 'SMTP Flater ($code): Untfanger tafoegje mislearre "$to" ($msg).'; +$messages['smtprecipientserror'] = 'SMTP Flater: Koe ûntfangers lyst net ferwurkje.'; +$messages['smtperror'] = 'SMTP Flater: $msg'; +$messages['emailformaterror'] = 'Unjildich e-post adres: $email'; +$messages['toomanyrecipients'] = 'Tefolle ûntfangers. Ferminderje it tal fan ûntfangers nei $max.'; +$messages['maxgroupmembersreached'] = 'It tal fan groep leden is grutter as it maksimum fan $max.'; +$messages['internalerror'] = 'In ynterne flater. Besykje it nochris.'; +$messages['contactdelerror'] = 'Koe kontakt(en) net wiskje.'; +$messages['contactdeleted'] = 'Kontakt(en) mei sukses wiske.'; +$messages['contactrestoreerror'] = 'Koe wiske kontakt(en) net werom sette.'; +$messages['contactrestored'] = 'Kontakt(en) mei sukses werom setten.'; +$messages['groupdeleted'] = 'Groep mei sukses wiske.'; +$messages['grouprenamed'] = 'Groep namme mei sukses feroare.'; +$messages['groupcreated'] = 'Groep mei sukses oanmakke.'; +$messages['savedsearchdeleted'] = 'Bewarre syk opdracht mei sukses wiske.'; +$messages['savedsearchdeleteerror'] = 'Koe bewarre syk opdracht net wiskje.'; +$messages['savedsearchcreated'] = 'Syk opdracht mei sukses bewarre.'; +$messages['savedsearchcreateerror'] = 'Koe syk opdracht net bewarje.'; +$messages['messagedeleted'] = 'Berjocht(en) mei sukses wiske.'; +$messages['messagemoved'] = 'Berjocht(en) mei sukses ferpleatst.'; +$messages['messagemovedtotrash'] = 'Berjocht(en) mei sukses nei Jiskefet ferpleatse.'; +$messages['messagecopied'] = 'Berjocht(en) mei sukses kopieare.'; +$messages['messagemarked'] = 'Berjocht(en) mei sukses markeare.'; +$messages['autocompletechars'] = 'Fier op syn minst $min tekens yn foar autokompleet.'; +$messages['autocompletemore'] = 'Mear oerienkommende risseltaten fûn. Typ mear tekens.'; +$messages['namecannotbeempty'] = 'Namme kin net leech wêze.'; +$messages['nametoolong'] = 'Namme is te lang.'; +$messages['namedotforbidden'] = 'Mapnamme kin net mei in punt begjinne.'; +$messages['folderupdated'] = 'Map mei sukses bywurke.'; +$messages['foldercreated'] = 'Map mei sukses oanmakke.'; +$messages['invalidimageformat'] = 'Gjin jildich ôfbyldings formaat.'; +$messages['mispellingsfound'] = 'Stavering flaters ûntdutsen yn it berjocht.'; +$messages['parentnotwritable'] = 'Koe map net oanmeitsje/ferhúzje yn selektearre boppelizzende map. Gjin tagong rjochten.'; +$messages['messagetoobig'] = 'It berjocht diel is te grut om te ferwurkjen.'; +$messages['attachmentvalidationerror'] = 'WARSKÔGING! Dit taheaksel wurdt fertocht om\'t it type net oerien komt mei it type ferklearre yn it berjocht. As jo de stjoerder net fertrouwe, moatte jo it net iepenje yn \'e browser om\'t it kweade ynhâld befetsje kin.

Ferwachte: $expected; Fûn: $detected'; +$messages['noscriptwarning'] = 'Warskôging: Dizze webmail tsjinst fereasket Javascript! Om it te brûken moatte jo Javascript ynskeakelje yn jo browser ynstellings.'; +$messages['messageissent'] = 'Dit berjocht wie al ferstjoerd, mar noch net bewarre. Wolle jo it no bewarje?'; +$messages['errnotfound'] = 'Bestân Net Fûn'; +$messages['errnotfoundexplain'] = 'De frege boarne waard net fûn!'; +$messages['errfailedrequest'] = 'Mislearre Fersyk'; +$messages['errauthorizationfailed'] = 'Autorisaasje Mislearre'; +$messages['errunauthorizedexplain'] = 'Koe net nei gean oft jo machtige binne om tagong te krijen ta dizze tsjinst!'; +$messages['errrequestcheckfailed'] = 'Fersyk Kontrole Mislearre'; +$messages['errcsrfprotectionexplain'] = "Foar jo beskerming, tagong ta dizze boarne is befeilige tsjin CSRF.\nAs jo dit sjogge, hawwe jo net útlogge foar it ferlitten fan de web applikaasje.\n\nMinskelike ynteraksje is no ferplichte om fierder te gean."; +$messages['errcontactserveradmin'] = 'Nim kontakt op mei jo tsjinner-behearder.'; +$messages['clicktoresumesession'] = 'Klik hjir om jo foarige sesje te ferfetsjen'; +$messages['errcomposesession'] = 'Skriuw berjocht sesje flater'; +$messages['errcomposesessionexplain'] = 'Fersyk skriuw berjocht sesje net fûn.'; +$messages['clicktocompose'] = 'Klik hjir om in nij berjocht te skriuwen'; diff --git a/program/localization/ga_IE/messages.inc b/program/localization/ga_IE/messages.inc index df60b67df..d52404037 100644 --- a/program/localization/ga_IE/messages.inc +++ b/program/localization/ga_IE/messages.inc @@ -92,7 +92,6 @@ $messages['disclosedreciptitle'] = 'An iomarca faighteoirí poiblí'; $messages['nosubjectwarning'] = 'Níl aon ábhair ar an teachtaireacht, ba mhaith tú déarfaidh mé ábair?'; $messages['nosubjecttitle'] = 'Gan ábhar'; $messages['nobodywarning'] = 'Níl aon teacs san teachtaireacht, ba mhaith tú déarfaidh mé teachtaireacht ar bith?'; -$messages['notsentwarning'] = 'Theip an iarraidh chun an teachtaireacht a seo. ba mhaith tú scrios do teachtaireacht?'; $messages['restoresavedcomposedata'] = 'Aimsíodh teachtaireacht a chumadh ach nár seoladh.\n\nÁbhar: $subject\nTaiscthe: $date\n\nAr mhaith leat an teachtaireacht seo a chur ar ais?'; $messages['noldapserver'] = 'Abair liom eolaire LDAP chun é a cuardaigh'; $messages['nosearchname'] = 'Abair liom ainm duine nó seoladh ríomhphost'; diff --git a/program/localization/gl_ES/messages.inc b/program/localization/gl_ES/messages.inc index e54ee19e7..48e70c018 100644 --- a/program/localization/gl_ES/messages.inc +++ b/program/localization/gl_ES/messages.inc @@ -82,7 +82,6 @@ $messages['nopagesizewarning'] = 'Por favor, engade un tamaño de páxina.'; $messages['norecipientwarning'] = 'Por favor, engade polo menos unha persoa destinataria.'; $messages['nosubjectwarning'] = 'O campo "Asunto" está baleiro. Queres completalo?'; $messages['nobodywarning'] = 'Queres enviar esta mensaxe sen texto?'; -$messages['notsentwarning'] = 'A mensaxe non se enviou. Queres descartala?'; $messages['restoresavedcomposedata'] = 'Foi atopada unha mensaxe que non se enviara.\n\nSubject: $subject\nSaved: $date\n\n¿queres restaurar esta mensaxe?'; $messages['noldapserver'] = 'Por favor, elixe un servidor LDAP para buscar.'; $messages['nosearchname'] = 'Por favor, engade un nome ou un enderezo de correo electrónico.'; diff --git a/program/localization/he_IL/labels.inc b/program/localization/he_IL/labels.inc index 4e7b6edb6..4b49a9885 100644 --- a/program/localization/he_IL/labels.inc +++ b/program/localization/he_IL/labels.inc @@ -176,6 +176,10 @@ $labels['listcolumns'] = 'רשימת עמודות'; $labels['listsorting'] = 'המיון לפי העמודה'; $labels['listorder'] = 'סדר מיון'; $labels['listmode'] = 'אופן הצגת רשימה'; +$labels['layout'] = 'מערך'; +$labels['layoutwidescreen'] = 'מסך רחב'; +$labels['layoutdesktop'] = 'מחשב שולחני'; +$labels['layoutlist'] = 'רשימה'; $labels['folderactions'] = 'פעולות על תיקיות'; $labels['compact'] = 'פינוי שטח לא מנוצל'; $labels['empty'] = 'ריקון'; @@ -233,6 +237,7 @@ $labels['keyid'] = 'קוד זיהוי מפתח'; $labels['keylength'] = 'סיביות'; $labels['keyexpired'] = 'פג תוקף'; $labels['keyrevoked'] = 'נשלל'; +$labels['bccinstead'] = 'שימוש במכותבים נסתרים'; $labels['editidents'] = 'עריכת זהויות'; $labels['spellcheck'] = 'איות'; $labels['checkspelling'] = 'בדיקת איות'; @@ -319,6 +324,7 @@ $labels['advsearch'] = 'חיםוש מתקדם'; $labels['advanced'] = 'מתקדם'; $labels['other'] = 'אחר'; $labels['printcontact'] = 'הדפסת נתונים של איש קשר'; +$labels['qrcode'] = 'קוד QR'; $labels['typehome'] = 'בית'; $labels['typework'] = 'עבודה'; $labels['typeother'] = 'אחר'; diff --git a/program/localization/he_IL/messages.inc b/program/localization/he_IL/messages.inc index 36fd1ac9c..f92fc4e90 100644 --- a/program/localization/he_IL/messages.inc +++ b/program/localization/he_IL/messages.inc @@ -92,9 +92,11 @@ $messages['nonamewarning'] = 'נא להוסיף שם'; $messages['nopagesizewarning'] = 'נא להוסיף גודל דף'; $messages['nosenderwarning'] = 'נא להקיש כתובת דוא"ל של השולח'; $messages['norecipientwarning'] = 'נא להוסיף לפחות נמען אחד'; +$messages['disclosedrecipwarning'] = 'כל המכותבים יראו הכתובות של כולם. כדי למנוע זאת ולשמור על פרטיותם, ניתן להשתמש בתכונה של מכותבים נסתרים (Bcc)'; +$messages['disclosedreciptitle'] = 'יותר מדי מכותבים גלויים'; $messages['nosubjectwarning'] = 'שורת הנושא ריקה. האם ברצונך להוסיף נושא כעת?'; +$messages['nosubjecttitle'] = 'אין נושא'; $messages['nobodywarning'] = 'האם לשלוח הודעה ללא תוכן?'; -$messages['notsentwarning'] = 'ההודעה לא נשלחה. האם לבטל?'; $messages['restoresavedcomposedata'] = 'נמצאה הודעה שנערכה אך לא נשלחה. \n\nSubject: $subject\nנשמרה: $date\n\nהאם לשחזר את ההודעה?'; $messages['noldapserver'] = 'נא לבחור שרת כתובות לחיפוש'; $messages['nosearchname'] = 'נא להוסיף איש קשר או כתובת דוא"ל'; diff --git a/program/localization/hi_IN/messages.inc b/program/localization/hi_IN/messages.inc index 5d1c4e8b6..24452588a 100644 --- a/program/localization/hi_IN/messages.inc +++ b/program/localization/hi_IN/messages.inc @@ -53,7 +53,6 @@ $messages['nopagesizewarning'] = 'पन्ना माप भरें'; $messages['norecipientwarning'] = 'कम-से-कम एक पाने वाले का पता भरें'; $messages['nosubjectwarning'] = 'मेल का कोई विशय नहीं बताया गया है। क्या आप विशय डालना चाहते हैं ?'; $messages['nobodywarning'] = 'बिना कुछ लिखे मेल भेजें?'; -$messages['notsentwarning'] = 'मेल भिजा नहीं. मेल रद्द करें ?'; $messages['noldapserver'] = 'खोज के लिये एक ऐलडैप सर्वर चुनें'; $messages['nosearchname'] = 'पता या पते का नाम भरें'; $messages['searchsuccessful'] = '$nr मेल मिले'; diff --git a/program/localization/hr_HR/messages.inc b/program/localization/hr_HR/messages.inc index 86abe2c0b..a49f6ad9a 100644 --- a/program/localization/hr_HR/messages.inc +++ b/program/localization/hr_HR/messages.inc @@ -81,7 +81,6 @@ $messages['nopagesizewarning'] = 'Unesite veličinu stranice.'; $messages['norecipientwarning'] = 'Unesite barem jednog primatelja.'; $messages['nosubjectwarning'] = 'Polje \'Naslov\' je prazno. Želite li unijeti naslov?'; $messages['nobodywarning'] = 'Želite li poslati poruku bez teksta?'; -$messages['notsentwarning'] = 'Poruka nije poslana. Želite li odbaciti ovu poruku?'; $messages['restoresavedcomposedata'] = 'Pronađena je započeta, ali neposlana poruka .\n\nNaslov: $subject\nSnimljeno: $date\n\nŽelite li je prikazati?'; $messages['noldapserver'] = 'Odaberite LDAP poslužitelj za pretragu.'; $messages['nosearchname'] = 'Unesite ime ili e-mail adresu.'; diff --git a/program/localization/hu_HU/messages.inc b/program/localization/hu_HU/messages.inc index 9d3d1fd2d..6ecb1d932 100644 --- a/program/localization/hu_HU/messages.inc +++ b/program/localization/hu_HU/messages.inc @@ -97,7 +97,7 @@ $messages['disclosedreciptitle'] = 'Túl sok címzet'; $messages['nosubjectwarning'] = 'A Tárgy mező üres. Szeretné most kitölteni?'; $messages['nosubjecttitle'] = 'Nincs tárgy'; $messages['nobodywarning'] = 'Elküldi az üzenetet üresen?'; -$messages['notsentwarning'] = 'Az üzenet még nem lett elküldve. Eldobja az üzenetet?'; +$messages['notsentwarning'] = 'Az üzenet nem lett még elküldve és vannak benne nem mentett változások. Bizots elveted a módósításaidat?'; $messages['restoresavedcomposedata'] = 'Egy elkezdett de el nem küldött üzenetet talált a program.\n\Tárgy: $subject\nMentve: $date\n\nSzeretnéd visszaállítani és folytatni ez az üzenetet?'; $messages['noldapserver'] = 'Adjon meg egy LDAP szervert a kereséshez'; $messages['nosearchname'] = 'Adja meg a kapcsolat nevét vagy e-mail címét'; diff --git a/program/localization/hy_AM/messages.inc b/program/localization/hy_AM/messages.inc index 07ffc06f9..70a650e06 100644 --- a/program/localization/hy_AM/messages.inc +++ b/program/localization/hy_AM/messages.inc @@ -70,7 +70,6 @@ $messages['nopagesizewarning'] = 'Մուտքագրեք էջի չափս'; $messages['norecipientwarning'] = 'Մուտքագրեք նվազագույնը մեկ հասցեատեր'; $messages['nosubjectwarning'] = 'Վերնագիր բացակայում է, ցանկանո՞ւմ եք լրացնել'; $messages['nobodywarning'] = 'Ուղարկե՞լ այս նամակը դատարկ'; -$messages['notsentwarning'] = 'Նամակն ուղարկված չէ։ Ջնջե՞լ Ձեր նամակը'; $messages['noldapserver'] = 'Ընտրեք ldap սերվեր որոնման համար'; $messages['nosearchname'] = 'Մուտքագրեք հասցեատեր կամ էլ. հասցե'; $messages['notuploadedwarning'] = 'Ոչ բոլոր կցված նյութերն են վերբեռնվել։ Սպասեք կամ ընդհատեք վերբեռնումը։'; diff --git a/program/localization/ia/labels.inc b/program/localization/ia/labels.inc index 437bfd6c5..d97dc84c7 100644 --- a/program/localization/ia/labels.inc +++ b/program/localization/ia/labels.inc @@ -34,8 +34,8 @@ $labels['subject'] = 'Subjecto'; $labels['from'] = 'De'; $labels['sender'] = 'Expeditor'; $labels['to'] = 'A'; -$labels['cc'] = 'Cc'; -$labels['bcc'] = 'Bcc'; +$labels['cc'] = 'In copia a'; +$labels['bcc'] = 'In copia occultate a'; $labels['replyto'] = 'Responder a'; $labels['followupto'] = 'Continuar discussion in'; $labels['date'] = 'Data'; @@ -128,6 +128,8 @@ $labels['markunread'] = 'Como non legite'; $labels['markflagged'] = 'Como signalate'; $labels['markunflagged'] = 'Como non signalate'; $labels['moreactions'] = 'Altere actiones...'; +$labels['markallread'] = 'Marcar tote messages como legite'; +$labels['folders-cur'] = 'Solmente le dossier seligite'; $labels['more'] = 'Plus'; $labels['back'] = 'Retornar'; $labels['options'] = 'Optiones'; @@ -172,6 +174,10 @@ $labels['listcolumns'] = 'Columnas de lista'; $labels['listsorting'] = 'Columna clave'; $labels['listorder'] = 'Ordinamento'; $labels['listmode'] = 'Visualisation de lista'; +$labels['layout'] = 'Disposition'; +$labels['layoutwidescreen'] = 'Schermo large'; +$labels['layoutdesktop'] = 'Scriptorio'; +$labels['layoutlist'] = 'Lista'; $labels['folderactions'] = 'Actiones de dossier...'; $labels['compact'] = 'Compacte'; $labels['empty'] = 'Vacue'; @@ -195,6 +201,12 @@ $labels['searchscope'] = 'Ambito'; $labels['currentfolder'] = 'Dossier actual'; $labels['subfolders'] = 'Iste e subdossieres'; $labels['allfolders'] = 'Tote le dossieres'; +$labels['searchinterval-1W'] = 'plus vetere que un septimana'; +$labels['searchinterval-1M'] = 'plus vetere que un mense'; +$labels['searchinterval-1Y'] = 'plus vetere que un anno'; +$labels['searchinterval1W'] = 'plus juvene que un septimana'; +$labels['searchinterval1M'] = 'plus vetere que un mense'; +$labels['searchinterval1Y'] = 'plus juvene que un anno'; $labels['openinextwin'] = 'Aperir in nove fenestra'; $labels['emlsave'] = 'Discargar (.eml)'; $labels['changeformattext'] = 'Monstrar in formato de texto simple'; @@ -214,6 +226,10 @@ $labels['selectimage'] = 'Seliger imagine'; $labels['addimage'] = 'Adder imagine'; $labels['selectmedia'] = 'Seliger film'; $labels['addmedia'] = 'Adder film'; +$labels['encrypt'] = 'Cryptar'; +$labels['encryptmessage'] = 'Cryptar message'; +$labels['encryptmessagemailvelope'] = 'Cryptar message con Mailvelope'; +$labels['bccinstead'] = 'Usar le campo "in copia occultate a:"'; $labels['editidents'] = 'Modificar identitates'; $labels['spellcheck'] = 'Orthographia'; $labels['checkspelling'] = 'Verificar orthographia'; @@ -255,8 +271,8 @@ $labels['plaintoggle'] = 'Texto simple'; $labels['savesentmessagein'] = 'Salveguardar message inviate in'; $labels['dontsave'] = 'non salveguardar'; $labels['maxuploadsize'] = 'Le dimension maximal de iste file es $size'; -$labels['addcc'] = 'Adder "Cc:"'; -$labels['addbcc'] = 'Adder "Bcc:"'; +$labels['addcc'] = 'Adder campo "in copia a:"'; +$labels['addbcc'] = 'Adder campo "in copia occultate a:"'; $labels['addreplyto'] = 'Adder "Responder a:"'; $labels['addfollowupto'] = 'Adder "Continuar discussion in:"'; $labels['mdnrequest'] = 'Le expeditor de iste message ha demandate de reciper un notification quando vos lege iste message. Desira vos notificar le expeditor?'; diff --git a/program/localization/ia/messages.inc b/program/localization/ia/messages.inc index 173f67a2e..41e17123d 100644 --- a/program/localization/ia/messages.inc +++ b/program/localization/ia/messages.inc @@ -52,6 +52,7 @@ $messages['successfullysaved'] = 'Salveguardate con successo.'; $messages['savingresponse'] = 'A salveguardar le texto del responsa...'; $messages['deleteresponseconfirm'] = 'Es vos secur de voler deler iste texto de responsa?'; $messages['addedsuccessfully'] = 'Le contacto ha essite addite al adressario.'; +$messages['contactexists'] = 'Un contacto con le mesme adresse de e-mail jam existe.'; $messages['contactnameexists'] = 'Un contacto con le mesme nomine jam existe.'; $messages['blockedimages'] = 'Pro proteger vostre vita private, le imagines a distantia es blocate in iste message.'; $messages['encryptedmessage'] = 'Iste message ha essite cryptate e non pote esser monstrate.'; @@ -89,10 +90,12 @@ $messages['formincomplete'] = 'Le formulario non ha essite totalmente completate $messages['noemailwarning'] = 'Per favor, specifica un adresse de e-mail valide.'; $messages['nonamewarning'] = 'Per favor, specifica un nomine.'; $messages['nopagesizewarning'] = 'Per favor, specifica un dimension de pagina.'; +$messages['nosenderwarning'] = 'Per favor, specifica le adresse de e-mail del expeditor.'; $messages['norecipientwarning'] = 'Per favor, specifica al minus un destinatario.'; +$messages['disclosedreciptitle'] = 'Il ha troppo de destinatarios public'; $messages['nosubjectwarning'] = 'Le campo "Subjecto" es vacue. Vole vos specificar un subjecto ora?'; +$messages['nosubjecttitle'] = 'Sin subjecto'; $messages['nobodywarning'] = 'Inviar iste message sin texto?'; -$messages['notsentwarning'] = 'Le message non ha essite inviate. Vole vos abandonar vostre message?'; $messages['restoresavedcomposedata'] = 'Un message anteriormente componite ma non inviate ha essite trovate.\n\nSubjecto: $subject\nSalveguardate: $date\n\nVole vos restaurar iste message?'; $messages['noldapserver'] = 'Per favor, selige un servitor LDAP in le qual cercar.'; $messages['nosearchname'] = 'Per favor, specifica le nomine o adresse de e-mail de un contacto.'; @@ -115,6 +118,7 @@ $messages['messageopenerror'] = 'Impossibile cargar le message ab le servitor.'; $messages['filelinkerror'] = 'Le attachamento del file ha fallite.'; $messages['fileuploaderror'] = 'Incargamento de file falleva.'; $messages['filesizeerror'] = 'Le file incargate excede le dimension maxime de $size.'; +$messages['filecounterror'] = 'Vos pote incargar al maximo $count files simul.'; $messages['copysuccess'] = '$nr contactos ha essite copiate.'; $messages['movesuccess'] = '$nr contactos ha essite displaciate.'; $messages['copyerror'] = 'Impossibile copiar le contactos.'; @@ -146,6 +150,7 @@ $messages['importconfirmskipped'] = '$skipped entratas existente ha essite sa $messages['importmessagesuccess'] = '$nr messages ha essite importate'; $messages['importmessageerror'] = 'Importation fallite. Le file incargate non es un file de cassa postal o message valide.'; $messages['opnotpermitted'] = 'Operation non permittite.'; +$messages['nofromaddress'] = 'Le adresse de e-mail manca in le identitate seligite.'; $messages['editorwarning'] = 'Si vos cambia de typo de editor, le formato del texto pote esser perdite. Desira vos continuar?'; $messages['httpreceivedencrypterror'] = 'Un error fatal de configuration ha occurrite. Contacta immediatemente vostre administrator.Vostre message non pote esser inviate.'; $messages['smtpconnerror'] = 'Error SMTP ($code): Le connexion al servitor ha fallite.'; @@ -154,6 +159,7 @@ $messages['smtpfromerror'] = 'Error SMTP ($code): Impossibile fixar le expeditor $messages['smtptoerror'] = 'Error SMTP ($code): Impossibile adder le destinatario "$to" ($msg).'; $messages['smtprecipientserror'] = 'Error SMTP: Impossibile interpretar le lista de destinatarios.'; $messages['smtperror'] = 'Error SMTP: $msg'; +$messages['emailformaterror'] = 'Adresse de e-mail invalide: $email'; $messages['toomanyrecipients'] = 'Troppo de destinatarios. Reduce le numero de destinatarios a $max.'; $messages['maxgroupmembersreached'] = 'Le numero de membros del gruppo excede le maximo de $max.'; $messages['internalerror'] = 'Un error interne ha occurrite. Per favor, essaya lo de novo.'; @@ -170,6 +176,7 @@ $messages['savedsearchcreated'] = 'Le recerca salveguardate ha essite create.'; $messages['savedsearchcreateerror'] = 'Impossibile crear le recerca salveguardate.'; $messages['messagedeleted'] = 'Le message(s) ha essite delite.'; $messages['messagemoved'] = 'Le message(s) ha essite displaciate.'; +$messages['messagemovedtotrash'] = 'Le message(s) ha essite displaciate al corbe a papiro con successo.'; $messages['messagecopied'] = 'Le message(s) ha essite copiate.'; $messages['messagemarked'] = 'Le message(s) ha essite marcate.'; $messages['autocompletechars'] = 'Specifica al minus $min characteres pro autocompletion.'; @@ -194,3 +201,6 @@ $messages['errunauthorizedexplain'] = 'Non poteva verificar que tu es autorisate $messages['errrequestcheckfailed'] = 'Verification del requesta fallite'; $messages['errcontactserveradmin'] = 'Per favor contacta le administrator de tu servitor.'; $messages['clicktoresumesession'] = 'Clicca hic pro continuar tu session anterior'; +$messages['errcomposesession'] = 'Error del session de composition'; +$messages['errcomposesessionexplain'] = 'Session de composition requestate non ha essite trovate.'; +$messages['clicktocompose'] = 'Clicca hic pro componer un nove message'; diff --git a/program/localization/id_ID/labels.inc b/program/localization/id_ID/labels.inc index 05fa138c3..3731117d9 100644 --- a/program/localization/id_ID/labels.inc +++ b/program/localization/id_ID/labels.inc @@ -176,6 +176,10 @@ $labels['listcolumns'] = 'Perlihatkan kolom'; $labels['listsorting'] = 'Mengurutkan kolom'; $labels['listorder'] = 'Mengurutkan susunan'; $labels['listmode'] = 'Perlihatkan mode tinjauan'; +$labels['layout'] = 'Tata Letak'; +$labels['layoutwidescreen'] = 'Layar Lebar'; +$labels['layoutdesktop'] = 'Desktop'; +$labels['layoutlist'] = 'Daftar'; $labels['folderactions'] = 'Tindakan pada folder...'; $labels['compact'] = 'Rampingkan'; $labels['empty'] = 'Kosong'; @@ -320,6 +324,7 @@ $labels['advsearch'] = 'Pencarian Lebih Lanjut'; $labels['advanced'] = 'Tingkat lanjut'; $labels['other'] = 'Lainnya'; $labels['printcontact'] = 'Cetak kontak'; +$labels['qrcode'] = 'Kode QR'; $labels['typehome'] = 'Rumah'; $labels['typework'] = 'Kantor'; $labels['typeother'] = 'Lainnya'; diff --git a/program/localization/id_ID/messages.inc b/program/localization/id_ID/messages.inc index 8603d7910..141edddc3 100644 --- a/program/localization/id_ID/messages.inc +++ b/program/localization/id_ID/messages.inc @@ -92,9 +92,11 @@ $messages['nonamewarning'] = 'Tolong masukkan nama'; $messages['nopagesizewarning'] = 'Tolong masukkan ukuran halaman'; $messages['nosenderwarning'] = 'Harap masukkan alamat email pengirim.'; $messages['norecipientwarning'] = 'Tolong masukkan sedikitnya satu penerima'; +$messages['disclosedrecipwarning'] = 'Semua penerima akan saling tahu alamat surel pihak lain. Untuk mencegah hal ini dan melindungi privasi mereka Anda dapat memakai ruas Bcc.'; +$messages['disclosedreciptitle'] = 'Terlalu banyak penerima publik'; $messages['nosubjectwarning'] = '"Judul" kosong. Isi judul sekarang?'; +$messages['nosubjecttitle'] = 'Tanpa subjek'; $messages['nobodywarning'] = 'Kirim pesan ini tanpa teks?'; -$messages['notsentwarning'] = 'Pesan belum terkirim. Buang pesan Anda?'; $messages['restoresavedcomposedata'] = 'Sebelumnya disimpan tetapi pesan tidak terkirim ditemukan.\n\nJudul: $subject\nDisimpan: $date\n\nAnda yakin mengembalikan pesan ini?'; $messages['noldapserver'] = 'Tolong pilih server LDAP untuk pencarian'; $messages['nosearchname'] = 'Tolong masukkan nama kontak atau alamat email'; @@ -117,6 +119,8 @@ $messages['messageopenerror'] = 'Tidak dapat mengambil pesan dari server'; $messages['filelinkerror'] = 'Gagal melampirkan berkas.'; $messages['fileuploaderror'] = 'Gagal mengunggah berkas'; $messages['filesizeerror'] = 'Berkas terunggah mencapai ukuran maksimal dari $size'; +$messages['filecounterror'] = 'Anda dapat mengunggah maksimum $count berkas sekaligus.'; +$messages['msgsizeerror'] = 'Gagal melampirkan sebuah berkas. Ukuran maksimum suatu pesan ($size) terlampaui.'; $messages['copysuccess'] = 'Berhasil menyalin kontak $nr'; $messages['movesuccess'] = 'Berhasil memindahkan kontak $nr'; $messages['copyerror'] = 'Tidak dapat menyalin kontak'; diff --git a/program/localization/index.inc b/program/localization/index.inc index bc8229026..7a8c1db63 100644 --- a/program/localization/index.inc +++ b/program/localization/index.inc @@ -68,6 +68,7 @@ $rcube_languages = array( 'ga_IE' => 'Irish (Gaedhilge)', 'it_IT' => 'Italian (Italiano)', 'ja_JP' => 'Japanese (日本語)', + 'kab' => 'Kabyle (Taqbaylit)', 'km_KH' => 'Khmer (ភាសាខ្មែរ)', 'kn_IN' => 'Konkani (कोंकणी)', 'ko_KR' => 'Korean (한국어)', diff --git a/program/localization/is_IS/messages.inc b/program/localization/is_IS/messages.inc index ff990fb79..f33a1fc1f 100644 --- a/program/localization/is_IS/messages.inc +++ b/program/localization/is_IS/messages.inc @@ -84,7 +84,6 @@ $messages['nosenderwarning'] = 'Settu inn tölvupóstfang sendanda.'; $messages['norecipientwarning'] = 'Í það minnsta einn viðtakandi verður að vera'; $messages['nosubjectwarning'] = 'Efnislínan er tóm. Viltu slá eitthvað inn í hana?'; $messages['nobodywarning'] = 'Viltu senda tómt skeyti?'; -$messages['notsentwarning'] = 'Skeytið hefur ekki verið send. Viltu henda skeytinu?'; $messages['noldapserver'] = 'Please select an ldap server to search'; $messages['nosearchname'] = 'Sláðu inn nafn eða netfang'; $messages['searchsuccessful'] = '$nr skeyti fundust'; diff --git a/program/localization/it_IT/labels.inc b/program/localization/it_IT/labels.inc index 2e9c6b5d8..3f71c2e57 100644 --- a/program/localization/it_IT/labels.inc +++ b/program/localization/it_IT/labels.inc @@ -46,7 +46,7 @@ $labels['readstatus'] = 'Visualizza lo stato'; $labels['listoptions'] = 'Elenco opzioni...'; $labels['mailboxlist'] = 'Cartelle'; $labels['messagesfromto'] = 'Messaggi da $from a $to di $count'; -$labels['threadsfromto'] = 'Thread da $from a $to di $count'; +$labels['threadsfromto'] = 'Argomenti da $from a $to di $count'; $labels['messagenrof'] = 'Messaggio $nr di $count'; $labels['fromtoshort'] = '$from – $to di $count'; $labels['copy'] = 'Copia'; @@ -149,7 +149,7 @@ $labels['flagged'] = 'Contrassegnato'; $labels['unflagged'] = 'Non contrassegnato'; $labels['unanswered'] = 'Senza risposta'; $labels['withattachment'] = 'Con allegato'; -$labels['deleted'] = 'Cancellato'; +$labels['deleted'] = 'Eliminato'; $labels['undeleted'] = 'Non eliminato'; $labels['replied'] = 'Risposta'; $labels['forwarded'] = 'Inoltrata'; @@ -162,7 +162,7 @@ $labels['expand-unread'] = 'Espandi non letti'; $labels['collapse-all'] = 'Richiudi tutti'; $labels['threaded'] = 'Per argomenti'; $labels['autoexpand_threads'] = 'Espandi'; -$labels['do_expand'] = 'tutti i thread'; +$labels['do_expand'] = 'tutti gli argomenti'; $labels['expand_only_unread'] = 'solo con messaggi non letti'; $labels['fromto'] = 'Mittente/Destinatario'; $labels['flag'] = 'Contrassegnato'; @@ -172,7 +172,7 @@ $labels['sentdate'] = 'Data d\'invio'; $labels['arrival'] = 'Data di arrivo'; $labels['asc'] = 'Ascendente'; $labels['desc'] = 'Discendente'; -$labels['listcolumns'] = 'Elenco Colonne'; +$labels['listcolumns'] = 'Elenco colonne'; $labels['listsorting'] = 'Ordina per'; $labels['listorder'] = 'Ordinamento'; $labels['listmode'] = 'Modalità di visualizzazione'; @@ -236,7 +236,7 @@ $labels['keyid'] = 'ID della chiave'; $labels['keylength'] = 'Bit'; $labels['keyexpired'] = 'Scaduta'; $labels['keyrevoked'] = 'Revocata'; -$labels['bccinstead'] = 'Usa Bcc'; +$labels['bccinstead'] = 'Usa ccn'; $labels['editidents'] = 'Modifica identità'; $labels['spellcheck'] = 'Controllo ortografico'; $labels['checkspelling'] = 'Controlla ortografia'; @@ -253,7 +253,7 @@ $labels['addresponse'] = 'Aggiungi risposta'; $labels['editresponse'] = 'Modifica risposta'; $labels['editresponses'] = 'Modifica messaggi predefiniti'; $labels['responsename'] = 'Nome'; -$labels['responsetext'] = 'Testo della Risposta'; +$labels['responsetext'] = 'Testo della risposta'; $labels['attach'] = 'Allega'; $labels['attachments'] = 'Allegati'; $labels['upload'] = 'Aggiungi'; @@ -261,7 +261,7 @@ $labels['uploadprogress'] = '$percent ($current su $total)'; $labels['close'] = 'Chiudi'; $labels['messageoptions'] = 'Opzioni messaggi...'; $labels['togglecomposeoptions'] = 'Passa alle impostazioni di composizione'; -$labels['attachmentrename'] = 'Rinomina Allegato'; +$labels['attachmentrename'] = 'Rinomina allegato'; $labels['low'] = 'Bassa'; $labels['lowest'] = 'Molto bassa'; $labels['normal'] = 'Normale'; @@ -273,7 +273,7 @@ $labels['alwaysshow'] = 'Mostra sempre immagini da $sender'; $labels['isdraft'] = 'Questa è una bozza.'; $labels['andnmore'] = 'ancora $nr...'; $labels['togglemoreheaders'] = 'Mostra più intestazioni dei messaggi'; -$labels['togglefullheaders'] = 'Visualizza header raw'; +$labels['togglefullheaders'] = 'Visualizza/nascondi intestazioni originali'; $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'Testo semplice'; $labels['savesentmessagein'] = 'Salva i messaggi inviati in'; @@ -323,6 +323,7 @@ $labels['advsearch'] = 'Ricerca avanzata'; $labels['advanced'] = 'Ricerca avanzata'; $labels['other'] = 'Altro'; $labels['printcontact'] = 'Stampa contatto'; +$labels['qrcode'] = 'Codice QR'; $labels['typehome'] = 'Casa'; $labels['typework'] = 'Lavoro'; $labels['typeother'] = 'Altro'; @@ -342,7 +343,7 @@ $labels['addcontact'] = 'Aggiungi contatto'; $labels['editcontact'] = 'Modifica contatto'; $labels['contacts'] = 'Contatti'; $labels['contactproperties'] = 'Proprietà contatto'; -$labels['contactnameandorg'] = 'Nome e Società'; +$labels['contactnameandorg'] = 'Nome e società'; $labels['personalinfo'] = 'Informazioni personali'; $labels['contactphoto'] = 'Avatar'; $labels['edit'] = 'Modifica'; @@ -365,7 +366,7 @@ $labels['exportvcards'] = 'Esporta i contatti in formato vCard'; $labels['newgroup'] = 'Crea un nuovo gruppo'; $labels['addgroup'] = 'Aggiungi gruppo'; $labels['grouprename'] = 'Rinomina il gruppo'; -$labels['groupdelete'] = 'Cancella il gruppo'; +$labels['groupdelete'] = 'Elimina il gruppo'; $labels['groupremoveselected'] = 'Rimuovi i contatti selezionati dal gruppo'; $labels['uponelevel'] = 'Sali di un livello'; $labels['previouspage'] = 'Pagina precedente'; @@ -375,7 +376,7 @@ $labels['lastpage'] = 'Ultima pagina'; $labels['group'] = 'Gruppo'; $labels['groups'] = 'Gruppi'; $labels['listgroup'] = 'Elenca membri dei gruppi'; -$labels['personaladrbook'] = 'Rubrica Personale'; +$labels['personaladrbook'] = 'Rubrica personale'; $labels['searchsave'] = 'Salva ricerca'; $labels['searchdelete'] = 'Elimina ricerca'; $labels['import'] = 'Importa'; @@ -422,11 +423,11 @@ $labels['htmlsignature'] = 'Firma in HTML'; $labels['showemail'] = 'Visualizza indirizzi email con il nome visualizzato'; $labels['previewpane'] = 'Mostra l\'anteprima'; $labels['skin'] = 'Tema interfaccia'; -$labels['logoutclear'] = 'Svuota il Cestino all\'uscita'; +$labels['logoutclear'] = 'Svuota il cestino all\'uscita'; $labels['logoutcompact'] = 'All\'uscita elimina i messaggi marcati come cancellati'; -$labels['uisettings'] = 'Interfaccia Utente'; -$labels['serversettings'] = 'Impostazioni Server'; -$labels['mailboxview'] = 'Impaginazione Messaggi'; +$labels['uisettings'] = 'Interfaccia utente'; +$labels['serversettings'] = 'Impostazioni server'; +$labels['mailboxview'] = 'Impaginazione messaggi'; $labels['mdnrequests'] = 'Su richiesta per la ricevuta di ritorno'; $labels['askuser'] = 'chiedi conferma'; $labels['autosend'] = 'invia'; @@ -448,8 +449,8 @@ $labels['everynminutes'] = 'ogni $n minuto(i)'; $labels['refreshinterval'] = 'Aggiorna (controlla nuovi messaggi, ecc.)'; $labels['never'] = 'mai'; $labels['immediately'] = 'immediatamente'; -$labels['messagesdisplaying'] = 'Visualizzazione Messaggi'; -$labels['messagescomposition'] = 'Composizione Messaggi'; +$labels['messagesdisplaying'] = 'Visualizzazione messaggi'; +$labels['messagescomposition'] = 'Composizione messaggi'; $labels['mimeparamfolding'] = 'Nomi allegati'; $labels['2231folding'] = 'RFC 2231 completo (Thunderbird)'; $labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)'; @@ -460,8 +461,8 @@ $labels['advancedoptions'] = 'Opzioni avanzate'; $labels['toggleadvancedoptions'] = 'Passa alle impostazioni avanzate'; $labels['focusonnewmessage'] = 'Attiva la finestra del browser all\'arrivo di un nuovo messaggio'; $labels['checkallfolders'] = 'Controlla tutte le cartelle per la presenza di nuovi messaggi'; -$labels['displaynext'] = 'Dopo aver cancellato/spostato il messaggio mostra quello successivo'; -$labels['defaultfont'] = 'Font standard per messaggi in HTML'; +$labels['displaynext'] = 'Dopo aver eliminato/spostato il messaggio mostra quello successivo'; +$labels['defaultfont'] = 'Carattere standard per messaggi in HTML'; $labels['mainoptions'] = 'Opzioni principali'; $labels['browseroptions'] = 'Opzioni del browser'; $labels['section'] = 'Sezione'; @@ -509,7 +510,7 @@ $labels['messagecount'] = 'Messaggi'; $labels['create'] = 'Crea'; $labels['createfolder'] = 'Crea nuova cartella'; $labels['managefolders'] = 'Gestione cartelle'; -$labels['specialfolders'] = 'Cartelle Speciali'; +$labels['specialfolders'] = 'Cartelle speciali'; $labels['properties'] = 'Proprietà'; $labels['folderproperties'] = 'Proprietà cartella'; $labels['parentfolder'] = 'Cartella padre'; @@ -529,7 +530,7 @@ $labels['sortby'] = 'Ordina per'; $labels['sortasc'] = 'Ordinamento crescente'; $labels['sortdesc'] = 'Ordinamento decrescente'; $labels['undo'] = 'Annulla'; -$labels['installedplugins'] = 'Plugin Installati'; +$labels['installedplugins'] = 'Plugin installati'; $labels['plugin'] = 'Plugin'; $labels['version'] = 'Versione'; $labels['source'] = 'Sorgente'; @@ -560,16 +561,16 @@ $labels['chinese'] = 'Cinese'; $labels['arialabeltopnav'] = 'Controllo finestra'; $labels['arialabeltasknav'] = 'Attavità dell\'applicazione'; $labels['arialabeltoolbar'] = 'Barra delle applicazioni'; -$labels['arialabelactivetask'] = 'Attività Attive'; -$labels['arialabelmessagessearchfilter'] = 'Filtro lista delle Email'; -$labels['arialabelmailsearchform'] = 'Modulo ricerca messaggi Email'; +$labels['arialabelactivetask'] = 'Attività attive'; +$labels['arialabelmessagessearchfilter'] = 'Filtro lista delle email'; +$labels['arialabelmailsearchform'] = 'Modulo ricerca messaggi email'; $labels['arialabelcontactsearchform'] = 'Modulo di ricerca contatti'; -$labels['arialabelmailquicksearchbox'] = 'Ricerca Email'; +$labels['arialabelmailquicksearchbox'] = 'Ricerca email'; $labels['arialabelquicksearchbox'] = 'Immissione ricerca'; -$labels['arialabelfoldersearchfilter'] = 'Filtro Cartelle'; -$labels['arialabelfoldersearchform'] = 'Form ricerca cartelle'; -$labels['arialabelfolderlist'] = 'Cartella selezione Email'; -$labels['arialabelmessagelist'] = 'Lista messaggi Email'; +$labels['arialabelfoldersearchfilter'] = 'Filtro cartelle'; +$labels['arialabelfoldersearchform'] = 'Modulo di ricerca cartelle'; +$labels['arialabelfolderlist'] = 'Cartella selezione email'; +$labels['arialabelmessagelist'] = 'Lista messaggi email'; $labels['arialabelmailpreviewframe'] = 'Anteprima messaggio'; $labels['arialabelmailboxmenu'] = 'Menu azione cartella'; $labels['arialabellistselectmenu'] = 'Menu lista selezione'; @@ -592,7 +593,7 @@ $labels['arialabelattachmentuploadform'] = 'Allegato caricato da'; $labels['arialabelattachmentpreview'] = 'Anteprima allegato'; $labels['ariasummarycomposecontacts'] = 'Elenco dei contatti e gruppi per selezionare come destinatari'; $labels['arialabelcontactexportoptions'] = 'Impostazioni esportazione contatti'; -$labels['arialabelabookgroupoptions'] = 'Impostazioni Contatti/gruppi'; +$labels['arialabelabookgroupoptions'] = 'Impostazioni contatti/gruppi'; $labels['arialabelpreferencesform'] = 'Modulo preferenze'; $labels['arialabelidentityeditfrom'] = 'Modifica modulo identità'; $labels['arialabelresonseeditfrom'] = 'Modifica modulo ricezione'; @@ -602,8 +603,8 @@ $labels['helplistkeyboardnavigation'] = "Frecce su/giù: Sposta le righe selezio Spazio: Seleziona fila mirata. Shift + su/giù: Seleziona ulteriore fila da sotto e sopra. Ctrl + Spazio: Aggiungi fila mirata da selezionato/rimosso a selezionato."; -$labels['helplistkeyboardnavmessages'] = "Frecce destra/sinistra: espandi/comprimi finestra messaggio (solo in modalità finestra). -Invio: Aprire il contatto selezionato. -Cancella: Sposta il messaggio selezionato nel cestino."; +$labels['helplistkeyboardnavmessages'] = "Frecce destra/sinistra: espande/comprime l'argomento del messaggio (solo in modalità argomenti). +Invio: apre il contatto selezionato. +Canc: sposta il messaggio selezionato nel cestino."; $labels['helplistkeyboardnavcontacts'] = "Invio: Aprire il contatto selezionato"; ?> diff --git a/program/localization/it_IT/messages.inc b/program/localization/it_IT/messages.inc index b16c62363..2cfba6336 100644 --- a/program/localization/it_IT/messages.inc +++ b/program/localization/it_IT/messages.inc @@ -16,13 +16,13 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/ */ $messages['errortitle'] = 'Si è verificato un errore!'; -$messages['loginfailed'] = 'Accesso fallito.'; +$messages['loginfailed'] = 'Accesso non riuscito.'; $messages['cookiesdisabled'] = 'Il tuo browser non accetta i cookies.'; $messages['sessionerror'] = 'Sessione non valida o scaduta.'; $messages['storageerror'] = 'Impossibile connettersi al server IMAP'; $messages['servererror'] = 'Errore del server!'; $messages['servererrormsg'] = 'Errore del server: $msg'; -$messages['accountlocked'] = 'Troppi tentativi di accesso falliti. Tenta di nuovo più tardi.'; +$messages['accountlocked'] = 'Troppi tentativi di accesso non riusciti. Tenta di nuovo più tardi.'; $messages['connerror'] = 'Errore di connessione (impossibile raggiungere il server)!'; $messages['dberror'] = 'Errore del database!'; $messages['windowopenerror'] = 'La finestra di popup è stata bloccata!'; @@ -35,7 +35,7 @@ $messages['invalidrequest'] = 'Richiesta non valida! Nessun dato salvato.'; $messages['invalidhost'] = 'Nome del server non valido.'; $messages['nomessagesfound'] = 'Nessun messaggio trovato in questa cartella'; $messages['loggedout'] = 'Sessione chiusa correttamente. Arrivederci!'; -$messages['mailboxempty'] = 'La Mailbox è vuota'; +$messages['mailboxempty'] = 'La casella di posta è vuota'; $messages['nomessages'] = 'Non ci sono messaggi'; $messages['refreshing'] = 'Aggiornamento...'; $messages['loading'] = 'Caricamento...'; @@ -55,7 +55,7 @@ $messages['addedsuccessfully'] = 'Contatto aggiunto alla rubrica'; $messages['contactexists'] = 'Esiste già un contatto con questo indirizzo email.'; $messages['contactnameexists'] = 'Esiste già un contatto con questo nome'; $messages['blockedimages'] = 'Per proteggere la tua privacy, le immagini remote di questo messaggio sono state bloccate.'; -$messages['encryptedmessage'] = 'Questo messaggio é cifrato e non può essere visualizzato. Spiacenti!'; +$messages['encryptedmessage'] = 'Questo messaggio è cifrato e non può essere visualizzato. Spiacenti!'; $messages['externalmessagedecryption'] = 'Questo messaggio è cifrato e può essere decifrato attraverso un\'estensione del browser.'; $messages['nopubkeyfor'] = 'Non è stata trovata una chiave pubblica valida per l\'indirizzo $email'; $messages['nopubkeyforsender'] = 'Non è stata trovata una chiave pubblica valida per la tua identità mittente. Si desidera cifrare il messaggio solo per i destinatari?'; @@ -69,7 +69,7 @@ $messages['contactnotfound'] = 'Il contatto richiesto non è stato trovato'; $messages['contactsearchonly'] = 'Inserisci dei termini per cercare i contatti'; $messages['sendingfailed'] = 'Impossibile inviare il messaggio'; $messages['senttooquickly'] = 'Per favore, attendi $sec secondi prima di inviare questo messaggio'; -$messages['errorsavingsent'] = 'Si è verificato un errore nel savare il messaggio inviato.'; +$messages['errorsavingsent'] = 'Si è verificato un errore nel salvare il messaggio inviato.'; $messages['errorsaving'] = 'Si è verificato un errore nel salvataggio.'; $messages['errormoving'] = 'Impossibile spostare il messaggio'; $messages['errorcopying'] = 'Impossibile copiare il messaggio'; @@ -85,17 +85,19 @@ $messages['groupdeleting'] = 'Eliminazione gruppo...'; $messages['folderdeleting'] = 'Eliminazione cartella...'; $messages['foldermoving'] = 'Spostamento cartella...'; $messages['foldersubscribing'] = 'Sottoscrizione cartella...'; -$messages['folderunsubscribing'] = 'Cancellazione sottoscrizzione cartella...'; +$messages['folderunsubscribing'] = 'Cancellazione sottoscrizione cartella...'; $messages['formincomplete'] = 'Per favore, compila tutti i campi'; $messages['noemailwarning'] = 'Per favore, immetti un indirizzo e-mail valido'; $messages['nonamewarning'] = 'Per favore, immetti un nome'; $messages['nopagesizewarning'] = 'Per favore, immetti il numero di righe per pagina'; $messages['nosenderwarning'] = 'Per favore, inserisci l\'indirizzo email del mittente.'; $messages['norecipientwarning'] = 'Per favore, immetti almeno un destinatario'; +$messages['disclosedrecipwarning'] = 'Tutti i destinatari vedranno i rispettivi indirizzi di posta elettronica. Per evitare questo e proteggerne la riservatezza puoi usare il campo Ccn.'; +$messages['disclosedreciptitle'] = 'Troppi destinatari pubblici'; $messages['nosubjectwarning'] = 'L\'oggetto è vuoto. Vuoi inserirlo adesso?'; +$messages['nosubjecttitle'] = 'Nessun oggetto'; $messages['nobodywarning'] = 'Inviare il messaggio senza testo?'; -$messages['notsentwarning'] = 'Il messaggio non è stato inviato. Vuoi annullare questo messaggio?'; -$messages['restoresavedcomposedata'] = 'E\' stato rilevato un precedente messaggio non inviato.\n\nSoggetto: $subject\nSalvato: $date\n\nVuoi ripristinare il messaggio?'; +$messages['restoresavedcomposedata'] = 'E\' stato rilevato un precedente messaggio non inviato.\n\nOggetto: $subject\nSalvato: $date\n\nVuoi ripristinare il messaggio?'; $messages['noldapserver'] = 'Per favore, scegli un server LDAP in cui ricercare'; $messages['nosearchname'] = 'Per favore, immetti un nome o un indirizzo e-mail'; $messages['notuploadedwarning'] = 'Non tutti gli allegati sono stati ancora caricati. Prego attendere, oppure cancellare il caricamento.'; @@ -114,9 +116,10 @@ $messages['folderexpunged'] = 'Cartella compattata correttamente'; $messages['deletedsuccessfully'] = 'Eliminato con successo'; $messages['converting'] = 'Rimozione della formattazione dal messaggio...'; $messages['messageopenerror'] = 'Impossibile caricare il messaggio dal server'; -$messages['filelinkerror'] = 'L\'inserimento dell\'allegato è fallito.'; +$messages['filelinkerror'] = 'L\'inserimento dell\'allegato non è riuscito.'; $messages['fileuploaderror'] = 'Errore durante il caricamento del file'; $messages['filesizeerror'] = 'Il file da caricare supera il limite massimo di $size'; +$messages['filecounterror'] = 'È possibile caricare al massimo $count file alla volta.'; $messages['msgsizeerror'] = 'Errore nell\'allegare un file. Dimensione massima di un messaggio ($size) superata. '; $messages['copysuccess'] = 'Copiati correttamente $nr contatti.'; $messages['movesuccess'] = '$nr contatti spostati correttamente.'; @@ -125,16 +128,16 @@ $messages['moveerror'] = 'Impossibile spostare i contatti.'; $messages['sourceisreadonly'] = 'La rubrica è in sola lettura'; $messages['errorsavingcontact'] = 'Impossibile salvare il contatto'; $messages['movingmessage'] = 'Spostamento del messaggio...'; -$messages['copyingmessage'] = 'Copia del messaggio...'; -$messages['copyingcontact'] = 'Copia del contatto...'; -$messages['movingcontact'] = 'Spostamento contatto(i)'; -$messages['deletingmessage'] = 'Cancellazione messaggio...'; +$messages['copyingmessage'] = 'Copia messaggio(i)...'; +$messages['copyingcontact'] = 'Copia contatto(i)...'; +$messages['movingcontact'] = 'Spostamento contatto(i)...'; +$messages['deletingmessage'] = 'Eliminazione messaggio(i)...'; $messages['markingmessage'] = 'Marca messaggio...'; $messages['addingmember'] = 'Aggiunta contatto al gruppo...'; $messages['removingmember'] = 'Rimozione contatto dal gruppo...'; $messages['receiptsent'] = 'Ricevuta di ritorno inviata con successo'; $messages['errorsendingreceipt'] = 'Impossibile spedire la ricevuta di ritorno'; -$messages['deleteidentityconfirm'] = 'sei sicuro di voler cancellare questo profilo?'; +$messages['deleteidentityconfirm'] = 'Sei sicuro di voler eliminare questo profilo?'; $messages['nodeletelastidentity'] = 'Impossibile eliminare l\'unica identità disponibile'; $messages['forbiddencharacter'] = 'Il nome della cartella contiene un carattere vietato'; $messages['selectimportfile'] = 'Per favore, seleziona il file da caricare'; @@ -143,22 +146,22 @@ $messages['contactaddedtogroup'] = 'Contatto aggiunto con successo al gruppo'; $messages['contactremovedfromgroup'] = 'Contatto rimosso con successo dal gruppo'; $messages['nogroupassignmentschanged'] = 'Nessun assegnamento del gruppo è stato cambiato.'; $messages['importwait'] = 'Importazione in corso, attendere...'; -$messages['importformaterror'] = 'Importazione fallita! Il file caricato non è un file valido per l\'importazione.'; +$messages['importformaterror'] = 'Importazione non riuscita! Il file caricato non è un file valido per l\'importazione.'; $messages['importconfirm'] = '$inserted contatti importati con successo

'; $messages['importconfirmskipped'] = '$skipped ignorati perché esistono già'; $messages['importmessagesuccess'] = 'Importati correttamente $nr messaggi'; -$messages['importmessageerror'] = 'Importazione fallita! Il file caricato non è un messaggio o una casella postale valida.'; +$messages['importmessageerror'] = 'Importazione non riuscita! Il file caricato non è un messaggio o una casella postale valida.'; $messages['opnotpermitted'] = 'Operazione non consentita!'; $messages['nofromaddress'] = 'Indirizzo email mancante nell\'identità selezionata.'; $messages['editorwarning'] = 'Cambiare editor potrebbe causare la perdita della formattazione. Si desidera continuare lo stesso?'; -$messages['httpreceivedencrypterror'] = 'Fatale errore di configurazione. Per favore contatta l\'amministratore immediatamente. Il tuo messaggio non può essere inviato.'; -$messages['smtpconnerror'] = 'Errore SMTP ($code): Connessione al server fallita'; -$messages['smtpautherror'] = 'Errore SMTP ($code): Autenticazione fallita'; -$messages['smtpfromerror'] = 'Errore SMTP ($code): Fallita l\'impostazione del mittente "$from" ($msg)'; -$messages['smtptoerror'] = 'Errore SMTP ($code): Fallito l\'inserimento del destinatario "$to" ($msg)'; -$messages['smtprecipientserror'] = 'Errore SMTP: Impossibile processare la lista dei destinatari'; +$messages['httpreceivedencrypterror'] = 'Rrrore fatale di configurazione. Contatta l\'amministratore immediatamente. Il tuo messaggio non può essere inviato.'; +$messages['smtpconnerror'] = 'Errore SMTP ($code): connessione al server non riuscita.'; +$messages['smtpautherror'] = 'Errore SMTP ($code): autenticazione non riuscita.'; +$messages['smtpfromerror'] = 'Errore SMTP ($code): impostazione del mittente "$from" non riuscita ($msg)'; +$messages['smtptoerror'] = 'Errore SMTP ($code): inserimento del destinatario "$to" non riuscito ($msg)'; +$messages['smtprecipientserror'] = 'Errore SMTP: impossibile processare la lista dei destinatari'; $messages['smtperror'] = 'Errore SMTP: $msg'; -$messages['emailformaterror'] = 'Indirizzo email non vaiido: $email'; +$messages['emailformaterror'] = 'Indirizzo email non valido: $email'; $messages['toomanyrecipients'] = 'Numero eccessivo di destinatari, ridurlo a $max'; $messages['maxgroupmembersreached'] = 'Il numero dei membri del gruppo eccede il massimo di $max'; $messages['internalerror'] = 'Si è verificato un errore interno. Riprovare più tardi.'; @@ -173,11 +176,11 @@ $messages['savedsearchdeleted'] = 'Le ricerca salvata è stata eliminata con suc $messages['savedsearchdeleteerror'] = 'Impossibile eliminare la ricerca salvata.'; $messages['savedsearchcreated'] = 'Ricerca salvata creata con successo.'; $messages['savedsearchcreateerror'] = 'Impossibile creare la ricerca salvata.'; -$messages['messagedeleted'] = 'Messaggi/o cancellato correttamente'; -$messages['messagemoved'] = 'Messaggi/o spostato correttamente'; -$messages['messagemovedtotrash'] = 'Messaggio(i) spostati correttamente nel cestino.'; -$messages['messagecopied'] = 'Messaggi/o copiato correttamente'; -$messages['messagemarked'] = 'Messaggi/o marcato correttamente'; +$messages['messagedeleted'] = 'Messaggi/o eliminato/i correttamente'; +$messages['messagemoved'] = 'Messaggio/i spostato/i correttamente'; +$messages['messagemovedtotrash'] = 'Messaggio/i spostato/i correttamente nel cestino.'; +$messages['messagecopied'] = 'Messaggi/o copiato/i correttamente'; +$messages['messagemarked'] = 'Messaggi/o marcato/i correttamente'; $messages['autocompletechars'] = 'Inserisci almeno $min caratteri per l\'autocompletamento'; $messages['autocompletemore'] = 'Più risultati ottenuti. Inserisci per favore più caratteri.'; $messages['namecannotbeempty'] = 'Il nome non può essere vuoto'; @@ -194,10 +197,10 @@ $messages['noscriptwarning'] = 'Attenzione: questo servizio di webmail richiede $messages['messageissent'] = 'Questo messaggio è stato già inviato, ma non ancora salvato. Vuoi salvarlo adesso?'; $messages['errnotfound'] = 'File non trovato'; $messages['errnotfoundexplain'] = 'La risorsa richiesta non è stata trovata!'; -$messages['errfailedrequest'] = 'Richiesta fallita'; -$messages['errauthorizationfailed'] = 'Autorizzazione fallita'; +$messages['errfailedrequest'] = 'Richiesta non riuscita'; +$messages['errauthorizationfailed'] = 'Autorizzazione non riuscita'; $messages['errunauthorizedexplain'] = 'Non è stato possibile verificare la tua autorizzazione all\'accesso per questo servizio!'; -$messages['errrequestcheckfailed'] = 'Il controllo della richiesta è fallito'; +$messages['errrequestcheckfailed'] = 'Il controllo della richiesta non è riuscito'; $messages['errcsrfprotectionexplain'] = "Per la tua sicurezza, l'accesso a questa risorsa è protetto contro CSRF.\nSe visualizzi questo messaggio, è probabile che non ti sia scollegato prima di lasciare l'applicazione web.\n\nE' richiesta un'azione di una persona per continuare."; $messages['errcontactserveradmin'] = 'Si prega di contattare l\'amministratore del server.'; $messages['clicktoresumesession'] = 'Clicca qui per riprendere la tua sessione precedente.'; diff --git a/program/localization/ja_JP/messages.inc b/program/localization/ja_JP/messages.inc index 69f73df98..366c7297b 100644 --- a/program/localization/ja_JP/messages.inc +++ b/program/localization/ja_JP/messages.inc @@ -97,7 +97,7 @@ $messages['disclosedreciptitle'] = '宛て先が多すぎます。'; $messages['nosubjectwarning'] = '件名(Subject)の欄が空です。今、入力しますか?'; $messages['nosubjecttitle'] = '件名なし'; $messages['nobodywarning'] = '本文の無いメッセージを送信しますか?'; -$messages['notsentwarning'] = 'メッセージを送信しませんでした。このメッセージを破棄しますか。'; +$messages['notsentwarning'] = 'まだメッセージを送信していなくて、保存していない変更もあります。変更した内容を破棄しますか?'; $messages['restoresavedcomposedata'] = '以前に作成して未送信のメッセージがあります。\n\n件名: $subject\n保存日: $date\n\nこのメッセージを回復しますか?'; $messages['noldapserver'] = '検索するLDAPサーバーを選択してください。'; $messages['nosearchname'] = '連絡先の名前か電子メールアドレスを入力してください。'; diff --git a/program/localization/ka_GE/messages.inc b/program/localization/ka_GE/messages.inc index 5a528ad0d..82fe979a0 100644 --- a/program/localization/ka_GE/messages.inc +++ b/program/localization/ka_GE/messages.inc @@ -80,7 +80,6 @@ $messages['nopagesizewarning'] = 'მიუთითეთ ფურცლის $messages['norecipientwarning'] = 'მიუთითეთ მიმღები'; $messages['nosubjectwarning'] = 'გსურთ თუ არა შეტყობინების გაგზავნა უსათაუროდ?'; $messages['nobodywarning'] = 'გსურთ თუ არა შეტყობინების გაგზავნა უტექსტოდ?'; -$messages['notsentwarning'] = 'შეტყობინება ვერ იქნა გაგზავნილი. გსურთ თუ არა გზავნილის გაუქმება?'; $messages['noldapserver'] = 'მიუთითეთ LDAP სერვერი ძიებისთვის'; $messages['nosearchname'] = 'მიუთითეთ სახელი ან ელ–ფოსტის მისამართი'; $messages['notuploadedwarning'] = 'ჯერ არ ატვირთულა ყველა მიმაგრებული ფაილი. დაელოდეთ ან გააუქმეთ ატვირთვა.'; diff --git a/program/localization/km_KH/messages.inc b/program/localization/km_KH/messages.inc index 8a8972b70..dcc92cea5 100644 --- a/program/localization/km_KH/messages.inc +++ b/program/localization/km_KH/messages.inc @@ -72,7 +72,6 @@ $messages['nopagesizewarning'] = 'សូមកំណត់ទំហំទំព $messages['norecipientwarning'] = 'សូមសរសេរអ្នកទទួលយ៉ាងហោចណាស់ម្នាក់'; $messages['nosubjectwarning'] = 'សំបុត្រគ្មានចំណងជើងតើអ្នកចង់សរសេរចំណងជើងនៅពេលនេះទេ?'; $messages['nobodywarning'] = 'តើលោកអ្នកចង់ផ្ញើសំបុត្រដែលគ្មានតួអត្ថបទសំបុត្រទេ?'; -$messages['notsentwarning'] = 'សំបុត្រនេះមិនទាន់បានផ្ញើទេ។ តើលោកអ្នកចង់លុបចោលទេ?'; $messages['noldapserver'] = 'សូមកំណត់ម៉ាស៊ីន LDAPដើម្បីស្វែងរក'; $messages['nosearchname'] = 'សូមបំពេញឈ្មោះទំនាក់ទំនង ឬអាសយដ្ឋានអ៊ីមែល'; $messages['notuploadedwarning'] = 'ឯកសារ​ភ្ជាប់​ទាំង​អស់​មិន​ត្រូវ​បាន​ផ្ទុក​ឡើង​នៅឡើយ​ទេ។ សូម​រង់ចាំ​ ឬ​បោះបង់​ការ​​ផ្ទុក​ឡើង។'; diff --git a/program/localization/ko_KR/labels.inc b/program/localization/ko_KR/labels.inc index a9675274f..6ef557e04 100644 --- a/program/localization/ko_KR/labels.inc +++ b/program/localization/ko_KR/labels.inc @@ -176,6 +176,10 @@ $labels['listcolumns'] = '열 목록 표시'; $labels['listsorting'] = '열 정렬'; $labels['listorder'] = '정렬 기준'; $labels['listmode'] = '화면 모드 목록 표시'; +$labels['layout'] = '레이아웃'; +$labels['layoutwidescreen'] = '와이드스크린'; +$labels['layoutdesktop'] = '데스크탑'; +$labels['layoutlist'] = '목록'; $labels['folderactions'] = '폴더 동작...'; $labels['compact'] = '압축'; $labels['empty'] = '비우기'; @@ -233,6 +237,7 @@ $labels['keyid'] = '키 ID'; $labels['keylength'] = '비트'; $labels['keyexpired'] = '만료됨'; $labels['keyrevoked'] = '해지됨'; +$labels['bccinstead'] = 'Bcc 사용'; $labels['editidents'] = '신원 편집'; $labels['spellcheck'] = '맞춤법'; $labels['checkspelling'] = '맞춤법 검사'; @@ -319,6 +324,7 @@ $labels['advsearch'] = '고급 검색'; $labels['advanced'] = '고급'; $labels['other'] = '기타'; $labels['printcontact'] = '연락처 인쇄'; +$labels['qrcode'] = 'QR 코드'; $labels['typehome'] = '자택'; $labels['typework'] = '직장'; $labels['typeother'] = '기타'; diff --git a/program/localization/ko_KR/messages.inc b/program/localization/ko_KR/messages.inc index df5e09ade..b0e99ed88 100644 --- a/program/localization/ko_KR/messages.inc +++ b/program/localization/ko_KR/messages.inc @@ -92,9 +92,11 @@ $messages['nonamewarning'] = '이름을 입력해주십시오.'; $messages['nopagesizewarning'] = '페이지 크기를 입력해주십시오.'; $messages['nosenderwarning'] = '보내는 사람의 이메일 주소를 입력해주세요.'; $messages['norecipientwarning'] = '최소 하나의 수신자를 입력해주십시오.'; +$messages['disclosedrecipwarning'] = '모든 수신자가 서로의 이메일 주소를 볼 수 있습니다. 이것을 방지하고 개인 정보를 보호하려면 Bcc 필드를 사용할 수 있습니다.'; +$messages['disclosedreciptitle'] = '너무 많은 공개 수신자'; $messages['nosubjectwarning'] = '"제목" 필드가 비어있습니다. 지금 입력하시겠습니까?'; +$messages['nosubjecttitle'] = '제목 없음'; $messages['nobodywarning'] = '내용 없는 메시지를 보내시겠습니까?'; -$messages['notsentwarning'] = '메시지를 보내지 못했습니다. 메시지를 폐기하시겠습니까?'; $messages['restoresavedcomposedata'] = '이전에 작성했으나 보내지 않은 메시지가 발견되었습니다.\n\nSubject: $subject\nSaved: $date\n\n이 메시지를 복구하시겠습니까?'; $messages['noldapserver'] = '검색할 LDAP 서버를 선택해주십시오.'; $messages['nosearchname'] = '연락처명이나 이메일 주소를 입력해주십시오.'; @@ -117,6 +119,7 @@ $messages['messageopenerror'] = '서버에서 메시지를 로드할 수 없었 $messages['filelinkerror'] = '파일 첨부를 실패함.'; $messages['fileuploaderror'] = '파일 업로드를 실패했습니다.'; $messages['filesizeerror'] = '업로드한 파일이 최대 크기인 $size를 초과했습니다.'; +$messages['filecounterror'] = '한 번에 최대 $count개의 파일을 업로드 할 수 있습니다.'; $messages['msgsizeerror'] = '파일 첨부에 실패했습니다. 메시지의 최대 크기($size)를 초과했습니다.'; $messages['copysuccess'] = '$nr개의 연락처를 성공적으로 복사함'; $messages['movesuccess'] = '$nr개의 연락처를 성공적으로 이동되었습니다.'; diff --git a/program/localization/ku/messages.inc b/program/localization/ku/messages.inc index 04853234d..afb53663c 100644 --- a/program/localization/ku/messages.inc +++ b/program/localization/ku/messages.inc @@ -76,7 +76,6 @@ $messages['nopagesizewarning'] = 'Tika ye, mezinahiyeke pelê têkevê'; $messages['norecipientwarning'] = 'Tika ye, herî kêm standyarekê têkevê'; $messages['nosubjectwarning'] = 'Qada "Mijar"ê vala ye. Dixwazî niha tiştekî lê binivîsî?'; $messages['nobodywarning'] = 'Peyamê bê nivîs bişeyînî?'; -$messages['notsentwarning'] = 'Peyam nehat şandin. Dixwazî peyamê pişTgo bikî?'; $messages['noldapserver'] = 'Tika ye, ji bo lêgerînê pêşkêşkareke Idap têkevê'; $messages['nosearchname'] = 'Tika ye, nav an jî navnîşaneke têkiliyê têkevê'; $messages['searchsuccessful'] = '$nr peyam hat(in) dîtin'; diff --git a/program/localization/lb_LU/messages.inc b/program/localization/lb_LU/messages.inc index 3a89df989..be092c79b 100644 --- a/program/localization/lb_LU/messages.inc +++ b/program/localization/lb_LU/messages.inc @@ -82,7 +82,6 @@ $messages['nopagesizewarning'] = 'Gëff w.e.gl eng Säitegréisst an.'; $messages['norecipientwarning'] = 'Gëff w.e.gl op mannst een Empfänger an.'; $messages['nosubjectwarning'] = 'D\'Feld "Sujet" ass eidel. Wëlls du elo eent uginn?'; $messages['nobodywarning'] = 'Soll dëse Message ouni Text verschéckt ginn?'; -$messages['notsentwarning'] = 'De Message gouf net verschéckt. Wëlls du e verwerfen?'; $messages['restoresavedcomposedata'] = 'Et gouf e Message fonnt dee scho geschriwwen awer nach net verschéckt ginn ass.\n\nSujet: $subject\nGespäichert: $date\n\nSoll de Message recuperéiert ginn?'; $messages['noldapserver'] = 'Wiel w.e.gl en LDAP-Server fir d\'Sich aus.'; $messages['nosearchname'] = 'Gëff w.e.gl en Numm oder eng E-Mail-Adress fir de Kontakt an.'; diff --git a/program/localization/lt_LT/labels.inc b/program/localization/lt_LT/labels.inc index 0d9237927..aa9b8831d 100644 --- a/program/localization/lt_LT/labels.inc +++ b/program/localization/lt_LT/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = 'Kaip neskaitytus'; $labels['markflagged'] = 'Pažymėti gairele'; $labels['markunflagged'] = 'Pašalinti gairelę'; $labels['moreactions'] = 'Kiti veiksmai…'; +$labels['markallread'] = 'Žymėti visus kaip skaitytus'; +$labels['folders-cur'] = 'Tik pasirinktas aplankas'; +$labels['folders-sub'] = 'Pasirinktas aplankas ir jo poaplankiai'; +$labels['folders-all'] = 'Visi aplankai'; $labels['more'] = 'Kita'; $labels['back'] = 'Grįžti'; $labels['options'] = 'Nuostatos'; @@ -172,6 +176,10 @@ $labels['listcolumns'] = 'Stulpelių sąrašas'; $labels['listsorting'] = 'Stulpelis rikiavimui'; $labels['listorder'] = 'Rikiavimo tvarka'; $labels['listmode'] = 'Sąrašo rodymo veiksena'; +$labels['layout'] = 'Išdėstymas'; +$labels['layoutwidescreen'] = 'Platus ekranas'; +$labels['layoutdesktop'] = 'Darbalaukis'; +$labels['layoutlist'] = 'Sąrašas'; $labels['folderactions'] = 'Veiksmai su aplankais…'; $labels['compact'] = 'Suglaudinti'; $labels['empty'] = 'Ištuštinti'; @@ -229,6 +237,7 @@ $labels['keyid'] = 'Rakto ID'; $labels['keylength'] = 'Bitai'; $labels['keyexpired'] = 'Nebegalioja'; $labels['keyrevoked'] = 'Atšauktas'; +$labels['bccinstead'] = 'Naudoti Bcc'; $labels['editidents'] = 'Tvarkyti tapatybes'; $labels['spellcheck'] = 'Tikrinti rašybą'; $labels['checkspelling'] = 'Tikrinti rašybą'; @@ -315,6 +324,7 @@ $labels['advsearch'] = 'Išplėstinė paieška'; $labels['advanced'] = 'Išsamiau'; $labels['other'] = 'Kitas'; $labels['printcontact'] = 'Spausdinti kontakto duomenis'; +$labels['qrcode'] = 'QR kodas'; $labels['typehome'] = 'Namų'; $labels['typework'] = 'Darbo'; $labels['typeother'] = 'Kitas'; diff --git a/program/localization/lt_LT/messages.inc b/program/localization/lt_LT/messages.inc index 9dd5947a7..f3ef9917e 100644 --- a/program/localization/lt_LT/messages.inc +++ b/program/localization/lt_LT/messages.inc @@ -92,9 +92,12 @@ $messages['nonamewarning'] = 'Prašom įvesti vardą.'; $messages['nopagesizewarning'] = 'Prašom įvesti puslapio dydį.'; $messages['nosenderwarning'] = 'Prašom įvesti siuntėjo el. pašto adresą.'; $messages['norecipientwarning'] = 'Prašom įvesti bent vieną gavėją.'; +$messages['disclosedrecipwarning'] = 'Visi gavėjai matys vieni kitų el. pašto adresus. Tam, kad to neleistumėte ir apsaugotumėte jų privatumą, galite naudoti Bcc lauką.'; +$messages['disclosedreciptitle'] = 'Per daug viešų gavėjų'; $messages['nosubjectwarning'] = 'Temos laukelis tuščias. Ar norite temą įvesti dabar?'; +$messages['nosubjecttitle'] = 'Nenurodyta tema'; $messages['nobodywarning'] = 'Išsiųsti šį laišką be teksto?'; -$messages['notsentwarning'] = 'Laiškas neišsiųstas. Ar jūs tikrai norite jo atsikratyti?'; +$messages['notsentwarning'] = 'Laiškas nebuvo išsiųstas ir jame yra neišsaugotų pakeitimų. Ar norite panaikinti savo pakeitimus?'; $messages['restoresavedcomposedata'] = 'Buvo rastas anksčiau pradėtas rašyti, bet neišsiųstas laiškas.\n\nTema:$subject\nIšsaugotas: $date\n\nAr norite šį laišką atkurti?'; $messages['noldapserver'] = 'Prašome pasirinkti LDAP serverį paieškai.'; $messages['nosearchname'] = 'Prašom įvesti vardą arba el. pašto adresą.'; @@ -117,6 +120,7 @@ $messages['messageopenerror'] = 'Nepavyko įkelti laiško iš serverio.'; $messages['filelinkerror'] = 'Failo įkelti nepavyko.'; $messages['fileuploaderror'] = 'Nepavyko įkelti failo.'; $messages['filesizeerror'] = 'Įkeltas failas viršija maksimalų leistiną dydį – $size.'; +$messages['filecounterror'] = 'Jūs daugiausiai vienu metu galite įkelti $count failų(-us).'; $messages['msgsizeerror'] = 'Nepavyko pridėti failo. Viršytas maksimalus leistinas laiko dydis ($size).'; $messages['copysuccess'] = 'Nukopijuota adresatų: $nr.'; $messages['movesuccess'] = 'Perkelta adresatų: $nr.'; diff --git a/program/localization/lv_LV/messages.inc b/program/localization/lv_LV/messages.inc index 707e44941..fe9c5bea3 100644 --- a/program/localization/lv_LV/messages.inc +++ b/program/localization/lv_LV/messages.inc @@ -94,7 +94,6 @@ $messages['nosenderwarning'] = 'Lūdzu ievadiet sūtītāja e-pasta adresi'; $messages['norecipientwarning'] = 'Lūdzu ievadiet vismaz vienu saņēmēju'; $messages['nosubjectwarning'] = 'Lauks "temats" ir tukšs. Vai vēlaties to aizpildīt tagad?'; $messages['nobodywarning'] = 'Sūtīt vēstuli bez teksta?'; -$messages['notsentwarning'] = 'Vēstule netika nosūtīta. Vai tiešām vēlaties atcelt vēstules rakstīšanu?'; $messages['restoresavedcomposedata'] = 'Ir atrasta pirms kāda laika uzrakstīta, bet nenosūtīta vēstule.\n\nTēma: $subject\nSaglabāta:$date\n\nVai atjaunot šo vēstuli?'; $messages['noldapserver'] = 'Lai meklētu, lūdzu izvēlaties LDAP serveri'; $messages['nosearchname'] = 'Lūdzu ievadiet kontaktpersonas vārdu vai e-pasta adresi'; diff --git a/program/localization/mk_MK/messages.inc b/program/localization/mk_MK/messages.inc index 74980bf93..25da33bda 100644 --- a/program/localization/mk_MK/messages.inc +++ b/program/localization/mk_MK/messages.inc @@ -82,7 +82,6 @@ $messages['nopagesizewarning'] = 'Внесете големина на стра $messages['norecipientwarning'] = 'Внесете барем еден примач'; $messages['nosubjectwarning'] = 'Немате внесено „Наслов“. Дали сакате да внесете?'; $messages['nobodywarning'] = 'Писмото нема текст во него. Дали сакате да го испратите?'; -$messages['notsentwarning'] = 'Писмото не е пратено. Дали сакате да го отфрлите?'; $messages['noldapserver'] = 'Изберете LDAP сервер за пребарување'; $messages['nosearchname'] = 'Внесете име или е-поштенска адреса'; $messages['notuploadedwarning'] = 'Сè уште нема подигнати прилози. Почекајте или откажете го подигањето'; diff --git a/program/localization/mr_IN/messages.inc b/program/localization/mr_IN/messages.inc index 7834d5df3..d8eba0b04 100644 --- a/program/localization/mr_IN/messages.inc +++ b/program/localization/mr_IN/messages.inc @@ -63,7 +63,6 @@ $messages['nopagesizewarning'] = 'पानाचा आकार द्या'; $messages['norecipientwarning'] = 'किमान एकतरी पत्ता द्या ज्यांना तुम्हाला संदेश पाठवावयाचा आहे.'; $messages['nosubjectwarning'] = 'विषय दिलेला नाही. तुम्हाला विषय द्यायचा आहे का?'; $messages['nobodywarning'] = 'संदेशामधे कोणताही मजकूर नाही. तुम्हाला तसाच संदेश पाठवावयाचा आहे का?'; -$messages['notsentwarning'] = 'संदेश पाठवला गेला नाही. तुम्हाला हा संदेश रद्द करायचा आहे का?'; $messages['noldapserver'] = 'शोधण्यासाठी ldap सर्व्हर निवडा'; $messages['nosearchname'] = 'कृपया ज्यांना तुम्हाला संदेश पाठवावयाचा आहे त्यांचे नाव किंवा इमेल पत्ता द्या.'; $messages['notuploadedwarning'] = 'सर्व फाईल अजून चढवल्‍या गेलेल्‍या नाहीत. कृपया वाट पहा किंवा मागे फिरा'; diff --git a/program/localization/ms_MY/messages.inc b/program/localization/ms_MY/messages.inc index 2cab29daf..11d367303 100644 --- a/program/localization/ms_MY/messages.inc +++ b/program/localization/ms_MY/messages.inc @@ -48,7 +48,6 @@ $messages['nopagesizewarning'] = 'Sila masukkan saiz halaman'; $messages['norecipientwarning'] = 'Sila masukkan sekurang-kurangnya satu penerima'; $messages['nosubjectwarning'] = 'Ruang "Subjek" kosong. Adakah anda ingin masukkannya sekarang?'; $messages['nobodywarning'] = 'Hantar mesej ini tanpa teks?'; -$messages['notsentwarning'] = 'Mesej tidak dihantar. Adakah anda ingin menyingkir mesej anda?'; $messages['noldapserver'] = 'Sila pilih satu pelayan ldap untuk carian'; $messages['nosearchname'] = 'Sila masukkan nama kontek atau alamat emel'; $messages['searchsuccessful'] = '$nr mesej dijumpai'; diff --git a/program/localization/nb_NO/messages.inc b/program/localization/nb_NO/messages.inc index 3b9f554c8..ba6198780 100644 --- a/program/localization/nb_NO/messages.inc +++ b/program/localization/nb_NO/messages.inc @@ -80,7 +80,6 @@ $messages['nopagesizewarning'] = 'Angi sidestørrelsen'; $messages['norecipientwarning'] = 'Skriv inn minst én mottaker'; $messages['nosubjectwarning'] = 'Emnefeltet er tomt. Vil du skrive det inn nå?'; $messages['nobodywarning'] = 'Send denne meldingen uten tekst?'; -$messages['notsentwarning'] = 'E-posten er ikke sendt. Er du sikker på at du vil avbryte skrivingen?'; $messages['restoresavedcomposedata'] = 'Et tidligere usendt svar ble funnet.\n\nEmne: $subject\nLagret: $date\n\nVil du gjenopprette denne meldingen?'; $messages['noldapserver'] = 'Velg LDAP-tjener å søke i'; $messages['nosearchname'] = 'Venligst skriv inn kontaktens navn eller e-postadresse'; diff --git a/program/localization/ne_NP/messages.inc b/program/localization/ne_NP/messages.inc index 9ffdc05fd..3932811cb 100644 --- a/program/localization/ne_NP/messages.inc +++ b/program/localization/ne_NP/messages.inc @@ -48,7 +48,6 @@ $messages['nopagesizewarning'] = 'कृपया पन्नाको ना $messages['norecipientwarning'] = 'कृपया कम-से-कम एउटा प्रापकको विवरण भर्नुहोस'; $messages['nosubjectwarning'] = 'मेलको कुनै विषय तोकिएको छैनै। केहि तोक्न चहानुहुन्छ ?'; $messages['nobodywarning'] = 'बिना केहि लेखि पठाउने?'; -$messages['notsentwarning'] = 'मेल पठएको छैन.. मेल रद्द गर्न चहानुहुन्छ?'; $messages['noldapserver'] = 'कृपया खोजको निम्ति एउटा ऐलडाप सर्वर छान्नहोस'; $messages['nosearchname'] = 'कृपया सम्पर्कको नाम या ई-मेल भर्नुहोस'; $messages['searchsuccessful'] = '$nr मेलहरु पाइयो'; diff --git a/program/localization/nl_BE/messages.inc b/program/localization/nl_BE/messages.inc index feacd36b0..f08552122 100644 --- a/program/localization/nl_BE/messages.inc +++ b/program/localization/nl_BE/messages.inc @@ -87,7 +87,6 @@ $messages['nopagesizewarning'] = 'Geef een geldig aantal berichten per pagina op $messages['norecipientwarning'] = 'Geef minstens één bestemmeling op.'; $messages['nosubjectwarning'] = 'Geen onderwerp opgegeven. Wenst u alsnog een onderwerp te geven?'; $messages['nobodywarning'] = 'Wilt u dit lege bericht versturen?'; -$messages['notsentwarning'] = 'Het bericht is niet verzonden. Wilt u het bericht verwijderen?'; $messages['noldapserver'] = 'Kies een LDAP server waarop gezocht moet worden.'; $messages['nosearchname'] = 'Geen een contacpersoon of e-mailadres op.'; $messages['notuploadedwarning'] = 'Nog niet alle bijlagen zijn geüpload. Wacht even of annuleer de upload.'; diff --git a/program/localization/nl_NL/labels.inc b/program/localization/nl_NL/labels.inc index 7d594af91..da5c53d06 100644 --- a/program/localization/nl_NL/labels.inc +++ b/program/localization/nl_NL/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = 'Ongelezen'; $labels['markflagged'] = 'Gemarkeerd'; $labels['markunflagged'] = 'Niet-gemarkeerd'; $labels['moreactions'] = 'Meer acties...'; +$labels['markallread'] = 'Markeren alles als gelezen'; +$labels['folders-cur'] = 'Alleen geselecteerde map '; +$labels['folders-sub'] = 'Geselecteerde folder en zijn submap'; +$labels['folders-all'] = 'Alle mappen'; $labels['more'] = 'Meer'; $labels['back'] = 'Terug'; $labels['options'] = 'Opties'; @@ -172,6 +176,10 @@ $labels['listcolumns'] = 'Kolommen'; $labels['listsorting'] = 'Sorteer op kolom'; $labels['listorder'] = 'Sorteervolgorde'; $labels['listmode'] = 'Lijstweergave'; +$labels['layout'] = 'Layout'; +$labels['layoutwidescreen'] = 'Breedbeeld'; +$labels['layoutdesktop'] = 'Desktop'; +$labels['layoutlist'] = 'Lijst'; $labels['folderactions'] = 'Mapacties...'; $labels['compact'] = 'Opschonen'; $labels['empty'] = 'Legen'; @@ -229,6 +237,7 @@ $labels['keyid'] = 'Sleutel ID'; $labels['keylength'] = 'Bits'; $labels['keyexpired'] = 'Verlopen'; $labels['keyrevoked'] = 'Ingetrokken'; +$labels['bccinstead'] = 'Bcc gebruiken'; $labels['editidents'] = 'Identiteiten bewerken'; $labels['spellcheck'] = 'Spelling'; $labels['checkspelling'] = 'Controleer spelling'; @@ -315,6 +324,7 @@ $labels['advsearch'] = 'Geavanceerd zoeken'; $labels['advanced'] = 'Geavanceerd'; $labels['other'] = 'Anders'; $labels['printcontact'] = 'Contactpersoon printen'; +$labels['qrcode'] = 'QR code'; $labels['typehome'] = 'Thuis'; $labels['typework'] = 'Werk'; $labels['typeother'] = 'Anders'; diff --git a/program/localization/nl_NL/messages.inc b/program/localization/nl_NL/messages.inc index 5da4d62b2..21957f9b5 100644 --- a/program/localization/nl_NL/messages.inc +++ b/program/localization/nl_NL/messages.inc @@ -92,9 +92,12 @@ $messages['nonamewarning'] = 'Vul een naam in.'; $messages['nopagesizewarning'] = 'Geef een paginagrootte op.'; $messages['nosenderwarning'] = 'Voer een e-mailadres van de afzender in.'; $messages['norecipientwarning'] = 'Geef tenminste één ontvanger op.'; +$messages['disclosedrecipwarning'] = 'Ontvangers zien alle e-mail adressen. Gebruik het Bcc veld om de privacy van anderen te beschermen.'; +$messages['disclosedreciptitle'] = 'Te veel publiek ontvangers'; $messages['nosubjectwarning'] = 'U heeft geen onderwerp ingevoerd. Wilt u nu een onderwerp opgeven?'; +$messages['nosubjecttitle'] = 'Geen onderwerp'; $messages['nobodywarning'] = 'Dit bericht zonder inhoud versturen?'; -$messages['notsentwarning'] = 'Het bericht is niet verstuurd. Wilt u uw bericht weggooien?'; +$messages['notsentwarning'] = 'Het bericht is niet verzonden of opgeslagen. Wilt u wijzigen verwerpen?'; $messages['restoresavedcomposedata'] = 'Eerder opgesteld, maar niet-verzonden bericht gevonden.\n\nOnderwerp: $subject\nOpgeslagen: $date\n\nWilt u dit bericht herstellen?'; $messages['noldapserver'] = 'Selecteer een LDAP-server om te zoeken.'; $messages['nosearchname'] = 'Vul de naam of e-mailadres in van een contactpersoon.'; @@ -117,6 +120,7 @@ $messages['messageopenerror'] = 'Kan het bericht niet van de server laden.'; $messages['filelinkerror'] = 'Bestand toevoegen mislukt.'; $messages['fileuploaderror'] = 'Bestand uploaden mislukt.'; $messages['filesizeerror'] = 'Het bestand overschrijdt de maximale grootte van $size.'; +$messages['filecounterror'] = 'Je kan maximaal $count bestanden uploaden per keer.'; $messages['msgsizeerror'] = 'Bestand toevoegen als bijlage mislukt. Maximale grootte van een bericht ($size) overschreden.'; $messages['copysuccess'] = '$nr contactpersonen succesvol gekopieerd.'; $messages['movesuccess'] = '$nr contactpersonen succesvol verplaatst.'; diff --git a/program/localization/nn_NO/messages.inc b/program/localization/nn_NO/messages.inc index 312bb3236..b94b82c4d 100644 --- a/program/localization/nn_NO/messages.inc +++ b/program/localization/nn_NO/messages.inc @@ -72,7 +72,6 @@ $messages['nopagesizewarning'] = 'Oppgje sidestorleik.'; $messages['norecipientwarning'] = 'Skriv minst ein mottakar.'; $messages['nosubjectwarning'] = 'Emnefeltet er tomt. Vil du skriva eitt emne no?'; $messages['nobodywarning'] = 'Senda meldinga utan tekst?'; -$messages['notsentwarning'] = 'Meldinga er ikkje sendt. Vil du kasta ho?'; $messages['noldapserver'] = 'Vel LDAP-tenar å søkja i.'; $messages['nosearchname'] = 'Skriv kontaktnamn eller epostadresse.'; $messages['notuploadedwarning'] = 'Ikkje alle vedlegga er ferdig opplasta enno. Vent litt til, eller avbryt opplastinga.'; diff --git a/program/localization/pl_PL/messages.inc b/program/localization/pl_PL/messages.inc index 0168f0a9e..0002e4032 100644 --- a/program/localization/pl_PL/messages.inc +++ b/program/localization/pl_PL/messages.inc @@ -97,7 +97,6 @@ $messages['disclosedreciptitle'] = 'Zbyt wielu publicznych odbiorców'; $messages['nosubjectwarning'] = 'Nie podano tematu wiadomości. Czy chcesz go teraz uzupełnić?'; $messages['nosubjecttitle'] = 'Brak tematu'; $messages['nobodywarning'] = 'Ta wiadomość jest pusta, czy mimo to chcesz ją wysłać?'; -$messages['notsentwarning'] = 'Wiadomość nie została wysłana. Czy chcesz usunąć tę wiadomość?'; $messages['restoresavedcomposedata'] = 'Wykryto poprzednio tworzoną ale nie wysłaną wiadomość.\n\nTemat: $subject\nZapisano: $date\n\nCzy przywrócić tą wiadomość?'; $messages['noldapserver'] = 'Wybierz serwer LDAP!'; $messages['nosearchname'] = 'Podaj nazwę kontaktu lub jego adres e-mail.'; diff --git a/program/localization/ps/messages.inc b/program/localization/ps/messages.inc index 029590ba7..c9ca1929f 100644 --- a/program/localization/ps/messages.inc +++ b/program/localization/ps/messages.inc @@ -51,7 +51,6 @@ $messages['nopagesizewarning'] = 'مهرباني‌وکړئ د پاڼې کچه $messages['norecipientwarning'] = 'مهرباني‌وکړئ لږ تر لږه يو ترلاسه کوونکی وليکئ'; $messages['nosubjectwarning'] = 'د مضمون ډګر تش دی يا تاسو غواړئ چې همدا اوس يو له هغو څخه وليکئ'; $messages['nobodywarning'] = 'دا استوزه پرته له متن څخه استوئ؟'; -$messages['notsentwarning'] = 'استوزه نه ده لېږل شوې. غواړئ چې استوزه مو لرې وغورځوئ'; $messages['noldapserver'] = 'مهرباني وکړئ يو ال ډپ سرور د پلټلو لپاره وټاکئ'; $messages['nosearchname'] = 'مهرباني وکړئ د يو اړيکلوري‌نوم يا برېښناليک پته وليکئ'; $messages['searchsuccessful'] = 'استوزي ومونده$'; diff --git a/program/localization/pt_BR/messages.inc b/program/localization/pt_BR/messages.inc index 76910c1c6..7cc97d481 100644 --- a/program/localization/pt_BR/messages.inc +++ b/program/localization/pt_BR/messages.inc @@ -97,7 +97,6 @@ $messages['disclosedreciptitle'] = 'Há muitos destinatários públicos'; $messages['nosubjectwarning'] = 'O campo "Assunto" está vazio. Deseja incluí-lo agora?'; $messages['nosubjecttitle'] = 'Sem assunto'; $messages['nobodywarning'] = 'Enviar a mensagem sem texto?'; -$messages['notsentwarning'] = 'A mensagem não foi enviada. Deseja descartar sua mensagem?'; $messages['restoresavedcomposedata'] = 'Uma mensagem criada anteriormente, mas não enviada, foi localizada.\n\nTítulo: $subject\nSalva em: $date\n\nDeseja restaurar esta mensagem?'; $messages['noldapserver'] = 'Por favor, selecione um servidor LDAP para a pesquisa'; $messages['nosearchname'] = 'Por favor, informe o nome do contato ou seu endereço de e-mail.'; diff --git a/program/localization/pt_PT/messages.inc b/program/localization/pt_PT/messages.inc index 119eee333..2a0d574f8 100644 --- a/program/localization/pt_PT/messages.inc +++ b/program/localization/pt_PT/messages.inc @@ -97,7 +97,7 @@ $messages['disclosedreciptitle'] = 'Demasiados destinatários públicos'; $messages['nosubjectwarning'] = 'O campo "Assunto" não foi preenchido. Deseja incluí-lo agora?'; $messages['nosubjecttitle'] = 'Sem assunto'; $messages['nobodywarning'] = 'Enviar a mensagem sem texto?'; -$messages['notsentwarning'] = 'A mensagem não foi enviada, deseja apagá-la?'; +$messages['notsentwarning'] = 'A mensagem não foi enviada e tem alterações por guardar. Deseja descartar essas alterações?'; $messages['restoresavedcomposedata'] = 'Foi encontrada uma mensagem anteriormente composta mas não enviada.\n\nAssunto: $subject\nGuardada: $date\n\nDeseja restaurar esta mensagem?'; $messages['noldapserver'] = 'Selecione um servidor LDAP para efetuar a pesquisa'; $messages['nosearchname'] = 'Por favor, insira o nome do contacto ou endereço de e-mail'; diff --git a/program/localization/ro_RO/messages.inc b/program/localization/ro_RO/messages.inc index 91dd5ff04..01373bfeb 100644 --- a/program/localization/ro_RO/messages.inc +++ b/program/localization/ro_RO/messages.inc @@ -82,7 +82,6 @@ $messages['nopagesizewarning'] = 'Vă rugăm să introduceţi mărimea paginii'; $messages['norecipientwarning'] = 'Vă rugăm să introduceţi cel puţin un destinatar'; $messages['nosubjectwarning'] = 'Mesajul nu are subiect. Vreţi să introduceţi unul acum?'; $messages['nobodywarning'] = 'Trimiteţi acest mesaj fără text?'; -$messages['notsentwarning'] = 'Mesajul nu a fost trimis. Vreţi să renunţaţi la el?'; $messages['restoresavedcomposedata'] = 'Un mesaj compus anterior a fost găsit.\n\nSubiect:$subject\nSalvat: $date\n\nDoriţi restaurarea acestuia ?'; $messages['noldapserver'] = 'Vă rugăm să alegeţi un server ldap pentru căutare'; $messages['nosearchname'] = 'Vă rugăm să introduceţi un nume de contact sau adresă de e-mail'; diff --git a/program/localization/ru_RU/labels.inc b/program/localization/ru_RU/labels.inc index 6148dce6f..3770243e9 100644 --- a/program/localization/ru_RU/labels.inc +++ b/program/localization/ru_RU/labels.inc @@ -324,6 +324,7 @@ $labels['advsearch'] = 'Расширенный поиск'; $labels['advanced'] = 'Дополнительно'; $labels['other'] = 'Другое'; $labels['printcontact'] = 'Печатать контакт'; +$labels['qrcode'] = 'QR код'; $labels['typehome'] = 'Дом'; $labels['typework'] = 'Работа'; $labels['typeother'] = 'Другое'; diff --git a/program/localization/ru_RU/messages.inc b/program/localization/ru_RU/messages.inc index 372ed304d..d3ae2fafe 100644 --- a/program/localization/ru_RU/messages.inc +++ b/program/localization/ru_RU/messages.inc @@ -97,7 +97,7 @@ $messages['disclosedreciptitle'] = 'Слишком много внешних п $messages['nosubjectwarning'] = 'Поле Тема не заполнено. Хотите заполнить его сейчас?'; $messages['nosubjecttitle'] = 'Без темы'; $messages['nobodywarning'] = 'Отправить сообщение без текста?'; -$messages['notsentwarning'] = 'Сообщение не было отправлено. Вы хотите отказаться от отправки?'; +$messages['notsentwarning'] = 'Сообщение не отправлено и имеет несохранённые изменения. Вы хотите отменить ваши изменения?'; $messages['restoresavedcomposedata'] = 'Найдено ранее составленное, но неотправленное сообщение.\n\nТема: $subject\nСохранено: $date\n\nХотите восстановить это сообщение?'; $messages['noldapserver'] = 'Пожалуйста, выберите LDAP сервер для поиска.'; $messages['nosearchname'] = 'Пожалуйста, введите имя или адрес E-Mail'; diff --git a/program/localization/si_LK/messages.inc b/program/localization/si_LK/messages.inc index 916c7a51a..56f554c1b 100644 --- a/program/localization/si_LK/messages.inc +++ b/program/localization/si_LK/messages.inc @@ -53,7 +53,6 @@ $messages['nopagesizewarning'] = 'කරුණාකර පිටුවේ ප $messages['norecipientwarning'] = 'කරුණාකර යටත් පිරිසෙයින් එක් ලබන්නෙකු හෝ ඇතුලත් කරන්න'; $messages['nosubjectwarning'] = '"මාතෘකාව" හිස්. මාතෘකාවක් ඇතුලත් කිරීමට ඔබ කැමතිද?'; $messages['nobodywarning'] = 'මෙම හිස් පනිවුඩය යවන්නද?'; -$messages['notsentwarning'] = 'පණිවිඩය යැවීමට නොහැකි විය. ඔබට එය බැහැර කිරීමට වුවමනාද?'; $messages['noldapserver'] = 'සෙවුම සඳහා කරුණාකර ldap සම්බන්ධතාවයක් තෝරා ගන්න'; $messages['nosearchname'] = 'කරුණාකර ලිපිනයෙහි නම හෝ විද්යුත් තැපැල් ලිපිනය ඇතුලත් කරන්න'; $messages['searchsuccessful'] = '$nr පනිවුඩය හමු විය'; diff --git a/program/localization/sk_SK/labels.inc b/program/localization/sk_SK/labels.inc index 0b5524620..ec91e818f 100644 --- a/program/localization/sk_SK/labels.inc +++ b/program/localization/sk_SK/labels.inc @@ -324,6 +324,7 @@ $labels['advsearch'] = 'Rozšírené vyhľadávanie'; $labels['advanced'] = 'Rozšírené'; $labels['other'] = 'Ostatné'; $labels['printcontact'] = 'Vytlačiť kontakt'; +$labels['qrcode'] = 'QR kód'; $labels['typehome'] = 'Domov'; $labels['typework'] = 'Práca'; $labels['typeother'] = 'Iné'; diff --git a/program/localization/sk_SK/messages.inc b/program/localization/sk_SK/messages.inc index 210d7f643..78a5d3ecb 100644 --- a/program/localization/sk_SK/messages.inc +++ b/program/localization/sk_SK/messages.inc @@ -97,7 +97,7 @@ $messages['disclosedreciptitle'] = 'Priveľa verejných príjemcov'; $messages['nosubjectwarning'] = '"Predmet" správy je prázdny. Chcete ho teraz zadať?'; $messages['nosubjecttitle'] = 'Bez predmetu'; $messages['nobodywarning'] = 'Chcete odoslať správu bez textu?'; -$messages['notsentwarning'] = 'Správa nebola odoslaná, chcete ju zrušiť?'; +$messages['notsentwarning'] = 'Správa nebola odoslaná a obsahuje neuložené zmeny. Chcete vykonané zmeny zrušiť?'; $messages['restoresavedcomposedata'] = 'Našla sa staršia správa, ktorú ste napísali ale neodoslali.\n\nPredmet: $subject\nUložené: $date\n\nChcete túto správu obnoviť?'; $messages['noldapserver'] = 'Prosím vyberte server LDAP pre vyhľadávanie.'; $messages['nosearchname'] = 'Prosím zadajte meno alebo e-mailovú adresu kontaktu.'; diff --git a/program/localization/sl_SI/messages.inc b/program/localization/sl_SI/messages.inc index aa643cd79..996bbf60c 100644 --- a/program/localization/sl_SI/messages.inc +++ b/program/localization/sl_SI/messages.inc @@ -95,7 +95,6 @@ $messages['disclosedreciptitle'] = 'Preveliko število javnih naslovov prejemnik $messages['nosubjectwarning'] = 'Polje "Zadeva" je prazno. Želite dodati besedilo v to polje?'; $messages['nosubjecttitle'] = 'Brez naslova'; $messages['nobodywarning'] = 'Želite poslati sporočilo brez besedila?'; -$messages['notsentwarning'] = 'Sporočilo ni bilo poslano. Želite zavreči to sporočilo?'; $messages['restoresavedcomposedata'] = 'Ali želite nadaljevati z urejanjem še neodposlanega osnutka:\n\nZadeva: $subject\nShranjeno dne: $date\n\n '; $messages['noldapserver'] = 'Izberite LDAP strežnik, v katerem želite iskati?'; $messages['nosearchname'] = 'Vnesite ime ali elektronski naslov stika'; diff --git a/program/localization/sq_AL/labels.inc b/program/localization/sq_AL/labels.inc index 8699eaf59..52a394f5b 100644 --- a/program/localization/sq_AL/labels.inc +++ b/program/localization/sq_AL/labels.inc @@ -28,7 +28,7 @@ $labels['inbox'] = 'Të marrë'; $labels['drafts'] = 'Skica'; $labels['sent'] = 'Të dërguar'; $labels['trash'] = 'Hedhurina'; -$labels['junk'] = 'Të padëshiruar'; +$labels['junk'] = 'Të pavlerë'; $labels['show_real_foldernames'] = 'Shfaqi emrat realë për dosjet speciale'; $labels['subject'] = 'Subjekt'; $labels['from'] = 'Nga'; @@ -41,7 +41,7 @@ $labels['followupto'] = 'Ndiqeni-Te'; $labels['date'] = 'Datë'; $labels['size'] = 'Madhësi'; $labels['priority'] = 'Përparësi'; -$labels['organization'] = 'Organizëm'; +$labels['organization'] = 'Ent'; $labels['readstatus'] = 'Gjendje leximi'; $labels['listoptions'] = 'Mundësi liste…'; $labels['mailboxlist'] = 'Dosje'; @@ -190,7 +190,7 @@ $labels['quotaused'] = 'E përdorur'; $labels['quotastorage'] = 'Hapësirë disku'; $labels['quotamessage'] = 'Numër mesazhesh'; $labels['quicksearch'] = 'Kërkim i shpejtë'; -$labels['resetsearch'] = 'Pastro kërkimin'; +$labels['resetsearch'] = 'Kërkim nga e para'; $labels['searchmod'] = 'Modifikues kërkimi'; $labels['msgtext'] = 'Krejt mesazhin'; $labels['body'] = 'Lëndë'; @@ -232,7 +232,7 @@ $labels['encryptedsendialog'] = 'Po dërgohet mesazh i fshehtëzuar'; $labels['keyid'] = 'ID Kyçi'; $labels['keylength'] = 'Bite'; $labels['keyexpired'] = 'I skaduar'; -$labels['keyrevoked'] = 'I shfuzizuar'; +$labels['keyrevoked'] = 'I shfuqizuar'; $labels['bccinstead'] = 'Përdor Bcc'; $labels['editidents'] = 'Përpunoni identitete'; $labels['spellcheck'] = 'Drejtshkrim'; @@ -278,7 +278,7 @@ $labels['dontsave'] = 'mos e ruaj'; $labels['maxuploadsize'] = 'Maksimumi i lejuar për madhësi skedarësh është $size'; $labels['addcc'] = 'Shto Cc'; $labels['addbcc'] = 'Shto Bcc'; -$labels['addreplyto'] = 'Shto Reply-To'; +$labels['addreplyto'] = 'Shtoni Përgjigjuni-Te'; $labels['addfollowupto'] = 'Shto Followup-To'; $labels['mdnrequest'] = 'Dërguesi i këtij mesazhi ka kërkuar që të njoftohet kur ju të lexoni këtë mesazh. Dëshironi të njoftohet dërguesi?'; $labels['receiptread'] = 'Dëftesë Kthimi (u lexua)'; @@ -320,6 +320,7 @@ $labels['advsearch'] = 'Kërkim i Thelluar'; $labels['advanced'] = 'I thelluar'; $labels['other'] = 'Tjetër'; $labels['printcontact'] = 'Shtype kontaktin'; +$labels['qrcode'] = 'Kod QR'; $labels['typehome'] = 'E shtëpisë'; $labels['typework'] = 'E punës'; $labels['typeother'] = 'Tjetër'; @@ -339,7 +340,7 @@ $labels['addcontact'] = 'Shtoni kontakt'; $labels['editcontact'] = 'Përpunoni kontakt'; $labels['contacts'] = 'Kontakte'; $labels['contactproperties'] = 'Veti kontaktesh'; -$labels['contactnameandorg'] = 'Emër dhe Organizëm'; +$labels['contactnameandorg'] = 'Emër dhe Ent'; $labels['personalinfo'] = 'Të dhëna personale'; $labels['contactphoto'] = 'Foto kontakti'; $labels['edit'] = 'Përpunoni'; @@ -419,7 +420,7 @@ $labels['showemail'] = 'Adresën email shfaqe me emrin për në ekran'; $labels['previewpane'] = 'Shfaq panel paraparjeje'; $labels['skin'] = 'Temë grafike për ndërfaqen'; $labels['logoutclear'] = 'Gjatë daljes pastroji Hedhurinat'; -$labels['logoutcompact'] = 'Gjatë daljes ngjeshe kutinë e mesazheve të marrë'; +$labels['logoutcompact'] = 'Ngjeshi të marrët në dalje e sipër'; $labels['uisettings'] = 'Ndërfaqe përdoruesi'; $labels['serversettings'] = 'Rregullime Shërbyesi'; $labels['mailboxview'] = 'Me Të marrët të Shfaqur'; @@ -433,7 +434,7 @@ $labels['readwhendeleted'] = 'Gjatë fshirjes shënoje mesazhin si të lexuar'; $labels['flagfordeletion'] = 'Vëri shenjë mesazhit për fshirje, në vend se ta fshish'; $labels['skipdeleted'] = 'Mos shfaq mesazhe të fshirë'; $labels['deletealways'] = 'Nëse shpënia te Hedhurinat dështon, fshiji'; -$labels['deletejunk'] = 'Mesazhet te Të padëshiruarat fshiji direkt'; +$labels['deletejunk'] = 'Mesazhet te Të pavlerat fshiji drejtpërsëdrejti'; $labels['showremoteimages'] = 'Shfaqi figurat e largëta të trupëzuara në mesazh'; $labels['fromknownsenders'] = 'prej dërguesish të njohur'; $labels['always'] = 'përherë'; @@ -578,7 +579,7 @@ $labels['arialabelreplyalloptions'] = 'Mundësi për Përgjigju-krejt'; $labels['arialabelmoremessageactions'] = 'Më tepër veprime mbi mesazhe'; $labels['arialabelmarkmessagesas'] = 'Mesazheve të përzgjedhur vëru shenjë si…'; $labels['arialabelcomposeoptions'] = 'Mundësi hartimi'; -$labels['arialabelresponsesmenu'] = 'Menu përgjigjesh të parapëgatitura'; +$labels['arialabelresponsesmenu'] = 'Menu përgjigjesh të parapërgatitura'; $labels['arialabelattachmentuploadform'] = 'Formular ngarkimi bashkëngjitjesh'; $labels['arialabelattachmentpreview'] = 'Paraparje bashkëngjitjes'; $labels['ariasummarycomposecontacts'] = 'Listë kontaktesh dhe grupesh për t’u përzgjedhur si marrës'; @@ -586,7 +587,7 @@ $labels['arialabelcontactexportoptions'] = 'Mundësi eksportimi kontaktesh'; $labels['arialabelabookgroupoptions'] = 'Mundësi libri adresash/grupi'; $labels['arialabelpreferencesform'] = 'Formular parapëlqimesh'; $labels['arialabelidentityeditfrom'] = 'Formular përpunimi identitetesh'; -$labels['arialabelresonseeditfrom'] = 'Formular përpunimi përgigjesh'; +$labels['arialabelresonseeditfrom'] = 'Formular përpunimi përgjigjesh'; $labels['arialabelsearchterms'] = 'Terma kërkimi'; $labels['helplistnavigation'] = 'Lëvizje me tastierë në lista'; $labels['helplistkeyboardnavigation'] = "Shigjeta sipër/poshtë: Zhvendosni fokusin/përzgjedhje në rreshta. diff --git a/program/localization/sq_AL/messages.inc b/program/localization/sq_AL/messages.inc index 574978c10..8636c3dbd 100644 --- a/program/localization/sq_AL/messages.inc +++ b/program/localization/sq_AL/messages.inc @@ -15,9 +15,9 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/ */ -$messages['errortitle'] = 'Ndodhi një problem!'; +$messages['errortitle'] = 'Ndodhi një gabim!'; $messages['loginfailed'] = 'Hyrja dështoi.'; -$messages['cookiesdisabled'] = 'Shfletuesi juaj nuk i pranon cookie-t.'; +$messages['cookiesdisabled'] = 'Shfletuesi juaj s’i pranon cookie-t.'; $messages['sessionerror'] = 'Sesioni juaj është i pavlefshëm ose ka skaduar.'; $messages['storageerror'] = 'Lidhja me shërbyesin e depozitimit dështoi.'; $messages['servererror'] = 'Gabim Shërbyesi!'; @@ -27,11 +27,11 @@ $messages['connerror'] = 'Gabim Lidhjeje (Dështoi kapja e shërbyesit)!'; $messages['dberror'] = 'Gabim Baze të Dhënash!'; $messages['windowopenerror'] = 'Dritarja flluskë u bllokua!'; $messages['requesttimedout'] = 'Kërkesës i mbaroi koha'; -$messages['errorreadonly'] = 'I pazoti të kryejë operacionin. Dosja është vetëm për lexim.'; -$messages['errornoperm'] = 'I pazoti të kryejë operacionin. Leje të mohuara.'; -$messages['erroroverquota'] = 'I pazoti të kryejë operacionin. S’ka hapësirë të lirë në disk.'; -$messages['erroroverquotadelete'] = 'Nuk ka hapësirë të lirë në disk. Përdorni SHIFT+DEL që të fshini një mesazh.'; -$messages['invalidrequest'] = 'Kërkesë e pavlefshme! Nuk u ruajt ndonjë e dhënë.'; +$messages['errorreadonly'] = 'S’arrihet të kryhet veprimi. Dosja është vetëm për lexim.'; +$messages['errornoperm'] = 'S’arrihet të kryhet veprimi. Leje të mohuara.'; +$messages['erroroverquota'] = 'S’arrihet të kryhet veprimi. S’ka hapësirë të lirë në disk.'; +$messages['erroroverquotadelete'] = 'S’ka hapësirë të lirë në disk. Përdorni SHIFT+DEL që të fshini një mesazh.'; +$messages['invalidrequest'] = 'Kërkesë e pavlefshme! S’u ruajt ndonjë e dhënë.'; $messages['invalidhost'] = 'Emër i pavlefshëm shërbyesi.'; $messages['nomessagesfound'] = 'S’u gjetën mesazhe në këtë kuti postare.'; $messages['loggedout'] = 'Sesionin e mbyllët me sukses. Mirupafshim!'; @@ -47,7 +47,7 @@ $messages['checkingmail'] = 'Po kontrollohet për mesazhe të rinj...'; $messages['sendingmessage'] = 'Po dërgohet mesazhi...'; $messages['messagesent'] = 'Mesazhi u dërgua me sukses.'; $messages['savingmessage'] = 'Po ruhet mesazhi...'; -$messages['messagesaved'] = 'Mesazhi u ruajt te Skicat'; +$messages['messagesaved'] = 'Mesazhi u ruajt te Skicat.'; $messages['successfullysaved'] = 'U ruajt me sukses.'; $messages['savingresponse'] = 'Po ruhet tekst përgjigjeje…'; $messages['deleteresponseconfirm'] = 'Doni vërtet të fshihet ky tekst përgjigjeje?'; @@ -55,20 +55,20 @@ $messages['addedsuccessfully'] = 'Kontakti u shtua me sukses në librin e adresa $messages['contactexists'] = 'Ka tashmë një kontakt me të njëjtën adresë email.'; $messages['contactnameexists'] = 'Ka tashmë një kontakt me të njëjtin emër.'; $messages['blockedimages'] = 'Që të mbrohet privatësia juaj, figurat e largëta të këtij mesazhi janë bllokuar.'; -$messages['encryptedmessage'] = 'Ky është një mesazh i fshehtëzuar dhe nuk mund të shfaqet. Na ndjeni!'; -$messages['externalmessagedecryption'] = 'Ky është një mesazh i fshehtëzuar dhe mund të çfshehtëzohet me zgjerimin e shfletuesit tuaj.'; +$messages['encryptedmessage'] = 'Ky është një mesazh i fshehtëzuar dhe s’mund të shfaqet. Na ndjeni!'; +$messages['externalmessagedecryption'] = 'Ky është një mesazh i fshehtëzuar dhe mund të shfshehtëzohet me zgjerimin e shfletuesit tuaj.'; $messages['nopubkeyfor'] = 'S’u gjet kyç i vlefshëm publik për $email'; $messages['nopubkeyforsender'] = 'S’u gjet kyç i vlefshëm publik për identitetin e dërguesit tuaj. Doni të fshehtëzohet mesazhi vetëm për marrësit?'; $messages['encryptnoattachments'] = 'Bashkëngjitjet tashmë të ngarkuara s’mund të fshehtëzohen. Ju lutemi, rishtojini te përpunuesi i fshehtëzimeve.'; $messages['searchpubkeyservers'] = 'Doni të kërkohet në shërbyes publikë kyçesh për kyçin që mungon?'; $messages['encryptpubkeysfound'] = 'U gjetën kyçet publikë vijues:'; $messages['keyservererror'] = 'Dështoi marrja e kyçit nga shërbyesi i kyçeve.'; -$messages['keyimportsuccess'] = 'Kyçi publik $key u importua me sukses te vargu juaj i lyçeve'; +$messages['keyimportsuccess'] = 'Kyçi publik $key u importua me sukses te vargu juaj i kyçeve'; $messages['nocontactsfound'] = 'S’u gjetën kontakte.'; $messages['contactnotfound'] = 'S’u gjet kontakti i kërkuar.'; $messages['contactsearchonly'] = 'Jepni ndonjë term kërkimi që të gjeni kontakte'; $messages['sendingfailed'] = 'Dërgimi i mesazhit dështoi.'; -$messages['senttooquickly'] = 'Ju lutemi, prisni $sec sekondë(a) përpara se të dërgohet ky mesazh.'; +$messages['senttooquickly'] = 'Ju lutemi, pritni $sec sekondë(a) përpara se të dërgohet ky mesazh.'; $messages['errorsavingsent'] = 'Ndodhi një gabim teksa ruhej mesazhi i dërguar.'; $messages['errorsaving'] = 'Ndodhi një gabim gjatë ruajtjes.'; $messages['errormoving'] = 'S’u lëviz dot mesazhi(et).'; @@ -84,7 +84,7 @@ $messages['contactdeleting'] = 'Po fshihet kontakti(et)…'; $messages['groupdeleting'] = 'Po fshihet grupi…'; $messages['folderdeleting'] = 'Po fshihet dosja…'; $messages['foldermoving'] = 'Po lëvizet dosja…'; -$messages['foldersubscribing'] = 'Po pajtohet te dosja…'; +$messages['foldersubscribing'] = 'Po bëhet pajtimi te dosja…'; $messages['folderunsubscribing'] = 'Po hiqet pajtimi te dosja…'; $messages['formincomplete'] = 'Formulari s’u plotësua i tëri.'; $messages['noemailwarning'] = 'Ju lutemi, jepni një adresë email të vlefshme.'; @@ -97,14 +97,14 @@ $messages['disclosedreciptitle'] = 'Shumë pjesëmarrës publikë'; $messages['nosubjectwarning'] = 'Fusha "Subjekt" është e zbrazët. Do të donit të jepnit një tani?'; $messages['nosubjecttitle'] = 'S’ka subjekt'; $messages['nobodywarning'] = 'Të dërgohet mesazhi pa tekst?'; -$messages['notsentwarning'] = 'Mesazhi s’u dërgua. Doni ta hidhni tej mesazhin tuaj?'; +$messages['notsentwarning'] = 'Mesazhi s’është dërguar dhe ka ndryshime të paruajtura. Doni të hidhen tej ndryshimet tuaja?'; $messages['restoresavedcomposedata'] = 'U gjet një mesazh i hartuar më parë, por i padërguar.\n\nSubjekt: $subject\nRuajtur më: $date\n\nDoni të rimerret ky mesazh?'; $messages['noldapserver'] = 'Ju lutemi, jepni një shërbyes ldap ku të kërkohet.'; $messages['nosearchname'] = 'Ju lutemi, jepni emër kontakti ose adresë email.'; $messages['notuploadedwarning'] = 'S’janë ngarkuar ende krejt bashkëngjitjet. Ju lutemi, prisni ose anulojeni ngarkimin.'; $messages['searchsuccessful'] = 'U gjetën $nr mesazhe.'; $messages['contactsearchsuccessful'] = 'U gjetën $nr kontakte.'; -$messages['searchnomatch'] = 'Kërkimi nuk gjeti gjë.'; +$messages['searchnomatch'] = 'Kërkimi s’ktheu përputhje.'; $messages['searching'] = 'Po kërkohet…'; $messages['checking'] = 'Po kontrollohet…'; $messages['stillsearching'] = 'Ende në kërkim…'; @@ -120,7 +120,7 @@ $messages['messageopenerror'] = 'S’u ngarkuan dot mesazhe që nga shërbyesi.' $messages['filelinkerror'] = 'Dështoi bashkëngjitja e skedarit.'; $messages['fileuploaderror'] = 'Dështoi ngarkimi i skedarit.'; $messages['filesizeerror'] = 'Skedari i ngarkuar e tejkalon madhësinë maksimum prej $size.'; -$messages['filecounterror'] = 'Mund të ngarkoni maksimumi $count kartela njëherësh.'; +$messages['filecounterror'] = 'Mund të ngarkoni e shumta $count kartela njëherësh.'; $messages['msgsizeerror'] = 'Dështoi bashkëngjitja e një kartele. Tejkalohej madhësi maksimum e një mesazhi ($size).'; $messages['copysuccess'] = 'U kopjuan me sukses $nr kontakte.'; $messages['movesuccess'] = 'U lëvizën me sukses $nr kontakte.'; @@ -191,18 +191,18 @@ $messages['folderupdated'] = 'Dosja u përditësua me sukses.'; $messages['foldercreated'] = 'Dosja u krijua me sukses.'; $messages['invalidimageformat'] = 'Format i pavlefshëm figure.'; $messages['mispellingsfound'] = 'U pikasën gabime drejtshkrimi te mesazhi.'; -$messages['parentnotwritable'] = 'I pazoti të krijojë/lëvizë dosje te dosja mëmë e përzgjedhur. Pa të drejta hyrjeje.'; +$messages['parentnotwritable'] = 'S’arrihet të krijohet/lëvizet dosje te dosja mëmë e përzgjedhur. Pa të drejta hyrjeje.'; $messages['messagetoobig'] = 'Pjesa e mesazhit është shumë e madhe për ta përpunuar.'; -$messages['attachmentvalidationerror'] = 'KUJDES! Kjo bashkëngjitje është e dyshimtë, ngaqë lloji i saj nuk përputhet me llojin e deklaruar në mesazh. Nëse nuk i zini besë dërguesit, nuk do të duhej ta hapnit atë që nga shfletuesi, meqë mund të përmbajë lëndë dashakeqe.

Pritej: $expected; u gjet: $detected'; +$messages['attachmentvalidationerror'] = 'KUJDES! Kjo bashkëngjitje është e dyshimtë, ngaqë lloji i saj s’përputhet me llojin e deklaruar në mesazh. Nëse s’i zini besë dërguesit, nuk do të duhej ta hapnit atë që nga shfletuesi, meqë mund të përmbajë lëndë dashakeqe.

Pritej: $expected; u gjet: $detected'; $messages['noscriptwarning'] = 'Kujdes: Ky shërbyes webmail lyp Javascript! Që të mund ta përdorni, ju lutemi, aktivizoni Javascript-in te rregullimet e shfletuesit tuaj.'; -$messages['messageissent'] = 'Mesazhi qe dërguar tashmë, por nuk qe ruajtur ende. Doni ta ruani tani?'; +$messages['messageissent'] = 'Mesazhi qe dërguar tashmë, por s’qe ruajtur ende. Doni ta ruani tani?'; $messages['errnotfound'] = 'Skedar Që S’gjendet'; $messages['errnotfoundexplain'] = 'Burimi i kërkuar nuk u gjet!'; $messages['errfailedrequest'] = 'Kërkesë e dështuar'; $messages['errauthorizationfailed'] = 'Mirëfilltësimi Dështoi'; $messages['errunauthorizedexplain'] = 'S’u verifikua dot se jeni i autorizuar të hyni në këtë shërbim!'; $messages['errrequestcheckfailed'] = 'Dështoi Kontrolli i Kërkesës'; -$messages['errcsrfprotectionexplain'] = "Për hir të mbrojtjes tuaj, hyrja në këtë burim është e siguruar kundrejt CSRF-së.\nNëse e shihni këtë sinjalizim, ka gjasa që nuk bëtë daljen para se të dilnit nga aplikacioni web.\n\nQë të vazhdohet, tani lypset ndërveprim nga qenie njerëzore."; +$messages['errcsrfprotectionexplain'] = "Për hir të mbrojtjes tuaj, hyrja në këtë burim është e siguruar kundrejt CSRF-së.\nNëse e shihni këtë sinjalizim, ka gjasa që s’bëtë daljen para se të dilnit nga aplikacioni web.\n\nQë të vazhdohet, tani lypset ndërveprim nga qenie njerëzore."; $messages['errcontactserveradmin'] = 'Ju lutemi, lidhuni me përgjegjësin e shërbyesit tuaj.'; $messages['clicktoresumesession'] = 'Klikoni këtu që të të rimerret sesioni juaj i mëparshëm'; $messages['errcomposesession'] = 'Gabim sesioni hartimi'; diff --git a/program/localization/sr_CS/labels.inc b/program/localization/sr_CS/labels.inc index afd16d5fe..291c2794d 100644 --- a/program/localization/sr_CS/labels.inc +++ b/program/localization/sr_CS/labels.inc @@ -127,6 +127,10 @@ $labels['markunread'] = 'као непрочитано'; $labels['markflagged'] = 'као обележено'; $labels['markunflagged'] = 'као необележено'; $labels['moreactions'] = 'Остале радње...'; +$labels['markallread'] = 'Означи све као прочитано'; +$labels['folders-cur'] = 'Само изабрана фасцикла'; +$labels['folders-sub'] = 'Изабрана фасцикла и потфасцикле'; +$labels['folders-all'] = 'Све фасцикле'; $labels['more'] = 'Још'; $labels['back'] = 'Назад'; $labels['options'] = 'Опције'; @@ -155,6 +159,9 @@ $labels['threads'] = 'Нити'; $labels['expand-all'] = 'Рашири све'; $labels['expand-unread'] = 'Рашири непрочитане'; $labels['collapse-all'] = 'Сажми све'; +$labels['threaded'] = 'Разгранато'; +$labels['autoexpand_threads'] = 'Рашири гране порука'; +$labels['do_expand'] = 'све гране'; $labels['expand_only_unread'] = 'само са непрочитаним порукама'; $labels['fromto'] = 'од/за'; $labels['flag'] = 'Обележено'; @@ -168,6 +175,10 @@ $labels['listcolumns'] = 'Колоне листе'; $labels['listsorting'] = 'Колона сортирања'; $labels['listorder'] = 'Ређање'; $labels['listmode'] = 'Режим приказа листе'; +$labels['layout'] = 'Распоред'; +$labels['layoutwidescreen'] = 'Широк екран'; +$labels['layoutdesktop'] = 'Радна површ'; +$labels['layoutlist'] = 'Листа'; $labels['folderactions'] = 'Радње фасцикле...'; $labels['compact'] = 'Сажми'; $labels['empty'] = 'Испразни'; @@ -175,19 +186,28 @@ $labels['importmessages'] = 'Увези поруке'; $labels['quota'] = 'Заузеће'; $labels['unknown'] = 'непознато'; $labels['unlimited'] = 'неограничено'; +$labels['quotatype'] = 'Врста квоте'; $labels['quotatotal'] = 'Ограничење'; $labels['quotaused'] = 'Коришћено'; $labels['quotastorage'] = 'Заузеће диска'; $labels['quotamessage'] = 'Број порука'; $labels['quicksearch'] = 'Брза претрага'; $labels['resetsearch'] = 'Ресетуј претрагу'; +$labels['searchmod'] = 'Модификатори претраге'; $labels['msgtext'] = 'Цела порука'; $labels['body'] = 'Тело'; $labels['type'] = 'Тип'; $labels['namex'] = 'Име'; +$labels['searchscope'] = 'Распон'; $labels['currentfolder'] = 'Текућа фасцикла'; $labels['subfolders'] = 'Ова и потфасцикле'; $labels['allfolders'] = 'Све фасцикле'; +$labels['searchinterval-1W'] = 'старије од седмице'; +$labels['searchinterval-1M'] = 'старије од месеца'; +$labels['searchinterval-1Y'] = 'старије од године'; +$labels['searchinterval1W'] = 'млађе од седмице'; +$labels['searchinterval1M'] = 'млађе од месеца'; +$labels['searchinterval1Y'] = 'млађе од године'; $labels['openinextwin'] = 'Отвори у новом прозору'; $labels['emlsave'] = 'Преузимање (.eml)'; $labels['changeformattext'] = 'Прикажи у обичном текстуалном формату'; @@ -230,12 +250,14 @@ $labels['addresponse'] = 'Додај одговор'; $labels['editresponse'] = 'Уреди одговор'; $labels['editresponses'] = 'Уреди одговоре'; $labels['responsename'] = 'Назив'; +$labels['responsetext'] = 'Текст одговора'; $labels['attach'] = 'Приложи'; $labels['attachments'] = 'Прилози'; $labels['upload'] = 'Отпреми'; $labels['uploadprogress'] = '$percent ($current од $total)'; $labels['close'] = 'Затвори'; $labels['messageoptions'] = 'Опције поруке...'; +$labels['attachmentrename'] = 'Преименуј прилог'; $labels['low'] = 'низак'; $labels['lowest'] = 'најнижи'; $labels['normal'] = 'средњи'; @@ -246,6 +268,7 @@ $labels['showimages'] = 'Прикажи слике'; $labels['alwaysshow'] = 'Увек прикажи слике од $sender'; $labels['isdraft'] = 'Ово је нацрт поруке.'; $labels['andnmore'] = 'још $nr...'; +$labels['togglemoreheaders'] = 'Прикажи још заглавља поруке'; $labels['htmltoggle'] = 'ХТМЛ'; $labels['plaintoggle'] = 'Обичан текст'; $labels['savesentmessagein'] = 'Послате поруке сачувај у'; @@ -354,6 +377,7 @@ $labels['importcontacts'] = 'Увези контакте'; $labels['importfromfile'] = 'Увези из фајла:'; $labels['importtarget'] = 'Додај контакте у'; $labels['importreplace'] = 'Замени цео адресар'; +$labels['importgroupsexisting'] = 'Само за постојеће групе'; $labels['done'] = 'Готово'; $labels['settingsfor'] = 'Поставке за'; $labels['about'] = 'О програму'; @@ -366,6 +390,7 @@ $labels['newidentity'] = 'Направи нови идентитет'; $labels['addidentity'] = 'Додај идентитет'; $labels['editidentity'] = 'Уреди идентитет'; $labels['preferhtml'] = 'Прикажи ХТМЛ'; +$labels['defaultcharset'] = 'Подразумевани сет знакова'; $labels['htmlmessage'] = 'ХТМЛ порука'; $labels['messagepart'] = 'Део'; $labels['digitalsig'] = 'Дигитални потпис'; @@ -392,6 +417,11 @@ $labels['uisettings'] = 'Сучеље'; $labels['serversettings'] = 'Поставке сервера'; $labels['mailboxview'] = 'Приказ сандучета'; $labels['askuser'] = 'питај ме'; +$labels['autosend'] = 'шаљи потврду'; +$labels['autosendknown'] = 'шаљи потврду мојим контактима, иначе питај'; +$labels['autosendknownignore'] = 'шаљи потврду мојим контактима, иначе игнориши'; +$labels['ignorerequest'] = 'игнориши захтев'; +$labels['readwhendeleted'] = 'Означи као прочитано при брисању'; $labels['skipdeleted'] = 'Не приказуј избрисане поруке'; $labels['deletealways'] = 'Ако премештање порука у смеће не успе, обриши их'; $labels['deletejunk'] = 'Директно брисање порука у отпаду'; diff --git a/program/localization/sr_CS/messages.inc b/program/localization/sr_CS/messages.inc index d008d9e37..bf90c8b3d 100644 --- a/program/localization/sr_CS/messages.inc +++ b/program/localization/sr_CS/messages.inc @@ -22,6 +22,7 @@ $messages['sessionerror'] = 'Сесија није важећа или је ис $messages['storageerror'] = 'Неуспешно повезивање на складишни сервер.'; $messages['servererror'] = 'Грешка на серверу!'; $messages['servererrormsg'] = 'Грешка на серверу: $msg'; +$messages['accountlocked'] = 'Превише погрешних покушаја. Покушајте касније.'; $messages['connerror'] = 'Грешка везе (нисам приступио серверу)'; $messages['dberror'] = 'Грешка базе података!'; $messages['windowopenerror'] = 'Искачући прозор је блокиран!'; @@ -51,9 +52,18 @@ $messages['successfullysaved'] = 'Успешно сачувано.'; $messages['savingresponse'] = 'Снимам текст одговора...'; $messages['deleteresponseconfirm'] = 'Заиста желите да обришете овај текст одговора?'; $messages['addedsuccessfully'] = 'Контакт успешно додат у адресар.'; +$messages['contactexists'] = 'Контакт са истом адресом већ постоји.'; $messages['contactnameexists'] = 'Контакт са истим именом већ постоји.'; $messages['blockedimages'] = 'Због заштите приватности, слике са удаљених сервера су блокиране у овој поруци.'; $messages['encryptedmessage'] = 'Ова порука је шифрована и не може се приказати. Жао нам је!'; +$messages['externalmessagedecryption'] = 'Ово је шифрована порука и може се дешифровати са проширењем вашег прегледача.'; +$messages['nopubkeyfor'] = 'Нема исправног јавног кључа за $email'; +$messages['nopubkeyforsender'] = 'Нема исправног јавног кључа за ваш идентитет пошиљаоца. Желите ли да поруку шифрујете само за примаоце?'; +$messages['encryptnoattachments'] = 'Већ одаслат прилог не може се шифровати. Додајте га поново у уређивач шифровања.'; +$messages['searchpubkeyservers'] = 'Желите ли да недостајуће кључеве потражите на серверима јавних кључева?'; +$messages['encryptpubkeysfound'] = 'Нађени су следећи јавни кључеви:'; +$messages['keyservererror'] = 'Неуспело добављање кључева са сервера'; +$messages['keyimportsuccess'] = 'Јавни кључ $key успешно је додат међу ваше кључеве'; $messages['nocontactsfound'] = 'Нема контаката.'; $messages['contactnotfound'] = 'Тражени контакт није нађен.'; $messages['contactsearchonly'] = 'Унесите термин за претрагу контаката'; @@ -80,10 +90,13 @@ $messages['formincomplete'] = 'Образац није у целости поп $messages['noemailwarning'] = 'Унесите исправну адресу е-поште.'; $messages['nonamewarning'] = 'Унесите име.'; $messages['nopagesizewarning'] = 'Унесите величину странице.'; +$messages['nosenderwarning'] = 'Унесите е-адресу пошиљаоца.'; $messages['norecipientwarning'] = 'Унесите бар једног примаоца.'; +$messages['disclosedrecipwarning'] = 'Сви примаоци ће видети адресе осталих прималаца. Да бисте ово избегли и заштитили њихову приватност, користите БЦЦ поље.'; +$messages['disclosedreciptitle'] = 'Превише јавних корисика'; $messages['nosubjectwarning'] = 'Поље „Наслов“ је празно. Желите ли да унесете наслов?'; +$messages['nosubjecttitle'] = 'Нема теме'; $messages['nobodywarning'] = 'Да ли желите да пошаљете поруку без текста?'; -$messages['notsentwarning'] = 'Порука није послата. Да ли желите да одбаците ову поруку?'; $messages['restoresavedcomposedata'] = 'Нађена је порука претходно састављена али није послата.\n\nПредмет: $subject\nСачувана: $date\n\nЖелите ли да вратите ову поруку?'; $messages['noldapserver'] = 'Унесите ЛДАП сервер за претрагу'; $messages['nosearchname'] = 'Унесите име контакта или е-адресу.'; @@ -106,10 +119,12 @@ $messages['messageopenerror'] = 'Порука се не може учитати $messages['filelinkerror'] = 'Прилагање фајла није успело.'; $messages['fileuploaderror'] = 'Неуспешно отпремање фајла.'; $messages['filesizeerror'] = 'Отпремљени фајл превазилази максимум од $size.'; +$messages['filecounterror'] = 'Највише фајлова које можете послати одједном је $count'; +$messages['msgsizeerror'] = 'Не могу да приложим фајл. Максимална величина поруке од ($size) је прекорачена.'; $messages['copysuccess'] = 'Успешно копирано $nr контаката.'; $messages['movesuccess'] = 'Успешно премештено $nr контаката.'; -$messages['copyerror'] = 'Не могох да копирам ниједан контакт.'; -$messages['moveerror'] = 'Не могох да преместим ниједан контакт.'; +$messages['copyerror'] = 'Нисам могао да копирам ниједан контакт.'; +$messages['moveerror'] = 'Нисам могао да преместим ниједан контакт.'; $messages['sourceisreadonly'] = 'Овај извор адресе је само за читање.'; $messages['errorsavingcontact'] = 'Не могу да сачувам адресу контакта.'; $messages['movingmessage'] = 'Премештам поруке...'; @@ -135,8 +150,9 @@ $messages['importformaterror'] = 'Увоз није успео! Отпремље $messages['importconfirm'] = 'Успешно увезено контаката: $inserted'; $messages['importconfirmskipped'] = 'Прескочено постојећих уноса: $skipped'; $messages['importmessagesuccess'] = 'Успешно увезено $nr порука'; -$messages['importmessageerror'] = 'Увоз није успео! Отпремљени фајл није исправан фајл порука или поштанског сандучета'; +$messages['importmessageerror'] = 'Увоз није успео! Отпремљени фајл није исправан фајл поруке или сандучета'; $messages['opnotpermitted'] = 'Радња није дозвољена!'; +$messages['nofromaddress'] = 'У изабраном идентитету недостаје е-адреса.'; $messages['editorwarning'] = 'Пребацивање типа уређивача може узроковати губитак форматирања текста. Желите ли да наставите?'; $messages['httpreceivedencrypterror'] = 'Кобна грешка у постави. Контактирајте одмах вашег администратора. Ваша порука се не може послати.'; $messages['smtpconnerror'] = 'СМТП грешка ($code): неуспешно повезивање на сервер.'; @@ -145,9 +161,10 @@ $messages['smtpfromerror'] = 'СМТП грешка ($code): неуспешно $messages['smtptoerror'] = 'СМТП грешка ($code): неуспешно додавање примаоца "$to" ($msg)'; $messages['smtprecipientserror'] = 'СМТП грешка ($code): није могуће рашчланити листу прималаца.'; $messages['smtperror'] = 'СМТП грешка ($code): $msg'; +$messages['emailformaterror'] = 'Неисправна е-адреса: $email'; $messages['toomanyrecipients'] = 'Превише прималаца. Смањите број прималаца на $max.'; $messages['maxgroupmembersreached'] = 'Број чланова групе прелази максимум од $max.'; -$messages['internalerror'] = 'Десила се унутрашња грешка. '; +$messages['internalerror'] = 'Десила се унутрашња грешка. Покушајте поново.'; $messages['contactdelerror'] = 'Не могу да обришем контакте.'; $messages['contactdeleted'] = 'Брисање контаката успешно.'; $messages['contactrestoreerror'] = 'Не могу да вратим обрисане контакте.'; @@ -161,6 +178,7 @@ $messages['savedsearchcreated'] = 'Успешно је сачувана прет $messages['savedsearchcreateerror'] = 'Не могу да сачувам претрагу.'; $messages['messagedeleted'] = 'Поруке су успешно обрисане.'; $messages['messagemoved'] = 'Поруке су успешно премештене.'; +$messages['messagemovedtotrash'] = 'Поруке успешно премештене у Смеће.'; $messages['messagecopied'] = 'Поруке су успешно копиране.'; $messages['messagemarked'] = 'Поруке су успешно означене.'; $messages['autocompletechars'] = 'За аутоматско довршавање унесите бар $min знака.'; @@ -181,9 +199,11 @@ $messages['errnotfound'] = 'Фајл није нађен'; $messages['errnotfoundexplain'] = 'Захтевани ресурс није нађен!'; $messages['errfailedrequest'] = 'Неуспешан захтев'; $messages['errauthorizationfailed'] = 'Овлашћење није успело'; -$messages['errunauthorizedexplain'] = 'Не могох да оверим ваше овлашћење за приступ овом сервису!'; +$messages['errunauthorizedexplain'] = 'Нисам могао да проверим ваше овлашћење за приступ овом сервису!'; $messages['errrequestcheckfailed'] = 'Захтев за провером није успео'; $messages['errcsrfprotectionexplain'] = "Због ваше заштите, приступ овом ресурсу је обезбјеђен против ЦСРФ-а.\nАко видите ово, вероватно се нисте одјавили пре напуштања веб апликације.\n\nСада је потребна интеракција човека за наставак."; $messages['errcontactserveradmin'] = 'Контактирајте администратора вашег сервера.'; $messages['clicktoresumesession'] = 'Кликните овде да бисте наставили вашу претходну сесију'; +$messages['errcomposesession'] = 'Грешка сесије састављача'; +$messages['errcomposesessionexplain'] = 'Тражена сесија састављача није нађена.'; $messages['clicktocompose'] = 'Кликните овде да саставите нову поруку'; diff --git a/program/localization/sv_SE/labels.inc b/program/localization/sv_SE/labels.inc index 864900b11..e18725030 100644 --- a/program/localization/sv_SE/labels.inc +++ b/program/localization/sv_SE/labels.inc @@ -324,6 +324,7 @@ $labels['advsearch'] = 'Avancerad sökning'; $labels['advanced'] = 'Avancerad'; $labels['other'] = 'Annat'; $labels['printcontact'] = 'Skriv ut kontakt'; +$labels['qrcode'] = 'QR-kod'; $labels['typehome'] = 'Hem'; $labels['typework'] = 'Arbete'; $labels['typeother'] = 'Annat'; diff --git a/program/localization/sv_SE/messages.inc b/program/localization/sv_SE/messages.inc index 29fc34b21..1209df872 100644 --- a/program/localization/sv_SE/messages.inc +++ b/program/localization/sv_SE/messages.inc @@ -97,7 +97,7 @@ $messages['disclosedreciptitle'] = 'Alltför många mottagaradresser'; $messages['nosubjectwarning'] = 'Ämnesraden är tom. Vill du ange ett ämne nu?'; $messages['nosubjecttitle'] = 'Inget ämne'; $messages['nobodywarning'] = 'Skicka det här meddelandet utan text?'; -$messages['notsentwarning'] = 'Meddelandet har inte skickats. Vill du avbryta meddelandet?'; +$messages['notsentwarning'] = 'Meddelandet har inte skickats ännu men har ändringar som inte är sparade. Vill du strunta i ändringarna?'; $messages['restoresavedcomposedata'] = 'Ett tidigare skrivet men inte skickat meddelande upptäcktes.\n\nÄmne: $subject\nSparat: $date\n\nVill du återskapa meddelandet?'; $messages['noldapserver'] = 'Ange en LDAP-server för att söka.'; $messages['nosearchname'] = 'Ange ett kontaktnamn eller en adress.'; diff --git a/program/localization/ta_IN/messages.inc b/program/localization/ta_IN/messages.inc index bf764b394..afefe05c1 100644 --- a/program/localization/ta_IN/messages.inc +++ b/program/localization/ta_IN/messages.inc @@ -58,7 +58,6 @@ $messages['nopagesizewarning'] = 'தயவு செய்து தாழி $messages['norecipientwarning'] = 'தயவு செய்து ஒரு பெறுனரையாவது எழுதுங்கள்'; $messages['nosubjectwarning'] = 'தலைப்பு காலியாக உள்ளது. இப்போது எழுத விரும்புகிறீர்களா?'; $messages['nobodywarning'] = 'உரையில்லாமல் இந்த செய்தியை அனுப்ப வேண்டுமா?'; -$messages['notsentwarning'] = 'செய்தி அனுப்பப்படவில்லை. உங்கள் செய்தியை நிராகரிக்க விரும்புகிறீர்களா?'; $messages['noldapserver'] = 'தயவு செய்து தேடுவதற்கு Idap சேவையகத்தை தேர்ந்தெடுங்கள்'; $messages['nosearchname'] = 'தயவு செய்து தொடர்பின் பெயரோ மின்னஞ்சல் முகவரியோ எழுதுங்கள்'; $messages['notuploadedwarning'] = 'எல்லா இணைப்புகளும் ஏற்றப்படவில்லை. தயவு செய்து காத்திருங்கள் அல்லது ஏற்றத்தை ரத்து செய்யுங்கள்.'; diff --git a/program/localization/th_TH/messages.inc b/program/localization/th_TH/messages.inc index 6139bc1dc..8fbcce3a0 100644 --- a/program/localization/th_TH/messages.inc +++ b/program/localization/th_TH/messages.inc @@ -59,7 +59,6 @@ $messages['nopagesizewarning'] = 'โปรดใส่จำนวนหน้ $messages['norecipientwarning'] = 'โปรดใส่ผู้รับอย่างน้อย 1 ชื่อ'; $messages['nosubjectwarning'] = 'หัวจดหมายว่างเปล่า คุณต้องการใส่หัวจดหมายเดี๋ยวนี้หรือไม่?'; $messages['nobodywarning'] = 'คุณต้องการส่งจดหมายโดยไม่มีข้อความใช่หรือไม่?'; -$messages['notsentwarning'] = 'จดหมายยังไม่ถูกส่ง คุณต้องการยกเลิกหรือไม่?'; $messages['noldapserver'] = 'โปรดเลือก LDAP Server เพื่อค้นหา'; $messages['nosearchname'] = 'โปรดใสชื่อหรืออีเมล์'; $messages['searchsuccessful'] = 'พบจดหมายจำนวน $nr ฉบับ'; diff --git a/program/localization/tr_TR/labels.inc b/program/localization/tr_TR/labels.inc index c0f2370cd..e4888aa04 100644 --- a/program/localization/tr_TR/labels.inc +++ b/program/localization/tr_TR/labels.inc @@ -19,8 +19,8 @@ $labels['welcome'] = '$product E-Posta Sistemine Hoş Geldiniz'; $labels['username'] = 'Kullanıcı Adı'; $labels['password'] = 'Parola'; $labels['server'] = 'Sunucu'; -$labels['login'] = 'Oturum Açın'; -$labels['logout'] = 'Oturumu Kapat'; +$labels['login'] = 'Oturum Aç'; +$labels['logout'] = 'Kapat'; $labels['mail'] = 'İletiler'; $labels['settings'] = 'Ayarlar'; $labels['addressbook'] = 'Adresler'; @@ -36,7 +36,7 @@ $labels['sender'] = 'Gönderici'; $labels['to'] = 'Alıcı'; $labels['cc'] = 'Kopya'; $labels['bcc'] = 'Gizli Kopya'; -$labels['replyto'] = 'Yanıt Adresi'; +$labels['replyto'] = 'Cevap Adresi'; $labels['followupto'] = 'İzleme adresi'; $labels['date'] = 'Tarih'; $labels['size'] = 'Boyut'; @@ -100,21 +100,21 @@ $labels['longnov'] = 'Kasım'; $labels['longdec'] = 'Aralık'; $labels['today'] = 'Bugün'; $labels['refresh'] = 'Yenile'; -$labels['checkmail'] = 'Yeni İletileri Denetle'; +$labels['checkmail'] = 'İletileri Denetle'; $labels['compose'] = 'İleti Gönder'; -$labels['writenewmessage'] = 'Yeni İleti Oluştur'; -$labels['reply'] = 'Yanıtla'; -$labels['replytomessage'] = 'Gönderene Yanıtla'; -$labels['replytoallmessage'] = 'Gönderen ve Tüm Alıcılara Yanıtla'; -$labels['replyall'] = 'Toplu Yanıtla'; -$labels['replylist'] = 'Listeye Yanıtla'; +$labels['writenewmessage'] = 'Yeni İleti '; +$labels['reply'] = 'Cevapla'; +$labels['replytomessage'] = 'Göndereni Cevapla'; +$labels['replytoallmessage'] = 'Göndereni ve Tüm Alıcıları Cevapla'; +$labels['replyall'] = 'Toplu Cevapla'; +$labels['replylist'] = 'Listeyi Cevapla'; $labels['forward'] = 'İlet'; -$labels['forwardinline'] = 'Postanın İçinde İlet'; -$labels['forwardattachment'] = 'Dosya Eki Olarak İlet'; -$labels['forwardmessage'] = 'İletiyi İlet'; +$labels['forwardinline'] = 'Posta İçinde İlet'; +$labels['forwardattachment'] = 'Ek Olarak İlet'; +$labels['forwardmessage'] = 'İlet'; $labels['deletemessage'] = 'İletiyi Sil'; -$labels['movemessagetotrash'] = 'İletiyi Çöpe At'; -$labels['printmessage'] = 'İletiyi Yazdır'; +$labels['movemessagetotrash'] = 'Çöpe Taşı'; +$labels['printmessage'] = 'Yazdır'; $labels['previousmessage'] = 'Önceki ileti'; $labels['firstmessage'] = 'İlk İleti'; $labels['nextmessage'] = 'Sonraki İleti'; @@ -123,7 +123,7 @@ $labels['backtolist'] = 'İleti Listesine Dön'; $labels['viewsource'] = 'Kaynağı Görüntüle'; $labels['mark'] = 'İşaretle'; $labels['markmessages'] = 'İletileri işaretle'; -$labels['markread'] = 'Okunmuş Olarak'; +$labels['markread'] = 'Okunmuş '; $labels['markunread'] = 'Okunmamış Olarak'; $labels['markflagged'] = 'İşaretlenmiş Olarak'; $labels['markunflagged'] = 'İşaretlenmemiş Olarak'; @@ -147,8 +147,8 @@ $labels['isread'] = 'Oku'; $labels['unread'] = 'Okunmamışları'; $labels['flagged'] = 'İşaretlenmişler'; $labels['unflagged'] = 'İşaretlenmemişleri'; -$labels['unanswered'] = 'Yanıtlanmamışları'; -$labels['withattachment'] = 'Dosya Eki Olanlar'; +$labels['unanswered'] = 'Cevaplanmamışları'; +$labels['withattachment'] = 'Eki Olanlar'; $labels['deleted'] = 'Silinmişler'; $labels['undeleted'] = 'Silinmemişler'; $labels['replied'] = 'Yanıtlandı'; @@ -169,7 +169,7 @@ $labels['flag'] = 'İşaret'; $labels['attachment'] = 'Dosya Eki'; $labels['nonesort'] = 'Yok'; $labels['sentdate'] = 'Gönderim Tarihi'; -$labels['arrival'] = 'Alınma Tarih'; +$labels['arrival'] = 'Alınma Tarihi'; $labels['asc'] = 'artan'; $labels['desc'] = 'azalan'; $labels['listcolumns'] = 'Sütunları Listele'; @@ -183,7 +183,7 @@ $labels['layoutlist'] = 'Liste'; $labels['folderactions'] = 'Klasör İşlemleri...'; $labels['compact'] = 'Sıkıştır'; $labels['empty'] = 'Boşalt'; -$labels['importmessages'] = 'İletileri İçe Aktar'; +$labels['importmessages'] = 'İçe Aktar'; $labels['quota'] = 'Disk Kullanımı'; $labels['unknown'] = 'bilinmeyen'; $labels['unlimited'] = 'sınırsız'; @@ -221,14 +221,14 @@ $labels['addattachment'] = 'Dosya Ekle'; $labels['charset'] = 'Karakter Kodlaması'; $labels['editortype'] = 'Düzenleyici'; $labels['returnreceipt'] = 'Alındı Onayı'; -$labels['dsn'] = 'Teslim Edildi Onayı'; +$labels['dsn'] = 'Teslim Onayı'; $labels['mailreplyintro'] = '$date, $sender yazmış:'; $labels['originalmessage'] = 'Özgün İleti'; -$labels['selectimage'] = 'Görsel Seçin'; +$labels['selectimage'] = 'Görsel Seç'; $labels['addimage'] = 'Görsel Ekle'; -$labels['selectmedia'] = 'Görüntü Seçin'; +$labels['selectmedia'] = 'Görüntü Seç'; $labels['addmedia'] = 'Görüntü Ekle'; -$labels['encrypt'] = 'Şifreleme'; +$labels['encrypt'] = 'Şifrele'; $labels['encryptmessage'] = 'İletiyi Şifrele'; $labels['encryptmessagemailvelope'] = 'İletinizi Mailvelope ile şifreleyin'; $labels['importpubkeys'] = 'Genel Anahtarları İçeri Aktar'; @@ -246,15 +246,15 @@ $labels['revertto'] = 'Geri Al:'; $labels['restore'] = 'Geri Yükle'; $labels['restoremessage'] = 'İleti geri yüklensin mi?'; $labels['ignore'] = 'Yoksay'; -$labels['responses'] = 'Hazır Yanıtlar'; -$labels['insertresponse'] = 'Hazır Yanıt Ekle'; -$labels['manageresponses'] = 'Hazır Yanıt Yönetimi'; -$labels['newresponse'] = 'Yeni Hazır Yanıt Ekle'; -$labels['addresponse'] = 'Hazır Yanıt Ekle'; -$labels['editresponse'] = 'Hazır Yanıtı Düzenle'; -$labels['editresponses'] = 'Hazır Yanıtları Düzenle'; +$labels['responses'] = 'Hazır Cevaplar'; +$labels['insertresponse'] = 'Hazır Cevap Ekle'; +$labels['manageresponses'] = 'Hazır Cevap Yönetimi'; +$labels['newresponse'] = 'Yeni Hazır Cevap Oluştur'; +$labels['addresponse'] = 'Hazır Cevap Ekle'; +$labels['editresponse'] = 'Hazır Cevabı Düzenle'; +$labels['editresponses'] = 'Hazır Cevapları Düzenle'; $labels['responsename'] = 'Ad'; -$labels['responsetext'] = 'Hazır Yanıt Metni'; +$labels['responsetext'] = 'Hazır Cevap Metni'; $labels['attach'] = 'Dosya Ekle'; $labels['attachments'] = 'Ek Dosyalar'; $labels['upload'] = 'Yükle'; @@ -282,7 +282,7 @@ $labels['dontsave'] = 'kaydedilmesin'; $labels['maxuploadsize'] = 'İzin verilen en büyük dosya boyutu $size'; $labels['addcc'] = 'Kopya Ekle'; $labels['addbcc'] = 'Gizli Kopya Ekle'; -$labels['addreplyto'] = 'Yanıtlama Adresi Ekle'; +$labels['addreplyto'] = 'Cevap Adresi Ekle'; $labels['addfollowupto'] = 'İzleme Adresi Ekle'; $labels['mdnrequest'] = 'Bu iletiyi gönderen kişi, okuduğunuza dair onay istedi. Onay göndermek ister misiniz ?'; $labels['receiptread'] = 'Alındı Onayı (okundu)'; @@ -470,22 +470,22 @@ $labels['section'] = 'Bölüm'; $labels['maintenance'] = 'Bakım'; $labels['newmessage'] = 'Yeni İleti'; $labels['signatureoptions'] = 'İmza Ayarları'; -$labels['whenreplying'] = 'Yanıtlarken özgün ileti'; +$labels['whenreplying'] = 'Cevaplarken'; $labels['replyempty'] = 'alıntılanmasın'; -$labels['replytopposting'] = 'altta yanıt metni üstte olsun'; -$labels['replybottomposting'] = 'üstte yanıt metni altta olsun'; -$labels['replyremovesignature'] = 'Yanıtlarken İletideki Özgün İmza Silinsin'; +$labels['replytopposting'] = 'yeni postayı alıntı metninin üstünden başlat'; +$labels['replybottomposting'] = 'yeni postayı alıntı metninden sonra başlat'; +$labels['replyremovesignature'] = 'Yanıtlarken önceki imzaları sil'; $labels['autoaddsignature'] = 'İmza Otomatik Olarak Eklensin'; $labels['newmessageonly'] = 'yalnız yeni iletilere'; -$labels['replyandforwardonly'] = 'yalnız yanıt ve iletmelere'; -$labels['insertsignature'] = 'İmza ekleme'; +$labels['replyandforwardonly'] = 'yalnız cevap ve yönlendirmelerde'; +$labels['insertsignature'] = 'İmza ekle'; $labels['sigbelow'] = 'İmza Alıntı Metninin Altına Eklensin'; $labels['sigseparator'] = 'İmza Eklenirken Standart Ayıraç Kullanılsın'; $labels['previewpanemarkread'] = 'Önizlenen İletiler Okunmuş Olarak İşaretlensin'; $labels['afternseconds'] = '$n saniye sonra'; $labels['reqmdn'] = 'Her Zaman Alındı Onayı İstensin'; $labels['reqdsn'] = 'Her Zaman Teslim Edildi Onayı İstensin'; -$labels['replysamefolder'] = 'Yanıtlar İletinin Bulunduğu Klasöre Kaydedilsin'; +$labels['replysamefolder'] = 'Cevaplar İletinin Bulunduğu Klasöre Kaydedilsin'; $labels['defaultabook'] = 'Varsayılan Adres Defteri'; $labels['autocompletesingle'] = 'Otomatik Tamamlamalarda Alternatif E-posta Adresleri Atlansın'; $labels['listnamedisplay'] = 'Kişi Görünümü'; @@ -498,11 +498,11 @@ $labels['addtodict'] = 'Sözlüğe Ekle'; $labels['mailtoprotohandler'] = 'mailto: Bağlantıları İçin Kullanılacak İşleyici'; $labels['standardwindows'] = 'Açılır Pencereler Standart Pencere Olarak Kabul Edilsin'; $labels['forwardmode'] = 'İletiler İletilirken'; -$labels['inline'] = 'iletinin içine eklensin'; +$labels['inline'] = 'iletinin içinde'; $labels['asattachment'] = 'dosya eki olarak eklensin'; -$labels['replyallmode'] = '[Toplu Yanıt] Düğmesi Varsayılan Olarak'; -$labels['replyalldefault'] = 'Toplu yanıtlasın'; -$labels['replyalllist'] = 'Yalnız postalama listesindekileri yanıtlasın (varsa)'; +$labels['replyallmode'] = '[Toplu Cevap] Düğmesi Varsayılan Eylemi'; +$labels['replyalldefault'] = 'Toplu cevapla'; +$labels['replyalllist'] = 'Yalnız postalama listesindekileri cevapla (varsa)'; $labels['folder'] = 'Klasör'; $labels['folders'] = 'Klasörler'; $labels['foldername'] = 'Klasör Adı'; @@ -563,16 +563,16 @@ $labels['arialabeltopnav'] = 'Pencere Denetimi'; $labels['arialabeltasknav'] = 'Uygulama Görevleri'; $labels['arialabeltoolbar'] = 'Uygulama Araç Çubuğu'; $labels['arialabelactivetask'] = 'Etkin Görevler'; -$labels['arialabelmessagessearchfilter'] = 'E-posta Listeleme Süzgeci'; -$labels['arialabelmailsearchform'] = 'E-posta İletisi Arama Formu'; +$labels['arialabelmessagessearchfilter'] = 'İleti Listeleme Süzgeci'; +$labels['arialabelmailsearchform'] = 'İleti Arama Formu'; $labels['arialabelcontactsearchform'] = 'Kişi Arama Formu'; -$labels['arialabelmailquicksearchbox'] = 'E-posta Arama İfadesi'; +$labels['arialabelmailquicksearchbox'] = 'İleti Arama İfadesi'; $labels['arialabelquicksearchbox'] = 'Arama İfadesi'; $labels['arialabelfoldersearchfilter'] = 'Klasör Listeleme Süzgeci'; $labels['arialabelfoldersearchform'] = 'Klasör Arama Formu'; -$labels['arialabelfolderlist'] = 'E-posta Klasör Seçimi'; -$labels['arialabelmessagelist'] = 'E-posta İletilerini Listeleme'; -$labels['arialabelmailpreviewframe'] = 'İleti Önizleme'; +$labels['arialabelfolderlist'] = 'İleti Klasörü Seçimi'; +$labels['arialabelmessagelist'] = 'İletileri Listele'; +$labels['arialabelmailpreviewframe'] = 'İleti Önizle'; $labels['arialabelmailboxmenu'] = 'Klasör İşlemleri Menüsü'; $labels['arialabellistselectmenu'] = 'Liste Seçme Menüsü'; $labels['arialabelthreadselectmenu'] = 'Sohbet Listeleme Menüsü'; @@ -589,7 +589,7 @@ $labels['arialabelreplyalloptions'] = 'Toplu Yanıt Ayarları'; $labels['arialabelmoremessageactions'] = 'Diğer İleti İşlemleri'; $labels['arialabelmarkmessagesas'] = 'Seçilmiş iletileri şu şekilde işaretle...'; $labels['arialabelcomposeoptions'] = 'İleti Oluşturma Ayarları'; -$labels['arialabelresponsesmenu'] = 'Hazır Yanıtlar Menüsü'; +$labels['arialabelresponsesmenu'] = 'Hazır Cevap Menüsü'; $labels['arialabelattachmentuploadform'] = 'Ek Dosya Yükleme Formu'; $labels['arialabelattachmentpreview'] = 'Ek Dosya Önizleme'; $labels['ariasummarycomposecontacts'] = 'Kişileri ve grupları alıcı olarak seçmek için listeleme'; @@ -597,7 +597,7 @@ $labels['arialabelcontactexportoptions'] = 'Kişi Dışa Aktarma Ayarları'; $labels['arialabelabookgroupoptions'] = 'Adres Defteri/Grubu Ayarları'; $labels['arialabelpreferencesform'] = 'Ayarlar Formu'; $labels['arialabelidentityeditfrom'] = 'Kimlik Düzenleme Formu'; -$labels['arialabelresonseeditfrom'] = 'Hazır Yanıt Düzenleme Formu'; +$labels['arialabelresonseeditfrom'] = 'Hazır Cevap Düzenleme Formu'; $labels['arialabelsearchterms'] = 'Arama İfadeleri'; $labels['helplistnavigation'] = 'Tuştakımı ile gezinme listesi'; $labels['helplistkeyboardnavigation'] = "Yukarı / Aşağı Oklar: Satırı odağa ya da seçime taşır. diff --git a/program/localization/tr_TR/messages.inc b/program/localization/tr_TR/messages.inc index a57f9fe4f..64098a049 100644 --- a/program/localization/tr_TR/messages.inc +++ b/program/localization/tr_TR/messages.inc @@ -34,7 +34,7 @@ $messages['erroroverquotadelete'] = 'Diskte boş alan kalmadı. SHIFT+DEL tuşla $messages['invalidrequest'] = 'İstek geçersiz! Herhangi bir veri kaydedilmedi'; $messages['invalidhost'] = 'Sunucu adı geçersiz.'; $messages['nomessagesfound'] = 'Bu posta kutusunda bir ileti bulunamadı.'; -$messages['loggedout'] = 'Oturumunuzu kapattınız. Yeniden görüşmek üzere!'; +$messages['loggedout'] = 'Oturumunuzu kapattınız. Hoşçakalın....'; $messages['mailboxempty'] = 'Posta kutusu boş'; $messages['nomessages'] = 'Herhangi bir ileti yok'; $messages['refreshing'] = 'Yenileniyor...'; @@ -49,8 +49,8 @@ $messages['messagesent'] = 'İleti gönderildi.'; $messages['savingmessage'] = 'İleti kaydediliyor...'; $messages['messagesaved'] = 'İleti taslaklara kaydedildi.'; $messages['successfullysaved'] = 'Kaydedildi'; -$messages['savingresponse'] = 'Yanıt metni kaydediliyor...'; -$messages['deleteresponseconfirm'] = 'Yanıt metnini gerçekten silmek istiyor musunuz?'; +$messages['savingresponse'] = 'Cevap kaydediliyor...'; +$messages['deleteresponseconfirm'] = 'Cevabı silmek istiyor musunuz?'; $messages['addedsuccessfully'] = 'Kişi adres defterine eklendi'; $messages['contactexists'] = 'Bu e-posta adresi rehberde var.'; $messages['contactnameexists'] = 'Rehberde aynı adlı biri zaten var.'; @@ -97,7 +97,7 @@ $messages['disclosedreciptitle'] = 'Herkese açık alıcı sayısı çok fazla'; $messages['nosubjectwarning'] = '"Konu" alanı boş bırakılmış. Şimdi bir konu yazmak ister misiniz?'; $messages['nosubjecttitle'] = 'Konu belirtilmemiş'; $messages['nobodywarning'] = 'İleti boş olarak gönderilsin mi?'; -$messages['notsentwarning'] = 'İleti gönderilemedi. İletiyi iptal etmek ister misiniz?'; +$messages['notsentwarning'] = 'İleti gönderilmedi ve yaptığınız değişiklikler kaydedilmedi. Değişiklikler silinsin mi?'; $messages['restoresavedcomposedata'] = 'Daha önce oluşturulmuş ancak gönderilmemiş bir ileti bulundu.\n\nKonu: $subject\Kaydetme zamanı: $date\n\nBu iletiyi geri yüklemek istiyor musunuz?'; $messages['noldapserver'] = 'Lütfen aranacak LDAP sunucusunu seçin.'; $messages['nosearchname'] = 'Lütfen bir kişi adı ya da e-posta adresi yazın.'; diff --git a/program/localization/uk_UA/messages.inc b/program/localization/uk_UA/messages.inc index b65478e56..71f1306aa 100644 --- a/program/localization/uk_UA/messages.inc +++ b/program/localization/uk_UA/messages.inc @@ -94,7 +94,6 @@ $messages['nosenderwarning'] = 'Будь ласка, введіть адресу $messages['norecipientwarning'] = 'Будь ласка, вкажіть принаймні одного отримувача'; $messages['nosubjectwarning'] = 'Не вказано тему листа. Бажаєте вказати її зараз?'; $messages['nobodywarning'] = 'Відправити листа без тексту?'; -$messages['notsentwarning'] = 'Лист не було відправлено. Ви бажаєте відхилити відправку?'; $messages['restoresavedcomposedata'] = 'Знайдено написаного раніше, але не надісланого листа.\n\nТема: $subject\nЗбережено: $date\n\nХочете відновити це повідомлення?'; $messages['noldapserver'] = 'Будь ласка, виберіть LDAP сервер для пошуку'; $messages['nosearchname'] = 'Будь ласка, введіть ім\'я чи електронну адресу'; diff --git a/program/localization/vi_VN/messages.inc b/program/localization/vi_VN/messages.inc index eb6920946..0ea130e29 100644 --- a/program/localization/vi_VN/messages.inc +++ b/program/localization/vi_VN/messages.inc @@ -82,7 +82,6 @@ $messages['nopagesizewarning'] = 'Xin nhập kích cỡ của trang.'; $messages['norecipientwarning'] = 'Xin nhập it nhất 1 người nhận.'; $messages['nosubjectwarning'] = 'Mục "Tiêu đề" vẫn còn trống. Bạn có muốn nhập tiêu đề bây giờ không?'; $messages['nobodywarning'] = 'Gửi thư không có nội dung?'; -$messages['notsentwarning'] = 'Thư chưa được gửi. Bỏ qua thư đang soạn?'; $messages['restoresavedcomposedata'] = 'Tìm thấy một thư đã được soạn trước nhưng chưa gửi.\n\nTiêu đề: $subject\nLưu ngày: $date\n\nBạn có muốn khôi phục lại thư này?'; $messages['noldapserver'] = 'Chọn máy chủ ldap server để tìm'; $messages['nosearchname'] = 'Nhập liên hệ hoặc địa chỉ email.'; diff --git a/program/localization/zh_CN/messages.inc b/program/localization/zh_CN/messages.inc index 0cda548a1..631c40632 100644 --- a/program/localization/zh_CN/messages.inc +++ b/program/localization/zh_CN/messages.inc @@ -94,7 +94,6 @@ $messages['nosenderwarning'] = '请输入发件人的电子邮件地址。'; $messages['norecipientwarning'] = '至少输入一个收件人。'; $messages['nosubjectwarning'] = '主题为空。您要输入一个主题吗?'; $messages['nobodywarning'] = '要发送没有正文的邮件吗?'; -$messages['notsentwarning'] = '邮件未发送。您确定要离开并舍弃当前邮件吗?'; $messages['restoresavedcomposedata'] = '您有一封邮件尚未发送.\n\nSubject: $subject\nSaved: $date\n\n您是否要恢复这封邮件?'; $messages['noldapserver'] = '请选择一个用来查找的 LDAP 服务器。'; $messages['nosearchname'] = '请输入联系人姓名或电子邮件地址。'; diff --git a/program/localization/zh_TW/labels.inc b/program/localization/zh_TW/labels.inc index 4938420a5..1ce8e27d4 100644 --- a/program/localization/zh_TW/labels.inc +++ b/program/localization/zh_TW/labels.inc @@ -40,8 +40,8 @@ $labels['replyto'] = '回覆至'; $labels['followupto'] = '郵件列表回覆地址'; $labels['date'] = '日期'; $labels['size'] = '大小'; -$labels['priority'] = '優先順序'; -$labels['organization'] = '組織'; +$labels['priority'] = '優先次序'; +$labels['organization'] = '組織/公司'; $labels['readstatus'] = '讀信狀態'; $labels['listoptions'] = '列表選項...'; $labels['mailboxlist'] = '資料夾'; @@ -78,7 +78,7 @@ $labels['jan'] = '一'; $labels['feb'] = '二'; $labels['mar'] = '三'; $labels['apr'] = '四'; -$labels['may'] = '五月'; +$labels['may'] = '五'; $labels['jun'] = '六'; $labels['jul'] = '七'; $labels['aug'] = '八'; @@ -86,18 +86,18 @@ $labels['sep'] = '九'; $labels['oct'] = '十'; $labels['nov'] = '十一'; $labels['dec'] = '十二'; -$labels['longjan'] = '一月'; -$labels['longfeb'] = '二月'; -$labels['longmar'] = '三月'; -$labels['longapr'] = '四月'; -$labels['longmay'] = '五月'; -$labels['longjun'] = '六月'; -$labels['longjul'] = '七月'; -$labels['longaug'] = '八月'; -$labels['longsep'] = '九月'; -$labels['longoct'] = '十月'; -$labels['longnov'] = '十一月'; -$labels['longdec'] = '十二月'; +$labels['longjan'] = '1 月'; +$labels['longfeb'] = '2 月'; +$labels['longmar'] = '3 月'; +$labels['longapr'] = '4 月'; +$labels['longmay'] = '5 月'; +$labels['longjun'] = '6 月'; +$labels['longjul'] = '7 月'; +$labels['longaug'] = '8 月'; +$labels['longsep'] = '9 月'; +$labels['longoct'] = '10 月'; +$labels['longnov'] = '11 月'; +$labels['longdec'] = '12 月'; $labels['today'] = '今日'; $labels['refresh'] = '重新整理'; $labels['checkmail'] = '檢查新郵件'; @@ -109,7 +109,7 @@ $labels['replytoallmessage'] = '全部回覆'; $labels['replyall'] = '全部回覆'; $labels['replylist'] = '清單回覆'; $labels['forward'] = '轉寄'; -$labels['forwardinline'] = '轉寄'; +$labels['forwardinline'] = '以內文方式轉寄'; $labels['forwardattachment'] = '以附件方式轉寄'; $labels['forwardmessage'] = '轉寄'; $labels['deletemessage'] = '刪除郵件'; @@ -128,6 +128,10 @@ $labels['markunread'] = '標示為未讀取'; $labels['markflagged'] = '標上旗標'; $labels['markunflagged'] = '移除旗標'; $labels['moreactions'] = '更多動作...'; +$labels['markallread'] = '全部標示為已讀取'; +$labels['folders-cur'] = '僅選取的資料夾'; +$labels['folders-sub'] = '選取的資料夾及其子資料夾'; +$labels['folders-all'] = '所有資料夾'; $labels['more'] = '更多'; $labels['back'] = '返回'; $labels['options'] = '選項'; @@ -141,14 +145,14 @@ $labels['none'] = '無'; $labels['currpage'] = '目前頁面'; $labels['isread'] = '已讀'; $labels['unread'] = '未讀取的郵件'; -$labels['flagged'] = '已加標記的郵件'; -$labels['unflagged'] = '未標記'; +$labels['flagged'] = '已加旗標'; +$labels['unflagged'] = '無旗標'; $labels['unanswered'] = '未回覆的郵件'; $labels['withattachment'] = '包含附件'; $labels['deleted'] = '已刪除的郵件'; $labels['undeleted'] = '未刪除的郵件'; -$labels['replied'] = '已回復'; -$labels['forwarded'] = '已轉發'; +$labels['replied'] = '已回覆'; +$labels['forwarded'] = '已轉寄'; $labels['invert'] = '反選'; $labels['filter'] = '篩選範圍'; $labels['list'] = '清單'; @@ -159,7 +163,7 @@ $labels['collapse-all'] = '全部收起'; $labels['threaded'] = '郵件串'; $labels['autoexpand_threads'] = '展開郵件串'; $labels['do_expand'] = '所有郵件串'; -$labels['expand_only_unread'] = '只展開未讀訊息'; +$labels['expand_only_unread'] = '只展開未讀郵件'; $labels['fromto'] = '寄件者/收件者'; $labels['flag'] = '旗標'; $labels['attachment'] = '附件'; @@ -172,8 +176,12 @@ $labels['listcolumns'] = '列出欄位'; $labels['listsorting'] = '排序欄位'; $labels['listorder'] = '排序順序'; $labels['listmode'] = '清單檢視模式'; +$labels['layout'] = '畫面配置'; +$labels['layoutwidescreen'] = '寬螢幕'; +$labels['layoutdesktop'] = '桌面'; +$labels['layoutlist'] = '清單'; $labels['folderactions'] = '資料夾動作...'; -$labels['compact'] = '壓縮'; +$labels['compact'] = '壓緊'; $labels['empty'] = '清空'; $labels['importmessages'] = '匯入郵件'; $labels['quota'] = '磁碟使用量'; @@ -193,7 +201,7 @@ $labels['type'] = '類型'; $labels['namex'] = '名稱'; $labels['searchscope'] = '範圍'; $labels['currentfolder'] = '目前的資料夾'; -$labels['subfolders'] = '目前的資料夾(含子資料夾)'; +$labels['subfolders'] = '目前的資料夾 (含子資料夾)'; $labels['allfolders'] = '所有資料夾'; $labels['searchinterval-1W'] = '超過一週'; $labels['searchinterval-1M'] = '超過一個月'; @@ -202,7 +210,7 @@ $labels['searchinterval1W'] = '一週之內'; $labels['searchinterval1M'] = '一個月之內'; $labels['searchinterval1Y'] = '一年之內'; $labels['openinextwin'] = '在新視窗開啟'; -$labels['emlsave'] = '下載(.eml)'; +$labels['emlsave'] = '下載 (.eml)'; $labels['changeformattext'] = '以純文字格式顯示'; $labels['changeformathtml'] = '以 HTML 格式顯示'; $labels['editasnew'] = '以新郵件編輯'; @@ -217,16 +225,19 @@ $labels['dsn'] = '傳送狀態通知'; $labels['mailreplyintro'] = '$sender 於 $date 寫到:'; $labels['originalmessage'] = '原始郵件'; $labels['selectimage'] = ' 選擇圖片'; -$labels['addimage'] = '添加圖片'; +$labels['addimage'] = '加入圖片'; $labels['selectmedia'] = '選擇影片'; -$labels['addmedia'] = '添加影片'; +$labels['addmedia'] = '加入影片'; $labels['encrypt'] = '加密'; -$labels['encryptmessage'] = '加密信息'; -$labels['encryptmessagemailvelope'] = '使用Mailvelope的加密信息'; -$labels['importpubkeys'] = '導入公鑰'; +$labels['encryptmessage'] = '加密郵件'; +$labels['encryptmessagemailvelope'] = '以 Mailvelope 加密郵件'; +$labels['importpubkeys'] = '匯入公鑰'; $labels['encryptedsendialog'] = '發送加密郵件'; +$labels['keyid'] = '金鑰 ID'; +$labels['keylength'] = '位元'; $labels['keyexpired'] = '已過期'; $labels['keyrevoked'] = '已撤銷'; +$labels['bccinstead'] = '使用「密件副本」'; $labels['editidents'] = '編輯身份資訊'; $labels['spellcheck'] = '拼字'; $labels['checkspelling'] = '拼字檢查'; @@ -238,18 +249,19 @@ $labels['ignore'] = ' 忽略'; $labels['responses'] = '預設回應'; $labels['insertresponse'] = '插入預設回應'; $labels['manageresponses'] = '管理預設回應'; -$labels['newresponse'] = '新建響應'; -$labels['addresponse'] = ' 添加響應'; -$labels['editresponse'] = '預設回應'; +$labels['newresponse'] = '建立預設回應'; +$labels['addresponse'] = ' 加入預設回應'; +$labels['editresponse'] = '編輯預設回應'; $labels['editresponses'] = '編輯預設回應'; $labels['responsename'] = '名稱'; $labels['responsetext'] = '預設回應內容'; $labels['attach'] = '附件'; -$labels['attachments'] = '附加檔案'; +$labels['attachments'] = '附件檔案'; $labels['upload'] = '上傳'; +$labels['uploadprogress'] = '$percent ($total 中的 $current)'; $labels['close'] = '關閉'; $labels['messageoptions'] = '郵件選項...'; -$labels['togglecomposeoptions'] = ' 切換組成選項'; +$labels['togglecomposeoptions'] = ' 切換撰寫選項'; $labels['attachmentrename'] = '重新命名附件'; $labels['low'] = '低'; $labels['lowest'] = '最低'; @@ -258,11 +270,11 @@ $labels['high'] = '高'; $labels['highest'] = '最高'; $labels['nosubject'] = '(沒有主旨)'; $labels['showimages'] = '顯示圖片'; -$labels['alwaysshow'] = '永遠顯示來自 $sender 的圖片'; -$labels['isdraft'] = '這是一封草稿'; +$labels['alwaysshow'] = '總是顯示來自 $sender 的圖片'; +$labels['isdraft'] = '這是草稿'; $labels['andnmore'] = '第$nr封或是更多...'; -$labels['togglemoreheaders'] = '顯示更多的訊息表頭'; -$labels['togglefullheaders'] = '切換原始訊息表頭'; +$labels['togglemoreheaders'] = '顯示更多的郵件標頭'; +$labels['togglefullheaders'] = '切換原始郵件標頭'; $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = '純文字'; $labels['savesentmessagein'] = '儲存寄件備份至'; @@ -277,41 +289,42 @@ $labels['receiptread'] = '郵件回條(已閱讀)'; $labels['yourmessage'] = '這是你郵件的郵件回條'; $labels['receiptnote'] = '注意:此回條只能確認收件者的電腦顯示了郵件,並不能保證收件者已閱讀或了解郵件的內容。'; $labels['name'] = '顯示名稱'; -$labels['firstname'] = '名稱'; +$labels['firstname'] = '名字'; $labels['surname'] = '姓氏'; $labels['middlename'] = '中名'; -$labels['nameprefix'] = '名'; -$labels['namesuffix'] = '姓'; +$labels['nameprefix'] = '頭銜 (例如 Dr.)'; +$labels['namesuffix'] = '後綴 (例如 Jr.)'; $labels['nickname'] = '暱稱'; $labels['jobtitle'] = '職位'; $labels['department'] = '部門'; $labels['gender'] = '性別'; -$labels['maidenname'] = '姓'; +$labels['maidenname'] = '閨姓'; $labels['email'] = '電子郵件'; $labels['phone'] = '電話'; $labels['address'] = '地址'; $labels['street'] = '街道'; $labels['locality'] = '城市'; $labels['zipcode'] = '郵遞區號'; -$labels['region'] = '地區'; -$labels['country'] = '國家'; +$labels['region'] = '州/省'; +$labels['country'] = '國家/地區'; $labels['birthday'] = '生日'; -$labels['anniversary'] = '周年纪念日'; +$labels['anniversary'] = '周年紀念日'; $labels['website'] = '網站'; $labels['instantmessenger'] = '即時通訊'; $labels['notes'] = '註解'; $labels['male'] = '男'; $labels['female'] = '女'; -$labels['manager'] = '經理'; +$labels['manager'] = '上司'; $labels['assistant'] = '助理'; $labels['spouse'] = '配偶'; $labels['allfields'] = '所有欄位'; $labels['search'] = '搜尋'; -$labels['searchresult'] = ' 搜索結果'; +$labels['searchresult'] = ' 搜尋結果'; $labels['advsearch'] = '進階搜尋'; $labels['advanced'] = '進階'; $labels['other'] = '其他'; -$labels['printcontact'] = ' 打印連絡人'; +$labels['printcontact'] = ' 列印聯絡人'; +$labels['qrcode'] = 'QR 碼'; $labels['typehome'] = '住家'; $labels['typework'] = '工作'; $labels['typeother'] = '其他'; @@ -326,20 +339,20 @@ $labels['typeassistant'] = '助理'; $labels['typehomepage'] = '首頁'; $labels['typeblog'] = '部落格'; $labels['typeprofile'] = '設定檔'; -$labels['addfield'] = '新增欄位...'; -$labels['addcontact'] = '添加連絡人'; +$labels['addfield'] = '加入欄位...'; +$labels['addcontact'] = '加入聯絡人'; $labels['editcontact'] = '編輯聯絡人'; $labels['contacts'] = '聯絡人'; $labels['contactproperties'] = '聯絡人資訊'; -$labels['contactnameandorg'] = ' 姓名和單位'; +$labels['contactnameandorg'] = ' 姓名和組織/公司'; $labels['personalinfo'] = '個人資訊'; -$labels['contactphoto'] = '聯絡人照片'; +$labels['contactphoto'] = '聯絡人相片'; $labels['edit'] = '編輯'; $labels['cancel'] = '取消'; $labels['save'] = '儲存'; $labels['delete'] = '刪除'; $labels['rename'] = '重新命名'; -$labels['addphoto'] = '新增'; +$labels['addphoto'] = '加入'; $labels['replacephoto'] = '取代'; $labels['uploadphoto'] = '上傳相片'; $labels['newcontact'] = ' 新建聯絡人'; @@ -348,14 +361,14 @@ $labels['composeto'] = '寄信至所選擇的聯絡人'; $labels['contactsfromto'] = '聯絡人 $from 至 $to,共 $count 人'; $labels['print'] = '列印'; $labels['export'] = '匯出通訊錄'; -$labels['exportall'] = '匯出全部'; -$labels['exportsel'] = '匯出選擇項目'; +$labels['exportall'] = '全部匯出'; +$labels['exportsel'] = '匯出所選項目'; $labels['exportvcards'] = '匯出通訊錄為 vCard 格式'; $labels['newgroup'] = '新建群組'; -$labels['addgroup'] = '增加群組'; +$labels['addgroup'] = '加入群組'; $labels['grouprename'] = '重新命名群組'; $labels['groupdelete'] = '刪除群組'; -$labels['groupremoveselected'] = '從群組中刪除選擇的聯絡人'; +$labels['groupremoveselected'] = '於群組刪除所選的聯絡人'; $labels['uponelevel'] = '回到上一層'; $labels['previouspage'] = '顯示上一頁'; $labels['firstpage'] = '顯示第一頁'; @@ -368,14 +381,14 @@ $labels['personaladrbook'] = '個人通訊錄'; $labels['searchsave'] = '儲存搜尋結果'; $labels['searchdelete'] = '刪除搜尋結果'; $labels['import'] = '匯入通訊錄'; -$labels['importcontacts'] = '匯入通訊錄'; -$labels['importfromfile'] = '選擇你要匯入的檔案:'; +$labels['importcontacts'] = '匯入聯絡人'; +$labels['importfromfile'] = '選擇要匯入的檔案:'; $labels['importtarget'] = '新增聯絡人到'; -$labels['importreplace'] = '取代整個'; +$labels['importreplace'] = '取代整個通訊錄'; $labels['importgroups'] = '匯入群組'; -$labels['importgroupsall'] = '全部(必要時新增群組)'; +$labels['importgroupsall'] = '全部 (必要時新增群組)'; $labels['importgroupsexisting'] = '僅限於既有群組'; -$labels['importdesc'] = '您可以將現有的聯絡人匯入通訊錄。
目前支援匯入 vCard 與 CSV (逗點分隔)格式。'; +$labels['importdesc'] = '可以將現有的聯絡人匯入通訊錄。
目前支援匯入 vCard 與 CSV (逗點分隔)格式。'; $labels['done'] = '完成'; $labels['settingsfor'] = '設定'; $labels['about'] = '關於'; @@ -385,7 +398,7 @@ $labels['editpreferences'] = '編輯個人設定'; $labels['identities'] = '身份資訊'; $labels['manageidentities'] = '管理識別身份'; $labels['newidentity'] = '新增識別身份'; -$labels['addidentity'] = '增加識別身份'; +$labels['addidentity'] = '加入識別身份'; $labels['editidentity'] = '編輯識別身份'; $labels['preferhtml'] = '使用 HTML 顯示'; $labels['defaultcharset'] = '預設編碼'; @@ -402,17 +415,17 @@ $labels['timezone'] = '時區'; $labels['pagesize'] = '每頁顯示列數'; $labels['signature'] = '簽名檔'; $labels['dstactive'] = '日光節約時間'; -$labels['showinextwin'] = '在新視窗中顯示郵件'; -$labels['composeextwin'] = '在新視窗中撰寫郵件'; +$labels['showinextwin'] = '在新視窗顯示郵件'; +$labels['composeextwin'] = '在新視窗撰寫郵件'; $labels['htmleditor'] = '使用 HTML 撰寫郵件'; -$labels['htmlonreply'] = '只有在回覆HTML信件時'; -$labels['htmlonreplyandforward'] = '只有在轉寄或回覆HTML信件時'; +$labels['htmlonreply'] = '僅在回覆 HTML 信件時'; +$labels['htmlonreplyandforward'] = '僅在轉寄或回覆 HTML 信件時'; $labels['htmlsignature'] = 'HTML 簽名檔'; $labels['showemail'] = '一併顯示名稱和電郵地址'; $labels['previewpane'] = '顯示預覽窗格'; $labels['skin'] = '版面風格'; $labels['logoutclear'] = '登出時清空垃圾桶'; -$labels['logoutcompact'] = '登出時壓縮收件匣'; +$labels['logoutcompact'] = '登出時壓緊收件匣'; $labels['uisettings'] = '使用者介面'; $labels['serversettings'] = '伺服器設定'; $labels['mailboxview'] = '信箱顯示'; @@ -421,21 +434,22 @@ $labels['askuser'] = '詢問我'; $labels['autosend'] = '自動送出'; $labels['autosendknown'] = '傳送回條給我的聯絡人,其他則詢問我'; $labels['autosendknownignore'] = '傳送回條給我的聯絡人,其他則忽略'; +$labels['ignorerequest'] = '忽略要求'; $labels['readwhendeleted'] = '將刪除的郵件標示為已讀取'; -$labels['flagfordeletion'] = '刪除郵件時只將郵件標示為已刪除'; +$labels['flagfordeletion'] = '只將郵件標示為刪除,而非真的刪除'; $labels['skipdeleted'] = '不要顯示已刪除的郵件'; $labels['deletealways'] = '如果移動郵件到垃圾桶失敗,就直接刪除'; -$labels['deletejunk'] = '直接刪除垃圾郵件中的郵件'; -$labels['showremoteimages'] = '顯示遠端郵件內文中的圖片'; +$labels['deletejunk'] = '直接刪除「垃圾郵件」中的郵件'; +$labels['showremoteimages'] = '顯示遠端郵件內文的圖片'; $labels['fromknownsenders'] = '從已知的寄件者'; -$labels['always'] = '是'; -$labels['alwaysbutplain'] = '除了回文本以外, 永遠是'; +$labels['always'] = '總是'; +$labels['alwaysbutplain'] = '總是,除非回覆純文字郵件'; $labels['showinlineimages'] = '將附加檔案的圖片顯示於郵件最後'; $labels['autosavedraft'] = '自動儲存草稿'; $labels['everynminutes'] = '每 $n 分鐘'; $labels['refreshinterval'] = '重新整理 (檢查新郵件等)'; $labels['never'] = '永不'; -$labels['immediately'] = '馬上'; +$labels['immediately'] = '立即'; $labels['messagesdisplaying'] = '郵件顯示'; $labels['messagescomposition'] = '撰寫郵件'; $labels['mimeparamfolding'] = '附加檔案名稱的編碼方式'; @@ -443,33 +457,33 @@ $labels['2231folding'] = '完全 RFC 2231 模式(Thunderbird)'; $labels['miscfolding'] = 'RFC 2047/2231 混合模式(MS Outlook)'; $labels['2047folding'] = '完全 RFC 2047 模式(其他)'; $labels['force7bit'] = '對 8 位元字元使用 MIME 編碼'; -$labels['savelocalstorage'] = "( 暫時 ) 保存在流覽器的本地儲存"; +$labels['savelocalstorage'] = "( 暫時 ) 保存在瀏覽器的本機儲存"; $labels['advancedoptions'] = '進階選項'; $labels['toggleadvancedoptions'] = '切換高級選項'; $labels['focusonnewmessage'] = '收到新郵件時使瀏覽器獲得焦點'; -$labels['checkallfolders'] = '檢查所有資料夾中的新郵件'; +$labels['checkallfolders'] = '對於所有資料夾,都要檢查有否新郵件'; $labels['displaynext'] = '郵件刪除/移動時顯示下一封郵件'; -$labels['defaultfont'] = 'HTML格式預設字型'; +$labels['defaultfont'] = 'HTML 郵件的預設字型'; $labels['mainoptions'] = '主要選項'; -$labels['browseroptions'] = '瀏覽選項'; +$labels['browseroptions'] = '瀏覽器選項'; $labels['section'] = '分類'; $labels['maintenance'] = '管理'; $labels['newmessage'] = '新郵件'; $labels['signatureoptions'] = '簽名檔選項'; $labels['whenreplying'] = '回覆時'; $labels['replyempty'] = '不要包含原來的信件內容'; -$labels['replytopposting'] = '在原文的上方開始新訊息'; -$labels['replybottomposting'] = '在原文的下方開始新訊息'; +$labels['replytopposting'] = '在原文的上方開始新郵件'; +$labels['replybottomposting'] = '在原文的下方開始新郵件'; $labels['replyremovesignature'] = '回覆時移除原有簽名檔'; $labels['autoaddsignature'] = '自動附加簽名'; -$labels['newmessageonly'] = '只有新訊息'; -$labels['replyandforwardonly'] = '只有回覆或轉寄'; +$labels['newmessageonly'] = '僅新郵件'; +$labels['replyandforwardonly'] = '僅回覆或轉寄時'; $labels['insertsignature'] = '插入簽名檔'; -$labels['sigbelow'] = '將簽名置於引用信息之後'; -$labels['sigseparator'] = '在簽名裡強制使用標準分隔'; -$labels['previewpanemarkread'] = '標示已預覽訊息為已讀取'; +$labels['sigbelow'] = '將簽名置於引用郵件之後'; +$labels['sigseparator'] = '在簽名強制使用標準分隔符號'; +$labels['previewpanemarkread'] = '標示已預覽郵件為已讀取'; $labels['afternseconds'] = '$n 秒之後'; -$labels['reqmdn'] = '永遠索取讀取回條'; +$labels['reqmdn'] = '總是索取讀取回條'; $labels['reqdsn'] = '總是要求傳送狀態通知'; $labels['replysamefolder'] = '將回信放在與原信件相同的資料夾'; $labels['defaultabook'] = '預設通訊錄'; @@ -477,9 +491,9 @@ $labels['autocompletesingle'] = '在自動完成時略過其他電郵地址'; $labels['listnamedisplay'] = '聯絡人顯示方式'; $labels['spellcheckbeforesend'] = '寄送前執行拼字檢查'; $labels['spellcheckoptions'] = '拼字檢查選項'; -$labels['spellcheckignoresyms'] = '忽略符號'; -$labels['spellcheckignorenums'] = '忽略數字'; -$labels['spellcheckignorecaps'] = '忽略大寫字母'; +$labels['spellcheckignoresyms'] = '忽略有符號的字'; +$labels['spellcheckignorenums'] = '忽略有數字的字'; +$labels['spellcheckignorecaps'] = '忽略全大寫字母的字'; $labels['addtodict'] = '加入詞典'; $labels['mailtoprotohandler'] = '註冊為 mailto: 連結的預設處理常式'; $labels['standardwindows'] = '以新視窗顯示彈出式對話框'; @@ -492,7 +506,7 @@ $labels['replyalllist'] = '只回覆郵件列表 (如有)'; $labels['folder'] = '資料夾'; $labels['folders'] = '資料夾'; $labels['foldername'] = '資料夾名稱'; -$labels['subscribed'] = '顯示'; +$labels['subscribed'] = '訂閱'; $labels['messagecount'] = '郵件數目'; $labels['create'] = '建立'; $labels['createfolder'] = '建立新資料夾'; @@ -509,15 +523,15 @@ $labels['foldertype'] = '資料夾類型'; $labels['personalfolder'] = '私人資料夾'; $labels['otherfolder'] = '其他使用者資料夾'; $labels['sharedfolder'] = '公用資料夾'; -$labels['findfolders'] = '查找資料夾'; -$labels['namespace.personal'] = '個人的'; -$labels['namespace.other'] = '其它用戶的'; -$labels['namespace.shared'] = '共享的'; +$labels['findfolders'] = '尋找資料夾'; +$labels['namespace.personal'] = '個人'; +$labels['namespace.other'] = '其他使用者'; +$labels['namespace.shared'] = '共享'; $labels['sortby'] = '排序'; $labels['sortasc'] = '遞增排序'; $labels['sortdesc'] = '遞減排序'; $labels['undo'] = '復原'; -$labels['installedplugins'] = '已安裝的插件'; +$labels['installedplugins'] = '已安裝的擴充套件'; $labels['plugin'] = '擴充套件'; $labels['version'] = '版本'; $labels['source'] = '來源'; @@ -528,34 +542,70 @@ $labels['KB'] = 'KB'; $labels['MB'] = 'MB'; $labels['GB'] = 'GB'; $labels['unicode'] = '萬國碼'; -$labels['english'] = '英語'; +$labels['english'] = '英文'; $labels['westerneuropean'] = '西歐語系'; $labels['easterneuropean'] = '東歐語系'; $labels['southeasterneuropean'] = '東南歐語系'; -$labels['baltic'] = '波羅的海'; -$labels['cyrillic'] = '西里爾'; -$labels['arabic'] = '阿拉伯語'; -$labels['greek'] = '希臘'; -$labels['hebrew'] = '希伯來語'; -$labels['turkish'] = '土耳其'; -$labels['nordic'] = '北歐'; -$labels['thai'] = '泰國'; -$labels['celtic'] = '塞爾特'; -$labels['vietnamese'] = '越南'; -$labels['japanese'] = '日本'; -$labels['korean'] = '韓國'; -$labels['chinese'] = '國語'; +$labels['baltic'] = '波羅的海語系'; +$labels['cyrillic'] = '西里爾字母'; +$labels['arabic'] = '阿拉伯文'; +$labels['greek'] = '希臘文'; +$labels['hebrew'] = '希伯來文'; +$labels['turkish'] = '土耳其文'; +$labels['nordic'] = '北歐語系'; +$labels['thai'] = '泰文'; +$labels['celtic'] = '塞爾特語系'; +$labels['vietnamese'] = '越南文'; +$labels['japanese'] = '日文'; +$labels['korean'] = '韓文'; +$labels['chinese'] = '中文'; $labels['arialabeltopnav'] = '視窗控制'; -$labels['arialabeltasknav'] = '應用任務'; -$labels['arialabeltoolbar'] = '應用工具欄'; +$labels['arialabeltasknav'] = '應用程式任務'; +$labels['arialabeltoolbar'] = '應用程式工具列'; $labels['arialabelactivetask'] = '現行的任務'; -$labels['arialabelmessagessearchfilter'] = '電子郵件表列過濾器'; -$labels['arialabelmailsearchform'] = '電子郵件信息搜索表單'; -$labels['arialabelcontactsearchform'] = '連絡人搜索表單'; +$labels['arialabelmessagessearchfilter'] = '電子郵件列表篩選'; +$labels['arialabelmailsearchform'] = '電子郵件搜索表單'; +$labels['arialabelcontactsearchform'] = '聯絡人搜索表單'; $labels['arialabelmailquicksearchbox'] = ' 電子郵件搜索輸入'; $labels['arialabelquicksearchbox'] = '搜索輸入'; $labels['arialabelfoldersearchfilter'] = '文件夾列表過濾器'; $labels['arialabelfoldersearchform'] = '文件夾搜索表單'; +$labels['arialabelfolderlist'] = '電郵資料夾選擇'; +$labels['arialabelmessagelist'] = '電郵列表'; +$labels['arialabelmailpreviewframe'] = '郵件預覽'; +$labels['arialabelmailboxmenu'] = '資料夾動作選單'; +$labels['arialabellistselectmenu'] = '清單選擇選單'; +$labels['arialabelthreadselectmenu'] = '郵件串列表選單'; +$labels['arialabelmessagelistoptions'] = '郵件清單顯示及排序選項'; +$labels['arialabelmailimportdialog'] = '郵件匯入對話匣'; +$labels['arialabelmessagenav'] = '郵件導覽'; $labels['arialabelmessagebody'] = '郵件正文'; -$labels['arialabelreplyalloptions'] = '全部回復選項'; +$labels['arialabelmessageactions'] = '郵件動作'; +$labels['arialabelcontactquicksearch'] = '聯絡人搜尋表單'; +$labels['arialabelcontactsearchbox'] = '聯絡人搜尋輸入'; +$labels['arialabelmessageheaders'] = '郵件標頭'; +$labels['arialabelforwardingoptions'] = '轉寄選項'; +$labels['arialabelreplyalloptions'] = '「全部回覆」選項'; +$labels['arialabelmoremessageactions'] = '更多郵件動作'; +$labels['arialabelmarkmessagesas'] = '將所選郵件標示為...'; +$labels['arialabelcomposeoptions'] = '撰寫選項'; +$labels['arialabelresponsesmenu'] = '「罐頭」預設回應選單'; +$labels['arialabelattachmentuploadform'] = '附件上載表單'; +$labels['arialabelattachmentpreview'] = '附件預覽'; +$labels['ariasummarycomposecontacts'] = '可以選取為收件者的聯絡人和群組清單'; +$labels['arialabelcontactexportoptions'] = '聯絡人匯出選項'; +$labels['arialabelabookgroupoptions'] = '通訊錄/群組選項'; +$labels['arialabelpreferencesform'] = '設定表單'; +$labels['arialabelidentityeditfrom'] = '身份編輯表單'; +$labels['arialabelresonseeditfrom'] = '預設回應編輯表單'; +$labels['arialabelsearchterms'] = '搜尋項目'; +$labels['helplistnavigation'] = '清單鍵盤導覽'; +$labels['helplistkeyboardnavigation'] = "上下箭嘴:移動焦點/選取列 +空格鍵:選取焦點列 +Shift + 上/下:額外選取上面或下面的列 +Ctrl + 空格鍵:將焦點列加入選取/將焦點列移出選取"; +$labels['helplistkeyboardnavmessages'] = "左/右箭嘴:展開/收起郵件串 (僅在郵件串模式有效) +Enter:開啟所選/焦點郵件 +Del:將所選郵件移至垃圾桶"; +$labels['helplistkeyboardnavcontacts'] = "Enter:開啟所選/焦點聯絡人"; ?> diff --git a/program/localization/zh_TW/messages.inc b/program/localization/zh_TW/messages.inc index edf7f6d6d..7b9552ec8 100644 --- a/program/localization/zh_TW/messages.inc +++ b/program/localization/zh_TW/messages.inc @@ -20,39 +20,51 @@ $messages['loginfailed'] = '登入失敗'; $messages['cookiesdisabled'] = '你的瀏覽器不接受 cookies'; $messages['sessionerror'] = '你的工作階段已失效或過期'; $messages['storageerror'] = '連線到 IMAP 伺服器失敗'; -$messages['servererror'] = '伺服器錯誤!'; -$messages['servererrormsg'] = '伺服器錯誤:$msg'; -$messages['connerror'] = '連線錯誤 (無法連線到伺服器)!'; -$messages['dberror'] = '資料庫錯誤!'; +$messages['servererror'] = '伺服器出錯!'; +$messages['servererrormsg'] = '伺服器出錯:$msg'; +$messages['accountlocked'] = '登入失敗太多次。請稍後再嘗試'; +$messages['connerror'] = '連線出錯 (無法連線到伺服器)!'; +$messages['dberror'] = '資料庫出錯!'; +$messages['windowopenerror'] = '瀏覽器阻擋了彈出式視窗!'; $messages['requesttimedout'] = '要求逾時'; $messages['errorreadonly'] = '動作無法完成。資料夾唯讀'; $messages['errornoperm'] = '動作無法完成。權限不符'; $messages['erroroverquota'] = '動作無法完成。硬碟空間不夠'; -$messages['erroroverquotadelete'] = '硬碟空間不夠,請使用SHIFT+DEL來刪除訊息'; -$messages['invalidrequest'] = '要求無效!未儲存任何資料。'; -$messages['invalidhost'] = '無效的伺服器名稱'; -$messages['nomessagesfound'] = '此郵件匣沒有任何郵件'; -$messages['loggedout'] = '你已成功地登出並結束工作階段了。再見!'; +$messages['erroroverquotadelete'] = '硬碟空間不夠,請使用 SHIFT+DEL 來刪除郵件'; +$messages['invalidrequest'] = '要求無效!未儲存任何資料'; +$messages['invalidhost'] = '伺服器名稱無效'; +$messages['nomessagesfound'] = '此郵件匣沒有郵件'; +$messages['loggedout'] = '已成功登出,並結束工作階段。再見!'; $messages['mailboxempty'] = '郵件匣是空的'; $messages['nomessages'] = '沒有郵件'; $messages['refreshing'] = '重新整理中...'; $messages['loading'] = '載入中...'; $messages['uploading'] = '上傳檔案中...'; +$messages['attaching'] = '附加檔案中...'; $messages['uploadingmany'] = '上傳檔案中...'; $messages['loadingdata'] = '載入資料中...'; $messages['checkingmail'] = '檢查新郵件...'; $messages['sendingmessage'] = '寄出郵件中...'; -$messages['messagesent'] = '郵件寄出成功'; +$messages['messagesent'] = '郵件成功寄出'; $messages['savingmessage'] = '儲存郵件中...'; $messages['messagesaved'] = '郵件已經儲存至草稿匣'; $messages['successfullysaved'] = '儲存成功'; $messages['savingresponse'] = '儲存預設回應中...'; -$messages['deleteresponseconfirm'] = '你確定要刪除這個預設回應嗎?'; -$messages['addedsuccessfully'] = '聯絡人已經成功地新增至通訊錄'; -$messages['contactnameexists'] = '已存在相同名稱的連絡人'; -$messages['blockedimages'] = '為了保護你的隱私,此郵件中的遠端圖片已經被阻擋。'; +$messages['deleteresponseconfirm'] = '確定要刪除這個預設回應嗎?'; +$messages['addedsuccessfully'] = '聯絡人已經成功新增至通訊錄'; +$messages['contactexists'] = '已有相同電郵位址的聯絡人'; +$messages['contactnameexists'] = '已有相同名稱的聯絡人'; +$messages['blockedimages'] = '為了保護你的隱私,已經阻擋此郵件的遠端圖片。'; $messages['encryptedmessage'] = '此郵件經過加密,因此無法顯示。抱歉!'; -$messages['nocontactsfound'] = '沒有找到任何聯絡人'; +$messages['externalmessagedecryption'] = '此郵件經過加密,可以用你瀏覽器的擴充程式解密'; +$messages['nopubkeyfor'] = '找不到用於 $email 的有效公鑰'; +$messages['nopubkeyforsender'] = '找不到用於你寄件者身份的有效公鑰。是否只為該收件者加密郵件?'; +$messages['encryptnoattachments'] = '已上傳的附件無法加密。請在加密編輯器重新加入'; +$messages['searchpubkeyservers'] = '是否在公鑰伺服器搜尋缺少的金鑰?'; +$messages['encryptpubkeysfound'] = '找到以下公鑰:'; +$messages['keyservererror'] = '在金鑰伺服器找不到金鑰'; +$messages['keyimportsuccess'] = '公鑰 $key 已成功匯入你的鑰匙圈(key ring)'; +$messages['nocontactsfound'] = '找不到聯絡人'; $messages['contactnotfound'] = '找不到要求的聯絡人'; $messages['contactsearchonly'] = '輸入關鍵字找尋連絡人'; $messages['sendingfailed'] = '郵件寄出失敗'; @@ -60,95 +72,104 @@ $messages['senttooquickly'] = '你寄出的郵件太過於頻繁,請稍候 $se $messages['errorsavingsent'] = '儲存郵件到寄件備份時發生錯誤。'; $messages['errorsaving'] = '儲存時發生錯誤。'; $messages['errormoving'] = '無法移動此郵件'; -$messages['errorcopying'] = '無法訊息'; +$messages['errorcopying'] = '無法複製此郵件'; $messages['errordeleting'] = '無法刪除此郵件'; -$messages['errormarking'] = '無法標上旗標'; -$messages['deletecontactconfirm'] = '你確定要刪除已選擇的聯絡人?'; -$messages['deletegroupconfirm'] = '您確定要刪除選擇的群組嗎?'; -$messages['deletemessagesconfirm'] = '你確定要刪除已選擇的郵件?'; -$messages['deletefolderconfirm'] = '你確定要刪除這個資料夾嗎?'; -$messages['purgefolderconfirm'] = '你確定要刪除這個資料夾裡面所有的郵件嗎?'; -$messages['contactdeleting'] = '刪除連絡人...'; -$messages['groupdeleting'] = '刪除存組...'; -$messages['folderdeleting'] = '刪除資料夾中...'; +$messages['errormarking'] = '無法標記此郵件'; +$messages['deletecontactconfirm'] = '確定要刪除所選的聯絡人嗎?'; +$messages['deletegroupconfirm'] = '確定要刪除所選的群組嗎?'; +$messages['deletemessagesconfirm'] = '確定要刪除所選的郵件嗎?'; +$messages['deletefolderconfirm'] = '確定要刪除這個資料夾嗎?'; +$messages['purgefolderconfirm'] = '確定要刪除這個資料夾裡面所有的郵件嗎?'; +$messages['contactdeleting'] = '刪除聯絡人...'; +$messages['groupdeleting'] = '刪除群組...'; +$messages['folderdeleting'] = '刪除資料夾...'; $messages['foldermoving'] = '移動資料夾中...'; $messages['foldersubscribing'] = '訂閱資料夾...'; $messages['folderunsubscribing'] = '取消訂閱資料夾...'; $messages['formincomplete'] = '這個表單有部分未填,請完整填寫'; -$messages['noemailwarning'] = '請輸入一個有效的電子郵件位址'; +$messages['noemailwarning'] = '請輸入有效的電子郵件位址'; $messages['nonamewarning'] = '請輸入名字'; $messages['nopagesizewarning'] = '請輸入一頁顯示多少郵件'; -$messages['norecipientwarning'] = '請輸入至少一位收信者'; -$messages['nosubjectwarning'] = '「主旨」欄是空的。你要輸入一個主旨嗎?'; +$messages['nosenderwarning'] = '請輸入寄件者的電郵位址'; +$messages['norecipientwarning'] = '請輸入至少一位收件者'; +$messages['disclosedrecipwarning'] = '所有收件者都會看到其他人的電郵位址。要防止這件事發生,以及保護其隱私,可以用「密件副本(Bcc)」欄位'; +$messages['disclosedreciptitle'] = '太多公開收件者'; +$messages['nosubjectwarning'] = '「主旨」欄是空的。要輸入主旨嗎?'; +$messages['nosubjecttitle'] = '無主旨'; $messages['nobodywarning'] = '要傳送沒有內文的郵件嗎?'; -$messages['notsentwarning'] = '郵件尚未寄出。你確定要離開並且捨棄此郵件?'; -$messages['restoresavedcomposedata'] = '發現一封上次編寫但尚未寄出的郵件。\n\n主旨: $subject\n日期: $date\n\n你要回復這封郵件嗎?'; -$messages['noldapserver'] = '請選擇一個 LDAP 伺服器進行搜尋'; -$messages['nosearchname'] = '請輸入一個聯絡人姓名或電子郵件位址'; -$messages['notuploadedwarning'] = '尚有附加檔案未上傳完畢,請等待或取消上傳'; +$messages['notsentwarning'] = '郵件尚未寄出,並且有未儲存的改動。是否捨棄該改動?'; +$messages['restoresavedcomposedata'] = '發現一封上次編寫但尚未寄出的郵件。\n\n主旨: $subject\n日期: $date\n\n要回復這封郵件嗎?'; +$messages['noldapserver'] = '請選擇 LDAP 伺服器進行搜尋'; +$messages['nosearchname'] = '請輸入聯絡人姓名或電子郵件位址'; +$messages['notuploadedwarning'] = '尚有附件檔案未上傳完畢;請稍候,或取消上傳'; $messages['searchsuccessful'] = '共找到 $nr 封郵件'; -$messages['contactsearchsuccessful'] = '找到連絡人 $nr'; -$messages['searchnomatch'] = '找不到任何符合的郵件'; +$messages['contactsearchsuccessful'] = '共找到 $nr 個聯絡人'; +$messages['searchnomatch'] = '找不到符合的郵件'; $messages['searching'] = '搜尋中...'; $messages['checking'] = '檢查中...'; $messages['stillsearching'] = '仍在搜尋中...'; -$messages['nospellerrors'] = '沒有找到任何拼字錯誤'; -$messages['folderdeleted'] = '資料夾已經成功地被刪除'; +$messages['nospellerrors'] = '沒有找到拼字錯誤'; +$messages['folderdeleted'] = '資料夾已經成功刪除'; $messages['foldersubscribed'] = '資料夾成功訂閱'; $messages['folderunsubscribed'] = '資料夾成功取消訂閱'; $messages['folderpurged'] = '資料夾成功清空'; -$messages['folderexpunged'] = '資料夾成功壓縮'; +$messages['folderexpunged'] = '資料夾成功壓緊'; $messages['deletedsuccessfully'] = '刪除成功'; $messages['converting'] = '移除郵件格式中...'; $messages['messageopenerror'] = '無法從伺服器載入郵件'; +$messages['filelinkerror'] = '附加檔案失敗'; $messages['fileuploaderror'] = '檔案上傳失敗。'; $messages['filesizeerror'] = '上傳的檔案超過了 $size 的大小限制。'; +$messages['filecounterror'] = '一次只能上傳最多 $count 個檔案'; +$messages['msgsizeerror'] = '附加檔案失敗。因為超過了郵件的最大尺寸 ($size)'; $messages['copysuccess'] = '成功複製 $nr 個聯絡人。'; $messages['movesuccess'] = '成功移動 $nr 個聯絡人。'; -$messages['copyerror'] = '無法複製任何聯絡人。'; -$messages['moveerror'] = '無法移動任何聯絡人。'; +$messages['copyerror'] = '無法複製聯絡人。'; +$messages['moveerror'] = '無法移動聯絡人。'; $messages['sourceisreadonly'] = '此來源位址是唯讀的'; -$messages['errorsavingcontact'] = '無法儲存連絡人的位址'; -$messages['movingmessage'] = '移動郵件中...'; -$messages['copyingmessage'] = '複製訊息...'; -$messages['copyingcontact'] = '複製群組...'; -$messages['movingcontact'] = '正在移動連絡人...'; -$messages['deletingmessage'] = '刪除訊息...'; -$messages['markingmessage'] = '標示訊息...'; -$messages['addingmember'] = '新增連絡人至群組'; -$messages['removingmember'] = '從群組刪除連絡人'; +$messages['errorsavingcontact'] = '無法儲存聯絡人的位址'; +$messages['movingmessage'] = '正在移動郵件...'; +$messages['copyingmessage'] = '正在複製郵件...'; +$messages['copyingcontact'] = '正在複製聯絡人...'; +$messages['movingcontact'] = '正在移動聯絡人...'; +$messages['deletingmessage'] = '正在刪除郵件...'; +$messages['markingmessage'] = '正在標示郵件...'; +$messages['addingmember'] = '正在新增聯絡人至群組...'; +$messages['removingmember'] = '正在從群組刪除聯絡人...'; $messages['receiptsent'] = '閱讀回條傳送成功'; $messages['errorsendingreceipt'] = '無法傳送回條'; -$messages['deleteidentityconfirm'] = '您確定要刪除這位連絡人嗎?'; -$messages['nodeletelastidentity'] = '你不能刪除此身份,因為只剩一個身份。'; -$messages['forbiddencharacter'] = '資料夾名稱中包含非法的字元'; -$messages['selectimportfile'] = '請選擇一個要上傳的檔案。'; -$messages['addresswriterror'] = '無法寫入選擇的通訊錄'; +$messages['deleteidentityconfirm'] = '確定要刪除這個身份嗎?'; +$messages['nodeletelastidentity'] = '不能刪除此身份,因為只剩一個身份。'; +$messages['forbiddencharacter'] = '資料夾名稱包含非法的字元'; +$messages['selectimportfile'] = '請選擇要上傳的檔案。'; +$messages['addresswriterror'] = '無法寫入所選的通訊錄'; $messages['contactaddedtogroup'] = '成功把聯絡人加入此群組'; -$messages['contactremovedfromgroup'] = '成功把移除此群組中的聯絡人'; +$messages['contactremovedfromgroup'] = '成功移除此群組中的聯絡人'; $messages['nogroupassignmentschanged'] = '群組資料沒有異動'; $messages['importwait'] = '匯入中,請稍候...'; $messages['importformaterror'] = '匯入失敗!不支援上載的檔案格式。'; -$messages['importconfirm'] = '成功匯入 $inserted 筆資料,略過 $skipped 筆已存在的資料

$names

'; +$messages['importconfirm'] = '成功匯入 $inserted 個聯絡人'; $messages['importconfirmskipped'] = '略過 $skipped 個已存在的項目'; $messages['importmessagesuccess'] = '成功匯入 $nr 封郵件'; -$messages['importmessageerror'] = '匯入失敗!上載的檔案不是有效的郵件或資料夾檔案。'; -$messages['opnotpermitted'] = '不允許的操作'; -$messages['editorwarning'] = '切換編輯器模式將會遺失所有設定的樣式。您確定要繼續嗎?'; +$messages['importmessageerror'] = '匯入失敗!上載的檔案不是有效的郵件或 mailbox 檔案。'; +$messages['opnotpermitted'] = '不允許此操作!'; +$messages['nofromaddress'] = '所選身份缺少電郵位址'; +$messages['editorwarning'] = '切換編輯器模式,可能會丟失所有文字已設定的樣式。確定要繼續嗎?'; $messages['httpreceivedencrypterror'] = '發生嚴重錯誤。請立即聯絡管理者。您的郵件無法送出。'; $messages['smtpconnerror'] = 'SMTP 錯誤($code):與伺服器連線失敗'; -$messages['smtpautherror'] = 'SMTP 錯誤($code):認證失敗'; -$messages['smtpfromerror'] = 'SMTP 錯誤($code):無法設寄建者「$from」($msg)'; -$messages['smtptoerror'] = 'SMTP 錯誤($code):無法加收件者「$to」($msg)'; -$messages['smtprecipientserror'] = 'SMTP 錯誤:無法分析收件者'; +$messages['smtpautherror'] = 'SMTP 錯誤($code):身份核對失敗'; +$messages['smtpfromerror'] = 'SMTP 錯誤($code):無法設定寄件者「$from」($msg)'; +$messages['smtptoerror'] = 'SMTP 錯誤($code):無法加入收件者「$to」($msg)'; +$messages['smtprecipientserror'] = 'SMTP 錯誤:無法解讀收件者清單'; $messages['smtperror'] = 'SMTP 錯誤:$msg'; +$messages['emailformaterror'] = '電郵位址無效:$email'; $messages['toomanyrecipients'] = '太多收件人。請減少至 $max 人'; $messages['maxgroupmembersreached'] = '太多群組成員,超過最大人數 $max 人'; $messages['internalerror'] = '發生內部錯誤。請再次嘗試。'; $messages['contactdelerror'] = '無法刪除聯絡人'; $messages['contactdeleted'] = '聯絡人成功刪除'; -$messages['contactrestoreerror'] = '無法復原刪除的連絡人'; -$messages['contactrestored'] = '連絡人復原完成'; +$messages['contactrestoreerror'] = '無法復原刪除的聯絡人'; +$messages['contactrestored'] = '聯絡人復原完成'; $messages['groupdeleted'] = '群組成功刪除'; $messages['grouprenamed'] = '群組重新命名成功'; $messages['groupcreated'] = '群組建立成功'; @@ -156,20 +177,35 @@ $messages['savedsearchdeleted'] = '搜尋結果刪除完成'; $messages['savedsearchdeleteerror'] = '無法刪除搜尋結果'; $messages['savedsearchcreated'] = '搜尋結果建立完成'; $messages['savedsearchcreateerror'] = '無法建立搜尋結果'; -$messages['messagedeleted'] = '訊息成功刪除'; -$messages['messagemoved'] = '訊息成功移動'; -$messages['messagecopied'] = '訊息成功複製'; -$messages['messagemarked'] = '訊息成功標示'; -$messages['autocompletechars'] = '輸入至少 $min 字元才能自動完成自動完成'; -$messages['autocompletemore'] = '過多相符資訊,請輸入更多文字'; +$messages['messagedeleted'] = '成功刪除郵件'; +$messages['messagemoved'] = '成功移動郵件'; +$messages['messagemovedtotrash'] = '成功將郵件移至垃圾桶'; +$messages['messagecopied'] = '成功複製郵件'; +$messages['messagemarked'] = '成功標示郵件'; +$messages['autocompletechars'] = '輸入至少 $min 字元才能進行自動完成'; +$messages['autocompletemore'] = '過多相符項目,請輸入更多文字'; $messages['namecannotbeempty'] = '名稱不可空白'; $messages['nametoolong'] = '名稱太長'; +$messages['namedotforbidden'] = '資料夾名稱不能以點 (.) 開首'; $messages['folderupdated'] = '資料夾成功更新'; $messages['foldercreated'] = '資料夾成功建立'; $messages['invalidimageformat'] = '圖片格式錯誤'; $messages['mispellingsfound'] = '郵件中偵測到拼字錯誤'; -$messages['parentnotwritable'] = '無法建立/移動資料夾至指定的上層目錄 (No access rights)'; -$messages['messagetoobig'] = '郵件太大無法處理'; -$messages['attachmentvalidationerror'] = '警告!這個附件是可疑的,因為它的檔案類型與其宣稱的不同。如果您不能相信寄件者請不要開啟附件,它可能含有惡意的內容。

-Expected: $expected; found: $detected'; -$messages['noscriptwarning'] = '警告:使用Webmail需要Javascript支援,請檢查您瀏覽器的Javascript設定'; +$messages['parentnotwritable'] = '無法建立/移動資料夾至指定的上層目錄,因為無存取權限'; +$messages['messagetoobig'] = '郵件太大,無法處理'; +$messages['attachmentvalidationerror'] = '警告!這個附件是可疑的,因為其檔案類型與宣稱的不同。如果寄件者不可靠,請不要開啟附件,因為其可能含有惡意的內容。

+預期要收到的是:$expected;實際發現的是:$detected'; +$messages['noscriptwarning'] = '警告:使用 Webmail 要有 Javascript 支援!請確定您瀏覽器已啟用 Javascript'; +$messages['messageissent'] = '此郵件已經寄出,但尚未儲存。是否立即儲存?'; +$messages['errnotfound'] = '找不到檔案'; +$messages['errnotfoundexplain'] = '找不到要求的資源!'; +$messages['errfailedrequest'] = '要求失敗'; +$messages['errauthorizationfailed'] = '授權失敗'; +$messages['errunauthorizedexplain'] = '無法核實您有權使用此服務!'; +$messages['errrequestcheckfailed'] = '要求檢查失敗'; +$messages['errcsrfprotectionexplain'] = "為了您的安全起見,此服務能防止您被騙去做某些動作。\n如您看到此訊息,代表您離開結束此網站時並未登出。\n\n現在需要加入人手操作才能繼續。"; +$messages['errcontactserveradmin'] = '請聯絡您的伺服器管理者'; +$messages['clicktoresumesession'] = '按此繼續之前的工作階段'; +$messages['errcomposesession'] = '撰寫工作階段出錯'; +$messages['errcomposesessionexplain'] = '找不到要求的撰寫工作階段'; +$messages['clicktocompose'] = '按此撰寫新郵件'; From cc0defce869b8f27573071cca80abae59cac2713 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 21 Apr 2017 09:48:46 +0200 Subject: [PATCH 43/68] Fix failing database schema check in all engines except mysql (#5730) --- CHANGELOG | 1 + SQL/mssql.initial.sql | 1 - program/include/rcmail_install.php | 30 ++++++++++++++++++++++-------- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 49851229d..42348adb7 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -9,6 +9,7 @@ CHANGELOG Roundcube Webmail - Enigma: Always use detached signatures (#5624) - Enigma: Fix handling of messages with nested PGP encrypted parts (#5634) - Minimize unwanted message loading in preview frame on drag (#5616) +- Fix failing database schema check in all engines except mysql (#5730) - Fix autocomplete popup closing with click outside the input, don't handle Tab key as Enter (#5606) - Fix jsdeps.json synchronization on update, warn about missing requirements of install-jsdeps.sh (#5598) - Fix missing thread expand icon on search result in widescreen mode (#5613) diff --git a/SQL/mssql.initial.sql b/SQL/mssql.initial.sql index 219aaa775..6030d704a 100644 --- a/SQL/mssql.initial.sql +++ b/SQL/mssql.initial.sql @@ -88,7 +88,6 @@ GO CREATE TABLE [dbo].[session] ( [sess_id] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , - [created] [datetime] NOT NULL , [changed] [datetime] NULL , [ip] [varchar] (40) COLLATE Latin1_General_CI_AI NOT NULL , [vars] [text] COLLATE Latin1_General_CI_AI NOT NULL diff --git a/program/include/rcmail_install.php b/program/include/rcmail_install.php index ebc4fd165..d45be364d 100644 --- a/program/include/rcmail_install.php +++ b/program/include/rcmail_install.php @@ -448,7 +448,8 @@ class rcmail_install } // read reference schema from mysql.initial.sql - $db_schema = $this->db_read_schema(INSTALL_PATH . 'SQL/mysql.initial.sql'); + $engine = $db->db_provider; + $db_schema = $this->db_read_schema(INSTALL_PATH . "SQL/$engine.initial.sql"); $errors = array(); // check list of tables @@ -484,13 +485,26 @@ class rcmail_install $keywords = array('PRIMARY','KEY','INDEX','UNIQUE','CONSTRAINT','REFERENCES','FOREIGN'); foreach ($lines as $line) { - if (preg_match('/^\s*create table `?([a-z0-9_]+)`?/i', $line, $m)) { - $table_block = $m[1]; - } - else if ($table_block && preg_match('/^\s*`?([a-z0-9_-]+)`?\s+([a-z]+)/', $line, $m)) { - $col = $m[1]; - if (!in_array(strtoupper($col), $keywords)) { - $schema[$table_block][$col] = $m[2]; + if (preg_match('/^\s*create table ([\S]+)/i', $line, $m)) { + $table_name = explode('.', $m[1]); + $table_name = end($table_name); + $table_name = preg_replace('/[`"\[\]]/', '', $table_name); + } + else if ($table_name && ($line = trim($line))) { + if ($line == 'GO' || $line[0] == ')' || $line[strlen($line)-1] == ';') { + $table_name = null; + } + else { + $items = explode(' ', $line); + $col = $items[0]; + $col = preg_replace('/[`"\[\]]/', '', $col); + + if (!in_array(strtoupper($col), $keywords)) { + $type = strtolower($items[1]); + $type = preg_replace('/[^a-zA-Z0-9()]/', '', $type); + + $schema[$table_name][$col] = $type; + } } } } From 045cc38ebee9d86828eb43604758d6bb8cb72eaa Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 21 Apr 2017 10:17:32 +0200 Subject: [PATCH 44/68] Recommend document root change after installation to /public_html (#5707) --- INSTALL | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/INSTALL b/INSTALL index ab29b4f0c..3bdf95a9a 100644 --- a/INSTALL +++ b/INSTALL @@ -152,7 +152,9 @@ for even more guidance. You can also modify the default .htaccess file. This is necessary to increase the allowed size of file attachments, for example: - php_value upload_max_filesize 2M + + php_value upload_max_filesize 5M + php_value post_max_size 6M SECURE YOUR INSTALLATION @@ -175,7 +177,10 @@ NOTE: In Apache 2.4, support for .htaccess files has been disabled by default. Therefore you first need to enable this in your Apache main or virtual host config by with: - AllowOverride all + AllowOverride all + +It is also recommended to change the document root to /public_html +after installation. UPGRADING From 278b46a99d6918df53f87ef185e1ed7c18e7bc66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20Bj=C3=B8rnson-Langen?= Date: Fri, 21 Apr 2017 10:39:49 +0200 Subject: [PATCH 45/68] password plugin: better error message on constraint violation (#5727) If the password policy on the ldap server is violated when changing password, report error as "constraint violation" instead of the misleading "connection error". Only tested with OpenLDAP (v2.4). --- plugins/password/drivers/ldap_simple.php | 6 ++++++ plugins/password/localization/en_US.inc | 2 +- plugins/password/password.php | 4 ++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/plugins/password/drivers/ldap_simple.php b/plugins/password/drivers/ldap_simple.php index e16aa505c..800b4e91a 100644 --- a/plugins/password/drivers/ldap_simple.php +++ b/plugins/password/drivers/ldap_simple.php @@ -165,8 +165,14 @@ class rcube_ldap_simple_password if (!ldap_modify($ds, $user_dn, $entry)) { $this->_debug("S: ".ldap_error($ds)); + $errno = ldap_errno($ds); + ldap_unbind($ds); + if ($errno == 0x13) { // LDAP_CONSTRAINT_VIOLATION + return PASSWORD_CONSTRAINT_VIOLATION; + } + return PASSWORD_CONNECT_ERROR; } diff --git a/plugins/password/localization/en_US.inc b/plugins/password/localization/en_US.inc index b25495a33..79a94a2e9 100644 --- a/plugins/password/localization/en_US.inc +++ b/plugins/password/localization/en_US.inc @@ -39,4 +39,4 @@ $messages['passwinhistory'] = 'This password has already been used previously.'; $messages['samepasswd'] = 'New password have to be different from the old one.'; $messages['passwdexpirewarning'] = 'Warning! Your password will expire soon, change it before $expirationdatetime.'; $messages['passwdexpired'] = 'Your password has expired, you have to change it now!'; - +$messages['passwdconstraintviolation'] = 'Password constraint violation. Password probably to weak.'; diff --git a/plugins/password/password.php b/plugins/password/password.php index d4b40063d..207113cb7 100644 --- a/plugins/password/password.php +++ b/plugins/password/password.php @@ -25,6 +25,7 @@ define('PASSWORD_CRYPT_ERROR', 1); define('PASSWORD_ERROR', 2); define('PASSWORD_CONNECT_ERROR', 3); define('PASSWORD_IN_HISTORY', 4); +define('PASSWORD_CONSTRAINT_VIOLATION', 5); define('PASSWORD_SUCCESS', 0); /** @@ -351,6 +352,9 @@ class password extends rcube_plugin case PASSWORD_IN_HISTORY: $reason = $this->gettext('passwdinhistory'); break; + case PASSWORD_CONSTRAINT_VIOLATION: + $reason = $this->gettext('passwdconstraintviolation'); + break; case PASSWORD_ERROR: default: $reason = $this->gettext('internalerror'); From 757ba8b81acac2a625c49b5f6671099efb8afef8 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sat, 22 Apr 2017 08:06:07 +0200 Subject: [PATCH 46/68] Fix typo --- plugins/password/localization/en_US.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/password/localization/en_US.inc b/plugins/password/localization/en_US.inc index 79a94a2e9..89790e53c 100644 --- a/plugins/password/localization/en_US.inc +++ b/plugins/password/localization/en_US.inc @@ -39,4 +39,4 @@ $messages['passwinhistory'] = 'This password has already been used previously.'; $messages['samepasswd'] = 'New password have to be different from the old one.'; $messages['passwdexpirewarning'] = 'Warning! Your password will expire soon, change it before $expirationdatetime.'; $messages['passwdexpired'] = 'Your password has expired, you have to change it now!'; -$messages['passwdconstraintviolation'] = 'Password constraint violation. Password probably to weak.'; +$messages['passwdconstraintviolation'] = 'Password constraint violation. Password probably too weak.'; From ce61c8210e5d419ae03395dd7be7ea87ab931b93 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sat, 22 Apr 2017 08:14:56 +0200 Subject: [PATCH 47/68] Added test for rcube_db::parse_dsn() --- tests/Framework/DB.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/Framework/DB.php b/tests/Framework/DB.php index 23febfc10..2d27a0893 100644 --- a/tests/Framework/DB.php +++ b/tests/Framework/DB.php @@ -123,6 +123,20 @@ class Framework_DB extends PHPUnit_Framework_TestCase $this->assertSame($expected, implode("\n", $db->queries), "Query parsing [2]"); } + + function test_parse_dsn() + { + $dsn = "mysql://USERNAME:PASSWORD@HOST:3306/DATABASE"; + + $result = rcube_db::parse_dsn($dsn); + + $this->assertSame('mysql', $result['phptype'], "DSN parser: phptype"); + $this->assertSame('USERNAME', $result['username'], "DSN parser: username"); + $this->assertSame('PASSWORD', $result['password'], "DSN parser: password"); + $this->assertSame('3306', $result['port'], "DSN parser: port"); + $this->assertSame('HOST', $result['hostspec'], "DSN parser: hostspec"); + $this->assertSame('DATABASE', $result['database'], "DSN parser: database"); + } } /** From 79699813201388c2dc6a71e8abf7f6e3cc272622 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Fri, 24 Feb 2017 12:40:39 +0100 Subject: [PATCH 48/68] Flattened buttons and icons, removed gradients and box shadows --- plugins/enigma/skins/larry/enigma_icons.png | Bin 5774 -> 2520 bytes plugins/help/skins/larry/help.png | Bin 2876 -> 1124 bytes plugins/jqueryui/themes/larry/jquery-ui.css | 57 +----- skins/larry/addressbook.css | 43 ++-- skins/larry/images/buttons.png | Bin 15893 -> 12751 bytes skins/larry/images/listicons.png | Bin 12614 -> 18514 bytes skins/larry/images/messages_dark.png | Bin 1424 -> 549 bytes skins/larry/images/quota.png | Bin 4967 -> 1558 bytes skins/larry/images/selector.png | Bin 178 -> 118 bytes skins/larry/mail.css | 71 ++----- skins/larry/settings.css | 2 +- skins/larry/styles.css | 207 +++++--------------- 12 files changed, 81 insertions(+), 299 deletions(-) diff --git a/plugins/enigma/skins/larry/enigma_icons.png b/plugins/enigma/skins/larry/enigma_icons.png index d6c51587b9821533a0b1a48dcca40d0d7066f854..0d9eba8deac59fc02376e54ca106c5aa0dff0266 100644 GIT binary patch delta 2511 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 diff --git a/plugins/help/skins/larry/help.png b/plugins/help/skins/larry/help.png index e815e54440e16bfa61c3c431f67385a0054a5229..824eca9ebe49f45258c2b4f01f49c7e6be0b0251 100644 GIT binary patch literal 1124 zcmeAS@N?(olHy`uVBq!ia0vp^azMO_gBeKnZsq?Bq$UUWgt-3y|Nk$EKw;T$l2BT1 zAxUVR>l#O(^9)OZ{DK)2`tSc2nBTD8V86rrg7XOh=zNEShJf||-|wHVAkc4c{(gZC z%Wt3;nf*Oo978G?_e^3x_f&zWrLytMya{pd>rZVxcw$f)cBIA6*?_?X1dq1xQ9+t*`7x13}H225yD#?+fXjn6fo60Tl9dO z#^zN5sc#b^6O22AZX8h4S#o(g*Ba*}uasq%Ht&vj`b{EcwTPV1&MsLWe%@rCWo}0e zI%O7^3jNDHB*M3UuJEyKo=4Xdf9hMwS90#2Z*ixG$fV_NdLfgSyUpxAwx=ugoZ7S| zW#2c#pO@XAwC7LspZ(vSuYOy_yZZet@dpM>lFKvOj2}O^y!86(w5Qu%)qUi8|H~lb z@TvBDI}fhZzp-9+&vnKYyV$CieBb)eRC~~to$0Q?y2yU zhhMI8Exx)>e#1X8-&Y4t^i&??iTJ(M`tR}dw{zuZC7u7Xs@43@%sK4YH}fwti^MZJ z-MUg2uEKDlkS}C$?4@s-OLr*d=`*i(@Rf3Zd;8lWXS?MO7GykI5K-{AB<+34l(j$J zI33i#_BP|3rS$gb?fZhyh%R_m!5G{iHRrZ=i^=81pYAw3UU~e>0jJA4d+$y7(Zs!N zzeeia%u^n^JJTPUp18qy{a?);#f%9{`1YN+TbF&eLzkKa?nX6YmCnl|`OnP1Ee|uB^ z?M?T#+DC5BQw?YM_->ZiF1R3S`qLyXFg?tqDnfmUm#LqFTz9m5 z`df#6X6ugeT}+r(DODdMF0pGp+ws)fEJsWg*Q6<}*gW-0Ma0FtKR=qRH%#~4n)yq` rPCRZe`=2V6c>c39cKkiN>#Ok2$#qW4=b5wt^Cg3)tDnm{r-UW|s5V8) literal 2876 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 diff --git a/skins/larry/images/listicons.png b/skins/larry/images/listicons.png index f877ae27b375f920ab58b503b7948e1063c9aa3d..160cb24d202f0fb9dfe615cc71b85f5cc1a7fffd 100644 GIT binary patch literal 18514 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 z zqMh>q;y!dy$1m0HCxDd*HVaG)L!$9>mD2=e6vab&I#kqh_-A(ASWh$ym3qI(m(A<@ zX7Dpx=CnQw& zW*7Y>J%J)f4!@CLwHwoA@i|U~xcl`bObbzA4 z0S_>3Nch=8y!mbW!8ThENAgLS3yQNVtudcYk`E#&2yyjdfQ`R za7p_Y%0Gw@hFY-x=;9w)Q~He=_Y_c2A=!sX>8H`Z3t>E8h({MP*uPrwA-nnu9~ONa z`5YXruaC9sKaMg~R55NG97T$axpSt+q&PV64^o`HmPLniQl_udA%*@9@0)<9?P*W- zxSU_XPkgCwopbM3Qr^gB43WtFH~epcUWzjk@rFWd1V{<;XWtC2ZfU}6kn%Kt5zXu0 zwXv#@h#f(B?E<7P8n8@{VI&Zmj$0FZ^MX|bX-3(o+vrTH6V5J{c#ibtpb@9Z+Ky5w zPRr*B!J=PS|ABzkKwLH46#ZwC7F{!1bx9iIE2VD@hpN;4`p}7s)S=~SWL=s3gcEQ! zqMd^;zi2~MnvkiU;mt3JsLWzfBoxw*FBvT@X_|#KqSF``v=74NuuodT^iEY_d-A{K!nsEMy!9k4Z!0pGuj{OF*uBRv3s15|LHK zmGu;2v77v!#k}tQfzMUHMt06a7B}Ln&iR}VQQN=h?{burPQA9K&IiL^egZZ-D1Tu8 zYpm@dul>7q)Q=p3n6cuRo{O0C5(FKWJJ@kpcbf*+sIur&xkk!nfQGuQl3JZI10$cU z+a34q`By`X=1a8Q8@_%ITINynsDKJmOWBVUoWT3RtMimW6zo$gb1EDXVrdW?Z+y#W zS&oGNz(Gn(&pvJbQy;^I#*PLZH|H**DuW7XIk7p208L@Fe3j}@ z?s}2!quKJ<^+dv=iAgvGR-F5rWv9S`SRo1qv;C6Mj>Z~Ab*&>G-MY*;X>(4c<+R#- zo{MO?ow+S^k&e5CCB-gPQp|)2w8cM6H@vD| z@R&TLgYp!82h?fDXU68aJU^`Dd|vPU^XnfxaUTyIkF>BqL&#{a56~YI^JV9yIX!B0 zQtOwU;%hjmsB2M+5^^GBFa2h_N;l5OVdkvRU()U{QoeDS&0W7Q!MHL?AJEUlKP}@U z5lT3zUmjD25p@h2Y?d1C{-_?9Bdy|hxmoDTQeWuhL&^az2 z_HI3R{}&HRZp6XBY1aO(LmFx|#p;_IC`Es#EP3iEj#m$RQ?KEDpzY3q_3bdu&+zT@ z8xwCbK!~(4Qo^rola0g(};Yffe z8NuTxJd7dbA6{hGAAK?Og=R{f@c#rI2A=(l$&w?`O(1n_Q8bl(t0Orz?;>XL>Bb%c z94P6IYfOyeMmlFilc}{q&ulAA)Tk8pbCp|Nn!!DBj7HV3o`pYOs@yK|cvFs0&sya# zznFmiRIvS68L3CP%}{`{FCA+lZ}K;c{RJ6Pj02|Sx$j`m8?N)y5K7Us?`{KFXvTSr z7ax=8{l5%VEiCt5ob)`SzfZSy2><%b7!yh^!zCrMa{i77TV`}a!dA~@AO;PlIBgWHy{^I&cn%J~^6fgdZM#LMi;xtk|50!j9E=Rc9?z-Pb7Q@^%zi4YHhND0r;*&Ykn zY37oBFQWpUuc_3K(Uc+0Mfcb#183~Lq{*-xpEQp%YfaKu^Krl4JwLRwq!>`5FM~WH zd$G7$@?D@9LP0zZf5e(wKkWSbzR*MT1g*K0(ieYTguxmpaGQC6J+L*_e6&ZD1d4)s8 zCmrs@0?f88^h7~W+X!N~$+N!iO3(yQ*fH23h{~7mu>^0?k?+T(cb{**31ct%TEd9o zCV5o>qRid9H_c9R92UEN&?^TyeOfJQMZv6`;qbhxMit(w=9@4gA$MI$&9H(8VSIGA zs2vZY^{n%r%z33er+?d-jox&{-h=s?ye&ERJHBIK>9Q}58Z0l;BX5{XuN2nnIH$4w z^``?nijtZ09Z&g+4r)^OT0M!1bsHxBW$0jqlW4{=v_5C-+}PbPfy}rKGv=K`@XzJf zt*Ss~L%r)4Z{I@co;bqZcJhLF0X`@X^YRE@J8E&Kmog9MG$OW>)q^5s7xxt?{SBqN z+LmbTcAD=kC0Q``M66$1hKg9irfjF3YOkixSex9K5+d1)P#hO*StY)gU4LG#Ysp22 zhCEz^T5msGtw)~v+0g~+^9K=n`$NYUs?T!@;1C(~NuC=LnK|VS^lY}&rUrvm&{W22 zRf#qY4{Y|0umz0?vSw9wAelukby9yB2xt|@ZvOsRTCD>7bFJq=;xK1|)g9RK-QZ8q zHiwg<-MAO`MH~7}&;XmZ+gp3KEu7vx7lJI@HXR6P2<)@C6zLTovtph#=hlnGX(&BZ zk;%i0Jk~pG(T+H{Aa;EmEu+tL+qlJAVy8TGkHnJGBHqeoyya;qqf?6%JJnTmnl`G_ zcX*V`_^xd>=)?JtF8v|u0D6JL?7{fx+C(az8Yy>dc~+C>tN~QQ6x{da!qeiBBTaGg zLHj8eGRkqOY{Eu*b$Y?-(SmtHd_5T_{11VjRbOp>rAC;=XAGsu5?s0==bNAq)`ktY z;0r97hR$P+!5ToCRp%XNs_TT*mJti?#}iR6??OEgkb_9KVb3h@aT`uamd{T>EK%vF zQaD3SLs;ImUCpzhQNMB{xe%)H9tcJj;;qUt#2E#dVcvFjB?d^Rcc0)D!)Skn+^1V_ ze7Xb;wb!o;BAZ#z;fF#eZwvV30LUl=jMi7>@Pq1!XlqP^)w!>|909$zRpTco|F$$a z!H}c&W1^v&=o?hu7&GO$t4}dot!usXx~qiCw;-EuoZ=RE?W zWr7u0N2;qru}6Z*EMOnWwrAb4Z(cB9?l$bT*Zm3(aIs9XaPAp$&#qQtA6gG`L2Q2U zEn^_KI~1(K9#R!*J9dB!4XxJ#74o!q&D@4aMrH(jIbYPpw3nQ{BZS@Vu5OWFDqr;A zzs*?`;az24*;HLIMS0mrW=M6>ClLs&#e~Rr!H6rEz4-d&0sHMEI{LkfWmQQ(F! z7yOdy;LL)9$6j)cbMm%EwT!o_3dCDAUxYQmS*n+ZN0wIu5)o|%Bp|{&o`|2O7#!fl zNAA8P9tcRZbZxsPaE0I$Z0_FsXOCnPU;MI`hY{cJk{|1(@y_S{j+cp8OUzU+8F8sR zC8Neay>C}7Z9|12Z45a0Y*AN}8to2rHUZaM=@G9JhoVY$N<;2Y8*vInDe!v1H$*!a zbo)e84^RZXs!OF%HwF34>mA=fjSLW^RKbEn!8iw}~2%#z8TLASqS4U++A zp!MNC0Xd=F5jAqUvAYS9ok!;6Oqa8PV`wN`soHSp0PE75?N4NVcb;}tHh`Xj3coNo z73526C&J3mF%e30*>Bk+U2YXIfZM=n5D)kvf$EWDCt$~%hhg}1S^t$4MY&^d>6m$b^gI8CcIN_aQZueN#kHdZe+7Rnx_&C~zt@=gS9M* z;i51}JU$Pkq-)Yz<$8ZA%D#)G zQ^?WZxXL)U$QRm26qazElR+%2(^V*+`m|$aXD}{O10DauwtTNCa1$saoAq!$N{biK zP<}h=cRTUCs^qQcC;GvROmWgvhEvu&?eElXSm<78vwRH&?{Y;yM1bC?N0ch_;*s@B z?7a2n7?+D2q#7EA`O;2Y<)6Qa$)2+9NAd7xbD*0P*mIaLR@7@SvV@#ZcS_uZd@V9Q zf!$Kjk*e%KuCc`?lrM(er^`%Zx}e**nk}2amBOLUV%B*4dxopl9&=JqndEl+B2lmL zDeNfuj3d-=QCw&8yFoo-FBNZ&qD?yXSr>|qkB1WIF>2JERc~*Yq>NkdJbdyX88e@Z7%fyAjC;do&Y5!C%(-xrLv$ntFO zgGIl!ie2otgrK0cm~>xa4w>{^+oGUu50i3D?iJn{eLY3cdc9$B(_c_q&R;#V3Dy36 z+jn8z;dQEih1Y#`k{mi)p0kbjGgLNY`x@^@o1<|dF#M1K@QC)vs|PgcaCsFi^CxCg z!r!3h$(uVE)y_#Il@O zz$I24>EL6{{`EN?s^9&$sm*|Qbv-DUuW`n4a_u9$myjR6K-#x7BA z_XaPEquXyuJ5q!7js+uKRzz356E6;WAXts3HN;-5u7I%XmO({jsur=VgnL_D$>oz2aMTo%C{>fOx9Gq#}oG2A0nnIH3vLOAbVtL?dnH0scb zwKWpV@C3frg?#CP^?$l5luA>6#>+62o>C0sGmkS+bzNEg@=pqF3{PSDITxXtpt zG;2#nnLN|nm`2j?^vF4BEbqeJA--#GLdyI|<2vUVC8ZQ_xc((8=%bjeuDuYaY{lm! zDSP+Z=~W<)JDxAUvw}kb-@_fS0f|x)GLlaNP4n~>1r$og1 z=g_2W(*@}zUTqp?ttcC(ITXg+(Fwj6Np04SNXGd3+iocRN7^3h!4OJ9#aF)oRbODc zWF>R?=*{L>PD&($^euzp)06*YIB(jbxwqp|J)fTOzw%+c? zI-5a;y24@s=A7DQ3SShW`x0QS^&t6&WYq^kb1yHRp@bDV(wSQo+S81(>B!H!zV!Qt zL=r4ErCHk~`z2h*)P+NI4WBgk%D&?^5bV~y`e~+2u|kSG<@>wn=oK<4mw}oit`F)R zNx|xe`LBkDXt&$Fgg4&(=~rPlyV7fF&9BSck1j0_u)gDA@*>vy5qa)JbRou5eeo^N z&yGdA`sw@QK%4oSWVavqG^YNamE_V%s39?7n@InE`4;K_(fcvXTD0F;oX3pDL#?*x zYK~(dGmq-){xD1$TjMlHnYynSDT>LyE#rTx0l)EoZeIg>kEF?EoNKvDK#jXGkosgW z9J$Ghft8j5MkIbv&?1J7*cXgp_`6AhHeHe5Ignfv_K#TYj33C;(}SbDh<7@BTRiH= zM3T7Vo&q&u;mRkJY*qQ&rm)o)0ZM_@XY{rdMD=n1gWoMj8dVeeKM_apQ$toskkm3l zsBz3V0HcUY{uL6Y|G(9uiy1L}|At~bAqiBwFZ%8T8M*~q5n4t8{x@(WB%;_4|B3l# z2nAx)O;z}IYa^yJfy~w2#!FawF94!ei~1$oB^6yTftP;p34)nG+j=mgqf)}si^870 zEv0KFjP#s|s&+#p(s5Rec`mIYN(KN5#IB$C^ag0hY61oot zAO{uD9whI&wY;O5`j(Z>(|}JcIB-+u7^-7J@HJt@JmMUb zFeArZg5MG2(5fIg_P-5=4sLt?9aGYvL>x25aOaF*#TeTA&ic@~^^VeDTpoC?+8jL% z(s{of)~S}TO}N5N1kTdMqAmsV1`|;GfsSQ25{96Jf^o|NB zJgmcpvERAqw9<0GLY|}Vxx9JNY|ZcAF%{`0(2s(FBmGHgAU&+c1i$dMVa)$lt?1eOk#zZXc$L2PZTBHZTkjt{WI#R;T+sJ3%dOj}SY6QHlUxTAgSxo<#F`ta$ z4v3fvxufs|Pj01H-`jFK3>JTmo+9A;J;!QPNP(4mRuADsJ_a9?F5iYl=eUhMW+@DGVW7+1@q_?Hn{?ndb5sKYXs#Oo~p>Yd0(&3{i*G1Rj0BBVP4g3%Z)!w@XG3 z=UOCc4^(}r8!&FVtDDGGk|&&aO7_MLulOI`=cTmJug&o1zL-4c{^-GZjiV+leoQ zmZJbjLb=R(_sTFi7=|-ZFQNvZe4OI!X*9_6;rKbfn>IdUe=WN9cEtj!q zeKC5K>~XdUL-WW(=_Rc#>!d-}hgOo=Py-9U6avCqq&9$k){a*FQptS#3 zJcc^-Bts#|#S~>wq@}@hxhkv9CA{{19qc4K@<+wfU#~2BzfmrqOrJab_{sP&reZ^& zD68Do*-udhXq{PSeSr65LgQ{B@kd3z3ulOHu!5ZrBDm$HsXcd()sW5A>2bZCO!R%# zC(ld#*~^FDKfWB@HuIVWnHd*6r8C3#5R=^C3v6=<^(@|CBjWo~tY6Tk!ER+R=$R~W zI|JDg3q_u^-W+&@;S4SxOORmGNV+P7iEdP?!^@OJnyx;w=&3tsqyhf2Q|wJ+Mk1A= z7}jn-UF8whkZX_)em}i4c&E11?a-|y9o-q65E<*#v5>YyoJ!+fKN*Ap#e% z#{I}{}g!o=_d+={=8ycRhM+D-rkKF=TB&-zLCti*(wGNE3$l(fMXs~~84 zVM%A5oyALv1{g_!Gs-IH!q^r}$O~YV4pPR+>uLS=;=7V0YO>jm$DJ+%-~*l#l=M4V z)Fp^_Q#A(3a2*WSj)mP0Sl37_p0?p5i7c?WS(_73h}+)>;|4AqHmA2(&h;iI)iQSOuY+KyT@-Mw-&5yP7cq)pHz^ z06`6%_i+9n6L$C6!MB5s@Eb8(Vdi>D6!RV|!xr~MA6fN^SWnE?Ygpg-y@8Gk*DlM4 z$xliBJ~zhx@Nx?xS?|P4o>PSryM60%Sk$`;w|TmamX+(rg=F_~knrJdjB31*G{-uB znvU^J$VFVD%DI{4FN?_S@+?+M!CadN`Q~ywYRcqOJt|rAixfg(W?-vj ziiz-!hu42*HQ!&gG7!**m6rm z{M*7};9n-zJG3l0RRDJ^e;T%L(EhMfUE~?3nTyBFoDP_r#Fru)ta#JM#&^6%JNF#M zO+kJk#==aUHvj3S(#EKJvdLeY#%oIYTws*6CAA8~MGYA<9^>$IN}|nNsKY;)&`;~N z#bnZ3LQ$`0LCp8Xj0(#2BWa-=i1XQIHOa+P@wi4+A?5@Ef?d2ip?(z787qP+{3Gs? zgw9g=tmQ?Ycs^ItnE0`D$AEtxa<-OD5X%^c8yQ<*6VdIz`Dmr1Ae-confro5Tc607 z{#BtU2D&jc=@$Ld=dyIc7#|R!^r)SBH_FMI9KP?kTJ$VHCO8=QUswTD^Zxv^*^Iui zFaHm3ThA71Grq9}u(1Ekfoe?7CKwX*r?-CME@D+>_G4w`C(9-9SYcWa<5M;zJCb9d7k76CV#jvUgCDAtT`3x8|UCC#pA3 z3eUyN6Jen}-zc%hB(uT;q)x0r^VEfiC3M*3aINYJ<3%wguuw|oHSq6k8bDzIy;S59 z`pu%4p%Ii6ge-kA&NM-m{>O=l6jDmrU9W?YrN49xaZ>cJL|tK0imTYIwNauS`OP0N zl;bv>VVN3sESWIcs%Z^Kq`MfuB!25YoDOA8;XSM2O3?h-TItv)TB>F|*2U6&zWIAO z6}C(x3v9()B0BGGKKo5nHkv>Fo&1=6pG;|(>O6tR;3y+%cO zsEa+GC`r^5yOS&3_fwEKXSW}-p{D40PZ{8O(Yn!M2)P|Nfw!1f)>EEeNPn0mf1${n zBy+9GGA9Y-NhZDkKk>aPq_Cs0-|EEoE&l|Zdh!D3yT_ICzsnZr)bu0z1PRL~(A8ak zCw(N`3oQp}RK20@x+q*-mILe~uB1o07l!f|6roSqc~8GsonfASeSO+9^qSSOq6V6j z^0U3Sl@XafEb3q(J#*zbo`7{Oq3zTC{~}T(8_!rF>>S^C`@OuNykE7eH7=-om3;Np z>fI~hG_;ti2EbWs^Bkg@vdCoZq+^TS#dD_a4<0oZozgc0SS6L-J=xoZXonnP);SN#Nn@P58!kyjvoff0s`MA@?soh(I-J5kj3r z*ctVIvh#Q%CLKwv!bH%1j+=5mW26k?x(><_GR(x7xIyO|O|(mmu@}T@%$e|$RZq6( zEJ`>pj!7x`g1l~0%Qpc#7TCaT!oS5(&SIkbN>AtV28Nz&Mw~HUQaswQvt(~-#U&4X z{tkYjy6_vfY@;deW(n`2s! zCuo~`PGFftHN!-pt(!aTwPi7s8C;ry`~1Klkz%29jiTk|rQNSReOz?Q%?inzJ|EQU!VjYJuFECFvxgFb zjsw(|*6-?Vyz8-CoAS#0$be&{_wrypOi{|cfT)FUQuNYxImo(X+LKXFPv zCZ{qcCt^c?FaGc|&z-rClNa|I%()-a43Ups0@ zqNx(^4SHIRlv0VjX5AUM)U3zguv}xLl!U8dz*x_QQl_Ftcj)g{5`7lW6vKmUj*=YPhyceq4#DPlkExrT`zZ@eAkk>F7;lvSa9isfE{(rgh=fRQANDr|j3!wa1 zT~=-ih}i7#ySaC$GzZ8x|E~l`<~97735K8SQRtb@guy8WvDT?Uo1puVNXvWJ6AL9e zB=fd5wGH(RfK;K;{U!LW_AB`-d@PRi7wGh3{Nrax+bsY^oy-&+*&QuIj+9f>D2N%& zV2`|MExbG*U^FnW$0^oGI2yA=^NZ-L%Co)^hK*4p_GHN^s8&3J*`WL73e-rrUJGFp-QH3jyLr^wWEZHmcT?yq4l!hvVAf7-O4 z^&Lc>@*G7BwUJI@nDEs(3{2V(-$fFNV>Qmvq9fnGMFI2S!_wA7c@uPN+`WR{1XGkk zEXAGd5=dcbn|zw@kRZrOWM>&5uXt3tL>c5z;Us(x%Im2)fcy+Sc=DU5hd5hA)i|!ZZCHnjN=WF-l4 zCDHJqY$E7sz!)X$kZ{Ha%Ia!33V$>m15eZ)(0)l@gO->Fw>+Mu~2IPGM z!!yF~YkGwFw9WELY`Iw<6o70Z`KS_s8Uf;o$DANFo?N`RV8W>z(yLE$l{N zJK~$8!UwJ^G-3cs--7q#tp$~|)t5T^ofh7c-o%Pez6Ua}{_U%~3pIbAxNplkae!BUiuR@BM(l;uSduHcv`9ejk*w1H)ZEM@e>6?o_D${iV4uqR{)?h4msq+Vn7zr<)!V-*@h8 zCNx5>)w5RpZ^pDgbbj0>-^4r(oy?K&6{SQo?3pq9c-rT1nbVfYSN4#E&wK*%yX?dK z3aydl{;~exbx_mbtYp`B;L|5`S+yb9;(D^tg;(|=;`L|dM6+e*4I%7Kz&>ulM9d`c57Cqdm6vatXAjO#{ut1who5SZb|<-kGLIm#gLxKHB@4k92&DL|2w0fer& z*;uMkRmcc2&ASabHhBX=vR6!n8WsL&rI@*hZvc(=vXx-t@v5gEEo2moXp(sn=JLh< ziE|3Z{Z?ByRkAd`1*OoJdbRMrI~JlpLuTHce=P2oswxULPutgT+`y->+@T*sk1i z$fZVk{klB>XaOi__WS%ZT7C)r8FMmpjhC*c_iMF)Oy{?~_%uzamgDbxSaWFG=I`?X zOufV(h@*(38@7K9iIbyEU4L7;J;X?>FqQC}&g(II7XR!LztQVAl9;x>6@L07_Wq8H zOzJL63gu)d{vdDV3dwD0u#9nUaXBTj7XA~TjW?Zb?f}MZp1JMr)4UU-lYSn$eb%7e zAsF_Eb5|I}sIgt)zQ=!XZaqtIcZ);WnMXZ(3KIVikO&VpE6IBxDY#E6jgmxqssATR z1-1GR2!xi3k3ar60knWg(+rOT^FSsMw__$4pL7{6GY5>AYP_JObG8viW`R+jo^}av zbQNH81Ct*69G8f=jsoziCra$oI~%zRCvNjXTdF)bx)=Kp+qZ1~n-x(d{%*fWBQzsW+B%4{AwQUI@r&cPF^vj#nSJ zMAtH|i}C4FV?li6!gdXG*;;fhU0I{#V3v+oUhXocMW==5aWO7xOUK*VTzSbL$2~5@ z3$uJDY%ND3_`p@Hgt#Wzi4Q}@wdr2^3~J@e3~J?QP^%6i;#$}HRn$<(l!jwLtpj6En+y+9wo) z@tt{F5@+fD7E{7QK%Vc@KjN!j@NB*>Z$bd=sK=;Wnx~sF(CZOrI>rUawNt``(FuoN z{TNTTwSFy&U+IkW;#)>~b2Y{HTYOueJ~6-Ixqu@P8A*tUzZKQ(!Buu(%T=w$O%srp z&Q%+0i`OnzrKBb=fj}S-2!xgl#@O+|{|2Uj7XQTUPnlqR|NErO1NNh9*3H1r8#;IUJEX72{W=@}g*V>Z zGxGXdyZ&?WvK8}T`)uHM@e{Tm!t^)x>=}W_=_=rd%O74n2d@7AgLeNw=g@n1?R@!_ zvG|GGcvn`ferz@z_kCRj#2(5nS%ik(G4$>i@QPy@z|TR$Mm&${C=i8eEdY)7qwWGO zynFOLTZOUR``-T6gYy?G#ZQq2`=7?+bQRG3*6zJO5XLTB`S4swJ9WwOmGeYer>;Fe zg0x<`3b5qtGIZ3KZIE{Huu)^4k<;-wT?KSW_3ZneFtlg?0sA5C2K*FhoqP6q57N5o zDxeKM#DuY3diQ?^jm1xqcF)8q8zAjWZJQDAz5o7@UbhY0D_?Qxj_kwzc%05p<6j(l z@4X@8CQN?()*gKd1sXqb8`EL`DJC@NP6VC>?8aN8-T3y2)K(`D2m}IwaID}T|MR53zl;3a-~PtLNCgUzzH2Q2uk_18h*1J~78>nhA5*dr7UCfu?CTPMX}>b9 zD(xe(5Ix8gWvwEOY)%je1OkCTAP@)y0)cQW0USIcl7myk6r+oMc4t1w{^}!8JDqHPB|^3qv3H6LsQcJl!vgmP6Dh_`P`>`SkivqEN9Fe zP-c9XWk9L%Vbww^jc*ap0dt?kEut+%AP@)y0)apv5Q5_W10Z8L1Rt*ItN;K207*qo IM6N<$f`#uj{{R30 literal 12614 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 diff --git a/skins/larry/images/messages_dark.png b/skins/larry/images/messages_dark.png index a5dbc789b9752f6f39acc62fac06b8c079e5ad5a..c35f3d99dc37bef3eb3b2e0de916b4dd97c197a0 100644 GIT binary patch literal 549 zcmV+=0^0qFP)jX82?{7;yxqRPiyotw=o#9e8%w}j=nT<;_UMTRy^nq) zn&=}svZBWds)}_IvvA^OuI7Orb~U0@2J~O~LmNIsW5sQ}81vd_DzlobY$c z8UJ;_Tgz6wbHEQQ@EvrH$k^GOFK=VSKcSntqGf}W$-T!n5IF)=YQ zF)>$jUVJ{TQI!)cQHLlS3}}sp+-QY}Yi7Tu0d2jn`4yE4%762}>VVRLd+QwMD68#~ z9q;mQ0Md`ZiOVg>jjxOAJ25daF){S8SX~N=`s_Hs77=Q5q6yKclnd?z+~q(k#u~nE z__|txmS|Am0hK`tGVz_0G$Hw-0Q^+BUF~Ga4#Qbv{CThg4Xgu zWh-R0X}uir`sr};H-ckgVq#+GOR>5X6!qD0fGr}_=0p>sQ7ISP3AoFFR*W@#-SBm_ z1TE2^zym6MFe3s!757~0MWb5fyjOGKod7xo-nrL{8%C%sS>awj%xI(Fy#=l1gUVLO nYSVf-;`P(vw4k!M9uxBqg5TfXNj46#00000NkvXXu0mjf^$-Fn literal 1424 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 CSRi`< delta 161 zcmV;S0ABxgvH_47e+U2o007)RylDUc0C`D7K~#7FwUUDogJBFn-(~-+m62*}P/**/body #messagelist { height: 22px; padding: 5px 6px 3px; border-top: 1px solid #ddd; - background: #ebebeb; - background: -moz-linear-gradient(top, #ebebeb 0%, #c6c6c6 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ebebeb), color-stop(100%,#c6c6c6)); - background: -ms-linear-gradient(top, #ebebeb 0%, #c6c6c6 100%); - background: linear-gradient(to bottom, #ebebeb 0%, #c6c6c6 100%); + background: #eaeaea; border-radius: 0 0 4px 4px; white-space: nowrap; } @@ -164,12 +160,7 @@ html.mozilla #mailboxlist > li:first-child { min-width: 1.8em; line-height: 15px; padding: 2px 4px; - background: #82acb5; - background: -moz-linear-gradient(top, #82acb5 0%, #6a939f 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#82acb5), color-stop(100%,#6a939f)); - background: -ms-linear-gradient(top, #82acb5 0%, #6a939f 100%); - background: linear-gradient(to bottom, #82acb5 0%, #6a939f 100%); - box-shadow: inset 0 1px 1px 0 #536d72; + background: #6a939f; border-radius: 9px; color: #fff; text-align: center; @@ -179,20 +170,10 @@ html.mozilla #mailboxlist > li:first-child { .folderlist li.mailbox.selected > a .unreadcount { background: #005d76; - background: -moz-linear-gradient(top, #005d76 0%, #004558 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#005d76), color-stop(100%,#004558)); - background: -ms-linear-gradient(top, #005d76 0%, #004558 100%); - background: linear-gradient(to bottom, #005d76 0%, #004558 100%); - box-shadow: inset 0 1px 1px 0 #003645; } .folderlist li.mailbox.recent > a .unreadcount { - background: #017cb4; - background: -moz-linear-gradient(top, #017cb4 0%, #006ca4 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#017cb4), color-stop(100%,#006ca4)); - background: -ms-linear-gradient(top, #017cb4 0%, #006ca4 100%); - background: linear-gradient(to bottom, #017cb4 0%, #006ca4 100%); - box-shadow: inset 0 1px 1px 0 #005080; + background: #006ca4; } #searchfilter { @@ -580,10 +561,6 @@ table.messagelist.fixedcopy { position: relative; padding: 3px 0; background: #f9f9f9; - background: -moz-linear-gradient(top, #fff 0%, #f0f0f0 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fff), color-stop(100%,#f0f0f0)); - background: -ms-linear-gradient(top, #fff 0%, #f0f0f0 100%); - background: linear-gradient(to bottom, #fff 0%, #f0f0f0 100%); border-bottom: 1px solid #dfdfdf; } @@ -691,22 +668,14 @@ h3.subject { width: 18px; padding: 0; outline: none; - background: #f2f2f2; - background: -moz-linear-gradient(left, #fbfbfb 0, #e9e9e9 100%); - background: -webkit-gradient(linear, left top, right top, color-stop(0,#fbfbfb), color-stop(100%,#e9e9e9)); - background: -ms-linear-gradient(left, #fbfbfb 0, #e9e9e9 100%); - background: linear-gradient(left, #fbfbfb 0, #e9e9e9 100%); + background: #e9e9e9; border-right: 1px solid #dfdfdf; border-radius: 3px 0 0 0; /* for Opera */ } .moreheaderstoggle:focus { - background: #f2f2f2; - background: -moz-linear-gradient(left, #66bcd9 0, #49b3d2 100%); - background: -webkit-gradient(linear, left top, right top, color-stop(0,#66bcd9), color-stop(100%,#49b3d2)); - background: -ms-linear-gradient(left, #66bcd9 0, #49b3d2 100%); - background: linear-gradient(left, #66bcd9 0, #49b3d2 100%); - border-right-color: #149cc5; + background: #66bcd9; + border-right-color: #66bcd9; } .moreheaderstoggle .iconlink { @@ -751,7 +720,6 @@ div.hide-headers { border: 1px solid #ccc; border-radius: 4px; background: #fdfdfd; - box-shadow: inset 0 0 1px 1px rgba(0,0,0, 0.1); } #headers-source { @@ -1085,7 +1053,6 @@ div.message-partheaders .headers-table td.header { #compose-contacts .scroller { top: 65px; - border-top: 1px solid #fff; } #contacts-table { @@ -1147,19 +1114,19 @@ div.message-partheaders .headers-table td.header { } #contacts-table td.contactgroup { - background-position: 6px -1555px; + background-position: 6px -1553px; } #contacts-table tr.selected td.contactgroup { - background-position: 6px -1579px; + background-position: 6px -1577px; } #contacts-table td.contact { - background-position: 6px -1603px; + background-position: 6px -1601px; } #contacts-table tr.selected td.contact { - background-position: 6px -1627px; + background-position: 6px -1625px; } #compose-content { @@ -1248,7 +1215,6 @@ div.message-partheaders .headers-table td.header { padding: 2px 0 0 8px; white-space: normal; border-top: 1px solid #dfdfdf; - box-shadow: inset 0 1px 0 0 #fff; } .composeoption { @@ -1312,7 +1278,6 @@ div.message-partheaders .headers-table td.header { font-family: monospace; font-size: 9pt; outline: none; - box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1); } #composebody:active, @@ -1342,7 +1307,7 @@ div.message-partheaders .headers-table td.header { #compose-attachments.droptarget.hover, #compose-attachments.droptarget.active { - border-color: #019bc6; + border-color: #017db4; box-shadow: 0 0 3px 2px rgba(71,135,177, 0.5); } @@ -1403,7 +1368,7 @@ div.message-partheaders .headers-table td.header { .widescreen #mailview-bottom { left: 412px; top:0; - border: 1px solid #a3a3a3; + border: 1px solid #b2b8bf; } #messagelistheader, @@ -1427,11 +1392,7 @@ div.message-partheaders .headers-table td.header { right: 0; height: 34px; padding: 6px 6px; - background: #f0f0f0; - background: -moz-linear-gradient(top, #fff 0%, #f0f0f0 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fff), color-stop(100%,#f0f0f0)); - background: -ms-linear-gradient(top, #fff 0%, #f0f0f0 100%); - background: linear-gradient(to bottom, #fff 0%, #f0f0f0 100%); + background: #efefef; border-radius: 4px 4px 0 0; white-space: nowrap; border-bottom: 1px solid #dfdfdf; @@ -1471,7 +1432,6 @@ div.message-partheaders .headers-table td.header { .widescreen .pagenavbuttons a.button { background: none; border: 0; - box-shadow: none; padding: 2px; margin: 0; height: 20px; @@ -1483,8 +1443,7 @@ div.message-partheaders .headers-table td.header { .widescreen a.listmenu:focus, .widescreen .pagenav a.button:focus { - border-color: #4fadd5; - box-shadow: 0 0 4px 2px rgba(71,135,177, 0.8); + border-color: #017db6; outline: none; } diff --git a/skins/larry/settings.css b/skins/larry/settings.css index b02c6d511..62eef92c5 100644 --- a/skins/larry/settings.css +++ b/skins/larry/settings.css @@ -1,7 +1,7 @@ /** * Roundcube webmail styles for the Settings section * - * Copyright (c) 2012, The Roundcube Dev Team + * Copyright (c) 2017-2017, The Roundcube Dev Team * Screendesign by FLINT / Büro für Gestaltung, bueroflint.com * * The contents are subject to the Creative Commons Attribution-ShareAlike diff --git a/skins/larry/styles.css b/skins/larry/styles.css index edaa56a75..cab1385b2 100644 --- a/skins/larry/styles.css +++ b/skins/larry/styles.css @@ -1,7 +1,7 @@ /** * Roundcube webmail styles for skin "Larry" * - * Copyright (c) 2012-2015, The Roundcube Dev Team + * Copyright (c) 2012-2017, The Roundcube Dev Team * Screendesign by FLINT / Büro für Gestaltung, bueroflint.com * * The contents are subject to the Creative Commons Attribution-ShareAlike @@ -14,7 +14,7 @@ body { font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; font-size: 11px; color: #333; - background: url(images/linen.jpg) repeat #d1d5d8; + background: #cad2d9; margin: 0; } @@ -67,7 +67,6 @@ textarea { padding: 4px; border: 1px solid #b2b2b2; border-radius: 4px; - box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1); } input[type="text"]:focus, @@ -113,14 +112,9 @@ input.button { margin: 0 2px; padding: 2px 5px; color: #525252; - text-shadow: 0px 1px 1px #fff; border: 1px solid #c0c0c0; border-radius: 4px; background: #f7f7f7; - background: -moz-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f9f9f9), color-stop(100%,#e6e6e6)); - background: -ms-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%); - background: linear-gradient(to bottom, #f9f9f9 0%, #e6e6e6 100%); box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3); text-decoration: none; outline: none; @@ -129,16 +123,11 @@ input.button { .formbuttons input.button { color: #ddd; font-size: 110%; - text-shadow: 0px 1px 1px #333; padding: 4px 12px; border-color: #465864; border-radius: 5px; - background: #7a7b7d; - background: -moz-linear-gradient(top, #7b7b7b 0%, #606060 100%); /* FF3.6+ */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#7b7b7b), color-stop(100%,#606060)); /* Chrome,Safari4+ */ - background: -ms-linear-gradient(top, #7b7b7b 0%, #606060 100%); /* IE10+ */ - background: linear-gradient(to bottom, #7b7b7b 0%, #606060 100%); /* W3C */ - box-shadow: 0 1px 1px 0 #ccc, inset 0 1px 0 0 #888; + background: #666666; + box-shadow: 0 1px 1px 0 #ccc; } .formbuttons input.button:hover, @@ -147,27 +136,18 @@ input.button.mainaction:hover, input.button.mainaction:focus { color: #f2f2f2; border-color: #465864; - box-shadow: 0 0 5px 2px rgba(71,135,177, 0.6), inset 0 1px 0 0 #888; + box-shadow: 0 0 5px 2px rgba(71,135,177, 0.6); } .formbuttons input.button:active { color: #fff; - background: -moz-linear-gradient(top, #5c5c5c 0%, #7b7b7b 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#5c5c5c), color-stop(100%,#7b7b7b)); - background: -ms-linear-gradient(top, #5c5c5c 0%, #7b7b7b 100%); - background: linear-gradient(to bottom, #5c5c5c 0%, #7b7b7b 100%); + background: #5f5f5f; } input.button.mainaction { color: #ededed; - text-shadow: 0px 1px 1px #333; border-color: #1f262c; - background: #505050; - background: -moz-linear-gradient(top, #505050 0%, #2a2e31 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#505050), color-stop(100%,#2a2e31)); - background: -ms-linear-gradient(top, #505050 0%, #2a2e31 100%); - background: linear-gradient(to bottom, #505050 0%, #2a2e31 100%); - box-shadow: inset 0 1px 0 0 #777; + background: #2c2f33; } input.button.mainaction:active { @@ -205,15 +185,9 @@ a.button, margin: 0 2px; padding: 2px 5px; color: #525252; - text-shadow: 0px 1px 1px #fff; border: 1px solid #c6c6c6; border-radius: 4px; - background: #f7f7f7; - background: -moz-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f9f9f9), color-stop(100%,#e6e6e6)); - background: -ms-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%); - background: linear-gradient(to bottom, #f9f9f9 0%, #e6e6e6 100%); - box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3); + background: #e6e6e6; text-decoration: none; } @@ -224,7 +198,7 @@ a.button, a.button:focus, input.button:focus { - border-color: #4fadd5; + border-color: #017db6; box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6); outline: none; } @@ -241,7 +215,6 @@ a.button.disabled:hover, input.button.disabled:hover, input.button[disabled]:hover { border-color: #c6c6c6; - box-shadow: 0 1px 1px 0 rgba(160, 160, 160, 0.4); } a.button.disabled span.inner { @@ -253,7 +226,6 @@ a.button.disabled span.inner { border-width: 0 1px 0 0; border-radius: 0; background: none; - box-shadow: none; } .buttongroup a.button.first, @@ -271,41 +243,23 @@ a.button.disabled span.inner { a.button.pressed, a.button:active, input.button:active { - background: #e6e6e6; - background: -moz-linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#e6e6e6), color-stop(100%,#f9f9f9)); - background: -ms-linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%); - background: linear-gradient(to bottom, #e6e6e6 0%, #f9f9f9 100%); + background: #f7f7f7; } .pagenav.dark a.button { font-weight: bold; border-color: #e6e6e6; - background: #d8d8d8; - background: -moz-linear-gradient(top, #d8d8d8 0%, #bababa 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#d8d8d8), color-stop(100%,#bababa)); - background: -ms-linear-gradient(top, #d8d8d8 0%, #bababa 100%); - background: linear-gradient(to bottom, #d8d8d8 0%, #bababa 100%); - box-shadow: 0 1px 1px 0 #999; + background: #bababa; } .pagenav.dark a.button.pressed { - background: #bababa; - background: -moz-linear-gradient(top, #bababa 0%, #d8d8d8 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#bababa), color-stop(100%,#d8d8d8)); - background: -ms-linear-gradient(top, #bababa 0%, #d8d8d8 100%); - background: linear-gradient(to bottom, #bababa 0%, #d8d8d8 100%); + background: #d8d8d8; } .buttongroup a.button.selected, .buttongroup a.button.selected:hover { background: #8a8a8a; - background: -moz-linear-gradient(top, #909090 0%, #858585 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#909090), color-stop(100%,#858585)); - background: -ms-linear-gradient(top, #909090 0%, #858585 100%); - background: linear-gradient(to bottom, #909090 0%, #858585 100%); - box-shadow: inset 0 1px 2px 0 #555; - border-right-color: #555; + border-right-color: #8a8a8a; border-left-color: #555; } @@ -415,7 +369,6 @@ a.button.delete span.icon { .pagenav .countdisplay { display: inline-block; padding: 3px 1em 0 1em; - text-shadow: 0px 1px 1px #fff; min-width: 16em; } @@ -621,7 +574,6 @@ a.iconlink.upload { border-radius: 4px; border: 1px solid #444; color: #ebebeb; - text-shadow: 0 1px 1px #000; background: rgba(64,64,64,0.85); background: -moz-linear-gradient(top, rgba(64,64,64,0.85) 0%, rgba(48,48,48,0.9) 100%); @@ -629,8 +581,6 @@ a.iconlink.upload { background: -webkit-linear-gradient(top, rgba(64,64,64,0.85) 0%, rgba(48,48,48,0.85) 100%); background: -ms-linear-gradient(top, rgba(64,64,64,0.85) 0%, rgba(48,48,48,0.85) 100%); background: linear-gradient(to bottom, rgba(64,64,64,0.85) 0%, rgba(48,48,48,0.85) 100%); - - box-shadow: 0 1px 4px 0 rgba(50,50,50,0.8), inset 0px 1px 0 0px #888; } #messagestack div:after { @@ -699,7 +649,6 @@ a.iconlink.upload { .ui-dialog.confirmation .ui-dialog-title { padding-left: 25px; background: url(images/messages.png) 0 5px no-repeat; - text-shadow: 0 1px 1px #fff; } .ui-dialog.warning .ui-dialog-title { @@ -732,8 +681,8 @@ a.iconlink.upload { #topline { height: 18px; - background: url(images/linen_header.jpg) repeat #666; - border-bottom: 1px solid #4f4f4f; + background-color: #333333; + border-bottom: 1px solid #383838; padding: 2px 0 2px 10px; color: #aaa; text-align: center; @@ -744,11 +693,7 @@ a.iconlink.upload { height: 46px; margin-bottom: 10px; padding: 0 0 0 10px; - background: #111; - background: -moz-linear-gradient(top, #404040 0%, #060606 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#404040), color-stop(100%,#060606)); - background: -ms-linear-gradient(top, #404040 0%, #060606 100%); - background: linear-gradient(to bottom, #404040 0%, #060606 100%); + background: #1c1c1c; } #topline a, @@ -886,18 +831,12 @@ a.iconlink.upload { display: inline-block; padding: 2px 8px 3px 8px; background: #444; - background: -moz-linear-gradient(top, #444 0%, #333 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#444), color-stop(100%,#333)); - background: -ms-linear-gradient(top, #444 0%, #333 100%); - background: linear-gradient(to bottom, #444 0%, #333 100%); color: #eee; font-weight: bold; white-space: nowrap; - border: 1px solid #777; - box-shadow: 0 1px 5px 0 #333; + box-shadow: 0 1px 4px 0 #333; z-index: 200; white-space: nowrap; - text-shadow: 0px 1px 1px #000; } .minimal #taskbar .tooltip:after { @@ -907,7 +846,7 @@ a.iconlink.upload { right: 15px; border-style: solid; border-width: 0 4px 4px; - border-color: #888 transparent; + border-color: #444 transparent; /* reduce the damage in FF3.0 */ display: block; width: 0; @@ -937,7 +876,6 @@ a.iconlink.upload { display: inline-block; font-size: 110%; font-weight: normal; - text-shadow: 0px 1px 1px black; padding: 5px 0 0 34px; height: 19px; background: url(images/buttons.png) -1000px 0 no-repeat; @@ -945,13 +883,12 @@ a.iconlink.upload { #taskbar a:focus { color: #fff; - text-shadow: 0px 1px 1px #666; background-color: rgba(73,180,210,0.7); outline: none; } #taskbar a.button-selected { - color: #3cf; + color: #20a6fb; background-color: #2c2c2c; } @@ -1048,10 +985,9 @@ a.iconlink.upload { } .uibox { - border: 1px solid #a3a3a3; + border: 1px solid #b2b8bf; border-radius: 4px; overflow: hidden; - box-shadow: 0 0 2px #999; background: #fff; } @@ -1111,7 +1047,6 @@ a.iconlink.upload { padding: 7px 8px 6px 8px; line-height: 20px; margin: 0; - text-shadow: 0px 1px 1px #fff; border-bottom: 1px solid #bbd3da; white-space: nowrap; } @@ -1135,7 +1070,6 @@ a.iconlink.upload { .listing tbody td, .listing li { display: block; - border-top: 1px solid #fff; border-bottom: 1px solid #bbd3da; cursor: default; font-weight: normal; @@ -1148,10 +1082,9 @@ a.iconlink.upload { .listing li a { display: block; color: #376572; - text-shadow: 0px 1px 1px #fff; text-decoration: none; cursor: default; - padding: 4px 8px; + padding: 5px 8px; line-height: 17px; height: 17px; white-space: nowrap; @@ -1165,7 +1098,6 @@ a.iconlink.upload { .listing tbody td a { color: #376572; - text-shadow: 0px 1px 1px #fff; text-decoration: none; } @@ -1266,7 +1198,6 @@ ul.listing .listitem span:focus, ul.listing.focus .listitem.focused span { color: #fff !important; background-color: rgba(73,180,210,0.6); - text-shadow: 0px 1px 1px #666; outline: none; } @@ -1339,9 +1270,8 @@ ul.treelist li.selected > div.expanded { left: 0; width: 100%; height: 42px; - border-top: 1px solid #ccdde4; + border-top: 1px solid #bbd3da; background: #d9ecf4; - box-shadow: inset 0 1px 0 0 #fff; white-space: nowrap; overflow: hidden; } @@ -1363,7 +1293,6 @@ ul.treelist li.selected > div.expanded { .boxfooter a.listbutton:focus { color: #fff; background-color: rgba(73,180,210,0.6); - text-shadow: 0px 1px 1px #666; outline: none; } @@ -1528,7 +1457,6 @@ table.records-table { .records-table thead td a:focus { color: #fff; background-color: rgba(73,180,210,0.7); - text-shadow: 0px 1px 1px #666; outline: none; } @@ -1559,15 +1487,11 @@ table.records-table { .records-table tr.selected td { color: #fff !important; - background-color: #4db0d2 !important; + background-color: #4db0d2; } .records-table.focus tr.selected td { - background: #019bc6; - background: -moz-linear-gradient(top, #019bc6 0%, #017cb4 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#019bc6), color-stop(100%,#017cb4)); - background: -ms-linear-gradient(top, #019bc6 0%, #017cb4 100%); - background: linear-gradient(to bottom, #019bc6 0%, #017cb4 100%); + background-color: #017db6 !important; } .records-table tr.selected td a, @@ -1609,12 +1533,8 @@ body.iframe.fullheight { .contentbox .boxtitle, body.iframe .boxtitle { color: #777; - background: #eee; - background: -moz-linear-gradient(top, #eee 0%, #dfdfdf 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#eee), color-stop(100%,#dfdfdf)); - background: -ms-linear-gradient(top, #eee 0%, #dfdfdf 100%); - background: linear-gradient(to bottom, #eee 0%, #dfdfdf 100%); - border-bottom: 1px solid #ccc; + background: #efefef; + border-bottom: 1px solid #d0d0d0; } body.iframe .boxtitle { @@ -1782,16 +1702,16 @@ ul.proplist li { #login-form .box-inner { width: 430px; - background: url(images/linen_login.jpg) top left no-repeat #5c5c5c; + background: #404040; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #404040), color-stop(100%, #2e2e2e)); + background: -ms-linear-gradient(top, #404040 0%, #2e2e2e 100%); + background: linear-gradient(to bottom, #404040 0%, #2e2e2e 100%); margin: 0 50px; padding: 10px 24px 24px 24px; - border: 1px solid #333; - border-radius: 5px; - box-shadow: inset 0 0 1px #ccc; + border-radius: 6px; } #login-form .box-bottom { - background: url(images/login_shadow.png) top center no-repeat; margin-top: -3px; padding-top: 10px; } @@ -1817,27 +1737,13 @@ ul.proplist li { #login-form input.button { color: #444; - text-shadow: 0px 1px 1px #fff; border-color: #f9f9f9; - background: #f9f9f9; - background: -moz-linear-gradient(top, #f9f9f9 0%, #e2e2e2 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f9f9f9), color-stop(100%,#e2e2e2)); - background: -ms-linear-gradient(top, #f9f9f9 0%, #e2e2e2 100%); - background: linear-gradient(to bottom, #f9f9f9 0%, #e2e2e2 100%); - box-shadow: inset 0 1px 0 0 #fff; -} - -#login-form input.button:hover, -#login-form input.button:focus { - box-shadow: 0 0 5px 2px rgba(71,135,177, 0.9), inset 0 1px 0 0 #fff; + background-color: #f9f9f9; } #login-form input.button:active { color: #333; - background: -moz-linear-gradient(top, #dcdcdc 0%, #f9f9f9 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#dcdcdc), color-stop(100%,#f9f9f9)); - background: -ms-linear-gradient(top, #dcdcdc 0%, #f9f9f9 100%); - background: linear-gradient(to bottom, #dcdcdc 0%, #f9f9f9 100%); + background-color: #dcdcdc; } #login-form form table { @@ -1848,7 +1754,6 @@ ul.proplist li { width: 20%; white-space: nowrap; color: #cecece; - text-shadow: 0px 1px 1px black; text-align: right; padding-right: 1em; } @@ -1958,8 +1863,6 @@ ul.proplist li { text-overflow: ellipsis; white-space: nowrap; padding: 28px 2px 0 2px; - text-shadow: 0px 1px 1px #eee; - box-shadow: none; background: url(images/buttons.png) -100px 0 no-repeat transparent; border: 0; border-radius: 0; @@ -1968,7 +1871,6 @@ ul.proplist li { .dropbutton .dropbuttontip:focus, .toolbar a.button:focus { color: #fff; - text-shadow: 0px 1px 1px #666; background-color: rgba(30,150,192, 0.5); border-radius: 3px; } @@ -2145,11 +2047,7 @@ a.menuselector { display: inline-block; border: 1px solid #ababab; border-radius: 4px; - background: #f8f8f8; - background: -moz-linear-gradient(top, #f8f8f8 0%, #dddddd 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%,#dddddd)); - background: -ms-linear-gradient(top, #f9f9f9 0%, #dddddd 100%); - background: linear-gradient(to bottom, #f8f8f8 0%, #dddddd 100%); + background: #f1f1f1; text-decoration: none; color: #333; cursor: pointer; @@ -2161,7 +2059,6 @@ a.menuselector .handle { padding: 0 32px 0 6px; height: 20px; line-height: 19px; - text-shadow: 0px 1px 1px #fff; background: url(images/selector.png) right center no-repeat; border-radius: 4px; } @@ -2196,7 +2093,6 @@ select.decorated option { border: 0; border-top: 1px solid #5a5a5a; border-bottom: 1px solid #333; - text-shadow: 0px 1px 1px #333; padding: 4px 6px; outline: none; cursor: default; @@ -2207,7 +2103,7 @@ a.menuselector:focus, a.menuselector.focus, a.iconbutton:focus, .pagenav a.button:focus { - border-color: #4fadd5; + border-color: #0883d0; box-shadow: 0 0 4px 2px rgba(71,135,177, 0.8); outline: none; } @@ -2220,7 +2116,6 @@ a.iconbutton:focus, height: 18px; font-size: 12px; font-weight: bold; - text-shadow: 0px 1px 1px #fff; padding-left: 30px; background: url(images/quota.png) -100px 0 no-repeat; } @@ -2267,7 +2162,6 @@ table.quota-info td.root { overflow: -moz-scrollbars-vertical; overflow-y: auto; background: #444; - border: 1px solid #999; z-index: 240; border-radius: 4px; box-shadow: 0 2px 6px 0 #333; @@ -2301,7 +2195,6 @@ ul.toolbarmenu li, min-width: 130px; margin: 0; border-top: 1px solid #5a5a5a; - border-bottom: 1px solid #333; } .googie_list tr:first-child td, @@ -2320,7 +2213,6 @@ select.decorated option:last-child { ul.toolbarmenu li a { display: block; color: #666; - text-shadow: 0px 1px 1px #333; text-decoration: none; min-height: 14px; padding: 6px 16px 6px 10px; @@ -2343,11 +2235,7 @@ ul.toolbarmenu li a.active:focus, #pagejump-selector ul li.selected, select.decorated option:hover, select.decorated option[selected='selected'] { - background-color: #00aad6; - background: -moz-linear-gradient(top, #00aad6 0%, #008fc9 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#00aad6), color-stop(100%,#008fc9)); - background: -ms-linear-gradient(top, #00aad6 0%, #008fc9 100%); - background: linear-gradient(to bottom, #00aad6 0%, #008fc9 100%); + background-color: #0883d0; outline: none; } @@ -2364,7 +2252,6 @@ ul.toolbarmenu li label { display: block; color: #fff; padding: 4px 8px; - text-shadow: 0px 1px 1px #333; } ul.toolbarmenu li.separator label { @@ -2493,7 +2380,6 @@ ul.toolbarmenu li span.copy { } #rcmKSearchpane ul li { - text-shadow: 0px 1px 1px #333; text-decoration: none; min-height: 14px; padding: 6px 10px 6px 28px; @@ -2534,7 +2420,6 @@ ul.toolbarmenu li span.copy { .hint { margin: 4px 0; color: #999; - text-shadow: 0px 1px 1px #fff; } .splitter { @@ -2574,7 +2459,6 @@ ul.toolbarmenu li span.copy { color: #ccc; white-space: nowrap; opacity: 0.92; - text-shadow: 0px 1px 1px #333; } #rcmdraglayer:after { @@ -2805,11 +2689,11 @@ ul.toolbarmenu li span.copy { .folderlist li.mailbox ul li a { padding-left: 52px; /* 36 + 1 x 16 */ - background-position: 22px -95px; /* 6 + 1 x 16 */ + background-position: 22px -93px; /* 6 + 1 x 16 */ } .folderlist li.mailbox ul li > a:focus, .folderlist li.mailbox ul li.selected > a { - background-position: 22px -119px; + background-position: 22px -117px; } .folderlist li.mailbox ul li div.treetoggle { left: 33px; @@ -2818,11 +2702,11 @@ ul.toolbarmenu li span.copy { .folderlist li.mailbox ul ul li.mailbox a { padding-left: 68px; /* 2x */ - background-position: 38px -95px; + background-position: 38px -93px; } .folderlist li.mailbox ul ul li > a:focus, .folderlist li.mailbox ul ul li.selected > a { - background-position: 38px -119px; + background-position: 38px -117px; } .folderlist li.mailbox ul ul li div.treetoggle { left: 48px; @@ -2830,11 +2714,11 @@ ul.toolbarmenu li span.copy { .folderlist li.mailbox ul ul ul li.mailbox a { padding-left: 84px; /* 3x */ - background-position: 54px -95px; + background-position: 54px -93px; } .folderlist li.mailbox ul ul ul li > a:focus, .folderlist li.mailbox ul ul ul li.selected > a { - background-position: 54px -119px; + background-position: 54px -117px; } .folderlist li.mailbox ul ul ul li div.treetoggle { left: 64px; @@ -2842,11 +2726,11 @@ ul.toolbarmenu li span.copy { .folderlist li.mailbox ul ul ul ul li.mailbox a { padding-left: 100px; /* 4x */ - background-position: 70px -95px; + background-position: 70px -93px; } .folderlist li.mailbox ul ul ul ul li > a:focus, .folderlist li.mailbox ul ul ul ul li.selected > a { - background-position: 70px -119px; + background-position: 70px -117px; } .folderlist li.mailbox ul ul ul ul li div.treetoggle { left: 80px; @@ -2993,7 +2877,6 @@ ul.toolbarmenu li span.copy { color: #333; font-weight: bold; padding: 3px 15px 3px 30px; - text-shadow: 0px 1px 1px #fff; text-decoration: none; white-space: nowrap; overflow: hidden; @@ -3075,7 +2958,7 @@ ul.toolbarmenu li span.copy { } .ui-tabs .tabsbar.ui-tabs-nav { - margin-bottom: 10px; + margin-bottom: 4px; } .ui-dialog-content .ui-tabs .tabsbar.ui-tabs-nav { From d774c00b72682dbb545a43f0640a53c604eef962 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 31 Mar 2017 08:40:19 +0200 Subject: [PATCH 49/68] Improve pagenav buttons --- skins/larry/styles.css | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/skins/larry/styles.css b/skins/larry/styles.css index cab1385b2..33caf64b7 100644 --- a/skins/larry/styles.css +++ b/skins/larry/styles.css @@ -248,8 +248,9 @@ input.button:active { .pagenav.dark a.button { font-weight: bold; - border-color: #e6e6e6; - background: #bababa; + border: 0; + background: transparent; + margin: 0; } .pagenav.dark a.button.pressed { From d4e4cfef926b1379fc28a11862d80ea169d1c71b Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Sat, 22 Apr 2017 14:11:02 +0200 Subject: [PATCH 50/68] More flattening of jQuery UI styles --- plugins/jqueryui/themes/larry/jquery-ui.css | 39 +++------------------ skins/larry/styles.css | 2 +- 2 files changed, 6 insertions(+), 35 deletions(-) diff --git a/plugins/jqueryui/themes/larry/jquery-ui.css b/plugins/jqueryui/themes/larry/jquery-ui.css index ed011ed7e..4a8dfbcc6 100644 --- a/plugins/jqueryui/themes/larry/jquery-ui.css +++ b/plugins/jqueryui/themes/larry/jquery-ui.css @@ -227,7 +227,6 @@ display: block; line-height: 1.5; padding: 6px 10px 4px; - text-shadow: 0 1px 1px #333; background-color: #444; border: 0; border-radius: 0; @@ -254,12 +253,7 @@ .ui-menu .ui-menu-item .ui-state-active, .ui-menu .ui-state-focus, .ui-menu .ui-state-active { - background: #00aad6; - background: -moz-linear-gradient(top, #00aad6 0%, #008fc9 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#00aad6), color-stop(100%,#008fc9)); - background: -o-linear-gradient(top, #00aad6 0%, #008fc9 100%); - background: -ms-linear-gradient(top, #00aad6 0%, #008fc9 100%); - background: linear-gradient(top, #00aad6 0%, #008fc9 100%); + background: #0883d0; } /* icon support */ @@ -629,7 +623,6 @@ button.ui-button::-moz-focus-inner { float: left; margin: .1em 16px .1em 0; font-size: 1.3em; - text-shadow: 1px 1px 1px #fff; white-space: nowrap; width: 90%; overflow: hidden; @@ -811,13 +804,7 @@ button.ui-button::-moz-focus-inner { font-size: .7em; display: block; border: 0; - background: #019bc6; - background: -moz-linear-gradient(top, #019bc6 0%, #017cb4 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#019bc6), color-stop(100%,#017cb4)); - background: -o-linear-gradient(top, #019bc6 0%, #017cb4 100%); - background: -ms-linear-gradient(top, #019bc6 0%, #017cb4 100%); - background: linear-gradient(top, #019bc6 0%, #017cb4 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#019bc6', endColorstr='#017cb4', GradientType=0); + background: #017cb4; } /* support: IE8 - See #6727 */ @@ -1457,7 +1444,6 @@ a.ui-button:active, background: #3a3a3a; filter: none; color: #fff; - text-shadow: 0px 1px 1px #000; } .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { @@ -1531,32 +1517,18 @@ a.ui-button:active, .ui-datepicker td span, .ui-datepicker td a { border: 0; padding: .5em; - text-shadow: 0px 1px 1px #fff; } .ui-datepicker td a.ui-state-default { - border: 0px solid #fff; - border-top-width: 1px; - border-left-width: 1px; + border: none; background: #e6e6e6; - background: -moz-linear-gradient(top, #e6e6e6 0%, #d6d6d6 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#e6e6e6), color-stop(100%,#d6d6d6)); - background: -o-linear-gradient(top, #e6e6e6 0%, #d6d6d6 100%); - background: -ms-linear-gradient(top, #e6e6e6 0%, #d6d6d6 100%); - background: linear-gradient(top, #e6e6e6 0%, #d6d6d6 100%); } .ui-datepicker td a.ui-priority-secondary { background: #eee; } .ui-datepicker td a.ui-state-active { color: #fff; - border-color: #0286ac !important; - text-shadow: 0px 1px 1px #00516e !important; - background: #00acd4 !important; - background: -moz-linear-gradient(top, #00acd4 0%, #008fc7 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#00acd4), color-stop(100%,#008fc7)); - background: -o-linear-gradient(top, #00acd4 0%, #008fc7 100%); - background: -ms-linear-gradient(top, #00acd4 0%, #008fc7 100%); - background: linear-gradient(top, #00acd4 0%, #008fc7 100%); + border-color: #0883d0 !important; + background: #0883d0 !important; } .ui-datepicker .ui-state-highlight { color: #0081c2; @@ -1565,5 +1537,4 @@ a.ui-button:active, color: #fff; border-color: rgba(73,180,210,0.7); background: rgba(73,180,210,0.7); - text-shadow: 0px 1px 1px #666; } diff --git a/skins/larry/styles.css b/skins/larry/styles.css index 33caf64b7..119c04280 100644 --- a/skins/larry/styles.css +++ b/skins/larry/styles.css @@ -2362,7 +2362,7 @@ ul.toolbarmenu li span.copy { #pagejump-selector ul li { min-width: 45px; - padding: 2px 5px; + padding: 4px 6px; cursor: default; } From 7ead15244593fdfa8d0a1f228f5d6791d74e6ea4 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Sat, 22 Apr 2017 14:14:37 +0200 Subject: [PATCH 51/68] Remove gradient from record-table headers --- skins/larry/styles.css | 4 ---- 1 file changed, 4 deletions(-) diff --git a/skins/larry/styles.css b/skins/larry/styles.css index 119c04280..d9bd90ee6 100644 --- a/skins/larry/styles.css +++ b/skins/larry/styles.css @@ -1426,10 +1426,6 @@ table.records-table { font-size: 11px; font-weight: bold; background: #d6eaf3; - background: -moz-linear-gradient(left, #e3f2f6 0, #d6eaf3 14px, #d6eaf3 100%); - background: -webkit-gradient(linear, left top, right top, color-stop(0,#e3f2f6), color-stop(8%,#d6eaf3), color-stop(100%,#d6eaf3)); - background: -ms-linear-gradient(left, #e3f2f6 0, #d6eaf3 14px ,#d6eaf3 100%); - background: linear-gradient(left, #e3f2f6 0, #d6eaf3 14px, #d6eaf3 100%); border-left: 1px solid #bbd3da; padding: 8px 7px; overflow: hidden; From 502f0758f640f9caca60367a2c1149f0d26885a3 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Sun, 23 Apr 2017 17:05:19 +0200 Subject: [PATCH 52/68] Remove unused theme images --- skins/larry/images/linen.jpg | Bin 14157 -> 0 bytes skins/larry/images/linen_header.jpg | Bin 580 -> 0 bytes skins/larry/images/linen_login.jpg | Bin 10363 -> 0 bytes skins/larry/images/login_shadow.png | Bin 591 -> 0 bytes 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 skins/larry/images/linen.jpg delete mode 100644 skins/larry/images/linen_header.jpg delete mode 100644 skins/larry/images/linen_login.jpg delete mode 100644 skins/larry/images/login_shadow.png diff --git a/skins/larry/images/linen.jpg b/skins/larry/images/linen.jpg deleted file mode 100644 index c75615779b02c64c7a61f195f83746a0a9d88c60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14157 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 M>q7+p(wOD-_Crpl!NsvKE(J)ZSF_BqV z*{IOiDX6Gv;l_s_fT~5%3<2r^i3*|`4HCV@z{AW4bO5s;gFVB;({q;e<{HO5e%i2A zd-WZ+rM=3QwJj{W4tl8OMZTYY+(7ax*E6-`@-=K-QB89u=X_+CvdGtI&+)>^GgxNs z&Sc8gI;xz(D}3i2e`ev1I|r049r^Z~&T;VIVt5s}?K#_9##qlKru>GtJ6IO1Jl&A$ z+8}elL1+8cGG@C8LgA{-s=i0f?N6u#e*R?brYXB}> z001uhDS-2FfGU9Y(m(jq($dlXsaNP||1=Er^jGNV8Ll!g{sF^PCMKqT>a}YuEZ44a za&T~Pa{m|pS>(dy%a<9hFtA;{%ErOM%);?slmFY!c^iO*{=$O`OBXM&0BBe)Tx7X$ zP6pik^Q->?;6HHzKy#7y@}=`J0R2C^000gZscv>eZXFZPP;d7o67_GfHGnj(E`}kAjNp89F%#>6;2&2(3VZzhZuN5dR)9CfW29F&FOk20!EY z`%Cm-iiDb`_|?bEo+2tJ!?P3qXiBIwtz0(L*x;^xB;zegR)6I|Qp70uvS>j^@o1I@ zeR)`}szyP7_5nAPLrjXrL`)oJXCtWkJlg5e*zj^h+tb!d259VC^(#-7yk$zOsPrXy?YmEwi*q1ZvV({lzO{(jvd-u%dTj4|;;PhL zM+Fb_WUIFh^$LR}0YDRnu1^|;#8%@m?i?iid;QNBcaKP^HT=++yUDL(Q0fX*w~8Fn zWJ;b-CnN(|S=6w?XkB`I+8s#Am@}?wH9%font?qgS0?#x?^Q=FjTDE5A599wVH&J5 z?8xWDjvlt>CeL6ECTR^nN)FwUb3wgORh`?>PFRP@=bkUB^UQ}D!7;+#f;3C<4db5OOs!$nvZYwiyP@O755~FmwZ&F@#!Yk@)p?FDJWE<`#@$UQt}Of^eYbc6Ke6(nbSXD& z)%sS-qww361w&5K;suW8x%DP#&n-*S8ixOPCfmPz-+#L0Ki_}(B+d2zKJIwU; zVOrrT-&|9^mri?+ZCT@+!bz*QtrX@B+;YJ6HhgwQnCxV9gRE#*!;Lq`1uLkP)8O2- zn;Lt_S9GB4_1$8QlELl<(s+$B1v^;Y|3L6?+3Bp@VSglb!c@dI@KbFx|6TqDI+hE>rq88@BGN3)a z*ILZ*u&MHysR(@j5noz(EW+D%>I=79cOH6YXuJCPmr4nX?(H@I^xr+92#-bOh6;@H zX|)%$M)Ga^2wqd-YT|Ks4T34f%Ik(+}KFTJCY5<9oGdUIGpYnxi5SSZ1IghbOb#rg9!@MfP?jKcD$JY&wP&yhh!_NAc8ibTH zx3@LzV5Hon`fXTYiWLM>-tmgk(Hj=$vHbcTA3R`T_2&!Uqd2YYd6;t#CEJ;#zD&ti z?35_*GMnqPw0tILs#fq&EIoJ1q}OCU?{@DDMN$~z9P`1`YT>j1etS5=VGR$9&Oc6j z-5H|-chE^^L{c6V_e_%)HL>2d`cYL02}8#3Ko?$E{}_AKFLp}@jZ#FS%)>0*wuf>> z42>^c_~6yuktPx`V^DcY9q0~^Xhdl!-(7tfdB?=$v5H|FI47nHg}?H2^k!=6``Wk& z!{QcKB)*Q)v3au*9j)Tz+}D%#-YH_5kpktufxM&6+O;q&z%15v=_s@kAI$IBv*2|^ zfTgAAp6ZNETIPP1XU7|H672LP3n7JuaB#)#KEzu0vv>*A&1TrVmf@Us#~PDA!E%H& zI&SlG_c)|fqj>)#=~ZHKziEO-0z;PaCQc2}Nt}Ci{C4VVOufU+>4=_!h8jbiVnS=r zJ^$>nF=9_A31yHr&^`ESUq*Bw>l&kbuE`T<61PFMY>xwPK~#Bat@(mG3|*;brTwMO z*6Oo`2jE+-S_N6-nnisDrcMdE0p9`7XK>6vp{Gqi0%E&zl7|$`P>(Ec9)6#fm9Uf8|!4RgPVWEkc$i%;WdwvbM4f0rG(!MjwUlE+18Y;OC+GiIa5 z5N;8v@?n6ZGetM4QoPs{_2Zg;k@G?i|7u(cyCj#RqCKQkTePbw(E{32;og9(U}FfW zNK%5kkHAE=#V|HW$Pf208(%1nt6H>uSICiutYK=U`@u!1SlRwKukXd{w&*)ygO1BP zo5xp1qh^X~pO^JjNCKC^oZS{+hxVcoh1f zr^!9Vun|j(8c%WlI7ys3_bu*dN(#7ze?AVFNF|QO#d1n^93S(F0n=)q{T4h2XHUV{Xu;bWDV9K~y<3kFIg}_{mi3~V}b*t2% z*nx=02*bf2+Ffq;WE&hr>crLv#^mg+T>};dmTKcHYcR{U6ujk;@>*6_0nj6g>=j~Jk>k%w1jq9`#9$0|Cq;OHSB{@rVp!mA| z)}REm?R~K+U1JseWPHVRS_NV5_jhiGnj}a$}Ug{5G1BtM}Noj;hX;^({S1 zr>;z3hi{=_V}OiS*uQu9krhR7c`H6lu)T9VajV=JIzQouGTI!TrmR#c-EwKNaW&6y z;2V_cpmS^JD2t#G6UXU}X)hEzOCknQOldAzU zPNDaDxrRTh6?3HOM{ZAYfn^h?T0-iyB`9Lf!1D$U{ zLL(EZxZPKfJDeH9(dsg9v0;);qi0&pMhL*Cb;QFviQE3@31Z$|mTah422hJyApJ3&bOWiJ#&!KXCng(hNwEkMREwb3(J zB~L^|GG^HN7FCK=?79uO4eg;ZxcFMfllbADuAo@i4gsm5eAYbH0P60ZHyhkeCRS6a zpmgoTVvbG_xn~Pn-y?WAL?}fX4NK??VrHE`{H5>?G9Mlya-WuXqQQfp}M?ayJ_pD|`7Bx!K{LgWNg%pGI$c|F2?W77St6Ty}n z`*6EXc-otRAaQM0?x8SVh=|cCbcOC3w+4bx-zdU(xzQ(2M{ISjgNv@=7km#)u8aO(1ZmN5qTHAl@=R@ATEzN_8w#a>%% z=cmUA4BiM$$;5yo8t%*?@F#GgxoMx4DQG+xl+ZpZ9l`>Eq|(k;BICn756o z)B?ji`#RPn-8pF%;?g5eW@9qfz-{G1@EDvk!r$+BKzNHnfS6fqWKC8)-K#;l!be8N z#Ksr)b6%P!d~I8^dFg~eP7+6;v+=BCMgqj{!LZ;eA3Dz_+0s|k}~ z==IN@wC{f2HyuY3M=_sm;t)a}JqJDea6ezk)CRGo@ns4DT#-}6 ztHJ<8(Xc9 z|GAYa2xb#&5+^))@f)Q>6FFCQ-%br<4*Z?N(~YXGzP*26?U+{_VX98&CXWN>(#$c{ zaHD1ICW-sumx?xiI5TnEE*yum5h!8~O!EY6d9Wn~XW;#!BsB|xrfi~rrB;zfF*V42 zPLsBcK|Y=wf^BnzQd?1iD|&mb7DHuv?v{GWzxkmhR1dz)-UEh4?cf_3vPQyp=k)gJC-K{Xqirs|rf z)^CM(Y-TE{iwEAn=H(PgA&6(hxDFw)##AL#l#cG}*BD391{o^VkRA0s zzX+6H_}7bii6WsjYL@>YuR_mu=|%g&mosXS69wJf6tY?5#ruX~2eB3LW^Ad0^-u3! z{b8Ay`f1r4rg}^co~HD8jlXHz81>e67=w?1Ijou95#f%{UpiS*ey*?bxiW5=VL7_fKr!j^%_jfIh`vDONfa5w~%@Ze&22KAFYeKxJ`72B-nE6CxA{r*K4bk7 zrp`jP-hr4F)aK4Ef02vpQ^zY+bNYEEUpVZ=ecivGdMvrDuFTRkhSbrzql^d;l3vcI zMUhz}f-UI6gFm`J>N8BL*o_{lUecWdTalz0CbC0 z#n3%=?)!hpgv$>AtzcGNOpY4sy7!yOzN!zJ)-W zGm}GJ$q$94=KdY|*(8)>(5Dn>yxma2QhxQ+(_qMkrRfY|PBvY#;EmS-AN7=+!cdm9 zA9y^W=#*a&^NJTyCG}k9%_|$vi(&o|9Be#Lxo|H#@!3w}2VKA88S-Iuc+l?ioSKzjS+z*3*yVIG+iL=l8vaEY))gN3E{w?Q=eeBx6 zx+^?gq5Nd5bo>s!KVHSP zEo3h}gz4jX92Y|#{FN2pDw}@}a6$4VUjH>&I>%G+dMUQIlkOQKs$=x3UqpFdt+=*m zg;?ATJ=bs2Knvfixu@j7xL~}xY)R&c^)r4GuNSgbN<`2kZ^-&Npa}e~Wmr8oy9Cnh z7uS~_3Tuy1GRdAQ1tYU_n&}=L*}6-*2o<#ugb$}a;%fN1_FVW~`f#JTq{zV3V4crV z@haKI$RzfcamYwiiz*XFH^j(6L?_9SYGCUmi`I|Zx70jB7#c5M4Jl5A_W5q#%E5VwGmHryrSO8NpxGFPvdQRdYAvKm8n{Dlffych$$Sd-nK89H z#-@>Dn@KEok{xv!e~y&%rXB2Qc>|o~V|cvXtsfP(FRXwnokh0Pz!%J~V90WF)I}(xrXI zd1m+d5F$M$UOqrT<}%hdY=Z4&&fskAGwu5B!r@oJl5Z4SS`%Ft(_cMRM;) zCfq#-eCG}SBeqpIWeP6lC03lts$}ua1#2_o2aFU5zlq30k=)RQ;Ohl16M9*{AZ8Zu z=GUnnH~Cs6draVbdpOB+fIzyh$o=BljNXut_$jNiM~l|Y*|5j}?XC(-x)%OUaqdV( z+fr*Z30Mp&GRq!K4Ks?~8XFC<8MN?|0E^I`1I**QtqsM~-&h?p>Mp>lA(M%@8b%2J zM8&4gb3m7eXeV6&*-5{ypxPby^B3m(m>)A%DdNrpg&WaBN}haFQX*;~CArUyJ0aBr z&QQd+m)vC_k|Y2Q6@UQux;d$xzj{EkaYvj?y`J9T?2DI_k=bcbNSR9FE^z9EGJobV zo%!bk%nkxCPN#I8QO#x8Jjk_)*uTtXQQ^E>!#5!_I}gytVA+I*3}UStazLUp>3ZlB zl^SGLnkLJJ2ghtLu2gG2puK1-L((E$Vu(>p{Dw>joBG7ENOgAU6je`z4%hTm2I`DPp0J9^$RWYcu!n8$%*y6?C*-&n8c3>&_<+pwqL*YSxih+8{ z4}P*8#RK)ZG`q|sV0gefj*@wztWp%Wzot8-F12i~grhl9{>pI7kOqfM7#oykXVpAA zpc*%9KQb!d=#FClGghF)*J^L#jV&^VMrBLwBNIi+MpiuoiLeuVP(baP!kyk1_2+;r z=~5vC6q1sWpC2{&cR_}irp@=M@eu9PWs@(=e(Kbai|N^iXb%%_zKPH8mDH8=j~BP? z2HMkkYqzfL=Y~Uu9o)^a4MzAkMRT=SpO}u1cLvU4TwHXtvFbP|Q7n?k!L>Uumi|sT z8H;-XsuvKCJ-pcuXB0>bGm##!P=XYAS$LpMl7u%$>J|;WU;dE*Jmf96T-Bmxm7)Z^ zZ&xJbK&GVn`c!&*Nhc!p1nB>jw(}QdY>d4FIsil3t=~(x6OB}d4GZ{Eom}Lol5a@p zMx#il0&vQ5;5F!Ou3+|}#ax3l!Dg;8e~P{~G0_3>p_ZASaoJ_Y;2O9uYm}A5e^%2L zdJc#k77@JkE1a)#hXpp#m^mMsGnm5GYnIvHURU7uP2iv=SB@Dk8jlldOM^b+k-k0E z)y|OR=lG5+C9B^ePh#oD-OYWg|g z_Jh@yZpmJ)d(O)+|KE{>`f0V@z{@{!&H)Rj%UkY=B)?_XAL5-Ch8Fo&rWWe2G5uv=o$WyX1jMg;Cdl9}pseFs_ft$i zw%~_;Ma%ufA@{*}k9WVZ4NA)D99?aMu2%)*5M{Em58-VHNobf4EEhy>C{f=ga`p)C zs5MO5S$U|I8SA5f#?O;L$FU@4DIeAnn?ZztskD5AGSiFgw!=Q$+Z>|6YQ}9x$eG%af$?LxLye1BQEmp0mJ=AQ zJ~!Hyaf1xxZ^X#$2v3isoUmr>?x^a}b+k>#b-4{B$TMzRRB=+%-0xKBp@9{q(C0>P z>S`DL(`<)d&3&%LO4^C&NSPqbN;TI=*S4R0KDuKW_O0TXZos7p?@Z7jkEvnZtLPc{ zZ2l6H^ba@9w1YTIca3kzTbUDf&2V|#n-2v8*uJ1*z6i59l*N^o`#cuPbNNLv%w#zY zQ7c=~PS(C{;TL_LHAzum`0p;?YJs_Fxn=P`VSFIOH?x07C9!WQM*fDET=lyxix7+T z537CYZ$iELj1BO?hExR!4K6#(rX|ilwESI>jYFmIVTeGo0AHwX-lAY^;`9jVJx$=(EP5v1NV*J zDEk4dD-bKNHacb0!%%~Kbsz`+l8hMXWL(PZMTG2&c?<-1<0F#9;(+dfG|F8K+jO|= zt^?L*A?@b?I5SFCBz*CV*7VylEWnkIx}m372|47vChDm3m76tBoc2gUbJHte@Ejnt z5YtMP>*S&1V!TusS}$wAq;yrxJ<-f<=_1qhg2hV+O87T77ZCv+H}{ikl0-~nhH1-; zZ(?oAt!?x(b~`I5`sZ?bQo3z53x{BjgL&cu5aO$FHYE(Zg~vsN*}JcyaBQfOP6OCOve~QxBTgk( zHG5G)E_6l`EI!w%;&a36{y9L89`})d)4yZ457zwVv~lt2erdo^Z(zd9I9stFGh-a5 zG3~<9!xgPu;U2xSYp!yq%t_%u^Z_^SO-UuP)U?l2*3o!}uM3;u6OpT3mw#&aMV1u3 zIf}(;YBCwSs(jko5=yO@5fWFm#Il?Xm%J7nTNIrQbXRRB4#1Wx`Pv}+ zg7MWOB5@-Lp8z2UWmErRQ>~elz${02{vXx;C>j5&Ll@L!J>A5cOVVGFdjjK&NuR zpm&tQVgzvv@d$0=wN{w{O+x~#o(8m)bl)BWhVS;iXb$cqn=Rt#t)jeg`Glof+&1Na zSMQ9(acnf)P!SEN-RA)*JY6xaVh(k6=ey>1l#w?oTIMSPz3%3}udGq;Bf*FQvP zYWqdI`gcB@CscguWOpXVCF}|{%f)#afe+X_%&3iAVy7{F-v)8G_TS-KLa$mNQu@7g zrkB})hg|_sAg~9)GTd`ZTRplkx=@$k?i=onV@%8sR)0W~)%OPcn`~d33I`jxb-VR< zEuY#-GmMbj!5}Ze@}X;H181B;KO7U6Pv=zmxBEU#`Lj|RD|(-0i8vfcfFW;t4-%iu zCLJ_3g%cL`6_#8o^c@9*$i7wI`hVM5#|n&I^U{8}0cTWQdxdgdIA+k^?Sk1(b5H!C zc93I-wc{E%Y1cZsF8q+trI}pCIyJ zh(f8U){`;|Rd^wQjdxcXsRYm!`kB8NV5Vd}hwMsa(tWUXzCw z0sI}J9jy{X7EHj~dvtR)MIEPx2o}BZSd-=xs#-K6Ra%rare~iPKNiA$B$Co?`NiAb z2DOXpD1|cymPh>j857p7GDH;T29pbZK!%PuTI}Saf^0$rOmF)`T!ta^R=(_C%ryI% zzTam^0;<>TsC+Iqr~4EU@@erw#rNaI2cKJ+TYu2(!G_LSE!pj|hznoF?Yarz$u9>5()4p=DR#x_3#_ZC6UTiBwVQOU%c4H_ktn!{8PX1VFd3Lq3 zQJ-BouFp*Q?V)n?8Har;aUYC$RT#FR?`A?i3Z0HwPM5a@TiG6k^BA8*xpjW0K2Wa< zuyqy5pUSuP;fQ?HAe#So7$<>Ue{4SgqmgeS);q&?PjXQp$HBd#o&U%Un_VC)6laU* ze0V01_2-%i-HASJo?Xo20;8xvmP?O0Sa$sx#8GJ>`Vdsk?=GoN;V0K#el&YS?-#@L zs@8eo@c7X=K#Wy4SXTNhW|8g&mhDj%PgE8I%W^0?SoIC9wu6FgKn>&^pwwlljsuQV zd>Y%;$YJ#4*UwAx5eW;URf8}~x{-@EfqFi1Xt&`4Wt$bsHh;Uo63vwKn_bn32kI74 z(jo#b1)`&cOPP*%u!3l>RjB4A*8>TWw?SXRV+wfGRW3hxGZF62vWO1Q(@b(R3@(&#DIqQI^O1GPl=NcgyqGNZK2}5 zZoCm{3~6+FA;9oOg@$YW^CPoA!&;-fIj(f0Zfd`&{PpU8}HS4eKO#uJlVjvI(@yhc`ybYC?c`WD&2jajXZA%W{*K zwoPMzneHr-UQj^d>0r}S&GB7NVU4UPDY=E8uhfVZu^X;JGkU585)8FALyKSBMSAsk zi|9r?y@0Vs5Fb-s6zA9ZAbFohTQ7xnAlSbuy2=lt!EEe$befn@9wi>Fbqh~n0$XVK zi4P<^bTv@Z!sNyyzRv8{d|{28`eXOCK&YI(d`FV4o;SVG?L-DYveAI1M7vNtW}s-< z;8;IibbU=vZBHcsV9_E2!sADk5XPy88uI`BA^x$@u1Kb)TWE~8n@=lEt5N^la^OFS iDJ=iWv-@x973Ke)>2u-20{~al|6uXwf%RV&qyGjLy~2?I diff --git a/skins/larry/images/login_shadow.png b/skins/larry/images/login_shadow.png deleted file mode 100644 index 6b9f359bd1f0d6603e8f5389768cdfa569e55cae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 591 zcmeAS@N?(olHy`uVBq!ia0y~yU{V9Jxj2}C=9Txw2nWnD|>gsHRUEnTx|+s<8wj-OikbB6^3 z17nz{i(^Oyy`*!$!eoZ+7)y+z7O@bK-g?ejbS z`=^&b>0?Ue4{<+NwWu2;WNcr4DAVo8N>#(Cpj8w0&JyafQ{6CocYy2$Q&$5OlT)P% zGY|bvnQtZYP-l|0;tb^losV~gN40xTeQ{>mmMP0JLX#IAocLzSwPosACm-4#o7`~i z_`%IPInq5NCO`CdZLz9YYGARPZQ%*7$(29vzuA7_Tk%Cv!JxX|_ql8HYS|}Oym+v3 z^4>QO+x<$?oaXfZn#(^|Bi+8h{NuIl#`O*wcAP8TWyRIJ__8a}@pItI2@f1owm#tT zT_c#_@HwgW+|w*8jqfWnlJ0D}*`p-!nRnXdxEMKu&0-fG9db5Se70Sz_S@f@2&v1# zmyBk!^riFVv$6I6n?LLL6_d}Va(u6}LsLE(%sf*m-23}C=YQ|LH=oG=`8L`44s*5t Vem-%=D-S`*!qe5yWt~$(696S)& Date: Sun, 23 Apr 2017 17:19:20 +0200 Subject: [PATCH 53/68] Update changelog --- CHANGELOG | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 42348adb7..a0434d6c3 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,9 @@ CHANGELOG Roundcube Webmail =========================== +RELEASE 1.3-rc +-------------- +- "Flattened" the larry theme: fresher look by removing shadows and gradients - Support logging to php://stdout (#5721) - Add support for DelSp=Yes in format=flowed messages (#5702) - Update to jQuery 3.2.1 From 2618e953d19d77308ec7f0e1011ff1efd5f4e1ab Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Mon, 24 Apr 2017 13:24:47 +0200 Subject: [PATCH 54/68] Bump version number also here --- public_html/index.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/public_html/index.php b/public_html/index.php index cec0dca07..deb2a83b2 100644 --- a/public_html/index.php +++ b/public_html/index.php @@ -3,9 +3,9 @@ /* +-----------------------------------------------------------------------+ | Roundcube Webmail IMAP Client | - | Version 1.0-git | + | Version 1.3-git | | | - | Copyright (C) 2005-2013, The Roundcube Dev Team | + | Copyright (C) 2005-2017, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -24,4 +24,3 @@ define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/'); // include index.php from application root directory include INSTALL_PATH . 'index.php'; - From dbaa2f374a4bbe614db8a56dbf232d9c6bf6574c Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Mon, 24 Apr 2017 21:20:05 +0200 Subject: [PATCH 55/68] Improve wording --- INSTALL | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/INSTALL b/INSTALL index 3bdf95a9a..e7ff603d3 100644 --- a/INSTALL +++ b/INSTALL @@ -179,8 +179,12 @@ virtual host config by with: AllowOverride all +For non-apache web servers add equivalent configuration parameters to deny +direct access to these private resources. + It is also recommended to change the document root to /public_html -after installation. +after installation if Roundcube runs at root of a dedicated virtual host. This +will automatically keep sensitive files out of reach for http requests. UPGRADING From 89987ee1e038e1aa020412dd73bf5bdf02dabef9 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 25 Apr 2017 08:51:14 +0200 Subject: [PATCH 56/68] Password: Fix security issue in virtualmin and sasl drivers --- CHANGELOG | 1 + plugins/password/drivers/sasl.php | 2 +- plugins/password/drivers/virtualmin.php | 6 +++--- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index a0434d6c3..5028bbe2f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -36,6 +36,7 @@ RELEASE 1.3-rc - Fix undesired effects when postgres database uses different timezone than PHP host (#5708) - Installer: Fix DB schema initialization on MS SQL Server - Fix bug where base_dn setting was ignored inside group_filters (#5720) +- Password: Fix security issue in virtualmin and sasl drivers RELEASE 1.3-beta ---------------- diff --git a/plugins/password/drivers/sasl.php b/plugins/password/drivers/sasl.php index f3baef557..fcaf7ac3e 100644 --- a/plugins/password/drivers/sasl.php +++ b/plugins/password/drivers/sasl.php @@ -36,7 +36,7 @@ class rcube_sasl_password function save($currpass, $newpass) { $curdir = RCUBE_PLUGINS_DIR . 'password/helpers'; - $username = escapeshellcmd($_SESSION['username']); + $username = escapeshellarg($_SESSION['username']); $args = rcmail::get_instance()->config->get('password_saslpasswd_args', ''); if ($fh = popen("$curdir/chgsaslpasswd -p $args $username", 'w')) { diff --git a/plugins/password/drivers/virtualmin.php b/plugins/password/drivers/virtualmin.php index 3001ad9d0..f219eacc6 100644 --- a/plugins/password/drivers/virtualmin.php +++ b/plugins/password/drivers/virtualmin.php @@ -70,9 +70,9 @@ class rcube_virtualmin_password $domain = $rcmail->user->get_username('domain'); } - $username = escapeshellcmd($username); - $domain = escapeshellcmd($domain); - $newpass = escapeshellcmd($newpass); + $username = escapeshellarg($username); + $domain = escapeshellarg($domain); + $newpass = escapeshellarg($newpass); $curdir = RCUBE_PLUGINS_DIR . 'password/helpers'; exec("$curdir/chgvirtualminpasswd modify-user --domain $domain --user $username --pass $newpass", $output, $returnvalue); From f1ec339893226ed5c5ec6d2532d2fbfd52ee1822 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Wed, 26 Apr 2017 08:30:07 +0200 Subject: [PATCH 57/68] Add CVE ident --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 5028bbe2f..fc31f17c2 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -36,7 +36,7 @@ RELEASE 1.3-rc - Fix undesired effects when postgres database uses different timezone than PHP host (#5708) - Installer: Fix DB schema initialization on MS SQL Server - Fix bug where base_dn setting was ignored inside group_filters (#5720) -- Password: Fix security issue in virtualmin and sasl drivers +- Password: Fix security issue in virtualmin and sasl drivers [CVE-2017-8114] RELEASE 1.3-beta ---------------- From d1cf69562f8ffe1abfe85d9ab5b1278fbec28770 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Thu, 27 Apr 2017 09:58:11 +0200 Subject: [PATCH 58/68] CS fixes and return values fixes --- program/lib/Roundcube/rcube_imap_generic.php | 2 +- program/lib/Roundcube/rcube_user.php | 98 +++++++++++--------- 2 files changed, 57 insertions(+), 43 deletions(-) diff --git a/program/lib/Roundcube/rcube_imap_generic.php b/program/lib/Roundcube/rcube_imap_generic.php index 3dac8a55c..7d7cc210c 100644 --- a/program/lib/Roundcube/rcube_imap_generic.php +++ b/program/lib/Roundcube/rcube_imap_generic.php @@ -2250,7 +2250,7 @@ class rcube_imap_generic } $result = $this->execute('UID STORE', array( - $this->compressMessageSet($messages), $mod . 'FLAGS.SILENT', "($flag)"), + $this->compressMessageSet($messages), $mod . 'FLAGS', "($flag)"), self::COMMAND_NORESPONSE); return $result == self::ERROR_OK; diff --git a/program/lib/Roundcube/rcube_user.php b/program/lib/Roundcube/rcube_user.php index ad442436c..77556f9e0 100644 --- a/program/lib/Roundcube/rcube_user.php +++ b/program/lib/Roundcube/rcube_user.php @@ -91,7 +91,8 @@ class rcube_user /** * Build a user name string (as e-mail address) * - * @param string $part Username part (empty or 'local' or 'domain', 'mail') + * @param string $part Username part (empty or 'local' or 'domain', 'mail') + * * @return string Full user name or its part */ function get_username($part = null) @@ -117,13 +118,12 @@ class rcube_user return $domain; } - if (!empty($domain)) + if (!empty($domain)) { return $local . '@' . $domain; - else - return $local; - } + } - return false; + return $local; + } } /** @@ -175,14 +175,18 @@ class rcube_user */ function save_prefs($a_user_prefs, $no_session = false) { - if (!$this->ID) + if (!$this->ID) { return false; + } $plugin = $this->rc->plugins->exec_hook('preferences_update', array( - 'userid' => $this->ID, 'prefs' => $a_user_prefs, 'old' => (array)$this->get_prefs())); + 'userid' => $this->ID, + 'prefs' => $a_user_prefs, + 'old' => (array)$this->get_prefs() + )); if (!empty($plugin['abort'])) { - return; + return false; } $a_user_prefs = $plugin['prefs']; @@ -262,7 +266,7 @@ class rcube_user /** * Return a list of all user emails (from identities) * - * @param bool Return only default identity + * @param bool $default Return only default identity * * @return array List of emails (identity_id, name, email) */ @@ -289,7 +293,8 @@ class rcube_user /** * Get default identity of this user * - * @param int $id Identity ID. If empty, the default identity is returned + * @param int $id Identity ID. If empty, the default identity is returned + * * @return array Hash array with all cols of the identity record */ function get_identity($id = null) @@ -342,14 +347,16 @@ class rcube_user /** * Update a specific identity record * - * @param int $iid Identity ID - * @param array $data Hash array with col->value pairs to save + * @param int $iid Identity ID + * @param array $data Hash array with col->value pairs to save + * * @return boolean True if saved successfully, false if nothing changed */ function update_identity($iid, $data) { - if (!$this->ID) + if (!$this->ID) { return false; + } $query_cols = $query_params = array(); @@ -373,19 +380,21 @@ class rcube_user $this->identities = array(); $this->emails = null; - return $this->db->affected_rows(); + return $this->db->affected_rows() > 0; } /** * Create a new identity record linked with this user * * @param array $data Hash array with col->value pairs to save - * @return int The inserted identity ID or false on error + * + * @return int The inserted identity ID or false on error */ function insert_identity($data) { - if (!$this->ID) + if (!$this->ID) { return false; + } unset($data['user_id']); @@ -408,19 +417,21 @@ class rcube_user $this->identities = array(); $this->emails = null; - return $this->db->insert_id('identities'); + return $this->db->insert_id('identities') ?: false; } /** * Mark the given identity as deleted * - * @param int $iid Identity ID + * @param int $iid Identity ID + * * @return boolean True if deleted successfully, false if nothing changed */ function delete_identity($iid) { - if (!$this->ID) + if (!$this->ID) { return false; + } $sql_result = $this->db->query( "SELECT count(*) AS ident_count FROM ".$this->db->table_name('identities', true). @@ -430,8 +441,9 @@ class rcube_user $sql_arr = $this->db->fetch_assoc($sql_result); // we'll not delete last identity - if ($sql_arr['ident_count'] <= 1) - return -1; + if ($sql_arr['ident_count'] <= 1) { + return false; + } $this->db->query( "UPDATE ".$this->db->table_name('identities', true). @@ -445,7 +457,7 @@ class rcube_user $this->identities = array(); $this->emails = null; - return $this->db->affected_rows(); + return $this->db->affected_rows() > 0; } /** @@ -545,6 +557,7 @@ class rcube_user * * @param string $user IMAP user name * @param string $host IMAP host name + * * @return rcube_user New user instance */ static function query($user, $host) @@ -572,8 +585,6 @@ class rcube_user if ($sql_arr) { return new rcube_user($sql_arr['user_id'], $sql_arr); } - - return false; } /** @@ -581,6 +592,7 @@ class rcube_user * * @param string $user IMAP user name * @param string $host IMAP host + * * @return rcube_user New user instance */ static function create($user, $host) @@ -606,7 +618,7 @@ class rcube_user // plugin aborted this operation if ($data['abort']) { - return false; + return; } $dbh->query( @@ -686,20 +698,21 @@ class rcube_user 'message' => "Failed to create new user"), true, false); } - return $user_id ? $user_instance : false; + return $user_id ? $user_instance : null; } /** * Resolve username using a virtuser plugins * * @param string $email E-mail address to resolve + * * @return string Resolved IMAP username */ static function email2user($email) { $rcube = rcube::get_instance(); $plugin = $rcube->plugins->exec_hook('email2user', - array('email' => $email, 'user' => NULL)); + array('email' => $email, 'user' => null)); return $plugin['user']; } @@ -707,25 +720,26 @@ class rcube_user /** * Resolve e-mail address from virtuser plugins * - * @param string $user User name - * @param boolean $first If true returns first found entry + * @param string $user User name + * @param boolean $first If true returns first found entry * @param boolean $extended If true returns email as array (email and name for identity) + * * @return mixed Resolved e-mail address string or array of strings */ static function user2email($user, $first=true, $extended=false) { $rcube = rcube::get_instance(); $plugin = $rcube->plugins->exec_hook('user2email', - array('email' => NULL, 'user' => $user, + array('email' => null, 'user' => $user, 'first' => $first, 'extended' => $extended)); - return empty($plugin['email']) ? NULL : $plugin['email']; + return empty($plugin['email']) ? null : $plugin['email']; } /** * Return a list of saved searches linked with this user * - * @param int $type Search type + * @param int $type Search type * * @return array List of saved searches indexed by search ID */ @@ -757,7 +771,7 @@ class rcube_user /** * Return saved search data. * - * @param int $id Row identifier + * @param int $id Row identifier * * @return array Data */ @@ -784,21 +798,20 @@ class rcube_user 'data' => unserialize($sql_arr['data']), ); } - - return null; } /** * Deletes given saved search record * - * @param int $sid Search ID + * @param int $sid Search ID * * @return boolean True if deleted successfully, false if nothing changed */ function delete_search($sid) { - if (!$this->ID) + if (!$this->ID) { return false; + } $this->db->query( "DELETE FROM ".$this->db->table_name('searches', true) @@ -806,7 +819,7 @@ class rcube_user ." AND `search_id` = ?", (int) $this->ID, $sid); - return $this->db->affected_rows(); + return $this->db->affected_rows() > 0; } /** @@ -814,12 +827,13 @@ class rcube_user * * @param array $data Hash array with col->value pairs to save * - * @return int The inserted search ID or false on error + * @return int The inserted search ID or false on error */ function insert_search($data) { - if (!$this->ID) + if (!$this->ID) { return false; + } $insert_cols[] = 'user_id'; $insert_values[] = (int) $this->ID; @@ -837,6 +851,6 @@ class rcube_user call_user_func_array(array($this->db, 'query'), array_merge(array($sql), $insert_values)); - return $this->db->insert_id('searches'); + return $this->db->insert_id('searches') ?: false; } } From e800fb5a196d22e8d422c71a283e3a5ae519a41f Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Thu, 27 Apr 2017 10:20:12 +0200 Subject: [PATCH 59/68] Bring back unintentionally removed .SILENT suffix in STORE FLAGS command --- program/lib/Roundcube/rcube_imap_generic.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/program/lib/Roundcube/rcube_imap_generic.php b/program/lib/Roundcube/rcube_imap_generic.php index 7d7cc210c..3dac8a55c 100644 --- a/program/lib/Roundcube/rcube_imap_generic.php +++ b/program/lib/Roundcube/rcube_imap_generic.php @@ -2250,7 +2250,7 @@ class rcube_imap_generic } $result = $this->execute('UID STORE', array( - $this->compressMessageSet($messages), $mod . 'FLAGS', "($flag)"), + $this->compressMessageSet($messages), $mod . 'FLAGS.SILENT', "($flag)"), self::COMMAND_NORESPONSE); return $result == self::ERROR_OK; From 78c54c128d4ae27d56155b8ad1648a403c16cdef Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Thu, 27 Apr 2017 12:08:44 +0200 Subject: [PATCH 60/68] Fix bug where invalid recipients could be silently discareded (#5739) --- CHANGELOG | 2 ++ program/steps/mail/sendmail.inc | 3 --- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index fc31f17c2..2b534e661 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,8 @@ CHANGELOG Roundcube Webmail =========================== +- Fix bug where invalid recipients could be silently discareded (#5739) + RELEASE 1.3-rc -------------- - "Flattened" the larry theme: fresher look by removing shadows and gradients diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc index ce7020a60..93483cd66 100644 --- a/program/steps/mail/sendmail.inc +++ b/program/steps/mail/sendmail.inc @@ -897,9 +897,6 @@ function rcmail_email_input_format($mailto, $count=false, $check=true) $result[] = format_email_recipient($address, $name); $item = $address; } - else if (trim($item)) { - continue; - } // check address format $item = trim($item, '<>'); From 61715454072c6d3b44d6957935ff68d6328d2b60 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Thu, 27 Apr 2017 12:14:56 +0200 Subject: [PATCH 61/68] Fix typo --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 2b534e661..210eb6cdf 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,7 +1,7 @@ CHANGELOG Roundcube Webmail =========================== -- Fix bug where invalid recipients could be silently discareded (#5739) +- Fix bug where invalid recipients could be silently discarded (#5739) RELEASE 1.3-rc -------------- From 02d4489df7dad07df053ddc01f009e5c0fbdb8d7 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 28 Apr 2017 09:31:58 +0200 Subject: [PATCH 62/68] Replace new line characters from the response name ...when the name was derived from the response text. --- program/js/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/program/js/app.js b/program/js/app.js index 17b9b301c..bbb33570e 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -4585,7 +4585,7 @@ function rcube_webmail() return false; } if (!name) - name = text.substring(0,40); + name = text.replace(/[\r\n]+/g, ' ').substring(0,40); var lock = ref.display_message(ref.get_label('savingresponse'), 'loading'); ref.http_post('settings/responses', { _insert:1, _name:name, _text:text }, lock); From 9ff7b78c7e1f2b02d87a67c193dafe97408341ca Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Thu, 4 May 2017 11:40:42 +0200 Subject: [PATCH 63/68] Fix conflict with _gid cookie of Google Analytics (#5748) TODO: Review the whole code base and don't use INPUT_GPC when it's not really needed, in most cases we should not read $_COOKIE. --- CHANGELOG | 1 + program/lib/Roundcube/rcube_utils.php | 37 +++++++++++---------------- program/steps/addressbook/delete.inc | 4 +-- program/steps/addressbook/func.inc | 3 +-- program/steps/addressbook/mailto.inc | 6 ++--- program/steps/mail/autocomplete.inc | 2 +- program/steps/mail/list_contacts.inc | 2 +- 7 files changed, 24 insertions(+), 31 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 210eb6cdf..c8c64d5b6 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,7 @@ CHANGELOG Roundcube Webmail =========================== - Fix bug where invalid recipients could be silently discarded (#5739) +- Fix conflict with _gid cookie of Google Analytics (#5748) RELEASE 1.3-rc -------------- diff --git a/program/lib/Roundcube/rcube_utils.php b/program/lib/Roundcube/rcube_utils.php index ea2ef2906..4bb83b120 100644 --- a/program/lib/Roundcube/rcube_utils.php +++ b/program/lib/Roundcube/rcube_utils.php @@ -27,9 +27,12 @@ class rcube_utils { // define constants for input reading - const INPUT_GET = 0x0101; - const INPUT_POST = 0x0102; - const INPUT_GPC = 0x0103; + const INPUT_GET = 1; + const INPUT_POST = 2; + const INPUT_COOKIE = 4; + const INPUT_GP = 3; // GET + POST + const INPUT_GPC = 7; // GET + POST + COOKIE + /** * Helper method to set a cookie with the current path and host settings @@ -254,7 +257,7 @@ class rcube_utils * Performs stripslashes() and charset conversion if necessary * * @param string Field name to read - * @param int Source to get value from (GPC) + * @param int Source to get value from (see self::INPUT_*) * @param boolean Allow HTML tags in field value * @param string Charset to convert into * @@ -264,26 +267,16 @@ class rcube_utils { $value = null; - if ($source == self::INPUT_GET) { - if (isset($_GET[$fname])) { - $value = $_GET[$fname]; - } + if (($source & self::INPUT_GET) && isset($_GET[$fname])) { + $value = $_GET[$fname]; } - else if ($source == self::INPUT_POST) { - if (isset($_POST[$fname])) { - $value = $_POST[$fname]; - } + + if (($source & self::INPUT_POST) && isset($_POST[$fname])) { + $value = $_POST[$fname]; } - else if ($source == self::INPUT_GPC) { - if (isset($_POST[$fname])) { - $value = $_POST[$fname]; - } - else if (isset($_GET[$fname])) { - $value = $_GET[$fname]; - } - else if (isset($_COOKIE[$fname])) { - $value = $_COOKIE[$fname]; - } + + if (($source & self::INPUT_COOKIE) && isset($_COOKIE[$fname])) { + $value = $_COOKIE[$fname]; } return self::parse_input_value($value, $allow_html, $charset); diff --git a/program/steps/addressbook/delete.inc b/program/steps/addressbook/delete.inc index fb860df95..d600c4a88 100644 --- a/program/steps/addressbook/delete.inc +++ b/program/steps/addressbook/delete.inc @@ -61,8 +61,8 @@ foreach ($cids as $source => $cid) { $error = 'contactdelerror'; } - $source = rcube_utils::get_input_value('_source', rcube_utils::INPUT_GPC); - $group = rcube_utils::get_input_value('_gid', rcube_utils::INPUT_GPC); + $source = rcube_utils::get_input_value('_source', rcube_utils::INPUT_GP); + $group = rcube_utils::get_input_value('_gid', rcube_utils::INPUT_GP); $OUTPUT->show_message($error, 'error'); $OUTPUT->command('list_contacts', $source, $group); diff --git a/program/steps/addressbook/func.inc b/program/steps/addressbook/func.inc index e2f9e4542..0b30363bd 100644 --- a/program/steps/addressbook/func.inc +++ b/program/steps/addressbook/func.inc @@ -152,8 +152,7 @@ function rcmail_contact_source($source=null, $init_env=false, $writable=false) else $CONTACTS->set_page(isset($_SESSION['page']) ? $_SESSION['page'] : 1); - if (!empty($_REQUEST['_gid'])) { - $group = rcube_utils::get_input_value('_gid', rcube_utils::INPUT_GPC); + if ($group = rcube_utils::get_input_value('_gid', rcube_utils::INPUT_GP)) { $CONTACTS->set_group($group); } diff --git a/program/steps/addressbook/mailto.inc b/program/steps/addressbook/mailto.inc index 4258b7c6a..3cde674aa 100644 --- a/program/steps/addressbook/mailto.inc +++ b/program/steps/addressbook/mailto.inc @@ -34,10 +34,10 @@ foreach ($cids as $source => $cid) { } if (!empty($_REQUEST['_gid']) && isset($_REQUEST['_source'])) { - $source = rcube_utils::get_input_value('_source', rcube_utils::INPUT_GPC); - $CONTACTS = $RCMAIL->get_address_book($source); + $source = rcube_utils::get_input_value('_source', rcube_utils::INPUT_GP); + $group_id = rcube_utils::get_input_value('_gid', rcube_utils::INPUT_GP); - $group_id = rcube_utils::get_input_value('_gid', rcube_utils::INPUT_GPC); + $CONTACTS = $RCMAIL->get_address_book($source); $group_data = $CONTACTS->get_group($group_id); // group has an email address assigned: use that diff --git a/program/steps/mail/autocomplete.inc b/program/steps/mail/autocomplete.inc index 2b3e714dc..8bee48552 100644 --- a/program/steps/mail/autocomplete.inc +++ b/program/steps/mail/autocomplete.inc @@ -22,7 +22,7 @@ if ($RCMAIL->action == 'group-expand') { $abook = $RCMAIL->get_address_book(rcube_utils::get_input_value('_source', rcube_utils::INPUT_GPC)); - if ($gid = rcube_utils::get_input_value('_gid', rcube_utils::INPUT_GPC)) { + if ($gid = rcube_utils::get_input_value('_gid', rcube_utils::INPUT_GET)) { $abook->set_group($gid); $abook->set_pagesize(9999); // TODO: limit number of group members by config? diff --git a/program/steps/mail/list_contacts.inc b/program/steps/mail/list_contacts.inc index 50cf387c3..45e0acc67 100644 --- a/program/steps/mail/list_contacts.inc +++ b/program/steps/mail/list_contacts.inc @@ -80,7 +80,7 @@ else { $CONTACTS->set_pagesize($page_size); $CONTACTS->set_page($list_page); - if ($group_id = rcube_utils::get_input_value('_gid', rcube_utils::INPUT_GPC)) { + if ($group_id = rcube_utils::get_input_value('_gid', rcube_utils::INPUT_GET)) { $CONTACTS->set_group($group_id); } // list groups of this source (on page one) From 533d32e99195156226a2cac0d6003f19e0d30688 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 5 May 2017 08:35:22 +0200 Subject: [PATCH 64/68] Update to TinyMCE 4.5.7 --- CHANGELOG | 1 + jsdeps.json | 8 ++++---- program/js/editor.js | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index c8c64d5b6..c8fbd30a1 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG Roundcube Webmail =========================== +- Update to TinyMCE 4.5.7 - Fix bug where invalid recipients could be silently discarded (#5739) - Fix conflict with _gid cookie of Google Analytics (#5748) diff --git a/jsdeps.json b/jsdeps.json index ff1f7b8f8..d0acecbd4 100644 --- a/jsdeps.json +++ b/jsdeps.json @@ -35,10 +35,10 @@ }, { "lib": "tinymce", - "version": "4.5.6", - "url": "http://download.ephox.com/tinymce/community/tinymce_4.5.6.zip", + "version": "4.5.7", + "url": "http://download.ephox.com/tinymce/community/tinymce_4.5.7.zip", "dest": "program/js", - "sha1": "47e14121e2841072a5e7d1d952ded0b0368b9d57", + "sha1": "4e86907c4748f7f75072e173ff3eee08700b9594", "license": "LGPL", "copyright": "Copyright (c) 1999-2015 Ephox Corp. All rights reserved", "rm": "program/js/tinymce", @@ -55,7 +55,7 @@ }, { "lib": "tinymce-langs", - "version": "4.5.6", + "version": "4.5.7", "url": "https://tinymce-services.azurewebsites.net/1/i18n/download?langs=ar,hy,az,eu,be,bs,bg_BG,ca,zh_CN,zh_TW,hr,cs,cs_CZ,da,nl,en_CA,en_GB,eo,et,fo,fi,fr_FR,fr_CH,gd,gl,ka_GE,de,de_AT,el,he_IL,hi_IN,hu_HU,is_IS,id,ga,it,ja,kab,km_KH,ko_KR,ku,ku_IQ,lv,lt,lb,mk_MK,ml_IN,nb_NO,oc,fa,fa_IR,pl,pt_BR,pt_PT,ro,ru,sk,sl_SI,es,es_MX,sv_SE,tg,ta,ta_IN,tt,th_TH,tr,tr_TR,ug,uk,uk_UA,vi,vi_VN,cy", "dest": "program/js/tinymce" }, diff --git a/program/js/editor.js b/program/js/editor.js index dc9a7ded4..c8fa86819 100644 --- a/program/js/editor.js +++ b/program/js/editor.js @@ -39,7 +39,7 @@ function rcube_text_editor(config, id) abs_url = location.href.replace(/[?#].*$/, '').replace(/\/$/, ''), conf = { selector: '#' + ($('#' + id).is('.mce_editor') ? id : 'fake-editor-id'), - cache_suffix: 's=4050600', + cache_suffix: 's=4050700', theme: 'modern', language: config.lang, content_css: rcmail.assets_path('program/resources/tinymce/content.css'), From 715e8bf8bd388434a0fa6c0cc5ea9a8ac3ca3fe8 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 5 May 2017 11:36:30 +0200 Subject: [PATCH 65/68] Print error from CLI scripts when system/exec function is disabled (#5744) --- CHANGELOG | 1 + bin/install-jsdeps.sh | 5 ++++- bin/installto.sh | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index c8fbd30a1..222cfbb4f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,6 +4,7 @@ CHANGELOG Roundcube Webmail - Update to TinyMCE 4.5.7 - Fix bug where invalid recipients could be silently discarded (#5739) - Fix conflict with _gid cookie of Google Analytics (#5748) +- Print error from CLI scripts when system/exec function is disabled (#5744) RELEASE 1.3-rc -------------- diff --git a/bin/install-jsdeps.sh b/bin/install-jsdeps.sh index 7a27aeecd..9a33c06a6 100755 --- a/bin/install-jsdeps.sh +++ b/bin/install-jsdeps.sh @@ -23,6 +23,10 @@ define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' ); require_once INSTALL_PATH . 'program/include/clisetup.php'; +if (!function_exists('exec')) { + die("PHP exec() function is required. Check disable_functions in php.ini\n"); +} + $SOURCES = json_decode(file_get_contents(INSTALL_PATH . 'jsdeps.json'), true); if (empty($SOURCES['dependencies'])) { @@ -319,4 +323,3 @@ foreach ($SOURCES['dependencies'] as $package) { echo "Done.\n\n"; } - diff --git a/bin/installto.sh b/bin/installto.sh index 3eb09a392..667d3ae1a 100755 --- a/bin/installto.sh +++ b/bin/installto.sh @@ -23,6 +23,10 @@ define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' ); require_once INSTALL_PATH . 'program/include/clisetup.php'; +if (!function_exists('system')) { + rcube::raise_error("PHP system() function is required. Check disable_functions in php.ini.", false, true); +} + $target_dir = unslashify($_SERVER['argv'][1]); if (empty($target_dir) || !is_dir(realpath($target_dir))) From 8f22c3287d40a13399c28e27c418030b3ef67dd1 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 5 May 2017 11:51:23 +0200 Subject: [PATCH 66/68] Fix bug where comment notation within style tag would cause the whole style to be ignored (#5747) --- CHANGELOG | 1 + program/lib/Roundcube/rcube_utils.php | 1 + tests/Framework/Utils.php | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 222cfbb4f..c0fb2d364 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,6 +5,7 @@ CHANGELOG Roundcube Webmail - Fix bug where invalid recipients could be silently discarded (#5739) - Fix conflict with _gid cookie of Google Analytics (#5748) - Print error from CLI scripts when system/exec function is disabled (#5744) +- Fix bug where comment notation within style tag would cause the whole style to be ignored (#5747) RELEASE 1.3-rc -------------- diff --git a/program/lib/Roundcube/rcube_utils.php b/program/lib/Roundcube/rcube_utils.php index 4bb83b120..4aaaf40f2 100644 --- a/program/lib/Roundcube/rcube_utils.php +++ b/program/lib/Roundcube/rcube_utils.php @@ -489,6 +489,7 @@ class rcube_utils $callback = function($matches) { return chr(hexdec($matches[1])); }; $out = html_entity_decode(html_entity_decode($content)); + $out = trim(preg_replace('/(^$)/', '', trim($out))); $out = preg_replace_callback('/\\\([0-9a-f]{4})/i', $callback, $out); $out = preg_replace('#/\*.*\*/#Ums', '', $out); $out = strip_tags($out); diff --git a/tests/Framework/Utils.php b/tests/Framework/Utils.php index ad81f6404..71e9f3e30 100644 --- a/tests/Framework/Utils.php +++ b/tests/Framework/Utils.php @@ -227,6 +227,10 @@ class Framework_Utils extends PHPUnit_Framework_TestCase $mod = rcube_utils::xss_entity_decode('#foo:after{content:"\003Cimg/src=x onerror=alert(2)>";}'); $this->assertNotContains(''); + $this->assertContains('#foo', $mod, "Strip HTML comments from content, but not the content"); } /** From 836f938e1ab83f5a2bdfa3ce393886223bba74b5 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 5 May 2017 13:41:49 +0200 Subject: [PATCH 67/68] Fix bug where it wasn't possible to scroll folders list in Edge (#5750) --- CHANGELOG | 1 + skins/larry/mail.css | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index c0fb2d364..d1a06cef1 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -6,6 +6,7 @@ CHANGELOG Roundcube Webmail - Fix conflict with _gid cookie of Google Analytics (#5748) - Print error from CLI scripts when system/exec function is disabled (#5744) - Fix bug where comment notation within style tag would cause the whole style to be ignored (#5747) +- Fix bug where it wasn't possible to scroll folders list in Edge (#5750) RELEASE 1.3-rc -------------- diff --git a/skins/larry/mail.css b/skins/larry/mail.css index 5085828e4..1c63dd909 100644 --- a/skins/larry/mail.css +++ b/skins/larry/mail.css @@ -16,7 +16,7 @@ left: 0; width: 200px; bottom: 0; - z-index: 2; + z-index: 1; /* fixes scrolling in Edge (#5750) */ } #mailview-right { @@ -25,7 +25,6 @@ left: 212px; right: 0; bottom: 0; - z-index: 3; } #mailview-right.fullwidth { @@ -199,7 +198,6 @@ html.mozilla #mailboxlist > li:first-child { left: 0; height: 40px; white-space: nowrap; - z-index: 10; } #messagetoolbar.fullwidth { From 5804ef8aa23cd5e8855bb4c8a4c89bc0b4d62936 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Mon, 8 May 2017 10:37:06 +0200 Subject: [PATCH 68/68] Fix folders list sorting on Windows - if php-intl is available (#5732) --- CHANGELOG | 1 + program/lib/Roundcube/rcube.php | 1 + program/lib/Roundcube/rcube_imap.php | 15 +++++++++++++++ program/lib/Roundcube/rcube_storage.php | 10 +++++----- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index d1a06cef1..87b4f6c16 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -7,6 +7,7 @@ CHANGELOG Roundcube Webmail - Print error from CLI scripts when system/exec function is disabled (#5744) - Fix bug where comment notation within style tag would cause the whole style to be ignored (#5747) - Fix bug where it wasn't possible to scroll folders list in Edge (#5750) +- Fix folders list sorting on Windows - if php-intl is available (#5732) RELEASE 1.3-rc -------------- diff --git a/program/lib/Roundcube/rcube.php b/program/lib/Roundcube/rcube.php index 7c9d5ccd7..fb7bf76f0 100644 --- a/program/lib/Roundcube/rcube.php +++ b/program/lib/Roundcube/rcube.php @@ -390,6 +390,7 @@ class rcube ); if (!empty($_SESSION['storage_host'])) { + $options['language'] = $_SESSION['language']; $options['host'] = $_SESSION['storage_host']; $options['user'] = $_SESSION['username']; $options['port'] = $_SESSION['storage_port']; diff --git a/program/lib/Roundcube/rcube_imap.php b/program/lib/Roundcube/rcube_imap.php index e2984c1c1..d5135bf74 100644 --- a/program/lib/Roundcube/rcube_imap.php +++ b/program/lib/Roundcube/rcube_imap.php @@ -4262,6 +4262,17 @@ class rcube_imap extends rcube_storage */ protected function sort_folder_comparator($str1, $str2) { + if ($this->sort_folder_collator === null) { + $this->sort_folder_collator = false; + + // strcoll() does not work with UTF8 locale on Windows, + // use Collator from the intl extension + if (stripos(PHP_OS, 'win') === 0 && function_exists('collator_compare')) { + $locale = $this->options['language'] ?: 'en_US'; + $this->sort_folder_collator = collator_create($locale) ?: false; + } + } + $path1 = explode($this->delimiter, $str1); $path2 = explode($this->delimiter, $str2); @@ -4272,6 +4283,10 @@ class rcube_imap extends rcube_storage continue; } + if ($this->sort_folder_collator) { + return collator_compare($this->sort_folder_collator, $folder1, $folder2); + } + return strcoll($folder1, $folder2); } } diff --git a/program/lib/Roundcube/rcube_storage.php b/program/lib/Roundcube/rcube_storage.php index d5bcf27a5..56703177c 100644 --- a/program/lib/Roundcube/rcube_storage.php +++ b/program/lib/Roundcube/rcube_storage.php @@ -42,13 +42,13 @@ abstract class rcube_storage */ public static $folder_types = array('drafts', 'sent', 'junk', 'trash'); - protected $folder = 'INBOX'; + protected $folder = 'INBOX'; protected $default_charset = 'ISO-8859-1'; + protected $options = array('auth_type' => 'check', 'language' => 'en_US'); + protected $page_size = 10; + protected $list_page = 1; + protected $threading = false; protected $search_set; - protected $options = array('auth_type' => 'check'); - protected $page_size = 10; - protected $list_page = 1; - protected $threading = false; /** * All (additional) headers used (in any way) by Roundcube