mirror of
https://github.com/the-djmaze/snappymail.git
synced 2024-09-20 07:35:55 +08:00
OpenPGP improvements (first step)
openpgpjs: 0.7.2 -> 0.10.1 additional fixes
This commit is contained in:
parent
09334159c2
commit
34a9b8cbc5
|
@ -109,6 +109,7 @@
|
||||||
'Settings': 'settings',
|
'Settings': 'settings',
|
||||||
'Menu': 'menu',
|
'Menu': 'menu',
|
||||||
'PopupComposeOpenPGP': 'compose-open-pgp',
|
'PopupComposeOpenPGP': 'compose-open-pgp',
|
||||||
|
'PopupMessageOpenPGP': 'message-open-pgp',
|
||||||
'PopupKeyboardShortcutsHelp': 'popup-keyboard-shortcuts-help',
|
'PopupKeyboardShortcutsHelp': 'popup-keyboard-shortcuts-help',
|
||||||
'PopupAsk': 'popup-ask'
|
'PopupAsk': 'popup-ask'
|
||||||
};
|
};
|
||||||
|
|
|
@ -390,7 +390,7 @@
|
||||||
*/
|
*/
|
||||||
Links.prototype.openPgpJs = function ()
|
Links.prototype.openPgpJs = function ()
|
||||||
{
|
{
|
||||||
return this.sStaticPrefix + 'js/min/openpgp.js';
|
return this.sStaticPrefix + 'js/min/openpgp.js';
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
10
dev/External/ko.js
vendored
10
dev/External/ko.js
vendored
|
@ -7,6 +7,7 @@
|
||||||
window = require('window'),
|
window = require('window'),
|
||||||
_ = require('_'),
|
_ = require('_'),
|
||||||
$ = require('$'),
|
$ = require('$'),
|
||||||
|
JSON = require('JSON'),
|
||||||
Opentip = require('Opentip'),
|
Opentip = require('Opentip'),
|
||||||
|
|
||||||
fDisposalTooltipHelper = function (oElement) {
|
fDisposalTooltipHelper = function (oElement) {
|
||||||
|
@ -63,6 +64,15 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ko.bindingHandlers.json = {
|
||||||
|
'init': function (oElement, fValueAccessor) {
|
||||||
|
$(oElement).text(JSON.stringify(ko.unwrap(fValueAccessor())));
|
||||||
|
},
|
||||||
|
'update': function (oElement, fValueAccessor) {
|
||||||
|
$(oElement).text(JSON.stringify(ko.unwrap(fValueAccessor())));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
ko.bindingHandlers.tooltip = {
|
ko.bindingHandlers.tooltip = {
|
||||||
'init': function (oElement, fValueAccessor) {
|
'init': function (oElement, fValueAccessor) {
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,6 @@
|
||||||
Globals = require('Common/Globals'),
|
Globals = require('Common/Globals'),
|
||||||
Links = require('Common/Links'),
|
Links = require('Common/Links'),
|
||||||
|
|
||||||
PgpStore = require('Stores/User/Pgp'),
|
|
||||||
|
|
||||||
AttachmentModel = require('Model/Attachment'),
|
AttachmentModel = require('Model/Attachment'),
|
||||||
|
|
||||||
MessageHelper = require('Helper/Message'),
|
MessageHelper = require('Helper/Message'),
|
||||||
|
@ -82,7 +80,6 @@
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
this.body = null;
|
this.body = null;
|
||||||
this.plainRaw = '';
|
|
||||||
|
|
||||||
this.isHtml = ko.observable(false);
|
this.isHtml = ko.observable(false);
|
||||||
this.hasImages = ko.observable(false);
|
this.hasImages = ko.observable(false);
|
||||||
|
@ -984,25 +981,6 @@
|
||||||
{
|
{
|
||||||
this.body.data('rl-is-html', !!this.isHtml());
|
this.body.data('rl-is-html', !!this.isHtml());
|
||||||
this.body.data('rl-has-images', !!this.hasImages());
|
this.body.data('rl-has-images', !!this.hasImages());
|
||||||
|
|
||||||
this.body.data('rl-plain-raw', this.plainRaw);
|
|
||||||
|
|
||||||
if (require('Stores/User/Pgp').capaOpenPGP())
|
|
||||||
{
|
|
||||||
this.body.data('rl-plain-pgp-signed', !!this.isPgpSigned());
|
|
||||||
this.body.data('rl-plain-pgp-encrypted', !!this.isPgpEncrypted());
|
|
||||||
this.body.data('rl-pgp-verify-status', this.pgpSignedVerifyStatus());
|
|
||||||
this.body.data('rl-pgp-verify-user', this.pgpSignedVerifyUser());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
MessageModel.prototype.storePgpVerifyDataInDom = function ()
|
|
||||||
{
|
|
||||||
if (this.body && require('Stores/User/Pgp').capaOpenPGP())
|
|
||||||
{
|
|
||||||
this.body.data('rl-pgp-verify-status', this.pgpSignedVerifyStatus());
|
|
||||||
this.body.data('rl-pgp-verify-user', this.pgpSignedVerifyUser());
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1012,157 +990,6 @@
|
||||||
{
|
{
|
||||||
this.isHtml(!!this.body.data('rl-is-html'));
|
this.isHtml(!!this.body.data('rl-is-html'));
|
||||||
this.hasImages(!!this.body.data('rl-has-images'));
|
this.hasImages(!!this.body.data('rl-has-images'));
|
||||||
|
|
||||||
this.plainRaw = Utils.pString(this.body.data('rl-plain-raw'));
|
|
||||||
|
|
||||||
if (require('Stores/User/Pgp').capaOpenPGP())
|
|
||||||
{
|
|
||||||
this.isPgpSigned(!!this.body.data('rl-plain-pgp-signed'));
|
|
||||||
this.isPgpEncrypted(!!this.body.data('rl-plain-pgp-encrypted'));
|
|
||||||
this.pgpSignedVerifyStatus(this.body.data('rl-pgp-verify-status'));
|
|
||||||
this.pgpSignedVerifyUser(this.body.data('rl-pgp-verify-user'));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.isPgpSigned(false);
|
|
||||||
this.isPgpEncrypted(false);
|
|
||||||
this.pgpSignedVerifyStatus(Enums.SignedVerifyStatus.None);
|
|
||||||
this.pgpSignedVerifyUser('');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
MessageModel.prototype.verifyPgpSignedClearMessage = function ()
|
|
||||||
{
|
|
||||||
if (this.isPgpSigned())
|
|
||||||
{
|
|
||||||
var
|
|
||||||
aRes = [],
|
|
||||||
mPgpMessage = null,
|
|
||||||
sFrom = this.from && this.from[0] && this.from[0].email ? this.from[0].email : '',
|
|
||||||
aPublicKeys = PgpStore.findPublicKeysByEmail(sFrom),
|
|
||||||
oValidKey = null,
|
|
||||||
oValidSysKey = null,
|
|
||||||
sPlain = ''
|
|
||||||
;
|
|
||||||
|
|
||||||
this.pgpSignedVerifyStatus(Enums.SignedVerifyStatus.Error);
|
|
||||||
this.pgpSignedVerifyUser('');
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
mPgpMessage = PgpStore.openpgp.cleartext.readArmored(this.plainRaw);
|
|
||||||
if (mPgpMessage && mPgpMessage.getText)
|
|
||||||
{
|
|
||||||
this.pgpSignedVerifyStatus(
|
|
||||||
aPublicKeys.length ? Enums.SignedVerifyStatus.Unverified : Enums.SignedVerifyStatus.UnknownPublicKeys);
|
|
||||||
|
|
||||||
aRes = mPgpMessage.verify(aPublicKeys);
|
|
||||||
if (aRes && 0 < aRes.length)
|
|
||||||
{
|
|
||||||
oValidKey = _.find(aRes, function (oItem) {
|
|
||||||
return oItem && oItem.keyid && oItem.valid;
|
|
||||||
});
|
|
||||||
|
|
||||||
if (oValidKey)
|
|
||||||
{
|
|
||||||
oValidSysKey = PgpStore.findPublicKeyByHex(oValidKey.keyid.toHex());
|
|
||||||
if (oValidSysKey)
|
|
||||||
{
|
|
||||||
sPlain = mPgpMessage.getText();
|
|
||||||
|
|
||||||
this.pgpSignedVerifyStatus(Enums.SignedVerifyStatus.Success);
|
|
||||||
this.pgpSignedVerifyUser(oValidSysKey.user);
|
|
||||||
|
|
||||||
sPlain =
|
|
||||||
Globals.$div.empty().append(
|
|
||||||
$('<pre class="b-plain-openpgp signed verified"></pre>').text(sPlain)
|
|
||||||
).html()
|
|
||||||
;
|
|
||||||
|
|
||||||
Globals.$div.empty();
|
|
||||||
|
|
||||||
this.replacePlaneTextBody(sPlain);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (oExc) {}
|
|
||||||
|
|
||||||
this.storePgpVerifyDataInDom();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
MessageModel.prototype.decryptPgpEncryptedMessage = function (sPassword)
|
|
||||||
{
|
|
||||||
if (this.isPgpEncrypted())
|
|
||||||
{
|
|
||||||
var
|
|
||||||
aRes = [],
|
|
||||||
mPgpMessage = null,
|
|
||||||
mPgpMessageDecrypted = null,
|
|
||||||
sFrom = this.from && this.from[0] && this.from[0].email ? this.from[0].email : '',
|
|
||||||
aPublicKey = PgpStore.findPublicKeysByEmail(sFrom),
|
|
||||||
oPrivateKey = PgpStore.findSelfPrivateKey(sPassword),
|
|
||||||
oValidKey = null,
|
|
||||||
oValidSysKey = null,
|
|
||||||
sPlain = ''
|
|
||||||
;
|
|
||||||
|
|
||||||
this.pgpSignedVerifyStatus(Enums.SignedVerifyStatus.Error);
|
|
||||||
this.pgpSignedVerifyUser('');
|
|
||||||
|
|
||||||
if (!oPrivateKey)
|
|
||||||
{
|
|
||||||
this.pgpSignedVerifyStatus(Enums.SignedVerifyStatus.UnknownPrivateKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
mPgpMessage = PgpStore.openpgp.message.readArmored(this.plainRaw);
|
|
||||||
if (mPgpMessage && oPrivateKey && mPgpMessage.decrypt)
|
|
||||||
{
|
|
||||||
this.pgpSignedVerifyStatus(Enums.SignedVerifyStatus.Unverified);
|
|
||||||
|
|
||||||
mPgpMessageDecrypted = mPgpMessage.decrypt(oPrivateKey);
|
|
||||||
if (mPgpMessageDecrypted)
|
|
||||||
{
|
|
||||||
aRes = mPgpMessageDecrypted.verify(aPublicKey);
|
|
||||||
if (aRes && 0 < aRes.length)
|
|
||||||
{
|
|
||||||
oValidKey = _.find(aRes, function (oItem) {
|
|
||||||
return oItem && oItem.keyid && oItem.valid;
|
|
||||||
});
|
|
||||||
|
|
||||||
if (oValidKey)
|
|
||||||
{
|
|
||||||
oValidSysKey = PgpStore.findPublicKeyByHex(oValidKey.keyid.toHex());
|
|
||||||
if (oValidSysKey)
|
|
||||||
{
|
|
||||||
this.pgpSignedVerifyStatus(Enums.SignedVerifyStatus.Success);
|
|
||||||
this.pgpSignedVerifyUser(oValidSysKey.user);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sPlain = mPgpMessageDecrypted.getText();
|
|
||||||
|
|
||||||
sPlain =
|
|
||||||
Globals.$div.empty().append(
|
|
||||||
$('<pre class="b-plain-openpgp signed verified"></pre>').text(sPlain)
|
|
||||||
).html()
|
|
||||||
;
|
|
||||||
|
|
||||||
Globals.$div.empty();
|
|
||||||
|
|
||||||
this.replacePlaneTextBody(sPlain);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (oExc) {}
|
|
||||||
|
|
||||||
this.storePgpVerifyDataInDom();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
_ = require('_'),
|
_ = require('_'),
|
||||||
ko = require('ko'),
|
ko = require('ko'),
|
||||||
|
|
||||||
|
PgpStore = require('Stores/User/Pgp'),
|
||||||
|
|
||||||
AbstractModel = require('Knoin/AbstractModel')
|
AbstractModel = require('Knoin/AbstractModel')
|
||||||
;
|
;
|
||||||
|
|
||||||
|
@ -45,6 +47,22 @@
|
||||||
OpenPgpKeyModel.prototype.armor = '';
|
OpenPgpKeyModel.prototype.armor = '';
|
||||||
OpenPgpKeyModel.prototype.isPrivate = false;
|
OpenPgpKeyModel.prototype.isPrivate = false;
|
||||||
|
|
||||||
|
OpenPgpKeyModel.prototype.getNativeKeys = function ()
|
||||||
|
{
|
||||||
|
var oKey = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
oKey = PgpStore.openpgp.key.readArmored(this.armor);
|
||||||
|
if (oKey && !oKey.err && oKey.keys && oKey.keys[0])
|
||||||
|
{
|
||||||
|
return oKey.keys;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (e) {}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = OpenPgpKeyModel;
|
module.exports = OpenPgpKeyModel;
|
||||||
|
|
||||||
}());
|
}());
|
|
@ -22,6 +22,7 @@
|
||||||
|
|
||||||
AppStore = require('Stores/User/App'),
|
AppStore = require('Stores/User/App'),
|
||||||
FolderStore = require('Stores/User/Folder'),
|
FolderStore = require('Stores/User/Folder'),
|
||||||
|
PgpStore = require('Stores/User/Pgp'),
|
||||||
SettingsStore = require('Stores/User/Settings'),
|
SettingsStore = require('Stores/User/Settings'),
|
||||||
|
|
||||||
Remote = require('Remote/User/Ajax'),
|
Remote = require('Remote/User/Ajax'),
|
||||||
|
@ -502,6 +503,19 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Object} oMessageTextBody
|
||||||
|
*/
|
||||||
|
MessageUserStore.prototype.initOpenPgpControls = function (oMessageTextBody)
|
||||||
|
{
|
||||||
|
if (oMessageTextBody && oMessageTextBody.find)
|
||||||
|
{
|
||||||
|
oMessageTextBody.find('.b-plain-openpgp:not(.inited)').each(function () {
|
||||||
|
PgpStore.initMessageBodyControls($(this));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
MessageUserStore.prototype.setMessage = function (oData, bCached)
|
MessageUserStore.prototype.setMessage = function (oData, bCached)
|
||||||
{
|
{
|
||||||
var
|
var
|
||||||
|
@ -512,6 +526,7 @@
|
||||||
oBody = null,
|
oBody = null,
|
||||||
oTextBody = null,
|
oTextBody = null,
|
||||||
sId = '',
|
sId = '',
|
||||||
|
sPlain = '',
|
||||||
sResultHtml = '',
|
sResultHtml = '',
|
||||||
bPgpSigned = false,
|
bPgpSigned = false,
|
||||||
bPgpEncrypted = false,
|
bPgpEncrypted = false,
|
||||||
|
@ -579,13 +594,13 @@
|
||||||
|
|
||||||
if ((oMessage.isPgpSigned() || oMessage.isPgpEncrypted()) && require('Stores/User/Pgp').capaOpenPGP())
|
if ((oMessage.isPgpSigned() || oMessage.isPgpEncrypted()) && require('Stores/User/Pgp').capaOpenPGP())
|
||||||
{
|
{
|
||||||
oMessage.plainRaw = Utils.pString(oData.Result.Plain);
|
sPlain = Utils.pString(oData.Result.Plain);
|
||||||
|
|
||||||
bPgpEncrypted = /---BEGIN PGP MESSAGE---/.test(oMessage.plainRaw);
|
bPgpEncrypted = /---BEGIN PGP MESSAGE---/.test(sPlain);
|
||||||
if (!bPgpEncrypted)
|
if (!bPgpEncrypted)
|
||||||
{
|
{
|
||||||
bPgpSigned = /-----BEGIN PGP SIGNED MESSAGE-----/.test(oMessage.plainRaw) &&
|
bPgpSigned = /-----BEGIN PGP SIGNED MESSAGE-----/.test(sPlain) &&
|
||||||
/-----BEGIN PGP SIGNATURE-----/.test(oMessage.plainRaw);
|
/-----BEGIN PGP SIGNATURE-----/.test(sPlain);
|
||||||
}
|
}
|
||||||
|
|
||||||
Globals.$div.empty();
|
Globals.$div.empty();
|
||||||
|
@ -593,7 +608,7 @@
|
||||||
{
|
{
|
||||||
sResultHtml =
|
sResultHtml =
|
||||||
Globals.$div.append(
|
Globals.$div.append(
|
||||||
$('<pre class="b-plain-openpgp signed"></pre>').text(oMessage.plainRaw)
|
$('<pre class="b-plain-openpgp signed"></pre>').text(sPlain)
|
||||||
).html()
|
).html()
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
@ -601,11 +616,13 @@
|
||||||
{
|
{
|
||||||
sResultHtml =
|
sResultHtml =
|
||||||
Globals.$div.append(
|
Globals.$div.append(
|
||||||
$('<pre class="b-plain-openpgp encrypted"></pre>').text(oMessage.plainRaw)
|
$('<pre class="b-plain-openpgp encrypted"></pre>').text(sPlain)
|
||||||
).html()
|
).html()
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sPlain = '';
|
||||||
|
|
||||||
Globals.$div.empty();
|
Globals.$div.empty();
|
||||||
|
|
||||||
oMessage.isPgpSigned(bPgpSigned);
|
oMessage.isPgpSigned(bPgpSigned);
|
||||||
|
@ -624,8 +641,6 @@
|
||||||
|
|
||||||
oMessage.isHtml(!!bIsHtml);
|
oMessage.isHtml(!!bIsHtml);
|
||||||
oMessage.hasImages(!!bHasExternals);
|
oMessage.hasImages(!!bHasExternals);
|
||||||
oMessage.pgpSignedVerifyStatus(Enums.SignedVerifyStatus.None);
|
|
||||||
oMessage.pgpSignedVerifyUser('');
|
|
||||||
|
|
||||||
oMessage.body = oBody;
|
oMessage.body = oBody;
|
||||||
if (oMessage.body)
|
if (oMessage.body)
|
||||||
|
@ -663,6 +678,8 @@
|
||||||
|
|
||||||
if (oBody)
|
if (oBody)
|
||||||
{
|
{
|
||||||
|
this.initOpenPgpControls(oBody);
|
||||||
|
|
||||||
this.initBlockquoteSwitcher(oBody);
|
this.initBlockquoteSwitcher(oBody);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,10 @@
|
||||||
var
|
var
|
||||||
_ = require('_'),
|
_ = require('_'),
|
||||||
ko = require('ko'),
|
ko = require('ko'),
|
||||||
|
$ = require('$'),
|
||||||
|
kn = require('Knoin/Knoin'),
|
||||||
|
|
||||||
|
Translator = require('Common/Translator'),
|
||||||
|
|
||||||
Utils = require('Common/Utils')
|
Utils = require('Common/Utils')
|
||||||
;
|
;
|
||||||
|
@ -41,32 +45,41 @@
|
||||||
PgpUserStore.prototype.findPublicKeyByHex = function (sHash)
|
PgpUserStore.prototype.findPublicKeyByHex = function (sHash)
|
||||||
{
|
{
|
||||||
return _.find(this.openpgpkeysPublic(), function (oItem) {
|
return _.find(this.openpgpkeysPublic(), function (oItem) {
|
||||||
return oItem && sHash === oItem.id;
|
return sHash && oItem && sHash === oItem.id;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
PgpUserStore.prototype.findPrivateKeyByHex = function (sHash)
|
||||||
|
{
|
||||||
|
return _.find(this.openpgpkeysPrivate(), function (oItem) {
|
||||||
|
return sHash && oItem && sHash === oItem.id;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
PgpUserStore.prototype.findPublicKeysByEmail = function (sEmail)
|
PgpUserStore.prototype.findPublicKeysByEmail = function (sEmail)
|
||||||
|
{
|
||||||
|
return _.compact(_.flatten(_.map(this.openpgpkeysPublic(), function (oItem) {
|
||||||
|
var oKey = oItem && sEmail === oItem.email ? oItem : null;
|
||||||
|
return oKey ? oKey.getNativeKeys() : [null];
|
||||||
|
}), true));
|
||||||
|
};
|
||||||
|
|
||||||
|
PgpUserStore.prototype.findPublicKeysBySigningKeyIds = function (aSigningKeyIds)
|
||||||
{
|
{
|
||||||
var self = this;
|
var self = this;
|
||||||
return _.compact(_.map(this.openpgpkeysPublic(), function (oItem) {
|
return _.compact(_.flatten(_.map(aSigningKeyIds, function (oId) {
|
||||||
|
var oKey = oId && oId.toHex ? self.findPublicKeyByHex(oId.toHex()) : null;
|
||||||
|
return oKey ? oKey.getNativeKeys() : [null];
|
||||||
|
}), true));
|
||||||
|
};
|
||||||
|
|
||||||
var oKey = null;
|
PgpUserStore.prototype.findPrivateKeysByEncryptionKeyIds = function (aEncryptionKeyIds, bReturnWrapKeys)
|
||||||
if (oItem && sEmail === oItem.email)
|
{
|
||||||
{
|
var self = this;
|
||||||
try
|
return _.compact(_.flatten(_.map(aEncryptionKeyIds, function (oId) {
|
||||||
{
|
var oKey = oId && oId.toHex ? self.findPrivateKeyByHex(oId.toHex()) : null;
|
||||||
oKey = self.openpgp.key.readArmored(oItem.armor);
|
return oKey ? (bReturnWrapKeys ? [oKey] : oKey.getNativeKeys()) : [null];
|
||||||
if (oKey && !oKey.err && oKey.keys && oKey.keys[0])
|
}), true));
|
||||||
{
|
|
||||||
return oKey.keys[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (e) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
|
|
||||||
}));
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -77,6 +90,7 @@
|
||||||
PgpUserStore.prototype.findPrivateKeyByEmail = function (sEmail, sPassword)
|
PgpUserStore.prototype.findPrivateKeyByEmail = function (sEmail, sPassword)
|
||||||
{
|
{
|
||||||
var
|
var
|
||||||
|
oPrivateKeys = [],
|
||||||
oPrivateKey = null,
|
oPrivateKey = null,
|
||||||
oKey = _.find(this.openpgpkeysPrivate(), function (oItem) {
|
oKey = _.find(this.openpgpkeysPrivate(), function (oItem) {
|
||||||
return oItem && sEmail === oItem.email;
|
return oItem && sEmail === oItem.email;
|
||||||
|
@ -85,18 +99,15 @@
|
||||||
|
|
||||||
if (oKey)
|
if (oKey)
|
||||||
{
|
{
|
||||||
|
oPrivateKeys = oKey.getNativeKeys();
|
||||||
|
oPrivateKey = oPrivateKeys[0] || null;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
oPrivateKey = this.openpgp.key.readArmored(oKey.armor);
|
if (oPrivateKey)
|
||||||
if (oPrivateKey && !oPrivateKey.err && oPrivateKey.keys && oPrivateKey.keys[0])
|
|
||||||
{
|
{
|
||||||
oPrivateKey = oPrivateKey.keys[0];
|
|
||||||
oPrivateKey.decrypt(Utils.pString(sPassword));
|
oPrivateKey.decrypt(Utils.pString(sPassword));
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
oPrivateKey = null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (e)
|
catch (e)
|
||||||
{
|
{
|
||||||
|
@ -116,6 +127,259 @@
|
||||||
return this.findPrivateKeyByEmail(require('Stores/User/Account').email(), sPassword);
|
return this.findPrivateKeyByEmail(require('Stores/User/Account').email(), sPassword);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
PgpUserStore.prototype.decryptMessage = function (oMessage, fCallback)
|
||||||
|
{
|
||||||
|
var self = this, aPrivateKeys = [], aEncryptionKeyIds = [];
|
||||||
|
if (oMessage && oMessage.getSigningKeyIds)
|
||||||
|
{
|
||||||
|
aEncryptionKeyIds = oMessage.getEncryptionKeyIds();
|
||||||
|
if (aEncryptionKeyIds)
|
||||||
|
{
|
||||||
|
aPrivateKeys = this.findPrivateKeysByEncryptionKeyIds(aEncryptionKeyIds, true);
|
||||||
|
if (aPrivateKeys && 0 < aPrivateKeys.length)
|
||||||
|
{
|
||||||
|
kn.showScreenPopup(require('View/Popup/MessageOpenPgp'), [function (oDecriptedKey) {
|
||||||
|
|
||||||
|
if (oDecriptedKey)
|
||||||
|
{
|
||||||
|
var oPrivateKey = null, oDecryptedMessage = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
oDecryptedMessage = oMessage.decrypt(oDecriptedKey);
|
||||||
|
}
|
||||||
|
catch (e)
|
||||||
|
{
|
||||||
|
oDecryptedMessage = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (oDecryptedMessage)
|
||||||
|
{
|
||||||
|
oPrivateKey = self.findPrivateKeyByHex(oDecriptedKey.primaryKey.keyid.toHex());
|
||||||
|
if (oPrivateKey)
|
||||||
|
{
|
||||||
|
self.verifyMessage(oDecryptedMessage, function (oValidKey, aSigningKeyIds) {
|
||||||
|
fCallback(oPrivateKey, oDecryptedMessage, oValidKey || null, aSigningKeyIds || null);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fCallback(oPrivateKey, oDecryptedMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fCallback(oPrivateKey, oDecryptedMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fCallback(null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
}, aPrivateKeys]);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fCallback(null, null);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
PgpUserStore.prototype.verifyMessage = function (oMessage, fCallback)
|
||||||
|
{
|
||||||
|
var oValid = null, aResult = [], aPublicKeys = [], aSigningKeyIds = [];
|
||||||
|
if (oMessage && oMessage.getSigningKeyIds)
|
||||||
|
{
|
||||||
|
aSigningKeyIds = oMessage.getSigningKeyIds();
|
||||||
|
if (aSigningKeyIds && 0 < aSigningKeyIds.length)
|
||||||
|
{
|
||||||
|
aPublicKeys = this.findPublicKeysBySigningKeyIds(aSigningKeyIds);
|
||||||
|
if (aPublicKeys && 0 < aPublicKeys.length)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
aResult = oMessage.verify(aPublicKeys);
|
||||||
|
oValid = _.find(_.isArray(aResult) ? aResult : [], function (oItem) {
|
||||||
|
return oItem && oItem.valid && oItem.keyid;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (oValid && oValid.keyid && oValid.keyid && oValid.keyid.toHex)
|
||||||
|
{
|
||||||
|
fCallback(this.findPublicKeyByHex(oValid.keyid.toHex()));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
fCallback(null, aSigningKeyIds);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fCallback(null);
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {*} mDom
|
||||||
|
*/
|
||||||
|
PgpUserStore.prototype.controlsHelper = function (mDom, oVerControl, bSuccess, sTitle, sText)
|
||||||
|
{
|
||||||
|
if (bSuccess)
|
||||||
|
{
|
||||||
|
mDom.removeClass('error').addClass('success').attr('title', sTitle);
|
||||||
|
oVerControl.removeClass('error').addClass('success').attr('title', sTitle);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mDom.removeClass('success').addClass('error').attr('title', sTitle);
|
||||||
|
oVerControl.removeClass('success').addClass('error').attr('title', sTitle);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (undefined !== sText)
|
||||||
|
{
|
||||||
|
mDom.text(Utils.trim(sText.replace(/(\u200C|\u0002)/g, '')));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {*} mDom
|
||||||
|
*/
|
||||||
|
PgpUserStore.prototype.initMessageBodyControls = function (mDom)
|
||||||
|
{
|
||||||
|
if (mDom && !mDom.hasClass('inited'))
|
||||||
|
{
|
||||||
|
mDom.addClass('inited');
|
||||||
|
|
||||||
|
var
|
||||||
|
self = this,
|
||||||
|
bEncrypted = mDom.hasClass('encrypted'),
|
||||||
|
bSigned = mDom.hasClass('signed'),
|
||||||
|
oVerControl = null,
|
||||||
|
sData = ''
|
||||||
|
;
|
||||||
|
|
||||||
|
if (bEncrypted || bSigned)
|
||||||
|
{
|
||||||
|
sData = mDom.text();
|
||||||
|
mDom.data('openpgp-original', sData);
|
||||||
|
|
||||||
|
if (bEncrypted)
|
||||||
|
{
|
||||||
|
oVerControl = $('<div class="b-openpgp-control"><i class="icon-lock"></i></div>')
|
||||||
|
.attr('title', Translator.i18n('MESSAGE/PGP_ENCRYPTED_MESSAGE_DESC'));
|
||||||
|
|
||||||
|
oVerControl.on('click', function () {
|
||||||
|
if ($(this).hasClass('success'))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var oMessage = self.openpgp.message.readArmored(sData);
|
||||||
|
if (oMessage && oMessage.getText && oMessage.verify && oMessage.decrypt)
|
||||||
|
{
|
||||||
|
self.decryptMessage(oMessage, function (oValidPrivateKey, oDecriptedMessage, oValidPublicKey, aSigningKeyIds) {
|
||||||
|
|
||||||
|
if (oDecriptedMessage)
|
||||||
|
{
|
||||||
|
if (oValidPublicKey)
|
||||||
|
{
|
||||||
|
self.controlsHelper(mDom, oVerControl, true, Translator.i18n('PGP_NOTIFICATIONS/GOOD_SIGNATURE', {
|
||||||
|
'USER': oValidPublicKey.user + ' (' + oValidPublicKey.id + ')'
|
||||||
|
}), oDecriptedMessage.getText());
|
||||||
|
}
|
||||||
|
else if (oValidPrivateKey)
|
||||||
|
{
|
||||||
|
var
|
||||||
|
aKeyIds = Utils.isNonEmptyArray(aSigningKeyIds) ? aSigningKeyIds : null,
|
||||||
|
sAdditional = aKeyIds ? _.compact(_.map(aKeyIds, function (oItem) {
|
||||||
|
return oItem && oItem.toHex ? oItem.toHex() : null;
|
||||||
|
})).join(', ') : ''
|
||||||
|
;
|
||||||
|
|
||||||
|
self.controlsHelper(mDom, oVerControl, false,
|
||||||
|
Translator.i18n('PGP_NOTIFICATIONS/UNVERIFIRED_SIGNATURE') +
|
||||||
|
(sAdditional ? ' (' + sAdditional + ')' : ''),
|
||||||
|
oDecriptedMessage.getText());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
self.controlsHelper(mDom, oVerControl, false,
|
||||||
|
Translator.i18n('PGP_NOTIFICATIONS/DECRYPTION_ERROR'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
self.controlsHelper(mDom, oVerControl, false,
|
||||||
|
Translator.i18n('PGP_NOTIFICATIONS/DECRYPTION_ERROR'));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
self.controlsHelper(mDom, oVerControl, false, Translator.i18n('PGP_NOTIFICATIONS/DECRYPTION_ERROR'));
|
||||||
|
return false;
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (bSigned)
|
||||||
|
{
|
||||||
|
oVerControl = $('<div class="b-openpgp-control"><i class="icon-lock"></i></div>')
|
||||||
|
.attr('title', Translator.i18n('MESSAGE/PGP_SIGNED_MESSAGE_DESC'));
|
||||||
|
|
||||||
|
oVerControl.on('click', function () {
|
||||||
|
|
||||||
|
if ($(this).hasClass('success') || $(this).hasClass('error'))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var oMessage = self.openpgp.cleartext.readArmored(sData);
|
||||||
|
if (oMessage && oMessage.getText && oMessage.verify)
|
||||||
|
{
|
||||||
|
self.verifyMessage(oMessage, function (oValidKey, aSigningKeyIds) {
|
||||||
|
if (oValidKey)
|
||||||
|
{
|
||||||
|
self.controlsHelper(mDom, oVerControl, true, Translator.i18n('PGP_NOTIFICATIONS/GOOD_SIGNATURE', {
|
||||||
|
'USER': oValidKey.user + ' (' + oValidKey.id + ')'
|
||||||
|
}), oMessage.getText());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var
|
||||||
|
aKeyIds = Utils.isNonEmptyArray(aSigningKeyIds) ? aSigningKeyIds : null,
|
||||||
|
sAdditional = aKeyIds ? _.compact(_.map(aKeyIds, function (oItem) {
|
||||||
|
return oItem && oItem.toHex ? oItem.toHex() : null;
|
||||||
|
})).join(', ') : ''
|
||||||
|
;
|
||||||
|
|
||||||
|
self.controlsHelper(mDom, oVerControl, false,
|
||||||
|
Translator.i18n('PGP_NOTIFICATIONS/UNVERIFIRED_SIGNATURE') +
|
||||||
|
(sAdditional ? ' (' + sAdditional + ')' : ''));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
self.controlsHelper(mDom, oVerControl, false, Translator.i18n('PGP_NOTIFICATIONS/DECRYPTION_ERROR'));
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (oVerControl)
|
||||||
|
{
|
||||||
|
mDom.before(oVerControl).before('<div></div>');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = new PgpUserStore();
|
module.exports = new PgpUserStore();
|
||||||
|
|
||||||
}());
|
}());
|
||||||
|
|
|
@ -407,6 +407,16 @@ html.rl-no-preview-pane {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 6px 10px;
|
padding: 6px 10px;
|
||||||
border: 1px dashed #666;
|
border: 1px dashed #666;
|
||||||
|
background: #fff;
|
||||||
|
|
||||||
|
&.success {
|
||||||
|
border-color: green;
|
||||||
|
background-color: rgba(0, 255, 0, 0.03);
|
||||||
|
}
|
||||||
|
&.error {
|
||||||
|
border-color: red;
|
||||||
|
background-color: rgba(255, 0, 0, 0.03);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
blockquote {
|
blockquote {
|
||||||
|
@ -424,6 +434,27 @@ html.rl-no-preview-pane {
|
||||||
color: red;
|
color: red;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.b-openpgp-control {
|
||||||
|
|
||||||
|
display: inline-block;
|
||||||
|
cursor: pointer;
|
||||||
|
color: #777;
|
||||||
|
/*float: left;*/
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: #111;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.success {
|
||||||
|
color: green;
|
||||||
|
cursor: help;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.error {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
.popups {
|
.popups {
|
||||||
.b-open-pgp-key-view-content, .b-open-pgp-key-generate-content, .b-open-pgp-key-add-content, .b-compose-open-pgp-content {
|
.b-open-pgp-key-view-content, .b-open-pgp-key-generate-content, .b-open-pgp-key-add-content, .b-compose-open-pgp-content, .b-message-open-pgp-content {
|
||||||
|
|
||||||
.modal-header {
|
.modal-header {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
|
@ -18,4 +18,35 @@
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.b-message-open-pgp-content {
|
||||||
|
&.modal {
|
||||||
|
width: 700px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.key-list {
|
||||||
|
|
||||||
|
margin-top: 5px;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
&__item {
|
||||||
|
|
||||||
|
color: #555;
|
||||||
|
cursor: pointer;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
|
||||||
|
&__radio {
|
||||||
|
padding-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__name {
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
border-bottom: 1px dashed #555;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -632,7 +632,7 @@
|
||||||
oEditor.setPlain(sResult);
|
oEditor.setPlain(sResult);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
this.oEditor.getData(),
|
this.oEditor.getData(false, true),
|
||||||
this.currentIdentity(),
|
this.currentIdentity(),
|
||||||
this.to(),
|
this.to(),
|
||||||
this.cc(),
|
this.cc(),
|
||||||
|
|
|
@ -109,25 +109,20 @@
|
||||||
|
|
||||||
if (self.resultCallback && bResult)
|
if (self.resultCallback && bResult)
|
||||||
{
|
{
|
||||||
try {
|
var oPromise = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
if (oPrivateKey && 0 === aPublicKeys.length)
|
if (oPrivateKey && 0 === aPublicKeys.length)
|
||||||
{
|
{
|
||||||
self.resultCallback(
|
oPromise = PgpStore.openpgp.signClearMessage([oPrivateKey], self.text());
|
||||||
PgpStore.openpgp.signClearMessage([oPrivateKey], self.text())
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
else if (oPrivateKey && 0 < aPublicKeys.length)
|
else if (oPrivateKey && 0 < aPublicKeys.length)
|
||||||
{
|
{
|
||||||
self.resultCallback(
|
oPromise = PgpStore.openpgp.signAndEncryptMessage(aPublicKeys, oPrivateKey, self.text());
|
||||||
PgpStore.openpgp.signAndEncryptMessage(aPublicKeys, oPrivateKey, self.text())
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
else if (!oPrivateKey && 0 < aPublicKeys.length)
|
else if (!oPrivateKey && 0 < aPublicKeys.length)
|
||||||
{
|
{
|
||||||
self.resultCallback(
|
oPromise = PgpStore.openpgp.encryptMessage(aPublicKeys, self.text());
|
||||||
PgpStore.openpgp.encryptMessage(aPublicKeys, self.text())
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (e)
|
catch (e)
|
||||||
|
@ -135,14 +130,30 @@
|
||||||
self.notification(Translator.i18n('PGP_NOTIFICATIONS/PGP_ERROR', {
|
self.notification(Translator.i18n('PGP_NOTIFICATIONS/PGP_ERROR', {
|
||||||
'ERROR': '' + e
|
'ERROR': '' + e
|
||||||
}));
|
}));
|
||||||
|
|
||||||
bResult = false;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (bResult)
|
if (oPromise)
|
||||||
{
|
{
|
||||||
self.cancelCommand();
|
try
|
||||||
|
{
|
||||||
|
oPromise.then(function (mData) {
|
||||||
|
|
||||||
|
self.resultCallback(mData);
|
||||||
|
self.cancelCommand();
|
||||||
|
|
||||||
|
})['catch'](function (e) {
|
||||||
|
self.notification(Translator.i18n('PGP_NOTIFICATIONS/PGP_ERROR', {
|
||||||
|
'ERROR': '' + e
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (e)
|
||||||
|
{
|
||||||
|
self.notification(Translator.i18n('PGP_NOTIFICATIONS/PGP_ERROR', {
|
||||||
|
'ERROR': '' + e
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.submitRequest(false);
|
self.submitRequest(false);
|
||||||
|
|
179
dev/View/Popup/MessageOpenPgp.js
Normal file
179
dev/View/Popup/MessageOpenPgp.js
Normal file
|
@ -0,0 +1,179 @@
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var
|
||||||
|
_ = require('_'),
|
||||||
|
ko = require('ko'),
|
||||||
|
key = require('key'),
|
||||||
|
|
||||||
|
Utils = require('Common/Utils'),
|
||||||
|
Enums = require('Common/Enums'),
|
||||||
|
|
||||||
|
kn = require('Knoin/Knoin'),
|
||||||
|
AbstractView = require('Knoin/AbstractView')
|
||||||
|
;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @constructor
|
||||||
|
* @extends AbstractView
|
||||||
|
*/
|
||||||
|
function MessageOpenPgpPopupView()
|
||||||
|
{
|
||||||
|
AbstractView.call(this, 'Popups', 'PopupsMessageOpenPgp');
|
||||||
|
|
||||||
|
this.notification = ko.observable('');
|
||||||
|
|
||||||
|
this.selectedKey = ko.observable(null);
|
||||||
|
this.privateKeys = ko.observableArray([]);
|
||||||
|
|
||||||
|
this.password = ko.observable('');
|
||||||
|
this.password.focus = ko.observable(false);
|
||||||
|
this.buttonFocus = ko.observable(false);
|
||||||
|
|
||||||
|
this.resultCallback = null;
|
||||||
|
|
||||||
|
this.submitRequest = ko.observable(false);
|
||||||
|
|
||||||
|
// commands
|
||||||
|
this.doCommand = Utils.createCommand(this, function () {
|
||||||
|
|
||||||
|
this.submitRequest(true);
|
||||||
|
|
||||||
|
_.delay(_.bind(function() {
|
||||||
|
|
||||||
|
var
|
||||||
|
oPrivateKeys = [],
|
||||||
|
oPrivateKey = null
|
||||||
|
;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (this.resultCallback && this.selectedKey())
|
||||||
|
{
|
||||||
|
oPrivateKeys = this.selectedKey().getNativeKeys();
|
||||||
|
oPrivateKey = oPrivateKeys && oPrivateKeys[0] ? oPrivateKeys[0] : null;
|
||||||
|
|
||||||
|
if (oPrivateKey)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!oPrivateKey.decrypt(Utils.pString(this.password())))
|
||||||
|
{
|
||||||
|
oPrivateKey = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (e)
|
||||||
|
{
|
||||||
|
oPrivateKey = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (oExc)
|
||||||
|
{
|
||||||
|
oPrivateKey = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.submitRequest(false);
|
||||||
|
|
||||||
|
this.cancelCommand();
|
||||||
|
this.resultCallback(oPrivateKey);
|
||||||
|
|
||||||
|
}, this), 100);
|
||||||
|
|
||||||
|
}, function () {
|
||||||
|
return !this.submitRequest();
|
||||||
|
});
|
||||||
|
|
||||||
|
this.sDefaultKeyScope = Enums.KeyState.PopupMessageOpenPGP;
|
||||||
|
|
||||||
|
kn.constructorEnd(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
kn.extendAsViewModel(['View/Popup/MessageOpenPgp'], MessageOpenPgpPopupView);
|
||||||
|
_.extend(MessageOpenPgpPopupView.prototype, AbstractView.prototype);
|
||||||
|
|
||||||
|
MessageOpenPgpPopupView.prototype.clearPopup = function ()
|
||||||
|
{
|
||||||
|
this.notification('');
|
||||||
|
|
||||||
|
this.password('');
|
||||||
|
this.password.focus(false);
|
||||||
|
this.buttonFocus(false);
|
||||||
|
|
||||||
|
this.selectedKey(false);
|
||||||
|
this.submitRequest(false);
|
||||||
|
|
||||||
|
this.resultCallback = null;
|
||||||
|
this.privateKeys([]);
|
||||||
|
};
|
||||||
|
|
||||||
|
MessageOpenPgpPopupView.prototype.onBuild = function (oDom)
|
||||||
|
{
|
||||||
|
key('tab,shift+tab', Enums.KeyState.PopupMessageOpenPGP, _.bind(function () {
|
||||||
|
|
||||||
|
switch (true)
|
||||||
|
{
|
||||||
|
case this.password.focus():
|
||||||
|
this.buttonFocus(true);
|
||||||
|
break;
|
||||||
|
case this.buttonFocus():
|
||||||
|
this.password.focus(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}, this));
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
oDom
|
||||||
|
.on('click', '.key-list__item', function () {
|
||||||
|
|
||||||
|
oDom.find('.key-list__item .key-list__item__radio')
|
||||||
|
.addClass('icon-radio-unchecked')
|
||||||
|
.removeClass('icon-radio-checked')
|
||||||
|
;
|
||||||
|
|
||||||
|
$(this).find('.key-list__item__radio')
|
||||||
|
.removeClass('icon-radio-unchecked')
|
||||||
|
.addClass('icon-radio-checked')
|
||||||
|
;
|
||||||
|
|
||||||
|
self.selectedKey(ko.dataFor(this));
|
||||||
|
|
||||||
|
self.password.focus(true);
|
||||||
|
})
|
||||||
|
;
|
||||||
|
};
|
||||||
|
|
||||||
|
MessageOpenPgpPopupView.prototype.onHideWithDelay = function ()
|
||||||
|
{
|
||||||
|
this.clearPopup();
|
||||||
|
};
|
||||||
|
|
||||||
|
MessageOpenPgpPopupView.prototype.onShowWithDelay = function ()
|
||||||
|
{
|
||||||
|
this.password.focus(true);
|
||||||
|
// this.buttonFocus(true);
|
||||||
|
};
|
||||||
|
|
||||||
|
MessageOpenPgpPopupView.prototype.onShow = function (fCallback, aPrivateKeys)
|
||||||
|
{
|
||||||
|
this.clearPopup();
|
||||||
|
|
||||||
|
this.resultCallback = fCallback;
|
||||||
|
this.privateKeys(aPrivateKeys);
|
||||||
|
|
||||||
|
if (this.viewModelDom)
|
||||||
|
{
|
||||||
|
this.viewModelDom.find('.key-list__item').first().click();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = MessageOpenPgpPopupView;
|
||||||
|
|
||||||
|
}());
|
|
@ -62,29 +62,36 @@
|
||||||
|
|
||||||
_.delay(function () {
|
_.delay(function () {
|
||||||
|
|
||||||
mKeyPair = false;
|
var mPromise = false;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
mKeyPair = PgpStore.openpgp.generateKeyPair({
|
|
||||||
|
mPromise = PgpStore.openpgp.generateKeyPair({
|
||||||
'userId': sUserID,
|
'userId': sUserID,
|
||||||
'numBits': Utils.pInt(self.keyBitLength()),
|
'numBits': Utils.pInt(self.keyBitLength()),
|
||||||
'passphrase': Utils.trim(self.password())
|
'passphrase': Utils.trim(self.password())
|
||||||
});
|
});
|
||||||
} catch (e) {
|
|
||||||
// window.console.log(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mKeyPair && mKeyPair.privateKeyArmored)
|
mPromise.then(function () {
|
||||||
{
|
|
||||||
oOpenpgpKeyring.privateKeys.importKey(mKeyPair.privateKeyArmored);
|
|
||||||
oOpenpgpKeyring.publicKeys.importKey(mKeyPair.publicKeyArmored);
|
|
||||||
oOpenpgpKeyring.store();
|
|
||||||
|
|
||||||
require('App/User').reloadOpenPgpKeys();
|
self.submitRequest(false);
|
||||||
Utils.delegateRun(self, 'cancelCommand');
|
|
||||||
}
|
if (mKeyPair && mKeyPair.privateKeyArmored)
|
||||||
|
{
|
||||||
|
oOpenpgpKeyring.privateKeys.importKey(mKeyPair.privateKeyArmored);
|
||||||
|
oOpenpgpKeyring.publicKeys.importKey(mKeyPair.publicKeyArmored);
|
||||||
|
oOpenpgpKeyring.store();
|
||||||
|
|
||||||
|
require('App/User').reloadOpenPgpKeys();
|
||||||
|
Utils.delegateRun(self, 'cancelCommand');
|
||||||
|
}
|
||||||
|
|
||||||
|
})['catch'](function() {
|
||||||
|
self.submitRequest(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
} catch (e) {}
|
||||||
|
|
||||||
self.submitRequest(false);
|
|
||||||
|
|
||||||
}, 100);
|
}, 100);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -303,16 +303,6 @@
|
||||||
this.viewIsImportant = ko.observable(false);
|
this.viewIsImportant = ko.observable(false);
|
||||||
this.viewIsFlagged = ko.observable(false);
|
this.viewIsFlagged = ko.observable(false);
|
||||||
|
|
||||||
// PGP
|
|
||||||
this.viewPgpPassword = ko.observable('');
|
|
||||||
this.viewPgpSignedVerifyStatus = ko.computed(function () {
|
|
||||||
return this.message() ? this.message().pgpSignedVerifyStatus() : Enums.SignedVerifyStatus.None;
|
|
||||||
}, this);
|
|
||||||
|
|
||||||
this.viewPgpSignedVerifyUser = ko.computed(function () {
|
|
||||||
return this.message() ? this.message().pgpSignedVerifyUser() : '';
|
|
||||||
}, this);
|
|
||||||
|
|
||||||
this.viewFromDkimStatusIconClass = ko.computed(function () {
|
this.viewFromDkimStatusIconClass = ko.computed(function () {
|
||||||
|
|
||||||
var sResult = 'icon-none iconcolor-display-none';
|
var sResult = 'icon-none iconcolor-display-none';
|
||||||
|
@ -361,8 +351,6 @@
|
||||||
|
|
||||||
this.messageActiveDom(null);
|
this.messageActiveDom(null);
|
||||||
|
|
||||||
this.viewPgpPassword('');
|
|
||||||
|
|
||||||
if (oMessage)
|
if (oMessage)
|
||||||
{
|
{
|
||||||
this.showAttachmnetControls(false);
|
this.showAttachmnetControls(false);
|
||||||
|
@ -523,48 +511,6 @@
|
||||||
return sResult;
|
return sResult;
|
||||||
};
|
};
|
||||||
|
|
||||||
MessageViewMailBoxUserView.prototype.isPgpActionVisible = function ()
|
|
||||||
{
|
|
||||||
return Enums.SignedVerifyStatus.Success !== this.viewPgpSignedVerifyStatus();
|
|
||||||
};
|
|
||||||
|
|
||||||
MessageViewMailBoxUserView.prototype.isPgpStatusVerifyVisible = function ()
|
|
||||||
{
|
|
||||||
return Enums.SignedVerifyStatus.None !== this.viewPgpSignedVerifyStatus();
|
|
||||||
};
|
|
||||||
|
|
||||||
MessageViewMailBoxUserView.prototype.isPgpStatusVerifySuccess = function ()
|
|
||||||
{
|
|
||||||
return Enums.SignedVerifyStatus.Success === this.viewPgpSignedVerifyStatus();
|
|
||||||
};
|
|
||||||
|
|
||||||
MessageViewMailBoxUserView.prototype.pgpStatusVerifyMessage = function ()
|
|
||||||
{
|
|
||||||
var sResult = '';
|
|
||||||
switch (this.viewPgpSignedVerifyStatus())
|
|
||||||
{
|
|
||||||
case Enums.SignedVerifyStatus.UnknownPublicKeys:
|
|
||||||
sResult = Translator.i18n('PGP_NOTIFICATIONS/NO_PUBLIC_KEYS_FOUND');
|
|
||||||
break;
|
|
||||||
case Enums.SignedVerifyStatus.UnknownPrivateKey:
|
|
||||||
sResult = Translator.i18n('PGP_NOTIFICATIONS/NO_PRIVATE_KEY_FOUND');
|
|
||||||
break;
|
|
||||||
case Enums.SignedVerifyStatus.Unverified:
|
|
||||||
sResult = Translator.i18n('PGP_NOTIFICATIONS/UNVERIFIRED_SIGNATURE');
|
|
||||||
break;
|
|
||||||
case Enums.SignedVerifyStatus.Error:
|
|
||||||
sResult = Translator.i18n('PGP_NOTIFICATIONS/DECRYPTION_ERROR');
|
|
||||||
break;
|
|
||||||
case Enums.SignedVerifyStatus.Success:
|
|
||||||
sResult = Translator.i18n('PGP_NOTIFICATIONS/GOOD_SIGNATURE', {
|
|
||||||
'USER': this.viewPgpSignedVerifyUser()
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return sResult;
|
|
||||||
};
|
|
||||||
|
|
||||||
MessageViewMailBoxUserView.prototype.fullScreen = function ()
|
MessageViewMailBoxUserView.prototype.fullScreen = function ()
|
||||||
{
|
{
|
||||||
this.fullScreenMode(true);
|
this.fullScreenMode(true);
|
||||||
|
@ -1256,31 +1202,6 @@
|
||||||
return 0 < iCnt ? (100 > iCnt ? iCnt : '99+') : '';
|
return 0 < iCnt ? (100 > iCnt ? iCnt : '99+') : '';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {MessageModel} oMessage
|
|
||||||
*/
|
|
||||||
MessageViewMailBoxUserView.prototype.verifyPgpSignedClearMessage = function (oMessage)
|
|
||||||
{
|
|
||||||
if (oMessage)
|
|
||||||
{
|
|
||||||
oMessage.verifyPgpSignedClearMessage();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.checkHeaderHeight();
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {MessageModel} oMessage
|
|
||||||
*/
|
|
||||||
MessageViewMailBoxUserView.prototype.decryptPgpEncryptedMessage = function (oMessage)
|
|
||||||
{
|
|
||||||
if (oMessage)
|
|
||||||
{
|
|
||||||
oMessage.decryptPgpEncryptedMessage(this.viewPgpPassword());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {MessageModel} oMessage
|
* @param {MessageModel} oMessage
|
||||||
*/
|
*/
|
||||||
|
|
66
gulpfile.js
66
gulpfile.js
|
@ -11,6 +11,7 @@ var
|
||||||
devVersion: '0.0.0',
|
devVersion: '0.0.0',
|
||||||
releasesPath: 'build/dist/releases',
|
releasesPath: 'build/dist/releases',
|
||||||
community: true,
|
community: true,
|
||||||
|
watch: false,
|
||||||
|
|
||||||
rainloopBuilded: false,
|
rainloopBuilded: false,
|
||||||
destPath: '',
|
destPath: '',
|
||||||
|
@ -30,17 +31,22 @@ var
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_ = require('lodash'),
|
||||||
fs = require('node-fs'),
|
fs = require('node-fs'),
|
||||||
path = require('path'),
|
path = require('path'),
|
||||||
|
notifier = require('node-notifier'),
|
||||||
|
|
||||||
gulp = require('gulp'),
|
gulp = require('gulp'),
|
||||||
concat = require('gulp-concat-util'),
|
concat = require('gulp-concat-util'),
|
||||||
header = require('gulp-header'),
|
header = require('gulp-header'),
|
||||||
eol = require('gulp-eol'),
|
|
||||||
stripbom = require('gulp-stripbom'),
|
stripbom = require('gulp-stripbom'),
|
||||||
rename = require('gulp-rename'),
|
rename = require('gulp-rename'),
|
||||||
replace = require('gulp-replace'),
|
replace = require('gulp-replace'),
|
||||||
uglify = require('gulp-uglify'),
|
uglify = require('gulp-uglify'),
|
||||||
|
notify = require("gulp-notify"),
|
||||||
plumber = require('gulp-plumber'),
|
plumber = require('gulp-plumber'),
|
||||||
|
gulpif = require('gulp-if'),
|
||||||
|
eol = require('gulp-eol'),
|
||||||
gutil = require('gulp-util')
|
gutil = require('gulp-util')
|
||||||
;
|
;
|
||||||
|
|
||||||
|
@ -136,7 +142,7 @@ cfg.paths.js = {
|
||||||
openpgp: {
|
openpgp: {
|
||||||
name: 'openpgp.js',
|
name: 'openpgp.js',
|
||||||
src: [
|
src: [
|
||||||
'vendors/openpgp/openpgp-0.7.2.min.js'
|
'vendors/openpgp/openpgp-0.10.1.min.js'
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
encrypt: {
|
encrypt: {
|
||||||
|
@ -201,14 +207,17 @@ cfg.paths.js = {
|
||||||
// CSS
|
// CSS
|
||||||
gulp.task('less:main', function() {
|
gulp.task('less:main', function() {
|
||||||
var less = require('gulp-less');
|
var less = require('gulp-less');
|
||||||
|
|
||||||
return gulp.src(cfg.paths.less.main.src)
|
return gulp.src(cfg.paths.less.main.src)
|
||||||
|
.pipe(gulpif(cfg.watch, plumber({errorHandler: notify.onError("Error: <%= error.message %>")})))
|
||||||
.pipe(less({
|
.pipe(less({
|
||||||
'paths': cfg.paths.less.main.options.paths
|
'paths': cfg.paths.less.main.options.paths
|
||||||
}))
|
}))
|
||||||
.pipe(rename(cfg.paths.less.main.name))
|
.pipe(rename(cfg.paths.less.main.name))
|
||||||
.pipe(eol('\n', true))
|
.pipe(eol('\n', true))
|
||||||
.pipe(gulp.dest(cfg.paths.staticCSS))
|
.pipe(gulp.dest(cfg.paths.staticCSS))
|
||||||
.on('error', gutil.log);
|
.on('error', gutil.log)
|
||||||
|
;
|
||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('css:main-begin', ['less:main'], function() {
|
gulp.task('css:main-begin', ['less:main'], function() {
|
||||||
|
@ -220,7 +229,6 @@ gulp.task('css:main-begin', ['less:main'], function() {
|
||||||
;
|
;
|
||||||
|
|
||||||
return gulp.src(cfg.paths.css.main.src)
|
return gulp.src(cfg.paths.css.main.src)
|
||||||
.pipe(plumber())
|
|
||||||
.pipe(concat(cfg.paths.css.main.name))
|
.pipe(concat(cfg.paths.css.main.name))
|
||||||
.pipe(autoprefixer('last 3 versions', '> 1%', 'ie 9', 'Firefox ESR', 'Opera 12.1'))
|
.pipe(autoprefixer('last 3 versions', '> 1%', 'ie 9', 'Firefox ESR', 'Opera 12.1'))
|
||||||
// .pipe(csscomb())
|
// .pipe(csscomb())
|
||||||
|
@ -252,7 +260,6 @@ gulp.task('css:main', ['css:clear-less']);
|
||||||
gulp.task('css:main:min', ['css:main'], function() {
|
gulp.task('css:main:min', ['css:main'], function() {
|
||||||
var minifyCss = require('gulp-minify-css');
|
var minifyCss = require('gulp-minify-css');
|
||||||
return gulp.src(cfg.paths.staticCSS + cfg.paths.css.main.name)
|
return gulp.src(cfg.paths.staticCSS + cfg.paths.css.main.name)
|
||||||
.pipe(plumber())
|
|
||||||
.pipe(minifyCss({
|
.pipe(minifyCss({
|
||||||
'keepSpecialComments': 0
|
'keepSpecialComments': 0
|
||||||
}))
|
}))
|
||||||
|
@ -330,10 +337,51 @@ gulp.task('js:webpack', ['js:webpack:clear'], function(callback) {
|
||||||
}
|
}
|
||||||
|
|
||||||
webpack(webpackCfg, function(err, stats) {
|
webpack(webpackCfg, function(err, stats) {
|
||||||
if (err) {
|
|
||||||
throw new gutil.PluginError('webpack', err);
|
var
|
||||||
|
fN = function (err) {
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
gutil.log('[webpack]', '---');
|
||||||
|
gutil.log('[webpack]', err.error ? err.error.toString() : '');
|
||||||
|
gutil.log('[webpack]', err.message || '');
|
||||||
|
gutil.log('[webpack]', '---');
|
||||||
|
|
||||||
|
notifier.notify({
|
||||||
|
'sound': true,
|
||||||
|
'title': 'webpack',
|
||||||
|
'message': err.error ? err.error.toString() : err.message
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
if (cfg.watch)
|
||||||
|
{
|
||||||
|
fN(err);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new gutil.PluginError('webpack', err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
gutil.log('[webpack]', stats.toString({}));
|
else if (stats && stats.compilation && stats.compilation.errors &&
|
||||||
|
stats.compilation.errors[0])
|
||||||
|
{
|
||||||
|
if (cfg.watch)
|
||||||
|
{
|
||||||
|
_.each(stats.compilation.errors, function (err) {
|
||||||
|
fN(err);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new gutil.PluginError('webpack', stats.compilation.errors[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
callback();
|
callback();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -616,11 +664,13 @@ gulp.task('owncloud+', ['package:community-off', 'owncloud-']);
|
||||||
|
|
||||||
//WATCH
|
//WATCH
|
||||||
gulp.task('watch', ['fast'], function() {
|
gulp.task('watch', ['fast'], function() {
|
||||||
|
cfg.watch = true;
|
||||||
gulp.watch(cfg.paths.globjs, {interval: 1000}, ['js:app', 'js:admin']);
|
gulp.watch(cfg.paths.globjs, {interval: 1000}, ['js:app', 'js:admin']);
|
||||||
gulp.watch(cfg.paths.less.main.watch, {interval: 1000}, ['css:main']);
|
gulp.watch(cfg.paths.less.main.watch, {interval: 1000}, ['css:main']);
|
||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('watch+', ['fast+'], function() {
|
gulp.task('watch+', ['fast+'], function() {
|
||||||
|
cfg.watch = true;
|
||||||
gulp.watch(cfg.paths.globjs, {interval: 1000}, ['js:app', 'js:admin']);
|
gulp.watch(cfg.paths.globjs, {interval: 1000}, ['js:app', 'js:admin']);
|
||||||
gulp.watch(cfg.paths.less.main.watch, {interval: 1000}, ['css:main']);
|
gulp.watch(cfg.paths.less.main.watch, {interval: 1000}, ['css:main']);
|
||||||
});
|
});
|
||||||
|
|
150
package.json
150
package.json
|
@ -1,76 +1,78 @@
|
||||||
{
|
{
|
||||||
"name": "RainLoop",
|
"name": "RainLoop",
|
||||||
"title": "RainLoop Webmail",
|
"title": "RainLoop Webmail",
|
||||||
"version": "1.9.1",
|
"version": "1.9.1",
|
||||||
"release": "335",
|
"release": "335",
|
||||||
"description": "Simple, modern & fast web-based email client",
|
"description": "Simple, modern & fast web-based email client",
|
||||||
"homepage": "http://rainloop.net",
|
"homepage": "http://rainloop.net",
|
||||||
"main": "gulpfile.js",
|
"main": "gulpfile.js",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "RainLoop Team",
|
"name": "RainLoop Team",
|
||||||
"email": "support@rainloop.net",
|
"email": "support@rainloop.net",
|
||||||
"web": "http://rainloop.net"
|
"web": "http://rainloop.net"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git://github.com/RainLoop/rainloop-webmail.git"
|
"url": "git://github.com/RainLoop/rainloop-webmail.git"
|
||||||
},
|
},
|
||||||
"licenses": [
|
"licenses": [
|
||||||
{
|
{
|
||||||
"type": "AGPL 3.0",
|
"type": "AGPL 3.0",
|
||||||
"ulr": "http://www.gnu.org/licenses/agpl-3.0.html"
|
"ulr": "http://www.gnu.org/licenses/agpl-3.0.html"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "RainLoop Software License",
|
"type": "RainLoop Software License",
|
||||||
"ulr": "http://www.rainloop.net/licensing/"
|
"ulr": "http://www.rainloop.net/licensing/"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/RainLoop/rainloop-webmail/issues"
|
"url": "https://github.com/RainLoop/rainloop-webmail/issues"
|
||||||
},
|
},
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"webmail",
|
"webmail",
|
||||||
"php",
|
"php",
|
||||||
"simple",
|
"simple",
|
||||||
"modern",
|
"modern",
|
||||||
"mail",
|
"mail",
|
||||||
"web-based",
|
"web-based",
|
||||||
"email",
|
"email",
|
||||||
"client",
|
"client",
|
||||||
"plugins"
|
"plugins"
|
||||||
],
|
],
|
||||||
"readmeFilename": "README.md",
|
"readmeFilename": "README.md",
|
||||||
"ownCloudPackageVersion": "4.3",
|
"ownCloudPackageVersion": "4.3",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 0.10.0"
|
"node": ">= 0.10.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"node-fs": "*",
|
||||||
"node-fs": "*",
|
"rimraf": "*",
|
||||||
"rimraf": "*",
|
"jshint-summary": "*",
|
||||||
"jshint-summary": "*",
|
"webpack": "*",
|
||||||
|
"gulp": "*",
|
||||||
"webpack": "*",
|
"gulp-util": "*",
|
||||||
|
"gulp-uglify": "*",
|
||||||
"gulp": "*",
|
"gulp-rimraf": "*",
|
||||||
"gulp-util": "*",
|
"gulp-jshint": "*",
|
||||||
"gulp-uglify": "*",
|
"gulp-less": "1.3.6",
|
||||||
"gulp-rimraf": "*",
|
"gulp-zip": "*",
|
||||||
"gulp-jshint": "*",
|
"gulp-rename": "*",
|
||||||
"gulp-less": "1.3.6",
|
"gulp-replace": "*",
|
||||||
"gulp-zip": "*",
|
"gulp-header": "*",
|
||||||
"gulp-rename": "*",
|
"gulp-eol": "*",
|
||||||
"gulp-replace": "*",
|
"gulp-stripbom": "*",
|
||||||
"gulp-header": "*",
|
"gulp-minify-css": "*",
|
||||||
"gulp-eol": "*",
|
"gulp-autoprefixer": "*",
|
||||||
"gulp-stripbom": "*",
|
"gulp-csscomb": "*",
|
||||||
"gulp-minify-css": "*",
|
"gulp-closure-compiler": "*",
|
||||||
"gulp-autoprefixer": "*",
|
"gulp-csslint": "*",
|
||||||
"gulp-csscomb": "*",
|
"gulp-beautify": "*",
|
||||||
"gulp-closure-compiler": "*",
|
"gulp-plumber": "*",
|
||||||
"gulp-csslint": "*",
|
"gulp-concat-util": "*",
|
||||||
"gulp-beautify": "*",
|
"gulp-notify": "~2.2.0",
|
||||||
"gulp-plumber": "*",
|
"gulp-through": "~0.3.0",
|
||||||
"gulp-concat-util": "*"
|
"lodash": "~3.9.3",
|
||||||
}
|
"gulp-if": "~1.2.5",
|
||||||
|
"node-notifier": "~4.2.3"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -460,6 +460,7 @@ class PdoAddressBook
|
||||||
|
|
||||||
$this->oLogger->Write('PROPFIND '.$sPath, \MailSo\Log\Enumerations\Type::INFO, 'DAV');
|
$this->oLogger->Write('PROPFIND '.$sPath, \MailSo\Log\Enumerations\Type::INFO, 'DAV');
|
||||||
|
|
||||||
|
$aResponse = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$aResponse = $oClient->propFind($sPath, array(
|
$aResponse = $oClient->propFind($sPath, array(
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<div class="e-powered thm-powered" data-bind="visible: logoPowered">
|
<div class="e-powered thm-powered" data-bind="visible: logoPowered">
|
||||||
Powered by <a href="http://rainloop.net" target="_blank">RainLoop</a>
|
Powered by <a href="http://www.rainloop.net" target="_blank">RainLoop</a>
|
||||||
</div>
|
</div>
|
||||||
</center>
|
</center>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -68,7 +68,7 @@
|
||||||
<span data-i18n="TAB_LICENSING/BUTTON_ACTIVATE"></span>
|
<span data-i18n="TAB_LICENSING/BUTTON_ACTIVATE"></span>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a class="btn" href="http://rainloop.net/purchase/" target="_black">
|
<a class="btn" href="http://www.rainloop.net/purchase/" target="_black">
|
||||||
<i class="icon-purchase"></i>
|
<i class="icon-purchase"></i>
|
||||||
|
|
||||||
<span data-i18n="TAB_LICENSING/BUTTON_PURCHASE"></span>
|
<span data-i18n="TAB_LICENSING/BUTTON_PURCHASE"></span>
|
||||||
|
|
|
@ -116,7 +116,7 @@
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="e-powered thm-powered" data-bind="visible: logoPowered">
|
<div class="e-powered thm-powered" data-bind="visible: logoPowered">
|
||||||
Powered by <a href="http://rainloop.net" target="_blank">RainLoop</a>
|
Powered by <a href="http://www.rainloop.net" target="_blank">RainLoop</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="e-languages thm-languages" data-bind="visible: allowLanguagesOnLogin() && socialLoginEnabled()">
|
<div class="e-languages thm-languages" data-bind="visible: allowLanguagesOnLogin() && socialLoginEnabled()">
|
||||||
<label class="flag-selector">
|
<label class="flag-selector">
|
||||||
|
|
|
@ -330,25 +330,6 @@
|
||||||
|
|
||||||
<span class="i18n text" data-i18n="MESSAGE/BUTTON_NOTIFY_READ_RECEIPT"></span>
|
<span class="i18n text" data-i18n="MESSAGE/BUTTON_NOTIFY_READ_RECEIPT"></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="pgpInfo" data-bind="visible: isPgpStatusVerifyVisible(), css: {'success': isPgpStatusVerifySuccess()}">
|
|
||||||
<i class="icon-key"></i>
|
|
||||||
|
|
||||||
<span data-bind="text: pgpStatusVerifyMessage()"></span>
|
|
||||||
</div>
|
|
||||||
<div class="pgpSigned" data-bind="visible: message() && message().isPgpSigned() && isPgpActionVisible(), click: function() { verifyPgpSignedClearMessage(message()); }">
|
|
||||||
<i class="icon-lock"></i>
|
|
||||||
|
|
||||||
<span class="i18n" data-i18n="MESSAGE/PGP_SIGNED_MESSAGE_DESC"></span>
|
|
||||||
</div>
|
|
||||||
<div class="pgpEncrypted" data-bind="visible: message() && message().isPgpEncrypted() && isPgpActionVisible()">
|
|
||||||
<i class="icon-lock"></i>
|
|
||||||
|
|
||||||
<span class="i18n" data-i18n="MESSAGE/PGP_ENCRYPTED_MESSAGE_DESC" data-bind="click: function() { decryptPgpEncryptedMessage(message()); }"></span>
|
|
||||||
|
|
||||||
<input type="password" class="i18n span3 inputPgpPassword"
|
|
||||||
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
|
||||||
style="margin-bottom: 0" data-i18n="[placeholder]MESSAGE/PGP_PASSWORD_INPUT_PLACEHOLDER" data-bind="value: viewPgpPassword, onEnter: function() { decryptPgpEncryptedMessage(message()); }" />
|
|
||||||
</div>
|
|
||||||
<div class="attachmentsPlace" data-bind="visible: message() && message().hasVisibleAttachments(),
|
<div class="attachmentsPlace" data-bind="visible: message() && message().hasVisibleAttachments(),
|
||||||
css: {'selection-mode' : showAttachmnetControls, 'unselectedAttachmentsError': highlightUnselectedAttachments}">
|
css: {'selection-mode' : showAttachmnetControls, 'unselectedAttachmentsError': highlightUnselectedAttachments}">
|
||||||
<ul class="attachmentList" data-bind="foreach: message() ? message().attachments() : []">
|
<ul class="attachmentList" data-bind="foreach: message() ? message().attachments() : []">
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
<div class="popups">
|
||||||
|
<div class="modal hide b-message-open-pgp-content g-ui-user-select-none" data-bind="modal: modalVisibility">
|
||||||
|
<div>
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-bind="command: cancelCommand">×</button>
|
||||||
|
<h3>
|
||||||
|
<span class="i18n" data-i18n="POPUPS_MESSAGE_OPEN_PGP/TITLE_MESSAGE_OPEN_PGP"></span>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<div class="form-horizontal">
|
||||||
|
<div class="alert" data-bind="visible: '' !== notification()">
|
||||||
|
<span data-bind="text: notification"></span>
|
||||||
|
</div>
|
||||||
|
<br />
|
||||||
|
<div class="control-group">
|
||||||
|
<label class="i18n control-label" data-i18n="POPUPS_MESSAGE_OPEN_PGP/LABEL_KEY"></label>
|
||||||
|
<div class="controls key-list" data-bind="foreach: privateKeys" style="margin-top: 5px">
|
||||||
|
<div class="key-list__item">
|
||||||
|
<i class="key-list__item__radio icon-radio-unchecked"></i>
|
||||||
|
<span class="key-list__item__name">
|
||||||
|
<span data-bind="text: user"></span>
|
||||||
|
|
||||||
|
<span>[<span data-bind="text: id"></span>]</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<!--<div data-bind="json: $data"></div>-->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group">
|
||||||
|
<label class="i18n control-label" data-i18n="POPUPS_MESSAGE_OPEN_PGP/LABEL_PASSWORD"></label>
|
||||||
|
<div class="controls">
|
||||||
|
<input type="password" class="inputPassword input-xlarge" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||||
|
data-bind="value: password, hasfocus: password.focus, onEnter: doCommand" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button class="btn buttonDo" data-bind="command: doCommand, hasfocus: buttonFocus">
|
||||||
|
<i data-bind="css: {'icon-key': !submitRequest(), 'icon-spinner animated': submitRequest()}"></i>
|
||||||
|
|
||||||
|
<span class="i18n" data-i18n="POPUPS_MESSAGE_OPEN_PGP/BUTTON_DECRYPT"></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -9,12 +9,12 @@
|
||||||
|
|
||||||
<span class="i18n" data-i18n="SETTINGS_OPEN_PGP/BUTTON_ADD_OPEN_PGP_KEY"></span>
|
<span class="i18n" data-i18n="SETTINGS_OPEN_PGP/BUTTON_ADD_OPEN_PGP_KEY"></span>
|
||||||
</a>
|
</a>
|
||||||
|
<!--
|
||||||
<a class="btn" data-bind="click: generateOpenPgpKey">
|
<a class="btn" data-bind="click: generateOpenPgpKey">
|
||||||
<i class="icon-key"></i>
|
<i class="icon-key"></i>
|
||||||
|
|
||||||
<span class="i18n" data-i18n="SETTINGS_OPEN_PGP/BUTTON_GENERATE_OPEN_PGP_KEYS"></span>
|
<span class="i18n" data-i18n="SETTINGS_OPEN_PGP/BUTTON_GENERATE_OPEN_PGP_KEYS"></span>
|
||||||
</a>
|
</a>-->
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<br />
|
||||||
|
|
321
rainloop/v/0.0.0/langs/admin/pl.ini
Normal file
321
rainloop/v/0.0.0/langs/admin/pl.ini
Normal file
|
@ -0,0 +1,321 @@
|
||||||
|
|
||||||
|
[LOGIN]
|
||||||
|
LABEL_LOGIN = "Login"
|
||||||
|
LABEL_PASSWORD = "Hasło"
|
||||||
|
BUTTON_LOGIN = "Zaloguj"
|
||||||
|
|
||||||
|
[TOP_PANEL]
|
||||||
|
LABEL_PREMIUM = "Premium"
|
||||||
|
LABEL_ADMIN_PANEL = "Panel administracyjny"
|
||||||
|
|
||||||
|
[TABS_LABELS]
|
||||||
|
LABEL_GENERAL_NAME = "Ogólne"
|
||||||
|
LABEL_LOGIN_NAME = "Login"
|
||||||
|
LABEL_BRANDING_NAME = "Personalizacja"
|
||||||
|
LABEL_CONTACTS_NAME = "Kontakty"
|
||||||
|
LABEL_DOMAINS_NAME = "Domeny"
|
||||||
|
LABEL_SECURITY_NAME = "Bezpieczeństwo"
|
||||||
|
LABEL_INTEGRATION_NAME = "Integracja"
|
||||||
|
LABEL_PLUGINS_NAME = "Wtyczki"
|
||||||
|
LABEL_PACKAGES_NAME = "Zarządzanie wtyczkami"
|
||||||
|
LABEL_LICENSING_NAME = "Licencjonowanie"
|
||||||
|
LABEL_ABOUT_NAME = "O skrypcie"
|
||||||
|
|
||||||
|
[TAB_GENERAL]
|
||||||
|
LEGEND_INTERFACE = "Interfejs"
|
||||||
|
LABEL_LANGUAGE = "Język:"
|
||||||
|
LABEL_LANGUAGE_ADMIN = "Język (admin):"
|
||||||
|
LABEL_THEME = "Motyw:"
|
||||||
|
LABEL_ALLOW_LANGUAGES_ON_SETTINGS = "Zezwól użytkownikowi na wybór języka"
|
||||||
|
LABEL_ALLOW_THEMES_ON_SETTINGS = "Zezwól użytkownikowi na zmianę motywu"
|
||||||
|
LABEL_ALLOW_BACKGROUND_ON_SETTINGS = "Zezwól użytkownikowi na użycie własnego tła"
|
||||||
|
LABEL_SHOW_THUMBNAILS = "Pokaż miniatury (załączniki)"
|
||||||
|
LABEL_ALLOW_GRAVATAR = "Zezwól na używanie gravatarów"
|
||||||
|
LEGEND_MAIN = "Główne"
|
||||||
|
LABEL_ATTACHMENT_SIZE_LIMIT = "Maks. rozmiar zał.:"
|
||||||
|
LABEL_ALLOW_ADDITIONAL_ACCOUNTS = "Zezwól na dodatkowe konta"
|
||||||
|
LABEL_ALLOW_IDENTITIES = "Zezwól na posiadanie wielu tożsamości"
|
||||||
|
LABEL_ALLOW_TEMPLATES = "Zezwól na używanie szablonów"
|
||||||
|
ALERT_WARNING = "Ostrzeżenie!"
|
||||||
|
HTML_ALERT_WEAK_PASSWORD = "Korzystasz z domyślnego hasła administratora.
|
||||||
|
<br />
|
||||||
|
Ze względów bezpieczeństwa, proszę
|
||||||
|
<strong><a href=\"#/security\">zmienić hasło</a></strong>
|
||||||
|
na inne."
|
||||||
|
|
||||||
|
[TAB_LOGIN]
|
||||||
|
LEGEND_LOGIN_SCREEN = "Logowanie"
|
||||||
|
LABEL_DEFAULT_DOMAIN = "Domyślna domena:"
|
||||||
|
LABEL_DETERMINE_USER_DOMAIN = "Spróbuj określić domenę użytkownika"
|
||||||
|
LABEL_ALLOW_LANGUAGES_ON_LOGIN = "Zezwól na zmianę języka podczas logowania"
|
||||||
|
LABEL_DETERMINE_USER_LANGUAGE = "Spróbuj określić język użytkownika"
|
||||||
|
|
||||||
|
[TAB_BRANDING]
|
||||||
|
LEGEND_BRANDING = "Personalizacja"
|
||||||
|
LABEL_PAGE_TITLE = "Tytuł strony:"
|
||||||
|
LABEL_LOADING_DESCRIPTION = "Komunikat ład. strony:"
|
||||||
|
LEGEND_LOGIN = "Login"
|
||||||
|
LABEL_LOGIN_LOGO = "Logo:"
|
||||||
|
LABEL_LOGIN_DESCRIPTION = "Opis:"
|
||||||
|
LABEL_LOGIN_BACKGROUND = "Tło:"
|
||||||
|
LABEL_LOGIN_CUSTOM_CSS = "Własny arkusz stylów:"
|
||||||
|
LABEL_LOGIN_SHOW_POWERED_LINK = "Pokaż link: \"Powered by RainLoop\""
|
||||||
|
LEGEND_USER = "Użytkownik"
|
||||||
|
LABEL_USER_LOGO = "Logo:"
|
||||||
|
LABEL_USER_LOGO_TITLE = "Tytuł loga:"
|
||||||
|
LABEL_USER_LOGO_MESSAGE = "Logo (widok wiad.)"
|
||||||
|
LABEL_USER_CUSTOM_CSS = "Własny arkusz stylów:"
|
||||||
|
LEGEND_WELCOME_PAGE = "Str. główna"
|
||||||
|
LABEL_WELCOME_PAGE_TITLE = "Tytuł:"
|
||||||
|
LABEL_WELCOME_PAGE_URL = "Adres URL:"
|
||||||
|
LABEL_WELCOME_PAGE_DISPLAY = "Wyświetl:"
|
||||||
|
OPTION_WELCOME_PAGE_DISPLAY_NONE = "nigdy"
|
||||||
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE = "raz"
|
||||||
|
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS = "zawsze"
|
||||||
|
HTML_ALERT_PREMIUM = "Ta opcja jest dostępna tylko dla licencji <strong><a href=\"#/licensing\">premium</a></strong>."
|
||||||
|
|
||||||
|
[TAB_CONTACTS]
|
||||||
|
LEGEND_CONTACTS = "Kontakty"
|
||||||
|
LEGEND_STORAGE = "Baza danych (PDO)"
|
||||||
|
LABEL_ENABLE_CONTACTS = "Włącz kontakty"
|
||||||
|
LABEL_ALLOW_SYNC = "Zezwól na synchronizację kontaktów (przy użyciu zewnętrznego serwera CardDAV)"
|
||||||
|
LABEL_STORAGE_TYPE = "Typ:"
|
||||||
|
LABEL_STORAGE_DSN = "Adres DSN:"
|
||||||
|
LABEL_STORAGE_USER = "Użytkownik:"
|
||||||
|
LABEL_STORAGE_PASSWORD = "Hasło:"
|
||||||
|
BUTTON_TEST = "Testuj"
|
||||||
|
ALERT_NOTICE = "Powiadomienie!"
|
||||||
|
HTML_ALERT_DO_NOT_USE_THIS_DATABASE = "Nie używaj tej bazy danych z dużą ilością aktywnych użytkowników."
|
||||||
|
HTML_ALERT_DOES_NOT_SUPPORTED = "Twój system nie zawiera wsparcia dla obsługi kontaktów.
|
||||||
|
<br />
|
||||||
|
Musisz zainstalować lub uruchomić na serwerze jedno z <strong>rozszerzeń PDO (SQLite / MySQL / PostgreSQL)</strong>."
|
||||||
|
|
||||||
|
[TAB_DOMAINS]
|
||||||
|
LEGEND_DOMAINS = "Domeny"
|
||||||
|
BUTTON_ADD_DOMAIN = "Dodaj domenę"
|
||||||
|
DELETE_ARE_YOU_SURE = "Czy na pewno?"
|
||||||
|
HTML_DOMAINS_HELPER = "Lista domen, do których można uzyskać dostęp poprzez tego klienta.
|
||||||
|
<br />Kliknij na nazwę, aby skonfigurować domenę."
|
||||||
|
|
||||||
|
[TAB_SECURITY]
|
||||||
|
LEGEND_SECURITY = "Bezpieczeństwo"
|
||||||
|
LABEL_ALLOW_TWO_STEP = "Zezwól na dwuskładnikową autoryzację"
|
||||||
|
LABEL_FORCE_TWO_STEP = "Wymuś dwuskładnikową autoryzację"
|
||||||
|
LABEL_USE_IMAGE_PROXY = "Użyj lokalnego serwera proxy dla zewnętrznych obrazów"
|
||||||
|
LABEL_ALLOW_OPEN_PGP = "Zezwól na użycie OpenPGP"
|
||||||
|
LABEL_SHOW_PHP_INFO = "Pokaż informacje o wersji PHP"
|
||||||
|
LEGEND_ADMIN_PANEL_ACCESS_CREDENTIALS = "Dane dostępowe panelu administracyjnego"
|
||||||
|
LABEL_CURRENT_PASSWORD = "Bieżące hasło:"
|
||||||
|
LABEL_NEW_LOGIN = "Nowy login:"
|
||||||
|
LABEL_NEW_PASSWORD = "Nowe hasło:"
|
||||||
|
LABEL_REPEAT_PASSWORD = "Powtórz hasło:"
|
||||||
|
BUTTON_UPDATE_PASSWORD = "Zaktualizuj hasło"
|
||||||
|
LEGEND_SSL = "SSL"
|
||||||
|
LABEL_REQUIRE_VERIFICATION = "Wymagaj sprawdzania poprawności certyfikatów SSL (IMAP/SMTP)"
|
||||||
|
LABEL_ALLOW_SELF_SIGNED = "Zezwól na używanie certyfikatów podpisanych przez siebie"
|
||||||
|
|
||||||
|
[TAB_INTEGRATIONS]
|
||||||
|
LEGEND_GOOGLE = "Google"
|
||||||
|
LABEL_ENABLE_GOOGLE = "Włącz obsługę platformy Google"
|
||||||
|
LABEL_GOOGLE_AUTH = "Autoryzacja"
|
||||||
|
LABEL_GOOGLE_DRIVE = "Obsługa dysku Google (widok tworz. wiadomości)"
|
||||||
|
LABEL_GOOGLE_PREVIEW = "Obsługa przeglądarki Google (podgląd dla plików: Microsoft Word, Excel i PowerPoint)"
|
||||||
|
LABEL_GOOGLE_CLIENT_ID = "Identyfikator:"
|
||||||
|
LABEL_GOOGLE_CLIENT_SECRET = "Hasło:"
|
||||||
|
LABEL_GOOGLE_API_KEY = "Klucz API:"
|
||||||
|
HINT_GOOGLE_API_KEY = "Wymagane dla obsługi interfejsu usługi: 'Dysk Google'"
|
||||||
|
LEGEND_FACEBOOK = "Facebook"
|
||||||
|
LABEL_ENABLE_FACEBOOK = "Włącz obsługę platformy Facebook (autoryzacja)"
|
||||||
|
LABEL_FACEBOOK_APP_ID = "Identyfikator aplikacji:"
|
||||||
|
LABEL_FACEBOOK_APP_SECRET = "Hasło aplikacji:"
|
||||||
|
LEGEND_TWITTER = "Twitter"
|
||||||
|
LABEL_ENABLE_TWITTER = "Włącz obsługę platformy Twitter (autoryzacja)"
|
||||||
|
LABEL_TWITTER_CONSUMER_KEY = "Klucz użytkownika:"
|
||||||
|
LABEL_TWITTER_CONSUMER_SECRET = "Hasło użytkownika:"
|
||||||
|
LEGEND_DROPBOX = "Dropbox"
|
||||||
|
LABEL_ENABLE_DROPBOX = "Włącz obsługę platformy Dropbox"
|
||||||
|
LABEL_DROPBOX_API_KEY = "Klucz API:"
|
||||||
|
TOP_ALERT = "Szczegółowe informacje na temat obsługi platform, można znaleźść pod adresem: "
|
||||||
|
|
||||||
|
[TAB_PLUGINS]
|
||||||
|
LEGEND_PLUGINS = "Wtyczki"
|
||||||
|
LABEL_ENABLE_PLUGINS = "Włącz obsługę wtyczek"
|
||||||
|
ALERT_NO_PLUGINS = "Nie zainstalowano żadnych wtyczek."
|
||||||
|
LINK_INSTALL_NEW = "Kliknij tutaj, aby zainstalować nowe wtyczki!"
|
||||||
|
HINT_CLICK_NAME = "Kliknij na nazwę, aby skonfigurować wtyczkę."
|
||||||
|
|
||||||
|
[TAB_PACKAGES]
|
||||||
|
LEGEND_AVAILABLE_FOR_UPDATE = "Aktualizacja"
|
||||||
|
LEGEND_AVAILABLE_FOR_INSTALLATION = "Do zainstalowania"
|
||||||
|
LEGEND_INSTALLED_PACKAGES = "Zainstalowane"
|
||||||
|
ALERT_CANNOT_ACCESS_REPOSITORY = "Nie można uzyskać dostępu do repozytorium."
|
||||||
|
|
||||||
|
[TAB_LICENSING]
|
||||||
|
LABEL_YOUR_DOMAIN = "Domena:"
|
||||||
|
LABEL_VERSION = "Wersja:"
|
||||||
|
LABEL_CHECKING = "sprawdzanie..."
|
||||||
|
TYPE_BASIC_HINT = "Ta domena nie jest licencjonowana do użytku komercyjnego."
|
||||||
|
TYPE_BASIC_HINT_2 = "Nie można dodać licencji dla tej domeny."
|
||||||
|
HTML_ALERT_TOP_1 = "RainLoop Webmail korzysta z licencji:"
|
||||||
|
HTML_ALERT_TOP_2 = "Możesz używać tego klienta <b>za darmo</b>, tylko dla prywatnych <b>(własnych)</b> projektów."
|
||||||
|
HTML_ALERT_TOP_3 = "Do komercyjnego użytku (używania dodatkowych opcji) <b>RainLoop Webmail</b>, wymagane jest posiadanie
|
||||||
|
<a href=http://www.rainloop.net/purchase/ target=_blank>ważnej subskrypcji</a>."
|
||||||
|
TYPE_PREMIUM_LIFETIME = "Dożywotnia"
|
||||||
|
TYPE_PREMIUM_HINT = "Ta domena nie jest licencjonowana dla użytku komercyjnego."
|
||||||
|
LABEL_SUB_EXPIRES = "Subskrypcja wygasa:"
|
||||||
|
BUTTON_ACTIVATE = "Aktywuj klucz"
|
||||||
|
BUTTON_PURCHASE = "Kup klucz"
|
||||||
|
BUTTON_TRIAL = "Wersja testowa"
|
||||||
|
|
||||||
|
[TAB_ABOUT]
|
||||||
|
LEGEND_ABOUT = "O skrypcie"
|
||||||
|
LABEL_TAG_HINT = "Prosty, nowoczesny i szybki klient pocztowy"
|
||||||
|
LABEL_ALL_RIGHTS_RESERVED = "Wszystkie prawa zastrzeżone."
|
||||||
|
HINT_READ_CHANGE_LOG = "Przed aktualizacją, proszę przeczytać listę zmian."
|
||||||
|
HINT_IS_UP_TO_DATE = "Klient RainLoop jest aktualny."
|
||||||
|
HTML_NEW_VERSION = "Dostępna jest nowa wersja: <b>%VERSION%</b>."
|
||||||
|
LABEL_UPDATING = "Aktualizowanie..."
|
||||||
|
LABEL_CHECKING = "Szukanie aktualizacji..."
|
||||||
|
BUTTON_UPDATE = "Zaktualizuj"
|
||||||
|
BUTTON_DOWNLOAD = "Pobierz"
|
||||||
|
BUTTON_CHANGELOG = "Lista zmian"
|
||||||
|
|
||||||
|
[POPUPS_ACTIVATE]
|
||||||
|
TITLE_ACTIVATE = "Aktywacja klucza subskrypcji"
|
||||||
|
TITLE_ACTIVATION = "Aktywowanie..."
|
||||||
|
LABEL_DOMAIN = "Domena:"
|
||||||
|
LABEL_SUB_KEY = "Klucz subskrypcji:"
|
||||||
|
BUTTON_ACTIVATE = "Aktywuj"
|
||||||
|
LABEL_ACTIVATED = "Aktywowano"
|
||||||
|
ERROR_INVALID_SUBS_KEY = "Niepoprawny klucz subskrypcji"
|
||||||
|
SUBS_KEY_ACTIVATED = "Aktywowano klucz subskrypcji"
|
||||||
|
HTML_DESC = "Subskrypcja premium dla domeny: <b>%DOMAIN%</b>, zostanie przedłużona po aktywacji.
|
||||||
|
<br />
|
||||||
|
Zwróc uwagę, że klucz subskrypcji może być aktywowany tylko dla jednej domeny.
|
||||||
|
<br /><br />
|
||||||
|
Po uruchomieniu aktywacji, nie można jej przerwac lub anulować."
|
||||||
|
|
||||||
|
[POPUPS_DOMAIN]
|
||||||
|
TITLE_ADD_DOMAIN = "Dodawanie domeny"
|
||||||
|
TITLE_ADD_DOMAIN_WITH_NAME = "Dodawanie domeny: \"%NAME%\""
|
||||||
|
TITLE_EDIT_DOMAIN = "Edycja domeny: \"%NAME%\""
|
||||||
|
LABEL_NAME = "Nazwa"
|
||||||
|
NAME_HELPER = "obsługiwany znak wieloznaczności - *"
|
||||||
|
LABEL_IMAP = "IMAP"
|
||||||
|
LABEL_SMTP = "SMTP"
|
||||||
|
LABEL_SIEVE = "SIEVE"
|
||||||
|
LABEL_SERVER = "Serwer:"
|
||||||
|
LABEL_PORT = "Port:"
|
||||||
|
LABEL_SECURE = "Rodzaj połączenia:"
|
||||||
|
LABEL_WHITE_LIST = "Biała lista"
|
||||||
|
SECURE_OPTION_NONE = "Bez zabezpieczeń"
|
||||||
|
SECURE_OPTION_SSL = "SSL/TLS"
|
||||||
|
SECURE_OPTION_STARTTLS = "STARTTLS"
|
||||||
|
LABEL_ALLOW_SIEVE_SCRIPTS = "Zezwól na skrypty sieve"
|
||||||
|
LABEL_ALLOW_USER_SCRIPT = "Zezwól na spersonalizowany skrypt użytkownika"
|
||||||
|
LABEL_USE_SHORT_LOGIN = "Użyj krótkiego loginu"
|
||||||
|
LABEL_USE_AUTH = "Użyj autoryzacji"
|
||||||
|
LABEL_USE_PHP_MAIL = "Użyj funkcji php: 'mail()'"
|
||||||
|
BUTTON_TEST = "Test"
|
||||||
|
BUTTON_WHITE_LIST = "Biała lista"
|
||||||
|
BUTTON_SIEVE_CONFIGURATION = "Konfiguracja sieve"
|
||||||
|
BUTTON_BACK_TO_IMAP = "Powrót do ustawień serwera IMAP"
|
||||||
|
BUTTON_BACK = "Wstecz"
|
||||||
|
BUTTON_CLOSE = "Zamknij"
|
||||||
|
BUTTON_ADD = "Dodaj"
|
||||||
|
BUTTON_UPDATE = "Zaktualizuj"
|
||||||
|
WHITE_LIST_ALERT = "Lista użytkowników domeny, którzy mogą uzyskać dostęp poprzez tego klienta.
|
||||||
|
Użyj spacji do rozdzielenia."
|
||||||
|
|
||||||
|
[POPUPS_PLUGIN]
|
||||||
|
TITLE_PLUGIN = "Wtyczka: "
|
||||||
|
DESC_NOTHING_TO_CONFIGURE = "Brak opcji do skonfigurowania"
|
||||||
|
BUTTON_CLOSE = "Zamknij"
|
||||||
|
BUTTON_SAVE = "Zapisz"
|
||||||
|
TOOLTIP_ABOUT_TITLE = "O wtyczce"
|
||||||
|
|
||||||
|
[POPUPS_ASK]
|
||||||
|
BUTTON_YES = "Tak"
|
||||||
|
BUTTON_NO = "Nie"
|
||||||
|
DESC_WANT_CLOSE_THIS_WINDOW = "Czy na pewno chcesz zamknąć to okno?"
|
||||||
|
DESC_WANT_DELETE_MESSAGES = "Czy na pewno chcesz usunąć tą wiadomość(-i)?"
|
||||||
|
|
||||||
|
[POPUPS_LANGUAGES]
|
||||||
|
TITLE_LANGUAGES = "Wybierz swój język"
|
||||||
|
|
||||||
|
[HINTS]
|
||||||
|
BETA = "Beta"
|
||||||
|
UNSTABLE = "Niestabilna"
|
||||||
|
WARNING = "Ostrzeżenie!"
|
||||||
|
NOT_SUPPORTED = "nieobsługiwana"
|
||||||
|
REQUIRES_PHP_54 = "Wymaga PHP w wersji 5.4 lub wyższej"
|
||||||
|
|
||||||
|
[ERRORS]
|
||||||
|
DOMAIN_ALREADY_EXISTS = "Ta domena już istnieje"
|
||||||
|
UNKNOWN_ERROR = "Nieznany błąd"
|
||||||
|
|
||||||
|
[NOTIFICATIONS]
|
||||||
|
INVALID_TOKEN = "Nieważny token"
|
||||||
|
AUTH_ERROR = "Autoryzacja zakończona niepowodzeniem"
|
||||||
|
ACCESS_ERROR = "Błąd dostępu"
|
||||||
|
CONNECTION_ERROR = "Nie można połączyć się z serwerem"
|
||||||
|
CAPTCHA_ERROR = "Niepoprawny kod CAPTCHA."
|
||||||
|
SOCIAL_FACEBOOK_LOGIN_ACCESS_DISABLE = "Logowanie poprzez tą platformę, nie zostało jeszcze aktywowane dla żadnego z kont e-mail. Zaloguj się używając loginu i hasła, a następnie włącz tą funkcję w ustawieniach konta."
|
||||||
|
SOCIAL_TWITTER_LOGIN_ACCESS_DISABLE = "Logowanie poprzez tą platformę, nie zostało jeszcze aktywowane dla żadnego z kont e-mail. Zaloguj się używając loginu i hasła, a następnie włącz tą funkcję w ustawieniach konta."
|
||||||
|
SOCIAL_GOOGLE_LOGIN_ACCESS_DISABLE = "Logowanie poprzez tą platformę, nie zostało jeszcze aktywowane dla żadnego z kont e-mail. Zaloguj się używając loginu i hasła, a następnie włącz tą funkcję w ustawieniach konta."
|
||||||
|
DOMAIN_NOT_ALLOWED = "Brak zezwolenia na użycie tej domeny"
|
||||||
|
ACCOUNT_NOT_ALLOWED = "Brak zezwolenia dla tego konta"
|
||||||
|
ACCOUNT_TWO_FACTOR_AUTH_REQUIRED = "Wymagana dwuskładnikowa autoryzacja"
|
||||||
|
ACCOUNT_TWO_FACTOR_AUTH_ERROR = "Błąd autoryzacji dwuskładnikowej"
|
||||||
|
COULD_NOT_SAVE_NEW_PASSWORD = "Nie można było zapisać nowego hasła"
|
||||||
|
CURRENT_PASSWORD_INCORRECT = "Bieżące hasło jest niepoprawne"
|
||||||
|
NEW_PASSWORD_SHORT = "Wybrane hasło jest za krótkie"
|
||||||
|
NEW_PASSWORD_WEAK = "Wybrane hasło jest zbyt proste"
|
||||||
|
NEW_PASSWORD_FORBIDDENT = "Wybrane hasło zawiera zakazane znaki"
|
||||||
|
CONTACTS_SYNC_ERROR = "Błąd synchronizacji kontaktów"
|
||||||
|
CANT_GET_MESSAGE_LIST = "Nie można pobrać listy wiadomości"
|
||||||
|
CANT_GET_MESSAGE = "Nie można pobrać wiadomości"
|
||||||
|
CANT_DELETE_MESSAGE = "Nie można usunąć wiadomości"
|
||||||
|
CANT_MOVE_MESSAGE = "Nie można przenieść wiadomości"
|
||||||
|
CANT_SAVE_MESSAGE = "Nie można zapisać wiadomości"
|
||||||
|
CANT_SEND_MESSAGE = "Nie można wysłać wiadomości"
|
||||||
|
INVALID_RECIPIENTS = "Niepoprawny adres odbiorcy"
|
||||||
|
CANT_SAVE_FILTERS = "Nie można zapisać filtrów"
|
||||||
|
CANT_GET_FILTERS = "Nie można pobrać filtrów"
|
||||||
|
FILTERS_ARE_NOT_CORRECT = "Brak poprawności filtrów"
|
||||||
|
CANT_CREATE_FOLDER = "Nie można utworzyć folderu"
|
||||||
|
CANT_RENAME_FOLDER = "Nie można zmienić nazwy folderu"
|
||||||
|
CANT_DELETE_FOLDER = "Nie można usunąć folderu"
|
||||||
|
CANT_DELETE_NON_EMPTY_FOLDER = "Nie można usunąć folderu, w którym znajduje się zawartość"
|
||||||
|
CANT_SUBSCRIBE_FOLDER = "Nie można zasubskrybować folderu"
|
||||||
|
CANT_UNSUBSCRIBE_FOLDER = "Nie można usunąć subskrypcji folderu"
|
||||||
|
CANT_SAVE_SETTINGS = "Nie można zapisać ustawień"
|
||||||
|
CANT_SAVE_PLUGIN_SETTINGS = "Nie można zapisać ustawień wtyczki"
|
||||||
|
DOMAIN_ALREADY_EXISTS = "Ta domena już istnieje"
|
||||||
|
CANT_INSTALL_PACKAGE = "Instalacja wtyczki zakończona niepowodzeniem"
|
||||||
|
CANT_DELETE_PACKAGE = "Usunięcie wtyczki zakończone niepowodzeniem"
|
||||||
|
INVALID_PLUGIN_PACKAGE = "Niepoprawna wtyczka"
|
||||||
|
UNSUPPORTED_PLUGIN_PACKAGE = "Nieobsługiwana wtyczka"
|
||||||
|
LICENSING_SERVER_IS_UNAVAILABLE = "Serwer aktywacji subskrypcji jest niedostępny"
|
||||||
|
LICENSING_DOMAIN_EXPIRED = "Subskrypcja dla tej domeny wygasła."
|
||||||
|
LICENSING_DOMAIN_BANNED = "Subskrypcja dla tej domeny została zawieszona."
|
||||||
|
DEMO_SEND_MESSAGE_ERROR = "Ze względów bezpieczeństwa, to konto nie posiada zezwolenia na wysyłanie wiadomości na zewnętrzne adresy e-mail!"
|
||||||
|
DEMO_ACCOUNT_ERROR = "Ze względów bezpieczeństwa, to konto nie posiada uprawnień do wykonania tego zadania!"
|
||||||
|
ACCOUNT_ALREADY_EXISTS = "To konto już istnieje"
|
||||||
|
MAIL_SERVER_ERROR = "Wystąpił błąd podczas dostępu do serwera"
|
||||||
|
INVALID_INPUT_ARGUMENT = "Niepoprawny argument wejścia"
|
||||||
|
UNKNOWN_ERROR = "Nieznany błąd"
|
||||||
|
|
||||||
|
[STATIC]
|
||||||
|
BACK_LINK = "Odśwież"
|
||||||
|
DOMAIN_LIST_DESC = "Lista domen, do których można uzyskać dostęp za pomocą tego klienta."
|
||||||
|
PHP_EXSTENSIONS_ERROR_DESC = "Brak wymaganych rozszerzeń w konfiguracji PHP!"
|
||||||
|
PHP_VERSION_ERROR_DESC = "Twoja wersja PHP: (%VERSION%), jest niższa niż minimalna: 5.3.0!"
|
||||||
|
NO_SCRIPT_TITLE = "Ta aplikacja do poprawnej pracy wymaga javascript-u."
|
||||||
|
NO_SCRIPT_DESC = "Twoja przeglądarka nie obsługuje javascript-u.
|
||||||
|
Proszę o jego włączenie i ponowną próbę."
|
||||||
|
NO_COOKIE_TITLE = "Obsługa plików cookies jest wymagana dla poprawnego działania skryptu."
|
||||||
|
NO_COOKIE_DESC = "Twoja przeglądarka nie obsługuje plików cookies.
|
||||||
|
Proszę o ich włączenie i ponowną próbę."
|
||||||
|
BAD_BROWSER_TITLE = "Posiadasz nieaktualną wersję przeglądarki."
|
||||||
|
BAD_BROWSER_DESC = "Aby korzystać ze wszyskich funkcji tego skryptu, pobierz i zainstaluj jedną z niżej wymienionych przeglądarek:"
|
|
@ -320,6 +320,12 @@ BUTTON_SIGN = "Sign"
|
||||||
BUTTON_ENCRYPT = "Encrypt"
|
BUTTON_ENCRYPT = "Encrypt"
|
||||||
BUTTON_SIGN_AND_ENCRYPT = "Sign and encrypt"
|
BUTTON_SIGN_AND_ENCRYPT = "Sign and encrypt"
|
||||||
|
|
||||||
|
[POPUPS_MESSAGE_OPEN_PGP]
|
||||||
|
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
|
||||||
|
LABEL_KEY = "Private Key"
|
||||||
|
LABEL_PASSWORD = "Password"
|
||||||
|
BUTTON_DECRYPT = "Decrypt"
|
||||||
|
|
||||||
[POPUPS_TWO_FACTOR_TEST]
|
[POPUPS_TWO_FACTOR_TEST]
|
||||||
TITLE_TEST_CODE = "2-Step verification test"
|
TITLE_TEST_CODE = "2-Step verification test"
|
||||||
LABEL_CODE = "Code"
|
LABEL_CODE = "Code"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
[LOGIN]
|
[LOGIN]
|
||||||
LABEL_EMAIL = "E-mail"
|
LABEL_EMAIL = "Adres e-mail"
|
||||||
LABEL_LOGIN = "Login"
|
LABEL_LOGIN = "Login"
|
||||||
LABEL_PASSWORD = "Hasło"
|
LABEL_PASSWORD = "Hasło"
|
||||||
LABEL_SIGN_ME = "Zapamiętaj mnie"
|
LABEL_SIGN_ME = "Zapamiętaj mnie"
|
||||||
|
@ -10,34 +10,34 @@ BUTTON_SIGN_IN = "Zaloguj"
|
||||||
TITLE_SIGN_IN_GOOGLE = "Zaloguj się przez Google"
|
TITLE_SIGN_IN_GOOGLE = "Zaloguj się przez Google"
|
||||||
TITLE_SIGN_IN_FACEBOOK = "Zaloguj się przez Facebook"
|
TITLE_SIGN_IN_FACEBOOK = "Zaloguj się przez Facebook"
|
||||||
TITLE_SIGN_IN_TWITTER = "Zaloguj się przez Twitter"
|
TITLE_SIGN_IN_TWITTER = "Zaloguj się przez Twitter"
|
||||||
LABEL_FORGOT_PASSWORD = "Zapomniane hasło"
|
LABEL_FORGOT_PASSWORD = "Zapomniałem hasło"
|
||||||
LABEL_REGISTRATION = "Rejestracja"
|
LABEL_REGISTRATION = "Rejestracja"
|
||||||
|
|
||||||
[TOP_TOOLBAR]
|
[TOP_TOOLBAR]
|
||||||
BUTTON_ADD_ACCOUNT = "Dodaj konto"
|
BUTTON_ADD_ACCOUNT = "Dodaj konto"
|
||||||
BUTTON_SETTINGS = "Ustawienia"
|
BUTTON_SETTINGS = "Ustawienia"
|
||||||
BUTTON_HELP = "Pomoc"
|
BUTTON_HELP = "Pomoc"
|
||||||
BUTTON_LOGOUT = "Wyloguj się"
|
BUTTON_LOGOUT = "Wyloguj"
|
||||||
|
|
||||||
[SEARCH]
|
[SEARCH]
|
||||||
MAIN_INPUT_PLACEHOLDER = "Szukaj"
|
MAIN_INPUT_PLACEHOLDER = "Szukaj"
|
||||||
TITLE_ADV = "Wyszukiwanie zaawansowane"
|
TITLE_ADV = "Wyszukiwanie zaawansowane"
|
||||||
LABEL_ADV_FROM = "Od"
|
LABEL_ADV_FROM = "Od:"
|
||||||
LABEL_ADV_TO = "Do"
|
LABEL_ADV_TO = "Do:"
|
||||||
LABEL_ADV_SUBJECT = "Temat"
|
LABEL_ADV_SUBJECT = "Temat:"
|
||||||
LABEL_ADV_TEXT = "Tekst"
|
LABEL_ADV_TEXT = "Tekst:"
|
||||||
LABEL_ADV_HAS_ATTACHMENT = "Z załącznikiem"
|
LABEL_ADV_HAS_ATTACHMENT = "Załącznik"
|
||||||
LABEL_ADV_HAS_ATTACHMENTS = "Z załącznikami"
|
LABEL_ADV_HAS_ATTACHMENTS = "Ma załączniki"
|
||||||
LABEL_ADV_FLAGGED = "Oznaczona"
|
LABEL_ADV_FLAGGED = "Oznaczona"
|
||||||
LABEL_ADV_UNSEEN = "Nieprzeczytana"
|
LABEL_ADV_UNSEEN = "Nieprzeczytana"
|
||||||
LABEL_ADV_DATE = "Data"
|
LABEL_ADV_DATE = "Data:"
|
||||||
LABEL_ADV_DATE_ALL = "Wszystkie"
|
LABEL_ADV_DATE_ALL = "wszystkie"
|
||||||
LABEL_ADV_DATE_3_DAYS = "Do 3 dni"
|
LABEL_ADV_DATE_3_DAYS = "do 3 dni"
|
||||||
LABEL_ADV_DATE_7_DAYS = "Do 1 tygodnia"
|
LABEL_ADV_DATE_7_DAYS = "do tygodnia"
|
||||||
LABEL_ADV_DATE_MONTH = "Do 1 miesiąca"
|
LABEL_ADV_DATE_MONTH = "do miesiąca"
|
||||||
LABEL_ADV_DATE_3_MONTHS = "Do 3 miesięcy"
|
LABEL_ADV_DATE_3_MONTHS = "do 3 miesięcy"
|
||||||
LABEL_ADV_DATE_6_MONTHS = "Do 6 miesięcy"
|
LABEL_ADV_DATE_6_MONTHS = "do 6 miesięcy"
|
||||||
LABEL_ADV_DATE_YEAR = "Do 1 roku"
|
LABEL_ADV_DATE_YEAR = "do roku"
|
||||||
BUTTON_ADV_SEARCH = "Szukaj"
|
BUTTON_ADV_SEARCH = "Szukaj"
|
||||||
|
|
||||||
[PREVIEW_POPUP]
|
[PREVIEW_POPUP]
|
||||||
|
@ -47,9 +47,9 @@ CLOSE = "Zamknij (Esc)"
|
||||||
LOADING = "Ładowanie..."
|
LOADING = "Ładowanie..."
|
||||||
GALLERY_PREV = "Poprzedni (strzałka w lewo)"
|
GALLERY_PREV = "Poprzedni (strzałka w lewo)"
|
||||||
GALLERY_NEXT = "Następny (strzałka w prawo)"
|
GALLERY_NEXT = "Następny (strzałka w prawo)"
|
||||||
GALLERY_COUNTER = "%curr% z %total%"
|
GALLERY_COUNTER = "%curr% z: %total%"
|
||||||
IMAGE_ERROR = "Nie można było załadować <a href=\"%url%\" target=\"_blank\">obrazu</a>."
|
IMAGE_ERROR = "Nie można załadować <a href=\"%url%\" target=\"_blank\">obrazu</a>."
|
||||||
AJAX_ERROR = "Nie można było załadować <a href=\"%url%\" target=\"_blank\">zawartości</a>."
|
AJAX_ERROR = "Nie można załadować <a href=\"%url%\" target=\"_blank\">zawartości</a>."
|
||||||
|
|
||||||
[FOLDER_LIST]
|
[FOLDER_LIST]
|
||||||
BUTTON_COMPOSE = "Utwórz"
|
BUTTON_COMPOSE = "Utwórz"
|
||||||
|
@ -57,23 +57,23 @@ BUTTON_CONTACTS = "Kontakty"
|
||||||
INBOX_NAME = "Odebrane"
|
INBOX_NAME = "Odebrane"
|
||||||
SENT_NAME = "Wysłane"
|
SENT_NAME = "Wysłane"
|
||||||
DRAFTS_NAME = "Wersje robocze"
|
DRAFTS_NAME = "Wersje robocze"
|
||||||
SPAM_NAME = "Spam"
|
SPAM_NAME = "Niechciane"
|
||||||
TRASH_NAME = "Kosz"
|
TRASH_NAME = "Kosz"
|
||||||
ARCHIVE_NAME = "Archiwum"
|
ARCHIVE_NAME = "Archiwum"
|
||||||
|
|
||||||
[QUOTA]
|
[QUOTA]
|
||||||
TITLE = "Wykorzystane miejsce"
|
TITLE = "Wykorzystanie miejsca"
|
||||||
|
|
||||||
[MESSAGE_LIST]
|
[MESSAGE_LIST]
|
||||||
BUTTON_RELOAD = "Odśwież"
|
BUTTON_RELOAD = "Odśwież"
|
||||||
BUTTON_MOVE_TO = "Przenieś do"
|
BUTTON_MOVE_TO = "Przenieś"
|
||||||
BUTTON_DELETE = "Usuń"
|
BUTTON_DELETE = "Usuń"
|
||||||
BUTTON_ARCHIVE = "Archiwum"
|
BUTTON_ARCHIVE = "Archiwizuj"
|
||||||
BUTTON_SPAM = "Oznacz jako spam"
|
BUTTON_SPAM = "Oznacz jako niechciane"
|
||||||
BUTTON_NOT_SPAM = "Oznacz jako wiarygodną"
|
BUTTON_NOT_SPAM = "Oznacz jako pożądane"
|
||||||
BUTTON_EMPTY_FOLDER = "Wyczyść folder"
|
BUTTON_EMPTY_FOLDER = "Usuń zawartość folderu"
|
||||||
BUTTON_MULTY_FORWARD = "Przekaż dalej"
|
BUTTON_MULTY_FORWARD = "Przekaż dalej"
|
||||||
BUTTON_DELETE_WITHOUT_MOVE = "Usuń na stałe"
|
BUTTON_DELETE_WITHOUT_MOVE = "Usuń (pernamentnie)"
|
||||||
BUTTON_MORE = "Więcej"
|
BUTTON_MORE = "Więcej"
|
||||||
MENU_SET_SEEN = "Oznacz jako przeczytane"
|
MENU_SET_SEEN = "Oznacz jako przeczytane"
|
||||||
MENU_SET_ALL_SEEN = "Oznacz wszystkie jako przeczytane"
|
MENU_SET_ALL_SEEN = "Oznacz wszystkie jako przeczytane"
|
||||||
|
@ -82,7 +82,7 @@ MENU_SET_FLAG = "Oznacz jako ważne"
|
||||||
MENU_UNSET_FLAG = "Oznacz jako nieważne"
|
MENU_UNSET_FLAG = "Oznacz jako nieważne"
|
||||||
MENU_SELECT_ALL = "Wszystkie"
|
MENU_SELECT_ALL = "Wszystkie"
|
||||||
MENU_SELECT_NONE = "Żadne"
|
MENU_SELECT_NONE = "Żadne"
|
||||||
MENU_SELECT_INVERT = "Odwróć"
|
MENU_SELECT_INVERT = "Odwróć zaznaczenie"
|
||||||
MENU_SELECT_UNSEEN = "Nieprzeczytane"
|
MENU_SELECT_UNSEEN = "Nieprzeczytane"
|
||||||
MENU_SELECT_SEEN = "Przeczytane"
|
MENU_SELECT_SEEN = "Przeczytane"
|
||||||
MENU_SELECT_FLAGGED = "Oznaczone jako ważne"
|
MENU_SELECT_FLAGGED = "Oznaczone jako ważne"
|
||||||
|
@ -90,15 +90,15 @@ MENU_SELECT_UNFLAGGED = "Oznaczone jako nieważne"
|
||||||
EMPTY_LIST = "Pusta lista"
|
EMPTY_LIST = "Pusta lista"
|
||||||
EMPTY_SEARCH_LIST = "Brak wiadomości spełniających kryteria wyszukiwania"
|
EMPTY_SEARCH_LIST = "Brak wiadomości spełniających kryteria wyszukiwania"
|
||||||
SEARCH_RESULT_FOR = "Wyniki wyszukiwania dla: \"%SEARCH%\""
|
SEARCH_RESULT_FOR = "Wyniki wyszukiwania dla: \"%SEARCH%\""
|
||||||
BACK_TO_MESSAGE_LIST = "powrót do listy wiadomości"
|
BACK_TO_MESSAGE_LIST = "Powrót do listy wiadomości"
|
||||||
LIST_LOADING = "Ładowanie"
|
LIST_LOADING = "Ładowanie..."
|
||||||
EMPTY_SUBJECT_TEXT = "(Brak tematu)"
|
EMPTY_SUBJECT_TEXT = "(Brak tematu)"
|
||||||
PUT_MESSAGE_HERE = "Przeciągnij tutaj wiadomość, żeby zobaczyć ją na liście"
|
PUT_MESSAGE_HERE = "Przeciągnij tutaj wiadomość, żeby zobaczyć ją na liście"
|
||||||
TODAY_AT = "Dzisiaj: %TIME%"
|
TODAY_AT = "Dzisiaj: %TIME%"
|
||||||
YESTERDAY_AT = "Wczoraj: %TIME%"
|
YESTERDAY_AT = "Wczoraj: %TIME%"
|
||||||
SEARCH_PLACEHOLDER = "Szukaj"
|
SEARCH_PLACEHOLDER = "Szukaj"
|
||||||
NEW_MESSAGE_NOTIFICATION = "Masz: %COUNT% now(-ą,-e,-ych) wiadomości!"
|
NEW_MESSAGE_NOTIFICATION = "Masz: %COUNT% now(-ą,-e,-ych) wiadomości!"
|
||||||
QUOTA_SIZE = "Wykorzystano: <strong>%SIZE% (%PROC%%)</strong> z przyznanych: <strong>%LIMIT%</strong>"
|
QUOTA_SIZE = "Wykorzystano: <strong>%SIZE% (%PROC%%)</strong> z: <strong>%LIMIT%</strong>"
|
||||||
|
|
||||||
[MESSAGE]
|
[MESSAGE]
|
||||||
BUTTON_EDIT = "Edytuj"
|
BUTTON_EDIT = "Edytuj"
|
||||||
|
@ -106,15 +106,15 @@ BUTTON_BACK = "Wstecz"
|
||||||
BUTTON_CLOSE = "Zamknij"
|
BUTTON_CLOSE = "Zamknij"
|
||||||
BUTTON_DELETE = "Usuń"
|
BUTTON_DELETE = "Usuń"
|
||||||
BUTTON_ARCHIVE = "Archiwizuj"
|
BUTTON_ARCHIVE = "Archiwizuj"
|
||||||
BUTTON_SPAM = "Oznacz jako spam"
|
BUTTON_SPAM = "Oznacz jako niechcianą"
|
||||||
BUTTON_NOT_SPAM = "Oznacz jako wiarygodną"
|
BUTTON_NOT_SPAM = "Oznacz jako pożądaną"
|
||||||
BUTTON_MOVE_TO = "Przenieś do"
|
BUTTON_MOVE_TO = "Przenieś"
|
||||||
BUTTON_MORE = "Więcej"
|
BUTTON_MORE = "Więcej"
|
||||||
BUTTON_REPLY = "Odpowiedz"
|
BUTTON_REPLY = "Odpowiedz"
|
||||||
BUTTON_REPLY_ALL = "Odpowiedz wszystkim"
|
BUTTON_REPLY_ALL = "Odpowiedz wszystkim"
|
||||||
BUTTON_FORWARD = "Przekaż dalej"
|
BUTTON_FORWARD = "Przekaż dalej"
|
||||||
BUTTON_FORWARD_AS_ATTACHMENT = "Przekaż jako załącznik"
|
BUTTON_FORWARD_AS_ATTACHMENT = "Przekaż jako załącznik"
|
||||||
BUTTON_EDIT_AS_NEW = "Edytuj jako nową wiadomość"
|
BUTTON_EDIT_AS_NEW = "Zredaguj jako nową wiadomość"
|
||||||
BUTTON_SHOW_IMAGES = "Wyświetl obrazy"
|
BUTTON_SHOW_IMAGES = "Wyświetl obrazy"
|
||||||
BUTTON_NOTIFY_READ_RECEIPT = "Nadawca prosi o potwierdzenie odczytania tej wiadomości"
|
BUTTON_NOTIFY_READ_RECEIPT = "Nadawca prosi o potwierdzenie odczytania tej wiadomości"
|
||||||
BUTTON_IN_NEW_WINDOW = "Wyświetl w osobnym oknie"
|
BUTTON_IN_NEW_WINDOW = "Wyświetl w osobnym oknie"
|
||||||
|
@ -123,8 +123,8 @@ BUTTON_THREAD_PREV = "Poprzedni"
|
||||||
BUTTON_THREAD_NEXT = "Następny"
|
BUTTON_THREAD_NEXT = "Następny"
|
||||||
BUTTON_THREAD_MORE = "Więcej wiadomości"
|
BUTTON_THREAD_MORE = "Więcej wiadomości"
|
||||||
MENU_HEADERS = "Pokaż nagłówki wiadomości"
|
MENU_HEADERS = "Pokaż nagłówki wiadomości"
|
||||||
MENU_VIEW_ORIGINAL = "Pokaż oryginał"
|
MENU_VIEW_ORIGINAL = "Pokaż zródło"
|
||||||
MENU_DOWNLOAD_ORIGINAL = "Pobież jako plik - .eml"
|
MENU_DOWNLOAD_ORIGINAL = "Pobież jako plik eml"
|
||||||
MENU_FILTER_SIMILAR = "Filtruj podobne wiadomości"
|
MENU_FILTER_SIMILAR = "Filtruj podobne wiadomości"
|
||||||
MENU_PRINT = "Drukuj"
|
MENU_PRINT = "Drukuj"
|
||||||
EMPTY_SUBJECT_TEXT = "(Brak tematu)"
|
EMPTY_SUBJECT_TEXT = "(Brak tematu)"
|
||||||
|
@ -134,32 +134,32 @@ LABEL_FROM = "Od"
|
||||||
LABEL_FROM_SHORT = "Od"
|
LABEL_FROM_SHORT = "Od"
|
||||||
LABEL_TO = "Do"
|
LABEL_TO = "Do"
|
||||||
LABEL_TO_SHORT = "Do"
|
LABEL_TO_SHORT = "Do"
|
||||||
LABEL_CC = "Kopia do"
|
LABEL_CC = "Kopia"
|
||||||
LABEL_BCC = "Ukryci odbiorcy"
|
LABEL_BCC = "Ukr. kopia"
|
||||||
LABEL_REPLY_TO = "Reply-To"
|
LABEL_REPLY_TO = "Zwrot"
|
||||||
PRINT_LABEL_FROM = "Od"
|
PRINT_LABEL_FROM = "Od"
|
||||||
PRINT_LABEL_TO = "Do"
|
PRINT_LABEL_TO = "Do"
|
||||||
PRINT_LABEL_CC = "Kopia do"
|
PRINT_LABEL_CC = "Kopia"
|
||||||
PRINT_LABEL_BCC = "Ukryci odbiorcy"
|
PRINT_LABEL_BCC = "Ukr. kopia"
|
||||||
PRINT_LABEL_REPLY_TO = "Reply-To"
|
PRINT_LABEL_REPLY_TO = "Zwrot"
|
||||||
PRINT_LABEL_DATE = "Data"
|
PRINT_LABEL_DATE = "Data"
|
||||||
PRINT_LABEL_SUBJECT = "Temat"
|
PRINT_LABEL_SUBJECT = "Temat"
|
||||||
PRINT_LABEL_ATTACHMENTS = "Załączniki"
|
PRINT_LABEL_ATTACHMENTS = "Załączniki"
|
||||||
MESSAGE_LOADING = "Ładowanie..."
|
MESSAGE_LOADING = "Ładowanie wiadomości..."
|
||||||
MESSAGE_VIEW_DESC = "Wybierz wiadomość z listy w celu jej wyświetlenia"
|
MESSAGE_VIEW_DESC = "Wybierz wiadomość do wyświetlenia"
|
||||||
PGP_PASSWORD_INPUT_PLACEHOLDER = "Hasło"
|
PGP_PASSWORD_INPUT_PLACEHOLDER = "Hasło"
|
||||||
PGP_SIGNED_MESSAGE_DESC = "Wiadomość podpisana za pomocą OpenPGP (kliknij, aby zweryfikować)"
|
PGP_SIGNED_MESSAGE_DESC = "Podpisana"
|
||||||
PGP_ENCRYPTED_MESSAGE_DESC = "Wiadomość zaszyfrowana za pomocą OpenPGP (kliknij, aby odszyfrować)"
|
PGP_ENCRYPTED_MESSAGE_DESC = "Zaszyfrowana"
|
||||||
LINK_DOWNLOAD_AS_ZIP = "Pobierz jako zip"
|
LINK_DOWNLOAD_AS_ZIP = "Pobierz jako plik zip"
|
||||||
LINK_SAVE_TO_OWNCLOUD = "Zapisz na ownCloud"
|
LINK_SAVE_TO_OWNCLOUD = "Zapisz w ownCloud"
|
||||||
LINK_SAVE_TO_DROPBOX = "Zapisz na Dropbox"
|
LINK_SAVE_TO_DROPBOX = "Zapisz w Dropbox-ie"
|
||||||
|
|
||||||
[READ_RECEIPT]
|
[READ_RECEIPT]
|
||||||
SUBJECT = "Potwierdzenie odbioru (wyświetlenia) - %SUBJECT%"
|
SUBJECT = "Potwierdzenie wyświetlenia wiadomości o tytule: %SUBJECT%"
|
||||||
BODY = "To jest potwierdzenie odbioru wiadomości wysłanej do: %READ-RECEIPT%.
|
BODY = "Potwierdzenie wyświetlenia wiadomości wysłanej na adres: %READ-RECEIPT%.
|
||||||
|
|
||||||
Uwaga: Potwierdzenie odbioru wiadomości przez odbiorcę informuję tylko o tym, że wiadomość została wyświetlona na komputerze odbiorcy.
|
Uwaga: Otrzymanie tego potwierdzenia jest dowodem na to, że wiadomość została wyświetlona na komputerze odbiorcy.
|
||||||
Nie ma żadnej gwarancji, że odbiorca odczytał wiadomość i zapoznał się z jej treścią."
|
Nie ma jednak żadnej gwarancji, że odbiorca faktycznie zapoznał się z jej treścią."
|
||||||
|
|
||||||
[SUGGESTIONS]
|
[SUGGESTIONS]
|
||||||
SEARCHING_DESC = "Wyszukiwanie..."
|
SEARCHING_DESC = "Wyszukiwanie..."
|
||||||
|
@ -174,20 +174,20 @@ BUTTON_IMPORT = "Importuj (csv, vcf, vCard)"
|
||||||
BUTTON_EXPORT_VCARD = "Eksportuj (vcf, vCard)"
|
BUTTON_EXPORT_VCARD = "Eksportuj (vcf, vCard)"
|
||||||
BUTTON_EXPORT_CSV = "Eksportuj (csv)"
|
BUTTON_EXPORT_CSV = "Eksportuj (csv)"
|
||||||
ERROR_IMPORT_FILE = "Błąd importu (nieprawidłowy format pliku)"
|
ERROR_IMPORT_FILE = "Błąd importu (nieprawidłowy format pliku)"
|
||||||
LIST_LOADING = "Ładowanie"
|
LIST_LOADING = "Ładowanie..."
|
||||||
EMPTY_LIST = "Brak kontaktów"
|
EMPTY_LIST = "Brak kontaktów"
|
||||||
EMPTY_SEARCH = "Nie znaleziono żadnych kontaktów"
|
EMPTY_SEARCH = "Nie znaleziono żadnych kontaktów"
|
||||||
CLEAR_SEARCH = "Wyczyść wyszukiwanie"
|
CLEAR_SEARCH = "Wyczyść wyniki"
|
||||||
CONTACT_VIEW_DESC = "Wybierz kontakt z listy w celu jego wyświetlenia"
|
CONTACT_VIEW_DESC = "Wybierz kontakt do wyświetlenia"
|
||||||
LABEL_DISPLAY_NAME = "Wyświetlana nazwa"
|
LABEL_DISPLAY_NAME = "Nazwa:"
|
||||||
LABEL_EMAIL = "E-mail"
|
LABEL_EMAIL = "Adres e-mail:"
|
||||||
LABEL_PHONE = "Telefon"
|
LABEL_PHONE = "Telefon:"
|
||||||
LABEL_WEB = "Strona WWW"
|
LABEL_WEB = "Strona WWW:"
|
||||||
LABEL_BIRTHDAY = "Urodziny"
|
LABEL_BIRTHDAY = "Urodziny:"
|
||||||
LINK_ADD_EMAIL = "Dodaj adres e-mail"
|
LINK_ADD_EMAIL = "Dodaj adres e-mail"
|
||||||
LINK_ADD_PHONE = "Dodaj nr telefonu"
|
LINK_ADD_PHONE = "Dodaj nr telefonu"
|
||||||
LINK_BIRTHDAY = "Urodziny"
|
LINK_BIRTHDAY = "Urodziny"
|
||||||
PLACEHOLDER_ENTER_DISPLAY_NAME = "Nazwa wyświetlana"
|
PLACEHOLDER_ENTER_DISPLAY_NAME = "Nazwa"
|
||||||
PLACEHOLDER_ENTER_LAST_NAME = "Nazwisko"
|
PLACEHOLDER_ENTER_LAST_NAME = "Nazwisko"
|
||||||
PLACEHOLDER_ENTER_FIRST_NAME = "Imię"
|
PLACEHOLDER_ENTER_FIRST_NAME = "Imię"
|
||||||
PLACEHOLDER_ENTER_NICK_NAME = "Pseudonim"
|
PLACEHOLDER_ENTER_NICK_NAME = "Pseudonim"
|
||||||
|
@ -196,9 +196,9 @@ LABEL_SHARE = "Udostępnij kontakt"
|
||||||
ADD_MENU_LABEL = "Dodaj"
|
ADD_MENU_LABEL = "Dodaj"
|
||||||
ADD_MENU_NICKNAME = "Pseudonim"
|
ADD_MENU_NICKNAME = "Pseudonim"
|
||||||
ADD_MENU_NOTES = "Notatki"
|
ADD_MENU_NOTES = "Notatki"
|
||||||
ADD_MENU_EMAIL = "E-mail"
|
ADD_MENU_EMAIL = "Adres e-mail"
|
||||||
ADD_MENU_PHONE = "Telefon"
|
ADD_MENU_PHONE = "Telefon"
|
||||||
ADD_MENU_URL = "Adres URL"
|
ADD_MENU_URL = "Adres www"
|
||||||
ADD_MENU_ADDRESS = "Adres"
|
ADD_MENU_ADDRESS = "Adres"
|
||||||
ADD_MENU_BIRTHDAY = "Urodziny"
|
ADD_MENU_BIRTHDAY = "Urodziny"
|
||||||
ADD_MENU_TAGS = "Tagi"
|
ADD_MENU_TAGS = "Tagi"
|
||||||
|
@ -209,9 +209,9 @@ BUTTON_SYNC = "Synchronizacja (CardDAV)"
|
||||||
[COMPOSE]
|
[COMPOSE]
|
||||||
TITLE_FROM = "Od"
|
TITLE_FROM = "Od"
|
||||||
TITLE_TO = "Do"
|
TITLE_TO = "Do"
|
||||||
TITLE_CC = "DW"
|
TITLE_CC = "Kopia"
|
||||||
TITLE_BCC = "UDW"
|
TITLE_BCC = "Ukr. kopia"
|
||||||
TITLE_REPLY_TO = "Odpowiedź do"
|
TITLE_REPLY_TO = "Zwrot"
|
||||||
TITLE_SUBJECT = "Temat"
|
TITLE_SUBJECT = "Temat"
|
||||||
LINK_SHOW_INPUTS = "Pokaż wszystkie pola"
|
LINK_SHOW_INPUTS = "Pokaż wszystkie pola"
|
||||||
BUTTON_SEND = "Wyślij"
|
BUTTON_SEND = "Wyślij"
|
||||||
|
@ -222,29 +222,29 @@ BUTTON_MINIMIZE = "Minimalizuj"
|
||||||
SAVED_TIME = "Zapisane: %TIME%"
|
SAVED_TIME = "Zapisane: %TIME%"
|
||||||
SAVED_ERROR_ON_SEND = "Wiadomość została wysłana, ale nie została zapisana w folderze: Wysłane"
|
SAVED_ERROR_ON_SEND = "Wiadomość została wysłana, ale nie została zapisana w folderze: Wysłane"
|
||||||
DISCARD_UNSAVED_DATA = "Odrzucić niezapisane dane?"
|
DISCARD_UNSAVED_DATA = "Odrzucić niezapisane dane?"
|
||||||
ATTACH_FILES = "Dołącz pliki"
|
ATTACH_FILES = "Dodaj załącznik"
|
||||||
ATTACH_DROP_FILES_DESC = "Przeciągnij pliki tutaj"
|
ATTACH_DROP_FILES_DESC = "Przeciągnij pliki tutaj"
|
||||||
ATTACH_ITEM_CANCEL = "Anuluj"
|
ATTACH_ITEM_CANCEL = "Anuluj"
|
||||||
DROPBOX = "Dropbox"
|
DROPBOX = "Dropbox"
|
||||||
GOOGLE_DRIVE = "Dysk Google"
|
GOOGLE_DRIVE = "Dysk Google"
|
||||||
REPLY_MESSAGE_TITLE = "%DATETIME% - %EMAIL%:"
|
REPLY_MESSAGE_TITLE = "%DATETIME% - %EMAIL%"
|
||||||
FORWARD_MESSAGE_TOP_TITLE = "-------- Przekierowana wiadomość -------"
|
FORWARD_MESSAGE_TOP_TITLE = "-------- Przekierowana wiadomość -------"
|
||||||
FORWARD_MESSAGE_TOP_FROM = "Od"
|
FORWARD_MESSAGE_TOP_FROM = "Od:"
|
||||||
FORWARD_MESSAGE_TOP_TO = "Do"
|
FORWARD_MESSAGE_TOP_TO = "Do:"
|
||||||
FORWARD_MESSAGE_TOP_CC = "DW"
|
FORWARD_MESSAGE_TOP_CC = "Kopia do:"
|
||||||
FORWARD_MESSAGE_TOP_SENT = "Wysłany"
|
FORWARD_MESSAGE_TOP_SENT = "Wysłany:"
|
||||||
FORWARD_MESSAGE_TOP_SUBJECT = "Temat"
|
FORWARD_MESSAGE_TOP_SUBJECT = "Temat:"
|
||||||
EMPTY_TO_ERROR_DESC = "Wprowadź co najmniej jednego odbiorcę"
|
EMPTY_TO_ERROR_DESC = "Wprowadź co najmniej jednego odbiorcę"
|
||||||
NO_ATTACHMENTS_HERE_DESC = "Brak załączników."
|
NO_ATTACHMENTS_HERE_DESC = "Brak załączników"
|
||||||
ATTACHMENTS_ERROR_DESC = "Ostrzeżenie! Nie wszystkie załaczniki zostały przesłane."
|
ATTACHMENTS_ERROR_DESC = "Ostrzeżenie! Nie wszystkie załaczniki zostały przesłane"
|
||||||
ATTACHMENTS_UPLOAD_ERROR_DESC = "Nie przesłano jeszcze wszystkich załączników"
|
ATTACHMENTS_UPLOAD_ERROR_DESC = "Nie przesłano jeszcze wszystkich załączników"
|
||||||
BUTTON_REQUEST_READ_RECEIPT = "Żądaj potwierdzenia odbioru"
|
BUTTON_REQUEST_READ_RECEIPT = "Potwierdzenie wyświetlenia wiadomości"
|
||||||
BUTTON_MARK_AS_IMPORTANT = "Oznacz jako ważną"
|
BUTTON_MARK_AS_IMPORTANT = "Oznacz jako ważną"
|
||||||
BUTTON_OPEN_PGP = "OpenPGP (Tylko zwykły tekst)"
|
BUTTON_OPEN_PGP = "OpenPGP (tylko wiadomości tekstowe)"
|
||||||
BUTTON_REQUEST_DSN = "Żądaj potwierdzenia dostarczenia"
|
BUTTON_REQUEST_DSN = "Potwierdzenie dostarczenia wiadomości"
|
||||||
|
|
||||||
[POPUPS_WELCOME_PAGE]
|
[POPUPS_WELCOME_PAGE]
|
||||||
BUTTON_CLOSE = "Close"
|
BUTTON_CLOSE = "Zamknij"
|
||||||
|
|
||||||
[POPUPS_ASK]
|
[POPUPS_ASK]
|
||||||
BUTTON_YES = "Tak"
|
BUTTON_YES = "Tak"
|
||||||
|
@ -258,7 +258,7 @@ TITLE_LANGUAGES = "Wybierz język"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "Dodawanie konta"
|
TITLE_ADD_ACCOUNT = "Dodawanie konta"
|
||||||
BUTTON_ADD_ACCOUNT = "Dodaj"
|
BUTTON_ADD_ACCOUNT = "Dodaj"
|
||||||
TITLE_UPDATE_ACCOUNT = "Zaktualizować konto?"
|
TITLE_UPDATE_ACCOUNT = "Aktualizacja konta"
|
||||||
BUTTON_UPDATE_ACCOUNT = "Aktualizuj"
|
BUTTON_UPDATE_ACCOUNT = "Aktualizuj"
|
||||||
|
|
||||||
[POPUPS_IDENTITY]
|
[POPUPS_IDENTITY]
|
||||||
|
@ -266,32 +266,32 @@ TITLE_ADD_IDENTITY = "Dodawanie tożsamości"
|
||||||
TITLE_UPDATE_IDENTITY = "Aktualizacja tożsamości"
|
TITLE_UPDATE_IDENTITY = "Aktualizacja tożsamości"
|
||||||
BUTTON_ADD_IDENTITY = "Dodaj"
|
BUTTON_ADD_IDENTITY = "Dodaj"
|
||||||
BUTTON_UPDATE_IDENTITY = "Aktualizuj"
|
BUTTON_UPDATE_IDENTITY = "Aktualizuj"
|
||||||
LABEL_EMAIL = "E-mail"
|
LABEL_EMAIL = "Adres e-mail:"
|
||||||
LABEL_NAME = "Nazwa"
|
LABEL_NAME = "Nazwa:"
|
||||||
LABEL_REPLY_TO = "Odpowiedz do"
|
LABEL_REPLY_TO = "Zwrot"
|
||||||
LABEL_SIGNATURE = "Podpis"
|
LABEL_SIGNATURE = "Podpis:"
|
||||||
LABEL_CC = "DW"
|
LABEL_CC = "Kopia"
|
||||||
LABEL_BCC = "Ukryci odbiorcy"
|
LABEL_BCC = "Ukr. kopia"
|
||||||
LABEL_SIGNATURE_INSERT_BEFORE = "Umieść podpis przed cytowanym tekstem w odpowiedziach"
|
LABEL_SIGNATURE_INSERT_BEFORE = "Umieść podpis przed cytowanym tekstem"
|
||||||
|
|
||||||
[POPUPS_CREATE_FOLDER]
|
[POPUPS_CREATE_FOLDER]
|
||||||
TITLE_CREATE_FOLDER = "Tworzenie folderu"
|
TITLE_CREATE_FOLDER = "Tworzenie folderu"
|
||||||
SELECT_NO_PARENT = ""
|
SELECT_NO_PARENT = ""
|
||||||
LABEL_NAME = "Nazwa folderu"
|
LABEL_NAME = "Nazwa folderu:"
|
||||||
LABEL_PARENT = "Folder nadrzędny"
|
LABEL_PARENT = "Folder nadrzędny:"
|
||||||
BUTTON_CREATE = "Utwórz"
|
BUTTON_CREATE = "Utwórz"
|
||||||
BUTTON_CANCEL = "Anuluj"
|
BUTTON_CANCEL = "Anuluj"
|
||||||
BUTTON_CLOSE = "Zamknij"
|
BUTTON_CLOSE = "Zamknij"
|
||||||
TITLE_CREATING_PROCESS = "Trwa dodawanie folderu"
|
TITLE_CREATING_PROCESS = "Tworzenie folderu"
|
||||||
|
|
||||||
[POPUPS_CLEAR_FOLDER]
|
[POPUPS_CLEAR_FOLDER]
|
||||||
TITLE_CLEAR_FOLDER = "Czy chcesz usunąć wszystkie wiadomości z folderu?"
|
TITLE_CLEAR_FOLDER = "Usuwanie wszystkich wiadomości z folderu"
|
||||||
BUTTON_CLEAR = "Usuń"
|
BUTTON_CLEAR = "Usuń wszystkie"
|
||||||
BUTTON_CANCEL = "Anuluj"
|
BUTTON_CANCEL = "Anuluj"
|
||||||
BUTTON_CLOSE = "Zamknij"
|
BUTTON_CLOSE = "Zamknij"
|
||||||
DANGER_DESC_WARNING = "Ostrzeżenie!"
|
DANGER_DESC_WARNING = "Ostrzeżenie!"
|
||||||
DANGER_DESC_HTML_1 = "Wszystkie wiadomości w folderze: <strong>%FOLDER%</strong>, zostaną bezpowrotnie usunięte!"
|
DANGER_DESC_HTML_1 = "Wszystkie wiadomości w folderze: <strong>%FOLDER%</strong>, zostaną bezpowrotnie usunięte!"
|
||||||
DANGER_DESC_HTML_2 = "Po rozpoczęciu, proces nie może zostać przerwany lub anulowany."
|
DANGER_DESC_HTML_2 = "Po rozpoczęciu, nie można przerwać lub anulować zadania."
|
||||||
TITLE_CLEARING_PROCESS = "Trwa usuwanie wszystkich wiadomości z folderu..."
|
TITLE_CLEARING_PROCESS = "Trwa usuwanie wszystkich wiadomości z folderu..."
|
||||||
|
|
||||||
[POPUPS_IMPORT_OPEN_PGP_KEY]
|
[POPUPS_IMPORT_OPEN_PGP_KEY]
|
||||||
|
@ -305,112 +305,112 @@ BUTTON_CLOSE = "Zamknij"
|
||||||
|
|
||||||
[POPUPS_GENERATE_OPEN_PGP_KEYS]
|
[POPUPS_GENERATE_OPEN_PGP_KEYS]
|
||||||
TITLE_GENERATE_OPEN_PGP_KEYS = "Generowanie klucza OpenPGP"
|
TITLE_GENERATE_OPEN_PGP_KEYS = "Generowanie klucza OpenPGP"
|
||||||
LABEL_EMAIL = "E-mail"
|
LABEL_EMAIL = "Adres e-mail:"
|
||||||
LABEL_NAME = "Imię i nazwisko"
|
LABEL_NAME = "Imię i nazwisko:"
|
||||||
LABEL_PASSWORD = "Hasło"
|
LABEL_PASSWORD = "Hasło:"
|
||||||
LABEL_KEY_BIT_LENGTH = "Długość klucza"
|
LABEL_KEY_BIT_LENGTH = "Długość klucza:"
|
||||||
BUTTON_GENERATE_OPEN_PGP_KEYS = "Generuj"
|
BUTTON_GENERATE_OPEN_PGP_KEYS = "Generuj"
|
||||||
|
|
||||||
[POPUPS_COMPOSE_OPEN_PGP]
|
[POPUPS_COMPOSE_OPEN_PGP]
|
||||||
TITLE_COMPOSE_OPEN_PGP = "Podpisz/Zaszyfruj"
|
TITLE_COMPOSE_OPEN_PGP = "Podpisywanie/szyfrowanie"
|
||||||
LABEL_SIGN = "Podpisz"
|
LABEL_SIGN = "Podpisz"
|
||||||
LABEL_ENCRYPT = "Zaszyfruj"
|
LABEL_ENCRYPT = "Szyfruj"
|
||||||
LABEL_PASSWORD = "Hasło"
|
LABEL_PASSWORD = "Hasło:"
|
||||||
BUTTON_SIGN = "Podpisz"
|
BUTTON_SIGN = "Podpisz"
|
||||||
BUTTON_ENCRYPT = "Zaszyfruj"
|
BUTTON_ENCRYPT = "Szyfruj"
|
||||||
BUTTON_SIGN_AND_ENCRYPT = "Podpisz i zaszyfruj"
|
BUTTON_SIGN_AND_ENCRYPT = "Podpisz i szyfruj"
|
||||||
|
|
||||||
[POPUPS_TWO_FACTOR_TEST]
|
[POPUPS_TWO_FACTOR_TEST]
|
||||||
TITLE_TEST_CODE = "Test weryfikacji 2-stopniowej"
|
TITLE_TEST_CODE = "Test autoryzacji dwuskładnikowej"
|
||||||
LABEL_CODE = "Kod"
|
LABEL_CODE = "Kod"
|
||||||
BUTTON_TEST = "Testuj"
|
BUTTON_TEST = "Testuj"
|
||||||
|
|
||||||
[POPUPS_FILTER]
|
[POPUPS_FILTER]
|
||||||
TITLE_CREATE_FILTER = "Utwórz filtr?"
|
TITLE_CREATE_FILTER = "Tworzenie filtra"
|
||||||
TITLE_EDIT_FILTER = "Zaktualizuj filtr?"
|
TITLE_EDIT_FILTER = "Aktualizacja filtra"
|
||||||
FILTER_NAME = "Nazwa"
|
FILTER_NAME = "Nazwa"
|
||||||
LEGEND_CONDITIONS = "Warunki"
|
LEGEND_CONDITIONS = "Warunki"
|
||||||
LEGEND_ACTIONS = "Akcje"
|
LEGEND_ACTIONS = "Działania"
|
||||||
BUTTON_DONE = "Gotowe"
|
BUTTON_DONE = "Gotowe"
|
||||||
BUTTON_ADD_CONDITION = "Dodaj warunek"
|
BUTTON_ADD_CONDITION = "Dodaj warunek"
|
||||||
SELECT_ACTION_NONE = "Brak"
|
SELECT_ACTION_NONE = "Brak"
|
||||||
SELECT_ACTION_MOVE_TO = "Przenieś do"
|
SELECT_ACTION_MOVE_TO = "Przenieś"
|
||||||
SELECT_ACTION_FORWARD_TO = "Przekaż do"
|
SELECT_ACTION_FORWARD_TO = "Prześlij dalej"
|
||||||
SELECT_ACTION_REJECT = "Odrzuć"
|
SELECT_ACTION_REJECT = "Odrzuć"
|
||||||
SELECT_ACTION_VACATION_MESSAGE = "Wiadomość o nieobecności"
|
SELECT_ACTION_VACATION_MESSAGE = "Wiadomość urlopowa"
|
||||||
SELECT_ACTION_DISCARD = "Usuń"
|
SELECT_ACTION_DISCARD = "Usuń"
|
||||||
SELECT_FIELD_FROM = "Od"
|
SELECT_FIELD_FROM = "Pole 'Od'"
|
||||||
SELECT_FIELD_RECIPIENTS = "Odbiorcy (Do lub DW)"
|
SELECT_FIELD_RECIPIENTS = "Pole 'Kopia' lub 'Ukr. kopia'"
|
||||||
SELECT_FIELD_SUBJECT = "Temat"
|
SELECT_FIELD_SUBJECT = "Pole 'Temat'"
|
||||||
SELECT_FIELD_HEADER = "Nagłówek"
|
SELECT_FIELD_HEADER = "Nagłówek"
|
||||||
SELECT_FIELD_SIZE = "Rozmiar"
|
SELECT_FIELD_SIZE = "Rozmiar"
|
||||||
SELECT_TYPE_CONTAINS = "Zawiera"
|
SELECT_TYPE_CONTAINS = "zawiera"
|
||||||
SELECT_TYPE_NOT_CONTAINS = "Nie zawiera"
|
SELECT_TYPE_NOT_CONTAINS = "nie zawiera"
|
||||||
SELECT_TYPE_MATCHES = "Pasuje (wspierane * oraz ?)"
|
SELECT_TYPE_MATCHES = "zawiera (*,?)"
|
||||||
SELECT_TYPE_NOT_MATCHES = "Nie pasuje (wspierane * oraz ?)"
|
SELECT_TYPE_NOT_MATCHES = "nie zawiera (*,?)"
|
||||||
SELECT_TYPE_REGEXP = "Regexp"
|
SELECT_TYPE_REGEXP = "Wyrażenie regularne:"
|
||||||
SELECT_TYPE_NOT_REGEXP = "Nie Regexp"
|
SELECT_TYPE_NOT_REGEXP = "Niepoprawne wyrażenie regularne:"
|
||||||
SELECT_TYPE_EQUAL_TO = "To"
|
SELECT_TYPE_EQUAL_TO = "Zawiera:"
|
||||||
SELECT_TYPE_NOT_EQUAL_TO = "To nie"
|
SELECT_TYPE_NOT_EQUAL_TO = "Nie zawiera:"
|
||||||
SELECT_TYPE_OVER = "Większy"
|
SELECT_TYPE_OVER = "powyżej"
|
||||||
SELECT_TYPE_UNDER = "Mniejszy"
|
SELECT_TYPE_UNDER = "poniżej"
|
||||||
SELECT_MATCH_ANY = "Spełnia dowolny z warunków"
|
SELECT_MATCH_ANY = "Spełnia dowolny z warunków"
|
||||||
SELECT_MATCH_ALL = "Spełnia wszystkie warunki"
|
SELECT_MATCH_ALL = "Spełnia wszystkie warunki"
|
||||||
MARK_AS_READ_LABEL = "Oznacz jako przeczytane"
|
MARK_AS_READ_LABEL = "Oznacz jako przeczytane"
|
||||||
REPLY_INTERVAL_LABEL = "Odpowiedź po (dni)"
|
REPLY_INTERVAL_LABEL = "Liczba dni, po których wysłać odp."
|
||||||
KEEP_LABEL = "Zachowaj"
|
KEEP_LABEL = "Zachowaj"
|
||||||
STOP_LABEL = "Nie zatrzymuj wykonywania reguł"
|
STOP_LABEL = "Nie zatrzymuj przetwarzania reguł"
|
||||||
EMAIL_LABEL = "Email"
|
EMAIL_LABEL = "Adres e-mail"
|
||||||
VACATION_SUBJECT_LABEL = "Temat (opcjonalnie)"
|
VACATION_SUBJECT_LABEL = "Temat (opcjonalnie)"
|
||||||
VACATION_MESSAGE_LABEL = "Wiadomość"
|
VACATION_MESSAGE_LABEL = "Wiadomość"
|
||||||
REJECT_MESSAGE_LABEL = "Odrzuć wiadomość"
|
REJECT_MESSAGE_LABEL = "Powód odrzucenia"
|
||||||
ALL_INCOMING_MESSAGES_DESC = "Wszystkie przychodzące wiadomości"
|
ALL_INCOMING_MESSAGES_DESC = "Wszystkie przychodzące wiadomości"
|
||||||
|
|
||||||
[POPUPS_SYSTEM_FOLDERS]
|
[POPUPS_SYSTEM_FOLDERS]
|
||||||
TITLE_SYSTEM_FOLDERS = "Wybierz foldery systemowe"
|
TITLE_SYSTEM_FOLDERS = "Wybieranie folderów systemowych"
|
||||||
SELECT_CHOOSE_ONE = "Wybierz"
|
SELECT_CHOOSE_ONE = "wybierz"
|
||||||
SELECT_UNUSE_NAME = "Nie używaj"
|
SELECT_UNUSE_NAME = "nie używaj"
|
||||||
LABEL_SENT = "Wysłane"
|
LABEL_SENT = "Wysłane:"
|
||||||
LABEL_DRAFTS = "Wersje robocze"
|
LABEL_DRAFTS = "Wersje robocze:"
|
||||||
LABEL_SPAM = "Spam"
|
LABEL_SPAM = "Niechciane:"
|
||||||
LABEL_TRASH = "Kosz"
|
LABEL_TRASH = "Kosz:"
|
||||||
LABEL_ARCHIVE = "Archiwum"
|
LABEL_ARCHIVE = "Archiwum:"
|
||||||
BUTTON_CANCEL = "Anuluj"
|
BUTTON_CANCEL = "Anuluj"
|
||||||
BUTTON_CLOSE = "Zamknij"
|
BUTTON_CLOSE = "Zamknij"
|
||||||
NOTIFICATION_SENT = "Nie został wybrany folder \"Wysłane\", do którego przenoszone są wiadomości po wysłaniu.
|
NOTIFICATION_SENT = "Nie wybrano folderu: \"Wysłane\", do którego przenoszone są wysłane wiadomości.
|
||||||
Jeżeli wysłane wiadomości nie mają być przechowywane, proszę o zaznaczenie opcji: \"Nie używaj\"."
|
Jeżeli wysyłane wiadomości nie mają być przechowywane, proszę zaznaczyć opcję: \"Nie używaj\"."
|
||||||
NOTIFICATION_DRAFTS = "Nie został wybrany folder \"Wersje robocze\", do którego są zapisywane wiadomości w trakcie ich tworzenia."
|
NOTIFICATION_DRAFTS = "Nie wybrano folderu: \"Wersje robocze\", do którego są zapisywane wiadomości w trakcie ich tworzenia."
|
||||||
NOTIFICATION_SPAM = "Nie został wybrany folder \"Spam\", do którego przenoszone są wiadomości oznaczone jako SPAM.
|
NOTIFICATION_SPAM = "Nie wybrano folderu: \"Niechciane\", do którego przenoszone są niepożadane wiadomości.
|
||||||
Jeżeli wiadomości oznaczone jako spam mają być usuwane na stałe, proszę o zaznaczenie opcji: \"Nie używaj\"."
|
Jeżeli niechciane wiadomości mają być usuwane na stałe, proszę o zaznaczenie opcji: \"Nie używaj\"."
|
||||||
NOTIFICATION_TRASH = "Nie został wybrany folder \"Kosz\", do którego przenoszone są wszystkie usunięte wiadomości.
|
NOTIFICATION_TRASH = "Nie wybrano folderu: \"Kosz\", do którego przenoszone są wszystkie usunięte wiadomości.
|
||||||
Jeżeli wiadomości usunięte mają być usuwane na stałe, proszę o zaznaczenie opcji: \"Nie używaj\"."
|
Jeżeli wiadomości mają być usuwane na stałe, proszę o zaznaczenie opcji: \"Nie używaj\"."
|
||||||
NOTIFICATION_ARCHIVE = "Nie został wybrany folder \"Archiwum\", zostanie użyty systemowy folder archiwizowanych wiadomości."
|
NOTIFICATION_ARCHIVE = "Nie został wybrany folder \"Archiwum\", zostanie użyty systemowy folder archiwizacji wiadomości."
|
||||||
|
|
||||||
[POPUPS_TWO_FACTOR_CFG]
|
[POPUPS_TWO_FACTOR_CFG]
|
||||||
LEGEND_TWO_FACTOR_AUTH = "Weryfikacja 2-stopniowa"
|
LEGEND_TWO_FACTOR_AUTH = "Dwuskładnikowa autoryzacja"
|
||||||
LABEL_ENABLE_TWO_FACTOR = "Włącz 2-stopniową weryfikację"
|
LABEL_ENABLE_TWO_FACTOR = "Włącz dwuskładnikową autoryzację"
|
||||||
LABEL_TWO_FACTOR_USER = "Użytkownik"
|
LABEL_TWO_FACTOR_USER = "Użytkownik:"
|
||||||
LABEL_TWO_FACTOR_STATUS = "Status"
|
LABEL_TWO_FACTOR_STATUS = "Status:"
|
||||||
LABEL_TWO_FACTOR_SECRET = "Tajna fraza"
|
LABEL_TWO_FACTOR_SECRET = "Tajna fraza:"
|
||||||
LABEL_TWO_FACTOR_BACKUP_CODES = "Kody zapasowe"
|
LABEL_TWO_FACTOR_BACKUP_CODES = "Kody zapasowe:"
|
||||||
BUTTON_CREATE = "Utwórz nową frazę"
|
BUTTON_CREATE = "Utwórz nową frazę"
|
||||||
BUTTON_ACTIVATE = "Activate"
|
BUTTON_ACTIVATE = "Aktywuj"
|
||||||
BUTTON_CLEAR = "Wyczyść"
|
BUTTON_CLEAR = "Wyczyść"
|
||||||
BUTTON_LOGOUT = "Logout"
|
BUTTON_LOGOUT = "Wyloguj"
|
||||||
BUTTON_DONE = "Done"
|
BUTTON_DONE = "Zamknij"
|
||||||
BUTTON_TEST = "Testuj"
|
BUTTON_TEST = "Testuj"
|
||||||
LINK_TEST = "test"
|
LINK_TEST = "Test"
|
||||||
BUTTON_SHOW_SECRET = "Pokaż frazę"
|
BUTTON_SHOW_SECRET = "Pokaż frazę"
|
||||||
BUTTON_HIDE_SECRET = "Ukryj frazę"
|
BUTTON_HIDE_SECRET = "Ukryj frazę"
|
||||||
TWO_FACTOR_REQUIRE_DESC = "Your account requires 2-Step verification configuration."
|
TWO_FACTOR_REQUIRE_DESC = "Twoje konto wymaga skonfigurowania dwuskładnikowej autoryzacji ."
|
||||||
TWO_FACTOR_SECRET_CONFIGURED_DESC = "Skonfigurowane"
|
TWO_FACTOR_SECRET_CONFIGURED_DESC = "Skonfigurowana"
|
||||||
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Nie skonfigurowane"
|
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Nie skonfigurowana"
|
||||||
TWO_FACTOR_SECRET_DESC = "Zaimportuj te informacje do swojego klienta usługi Google Authenticator (lub innego klienta TOTP), używając poniższego kodu QR lub wpisując kod ręcznie."
|
TWO_FACTOR_SECRET_DESC = "Użyj tych informacji w usłudze Google Authenticator (lub innym kliencie TOTP), używając poniższego kodu QR lub wpisując kod ręcznie."
|
||||||
TWO_FACTOR_BACKUP_CODES_DESC = "Jeżeli nie możesz otrzymać kodu poprzez apikację Google Authenticator, możesz użyć kodów zapasowych. Po zużyciu kodów, opcja ta będzie nieaktywna."
|
TWO_FACTOR_BACKUP_CODES_DESC = "Jeżeli nie możesz otrzymać kodu poprzez usługę Google Authenticator, możesz użyć kodów zapasowych. Po zużyciu kodów, opcja ta będzie nieaktywna."
|
||||||
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "Nie możesz zmienić tego ustawienia przed jego przetestowaniem."
|
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "Nie możesz zmienić tego ustawienia przed jego przetestowaniem."
|
||||||
|
|
||||||
[TITLES]
|
[TITLES]
|
||||||
LOADING = "Ładowanie"
|
LOADING = "Ładowanie..."
|
||||||
LOGIN = "Login"
|
LOGIN = "Login"
|
||||||
MAILBOX = "Skrzynka Pocztowa"
|
MAILBOX = "Skrzynka Pocztowa"
|
||||||
SETTINGS = "Ustawienia"
|
SETTINGS = "Ustawienia"
|
||||||
|
@ -442,7 +442,7 @@ LABEL_FILTERS_NAME = "Filtry"
|
||||||
LABEL_TEMPLATES_NAME = "Szablony"
|
LABEL_TEMPLATES_NAME = "Szablony"
|
||||||
LABEL_SECURITY_NAME = "Bezpieczeństwo"
|
LABEL_SECURITY_NAME = "Bezpieczeństwo"
|
||||||
LABEL_SOCIAL_NAME = "Sieci społecznościowe"
|
LABEL_SOCIAL_NAME = "Sieci społecznościowe"
|
||||||
LABEL_THEMES_NAME = "Skórki"
|
LABEL_THEMES_NAME = "Motywy"
|
||||||
LABEL_CHANGE_PASSWORD_NAME = "Hasło"
|
LABEL_CHANGE_PASSWORD_NAME = "Hasło"
|
||||||
LABEL_OPEN_PGP_NAME = "OpenPGP"
|
LABEL_OPEN_PGP_NAME = "OpenPGP"
|
||||||
BUTTON_BACK = "Wstecz"
|
BUTTON_BACK = "Wstecz"
|
||||||
|
@ -453,56 +453,56 @@ BUTTON_SAVE = "Zapisz"
|
||||||
BUTTON_ADD_FILTER = "Dodaj filtr"
|
BUTTON_ADD_FILTER = "Dodaj filtr"
|
||||||
BUTTON_DELETE = "Usuń"
|
BUTTON_DELETE = "Usuń"
|
||||||
BUTTON_RAW_SCRIPT = "Utwórz własny skrypt użytkownika"
|
BUTTON_RAW_SCRIPT = "Utwórz własny skrypt użytkownika"
|
||||||
SUBNAME_NONE = "None"
|
SUBNAME_NONE = "Brak"
|
||||||
SUBNAME_MOVE_TO = "Przenieś do \"%FOLDER%\""
|
SUBNAME_MOVE_TO = "Przenieś do \"%FOLDER%\""
|
||||||
SUBNAME_FORWARD_TO = "Przekaż do \"%EMAIL%\""
|
SUBNAME_FORWARD_TO = "Przekaż do \"%EMAIL%\""
|
||||||
SUBNAME_REJECT = "Odrzuć"
|
SUBNAME_REJECT = "Odrzuć"
|
||||||
SUBNAME_VACATION_MESSAGE = "Wiadomość o nieobecności"
|
SUBNAME_VACATION_MESSAGE = "Wiadomość urlopowa"
|
||||||
SUBNAME_DISCARD = "Usuń"
|
SUBNAME_DISCARD = "Usuń"
|
||||||
CAPABILITY_LABEL = "Możliwości"
|
CAPABILITY_LABEL = "Możliwości"
|
||||||
LOADING_PROCESS = "Aktualizowanie listy filtrów"
|
LOADING_PROCESS = "Aktualizowanie listy filtrów"
|
||||||
DELETING_ASK = "Czy jesteś pewny(a)?"
|
DELETING_ASK = "Czy jesteś pewny(a)?"
|
||||||
CHACHES_NEED_TO_BE_SAVED_DESC = "Zmiany muszą zostać zapisane na serwerze."
|
CHACHES_NEED_TO_BE_SAVED_DESC = "Zmiany te muszą zostać zapisane na serwerze."
|
||||||
|
|
||||||
[SETTINGS_IDENTITY]
|
[SETTINGS_IDENTITY]
|
||||||
LEGEND_IDENTITY = "Tożsamość"
|
LEGEND_IDENTITY = "Tożsamość"
|
||||||
LABEL_DISPLAY_NAME = "Imię i nazwisko"
|
LABEL_DISPLAY_NAME = "Imię i nazwisko"
|
||||||
LABEL_REPLY_TO = "Zwrotny adres e-mail"
|
LABEL_REPLY_TO = "Zwrot do"
|
||||||
LABEL_SIGNATURE = "Podpis"
|
LABEL_SIGNATURE = "Podpis"
|
||||||
LABEL_ADD_SIGNATURE_TO_ALL = "Dadawaj podpis do wszystkich wysyłanych wiadomości"
|
LABEL_ADD_SIGNATURE_TO_ALL = "Dadawaj podpis do wszystkich wiadomości"
|
||||||
|
|
||||||
[SETTINGS_SECURITY]
|
[SETTINGS_SECURITY]
|
||||||
LEGEND_SECURITY = "Bezpieczeństwo"
|
LEGEND_SECURITY = "Bezpieczeństwo"
|
||||||
LABEL_CONFIGURATE_TWO_FACTOR = "Configurate 2-Step verification"
|
LABEL_CONFIGURATE_TWO_FACTOR = "Konfiguracja dwuskładnikowej autoryzacji"
|
||||||
LABEL_AUTOLOGOUT = "Automatyczne wylogowanie"
|
LABEL_AUTOLOGOUT = "Auto. wylogowanie:"
|
||||||
AUTOLOGIN_NEVER_OPTION_NAME = "Nidgy"
|
AUTOLOGIN_NEVER_OPTION_NAME = "Nidgy"
|
||||||
AUTOLOGIN_MINUTES_OPTION_NAME = "%MINUTES% minut"
|
AUTOLOGIN_MINUTES_OPTION_NAME = "%MINUTES% minut"
|
||||||
|
|
||||||
[SETTINGS_GENERAL]
|
[SETTINGS_GENERAL]
|
||||||
LEGEND_GENERAL = "Ogólne"
|
LEGEND_GENERAL = "Ogólne"
|
||||||
LABEL_LANGUAGE = "Język"
|
LABEL_LANGUAGE = "Język:"
|
||||||
LABEL_IDENTITY = "Tożsamość"
|
LABEL_IDENTITY = "Tożsamość:"
|
||||||
LABEL_LAYOUT = "Układ"
|
LABEL_LAYOUT = "Układ:"
|
||||||
LABEL_LAYOUT_NO_SPLIT = "Bez podziału"
|
LABEL_LAYOUT_NO_SPLIT = "bez podziału"
|
||||||
LABEL_LAYOUT_VERTICAL_SPLIT = "Podział w pionie"
|
LABEL_LAYOUT_VERTICAL_SPLIT = "podział w pionie"
|
||||||
LABEL_LAYOUT_HORIZONTAL_SPLIT = "Poział w poziomie"
|
LABEL_LAYOUT_HORIZONTAL_SPLIT = "podział w poziomie"
|
||||||
LABEL_EDITOR = "Format wiadomości"
|
LABEL_EDITOR = "Format wiadomości:"
|
||||||
LABEL_EDITOR_HTML = "HTML"
|
LABEL_EDITOR_HTML = "HTML"
|
||||||
LABEL_EDITOR_PLAIN = "Zwykły tekst"
|
LABEL_EDITOR_PLAIN = "zwykły tekst"
|
||||||
LABEL_EDITOR_HTML_FORCED = "HTML (wymuszony)"
|
LABEL_EDITOR_HTML_FORCED = "HTML (wymuszony)"
|
||||||
LABEL_EDITOR_PLAIN_FORCED = "Zwykły tekst (wymuszony)"
|
LABEL_EDITOR_PLAIN_FORCED = "zwykły tekst (wymuszony)"
|
||||||
LABEL_ANIMATION = "Animacja interfejsu"
|
LABEL_ANIMATION = "Animacja interfejsu"
|
||||||
LABEL_ANIMATION_FULL = "Pełna"
|
LABEL_ANIMATION_FULL = "pełna"
|
||||||
LABEL_ANIMATION_NORMAL = "Zwykła"
|
LABEL_ANIMATION_NORMAL = "zwykła"
|
||||||
LABEL_ANIMATION_NONE = "Brak"
|
LABEL_ANIMATION_NONE = "brak"
|
||||||
LABEL_VIEW_OPTIONS = "Opcje wyświetlania"
|
LABEL_VIEW_OPTIONS = "Opcje wyświetlania"
|
||||||
LABEL_USE_PREVIEW_PANE = "Wyświetl okno podglądu"
|
LABEL_USE_PREVIEW_PANE = "Wyświetl okno podglądu"
|
||||||
LABEL_USE_CHECKBOXES_IN_LIST = "Wyświetl pola zaznaczenia w listach"
|
LABEL_USE_CHECKBOXES_IN_LIST = "Wyświetl pola zaznaczenia w listach"
|
||||||
LABEL_USE_THREADS = "Używaj wątków"
|
LABEL_USE_THREADS = "Używaj wątków"
|
||||||
LABEL_REPLY_SAME_FOLDER = "Umieść odpowiedź w folderze wiadomości, na którą udzielana jest odpowiedź"
|
LABEL_REPLY_SAME_FOLDER = "Umieść odpowiedzi w folderach, z których pochodzą wiadomości"
|
||||||
LABEL_SHOW_IMAGES = "Zawsze wyświetlaj obrazy w wiadomościach"
|
LABEL_SHOW_IMAGES = "Zawsze wyświetlaj obrazy w wiadomościach"
|
||||||
LABEL_SHOW_ANIMATION = "Odtwarzaj animacje"
|
LABEL_SHOW_ANIMATION = "Użyj animacji"
|
||||||
LABEL_MESSAGE_PER_PAGE = "Wiadomości na stronie"
|
LABEL_MESSAGE_PER_PAGE = "Wiad. na stronie:"
|
||||||
LABEL_NOTIFICATIONS = "Powiadomienia"
|
LABEL_NOTIFICATIONS = "Powiadomienia"
|
||||||
LABEL_SOUND_NOTIFICATION = "Powiadomienia dźwiękowe"
|
LABEL_SOUND_NOTIFICATION = "Powiadomienia dźwiękowe"
|
||||||
LABEL_CHROME_NOTIFICATION_DESC = "Wyświetlaj powiadomienia o nowych wiadomościach"
|
LABEL_CHROME_NOTIFICATION_DESC = "Wyświetlaj powiadomienia o nowych wiadomościach"
|
||||||
|
@ -513,14 +513,14 @@ LEGEND_CONTACTS = "Kontakty"
|
||||||
LABEL_CONTACTS_AUTOSAVE = "Automatycznie dodaj nieznanych nadawców i odbiorców do książki adresowej"
|
LABEL_CONTACTS_AUTOSAVE = "Automatycznie dodaj nieznanych nadawców i odbiorców do książki adresowej"
|
||||||
LEGEND_CONTACTS_SYNC = "Zdalna synchronizacja (CardDAV)"
|
LEGEND_CONTACTS_SYNC = "Zdalna synchronizacja (CardDAV)"
|
||||||
LABEL_CONTACTS_SYNC_ENABLE = "Włącz zdalną synchronizację"
|
LABEL_CONTACTS_SYNC_ENABLE = "Włącz zdalną synchronizację"
|
||||||
LABEL_CONTACTS_SYNC_SERVER = "Serwer"
|
LABEL_CONTACTS_SYNC_SERVER = "Serwer:"
|
||||||
LABEL_CONTACTS_SYNC_AB_URL = "Adres URL"
|
LABEL_CONTACTS_SYNC_AB_URL = "Adres URL:"
|
||||||
LABEL_CONTACTS_SYNC_USER = "Użytkownik"
|
LABEL_CONTACTS_SYNC_USER = "Użytkownik:"
|
||||||
LABEL_CONTACTS_SYNC_PASSWORD = "Hasło"
|
LABEL_CONTACTS_SYNC_PASSWORD = "Hasło:"
|
||||||
|
|
||||||
[SETTINGS_THEMES]
|
[SETTINGS_THEMES]
|
||||||
LEGEND_THEMES = "Skórki"
|
LEGEND_THEMES = "Motyw"
|
||||||
LEGEND_THEMES_CUSTOM = "Konfiguracja indywidualnego wyglądu"
|
LEGEND_THEMES_CUSTOM = "Własny motyw"
|
||||||
LABEL_CUSTOM_TYPE = "Typ"
|
LABEL_CUSTOM_TYPE = "Typ"
|
||||||
LABEL_CUSTOM_TYPE_LIGHT = "Jasny"
|
LABEL_CUSTOM_TYPE_LIGHT = "Jasny"
|
||||||
LABEL_CUSTOM_TYPE_DARK = "Ciemny"
|
LABEL_CUSTOM_TYPE_DARK = "Ciemny"
|
||||||
|
@ -534,15 +534,15 @@ ERROR_UNKNOWN = "Wystąpił nieznany błąd w trakcie przesyłania"
|
||||||
LEGEND_GOOGLE = "Konto Google"
|
LEGEND_GOOGLE = "Konto Google"
|
||||||
BUTTON_GOOGLE_CONNECT = "Połącz z Google"
|
BUTTON_GOOGLE_CONNECT = "Połącz z Google"
|
||||||
BUTTON_GOOGLE_DISCONNECT = "Odłącz"
|
BUTTON_GOOGLE_DISCONNECT = "Odłącz"
|
||||||
MAIN_GOOGLE_DESC = "Po zezwoleniu na logowanie przez Google, możesz zalogować się na to konto używając przycisku: \"Google\" w panelu logowania."
|
MAIN_GOOGLE_DESC = "Po zezwoleniu na logowanie przez: Google, możesz zalogować się na to konto używając przycisku: \"Google\" w panelu logowania."
|
||||||
LEGEND_FACEBOOK = "Facebook"
|
LEGEND_FACEBOOK = "Facebook"
|
||||||
BUTTON_FACEBOOK_CONNECT = "Połącz z Facebook"
|
BUTTON_FACEBOOK_CONNECT = "Połącz z Facebook"
|
||||||
BUTTON_FACEBOOK_DISCONNECT = "Odłącz"
|
BUTTON_FACEBOOK_DISCONNECT = "Odłącz"
|
||||||
MAIN_FACEBOOK_DESC = "Po zezwoleniu na logowanie przez Facebook, możesz zalogować się na to konto używając przycisku: \"Facebook\" w panelu logowania."
|
MAIN_FACEBOOK_DESC = "Po zezwoleniu na logowanie przez: Facebook, możesz zalogować się na to konto używając przycisku: \"Facebook\" w panelu logowania."
|
||||||
LEGEND_TWITTER = "Twitter"
|
LEGEND_TWITTER = "Twitter"
|
||||||
BUTTON_TWITTER_CONNECT = "Połącz z Twitter"
|
BUTTON_TWITTER_CONNECT = "Połącz z Twitter"
|
||||||
BUTTON_TWITTER_DISCONNECT = "Odłącz"
|
BUTTON_TWITTER_DISCONNECT = "Odłącz"
|
||||||
MAIN_TWITTER_DESC = "Po zezwoleniu na logowanie przez Twitter, możesz zalogować się na to konto używając przycisku: \"Twitter\" w panelu logowania."
|
MAIN_TWITTER_DESC = "Po zezwoleniu na logowanie przez: Twitter, możesz zalogować się na to konto używając przycisku: \"Twitter\" w panelu logowania."
|
||||||
|
|
||||||
[SETTINGS_FOLDERS]
|
[SETTINGS_FOLDERS]
|
||||||
LEGEND_FOLDERS = "Lista Folderów"
|
LEGEND_FOLDERS = "Lista Folderów"
|
||||||
|
@ -551,7 +551,7 @@ BUTTON_SYSTEM = "Wybierz foldery systemowe"
|
||||||
BUTTON_DELETE = "Usuń"
|
BUTTON_DELETE = "Usuń"
|
||||||
BUTTON_SUBSCRIBE = "Subskrybuj"
|
BUTTON_SUBSCRIBE = "Subskrybuj"
|
||||||
BUTTON_UNSUBSCRIBE = "Zrezygnuj z subskrypcji"
|
BUTTON_UNSUBSCRIBE = "Zrezygnuj z subskrypcji"
|
||||||
LOADING_PROCESS = "Trwa aktualizacja listy folderów"
|
LOADING_PROCESS = "Aktualizacja listy folderów"
|
||||||
CREATING_PROCESS = "Tworzenie folderu"
|
CREATING_PROCESS = "Tworzenie folderu"
|
||||||
DELETING_PROCESS = "Usuwanie folderu"
|
DELETING_PROCESS = "Usuwanie folderu"
|
||||||
RENAMING_PROCESS = "Zmiana nazwy folderu"
|
RENAMING_PROCESS = "Zmiana nazwy folderu"
|
||||||
|
@ -563,7 +563,7 @@ HELP_SHOW_HIDE_FOLDER = "Pokaż/ukryj folder"
|
||||||
HELP_CHECK_FOR_NEW_MESSAGES = "Sprawdzaj/nie sprawdzaj nowych wiadomości"
|
HELP_CHECK_FOR_NEW_MESSAGES = "Sprawdzaj/nie sprawdzaj nowych wiadomości"
|
||||||
|
|
||||||
[SETTINGS_ACCOUNTS]
|
[SETTINGS_ACCOUNTS]
|
||||||
LEGEND_ACCOUNTS = "Lista kont"
|
LEGEND_ACCOUNTS = "Konta"
|
||||||
LEGEND_IDENTITIES = "Tożsamości"
|
LEGEND_IDENTITIES = "Tożsamości"
|
||||||
LEGEND_ACCOUNTS_AND_IDENTITIES = "Konta i tożsamości"
|
LEGEND_ACCOUNTS_AND_IDENTITIES = "Konta i tożsamości"
|
||||||
BUTTON_ADD_ACCOUNT = "Dodaj konto"
|
BUTTON_ADD_ACCOUNT = "Dodaj konto"
|
||||||
|
@ -577,9 +577,9 @@ DEFAULT_IDENTITY_LABEL = "domyślna"
|
||||||
LEGEND_IDENTITY = "Tożsamość"
|
LEGEND_IDENTITY = "Tożsamość"
|
||||||
LEGEND_IDENTITIES = "Dodatkowe tożsamości"
|
LEGEND_IDENTITIES = "Dodatkowe tożsamości"
|
||||||
LABEL_DEFAULT = "Domyślna"
|
LABEL_DEFAULT = "Domyślna"
|
||||||
LABEL_DISPLAY_NAME = "Nazwa"
|
LABEL_DISPLAY_NAME = "Nazwa:"
|
||||||
LABEL_REPLY_TO = "Odpowiedź do"
|
LABEL_REPLY_TO = "Odpowiedź do:"
|
||||||
LABEL_SIGNATURE = "Podpis"
|
LABEL_SIGNATURE = "Podpis:"
|
||||||
LABEL_ADD_SIGNATURE_TO_ALL = "Dodaj podpis do wszystkich wysyłanych wiadomości"
|
LABEL_ADD_SIGNATURE_TO_ALL = "Dodaj podpis do wszystkich wysyłanych wiadomości"
|
||||||
BUTTON_ADD_IDENTITY = "Dodaj tożsamość"
|
BUTTON_ADD_IDENTITY = "Dodaj tożsamość"
|
||||||
BUTTON_DELETE = "Usuń"
|
BUTTON_DELETE = "Usuń"
|
||||||
|
@ -588,9 +588,9 @@ DELETING_ASK = "Czy na pewno chcesz usunąć?"
|
||||||
|
|
||||||
[SETTINGS_CHANGE_PASSWORD]
|
[SETTINGS_CHANGE_PASSWORD]
|
||||||
LEGEND_CHANGE_PASSWORD = "Zmiana hasła"
|
LEGEND_CHANGE_PASSWORD = "Zmiana hasła"
|
||||||
LABEL_CURRENT_PASSWORD = "Aktualne hasło"
|
LABEL_CURRENT_PASSWORD = "Aktualne hasło:"
|
||||||
LABEL_NEW_PASSWORD = "Nowe hasło"
|
LABEL_NEW_PASSWORD = "Nowe hasło:"
|
||||||
LABEL_REPEAT_PASSWORD = "Powtórz nowe hasło"
|
LABEL_REPEAT_PASSWORD = "Powtórz nowe hasło:"
|
||||||
BUTTON_UPDATE_PASSWORD = "Zmień hasło na nowe"
|
BUTTON_UPDATE_PASSWORD = "Zmień hasło na nowe"
|
||||||
ERROR_PASSWORD_MISMATCH = "Wpisane hasła nie pasują do siebie, proszę spróbować ponownie"
|
ERROR_PASSWORD_MISMATCH = "Wpisane hasła nie pasują do siebie, proszę spróbować ponownie"
|
||||||
|
|
||||||
|
@ -643,13 +643,13 @@ LABEL_SEND_MESSAGE = "Wyślij wiadomość"
|
||||||
LABEL_CLOSE_COMPOSE = "Zamknij okno tworzenia wiadomości"
|
LABEL_CLOSE_COMPOSE = "Zamknij okno tworzenia wiadomości"
|
||||||
|
|
||||||
[PGP_NOTIFICATIONS]
|
[PGP_NOTIFICATIONS]
|
||||||
NO_PUBLIC_KEYS_FOUND = "Nie znaleziono kluczy publicznych"
|
NO_PUBLIC_KEYS_FOUND = "Nie znaleziono klucza publicznego"
|
||||||
NO_PUBLIC_KEYS_FOUND_FOR = "Nie znaleziono kluczy publicznych dla adresu: \"%EMAIL%\""
|
NO_PUBLIC_KEYS_FOUND_FOR = "Nie znaleziono klucza publicznego dla adresu: \"%EMAIL%\""
|
||||||
NO_PRIVATE_KEY_FOUND = "Nie znaleziono kluczy prywatnych"
|
NO_PRIVATE_KEY_FOUND = "Nie znaleziono klucza prywatnego"
|
||||||
NO_PRIVATE_KEY_FOUND_FOR = "Nie znaleziono kluczy prywatnych dla adresu: \"%EMAIL%\""
|
NO_PRIVATE_KEY_FOUND_FOR = "Nie znaleziono klucza prywatnego dla adresu: \"%EMAIL%\""
|
||||||
UNVERIFIRED_SIGNATURE = "Niezweryfikowana sygnatura"
|
UNVERIFIRED_SIGNATURE = "Niezweryfikowana"
|
||||||
DECRYPTION_ERROR = "Błąd deszyfrowania OpenPGP"
|
DECRYPTION_ERROR = "Błąd deszyfrowania OpenPGP"
|
||||||
GOOD_SIGNATURE = "Wiadomość podpisana przez: %USER%"
|
GOOD_SIGNATURE = "Podpisana przez: %USER%"
|
||||||
PGP_ERROR = "Błąd OpenPGP: %ERROR%"
|
PGP_ERROR = "Błąd OpenPGP: %ERROR%"
|
||||||
SPECIFY_FROM_EMAIL = "Proszę podać adres e-mail w polu: OD"
|
SPECIFY_FROM_EMAIL = "Proszę podać adres e-mail w polu: OD"
|
||||||
SPECIFY_AT_LEAST_ONE_RECIPIENT = "Proszę podać przynajmniej jednego odbiorcę"
|
SPECIFY_AT_LEAST_ONE_RECIPIENT = "Proszę podać przynajmniej jednego odbiorcę"
|
||||||
|
@ -665,8 +665,8 @@ SOCIAL_TWITTER_LOGIN_ACCESS_DISABLE = "To społecznościowe ID (Twitter), nie je
|
||||||
SOCIAL_GOOGLE_LOGIN_ACCESS_DISABLE = "To społecznościowe ID (Konto Google), nie jest powiązane z żadnym kontem pocztowym. Zaloguj się używając danych swojego konta e-mail i skonfiguruj tę opcję w: Ustawienia > Sieci społecznościowe"
|
SOCIAL_GOOGLE_LOGIN_ACCESS_DISABLE = "To społecznościowe ID (Konto Google), nie jest powiązane z żadnym kontem pocztowym. Zaloguj się używając danych swojego konta e-mail i skonfiguruj tę opcję w: Ustawienia > Sieci społecznościowe"
|
||||||
DOMAIN_NOT_ALLOWED = "Domena niedozwolona"
|
DOMAIN_NOT_ALLOWED = "Domena niedozwolona"
|
||||||
ACCOUNT_NOT_ALLOWED = "Konto nie jest dozwolone"
|
ACCOUNT_NOT_ALLOWED = "Konto nie jest dozwolone"
|
||||||
ACCOUNT_TWO_FACTOR_AUTH_REQUIRED = "Wymagana 2-stopniowa weryfikacja"
|
ACCOUNT_TWO_FACTOR_AUTH_REQUIRED = "Wymagana dwuskładnikowa autoryzacja"
|
||||||
ACCOUNT_TWO_FACTOR_AUTH_ERROR = "Błąd 2-stopniowej weryfikacji"
|
ACCOUNT_TWO_FACTOR_AUTH_ERROR = "Błąd dwuskładnikowej autoryzacji"
|
||||||
COULD_NOT_SAVE_NEW_PASSWORD = "Nie można było zapisać nowego hasła"
|
COULD_NOT_SAVE_NEW_PASSWORD = "Nie można było zapisać nowego hasła"
|
||||||
CURRENT_PASSWORD_INCORRECT = "Obecne hasło jest niepoprawne"
|
CURRENT_PASSWORD_INCORRECT = "Obecne hasło jest niepoprawne"
|
||||||
NEW_PASSWORD_SHORT = "Hasło jest za krótkie"
|
NEW_PASSWORD_SHORT = "Hasło jest za krótkie"
|
||||||
|
|
8
vendors/openpgp/openpgp-0.9.0.min.js
vendored
8
vendors/openpgp/openpgp-0.9.0.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -12,6 +12,7 @@ module.exports = {
|
||||||
publicPath: 'rainloop/v/0.0.0/static/js/',
|
publicPath: 'rainloop/v/0.0.0/static/js/',
|
||||||
chunkFilename: '[chunkhash].subapp.js'
|
chunkFilename: '[chunkhash].subapp.js'
|
||||||
},
|
},
|
||||||
|
// devtool: "#source-map",
|
||||||
plugins: [
|
plugins: [
|
||||||
// new webpack.optimize.CommonsChunkPlugin('common.js'),
|
// new webpack.optimize.CommonsChunkPlugin('common.js'),
|
||||||
new webpack.optimize.OccurenceOrderPlugin()
|
new webpack.optimize.OccurenceOrderPlugin()
|
||||||
|
|
Loading…
Reference in a new issue