Add disambiguation info to source strings

This commit is contained in:
Janek Bevendorff 2018-01-20 13:47:30 +01:00
parent 3605bec8e0
commit 8da3efa2c2
18 changed files with 86 additions and 64 deletions

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>456</width> <width>523</width>
<height>385</height> <height>456</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -130,7 +130,7 @@
<item> <item>
<widget class="QCheckBox" name="showNotification"> <widget class="QCheckBox" name="showNotification">
<property name="text"> <property name="text">
<string>Show a &amp;notification when credentials are requested</string> <string extracomment="Credentials mean login data requested via browser extension">Show a &amp;notification when credentials are requested</string>
</property> </property>
<property name="checked"> <property name="checked">
<bool>true</bool> <bool>true</bool>
@ -170,14 +170,14 @@
<item> <item>
<widget class="QRadioButton" name="sortByTitle"> <widget class="QRadioButton" name="sortByTitle">
<property name="text"> <property name="text">
<string>Sort &amp;matching credentials by title</string> <string extracomment="Credentials mean login data requested via browser extension">Sort &amp;matching credentials by title</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QRadioButton" name="sortByUsername"> <widget class="QRadioButton" name="sortByUsername">
<property name="text"> <property name="text">
<string>Sort matching credentials by &amp;username</string> <string extracomment="Credentials mean login data requested via browser extension">Sort matching credentials by &amp;username</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -260,14 +260,14 @@
<item> <item>
<widget class="QCheckBox" name="alwaysAllowAccess"> <widget class="QCheckBox" name="alwaysAllowAccess">
<property name="text"> <property name="text">
<string>Never &amp;ask before accessing credentials</string> <string extracomment="Credentials mean login data requested via browser extension">Never &amp;ask before accessing credentials</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="alwaysAllowUpdate"> <widget class="QCheckBox" name="alwaysAllowUpdate">
<property name="text"> <property name="text">
<string>Never ask before &amp;updating credentials</string> <string extracomment="Credentials mean login data requested via browser extension">Never ask before &amp;updating credentials</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -277,7 +277,7 @@
<string>Only the selected database has to be connected with a client.</string> <string>Only the selected database has to be connected with a client.</string>
</property> </property>
<property name="text"> <property name="text">
<string>Searc&amp;h in all opened databases for matching credentials</string> <string extracomment="Credentials mean login data requested via browser extension">Searc&amp;h in all opened databases for matching credentials</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -317,7 +317,7 @@
<string>Use a custom proxy location if you installed a proxy manually.</string> <string>Use a custom proxy location if you installed a proxy manually.</string>
</property> </property>
<property name="text"> <property name="text">
<string>Use a &amp;custom proxy location</string> <string comment="Meant is the proxy for KeePassXC-Browser">Use a &amp;custom proxy location</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -336,7 +336,7 @@
<item> <item>
<widget class="QPushButton" name="customProxyLocationBrowseButton"> <widget class="QPushButton" name="customProxyLocationBrowseButton">
<property name="text"> <property name="text">
<string>Browse...</string> <string extracomment="Button for opening file dialog">Browse...</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -53,7 +53,7 @@ int Clip::execute(QStringList arguments)
QObject::tr("Key file of the database."), QObject::tr("Key file of the database."),
QObject::tr("path")); QObject::tr("path"));
parser.addOption(keyFile); parser.addOption(keyFile);
parser.addPositionalArgument("entry", QObject::tr("Path of the entry to clip.")); parser.addPositionalArgument("entry", QObject::tr("Path of the entry to clip.", "clip = copy to clipboard"));
parser.addPositionalArgument( parser.addPositionalArgument(
"timeout", QObject::tr("Timeout in seconds before clearing the clipboard."), QString("[timeout]")); "timeout", QObject::tr("Timeout in seconds before clearing the clipboard."), QString("[timeout]"));
parser.process(arguments); parser.process(arguments);

View File

@ -671,7 +671,7 @@ Entry* Entry::clone(CloneFlags flags) const
} }
if (flags & CloneRenameTitle) if (flags & CloneRenameTitle)
entry->setTitle(entry->title() + tr(" - Clone")); entry->setTitle(entry->title() + tr(" - Clone", "Suffix added to cloned entries"));
return entry; return entry;
} }

View File

@ -298,6 +298,7 @@ QVariantMap Kdbx4Reader::readVariantMap(QIODevice* device)
& KeePass2::VARIANTMAP_CRITICAL_MASK; & KeePass2::VARIANTMAP_CRITICAL_MASK;
quint16 maxVersion = KeePass2::VARIANTMAP_VERSION & KeePass2::VARIANTMAP_CRITICAL_MASK; quint16 maxVersion = KeePass2::VARIANTMAP_VERSION & KeePass2::VARIANTMAP_CRITICAL_MASK;
if (!ok || (version > maxVersion)) { if (!ok || (version > maxVersion)) {
//: Translation: variant map = data structure for storing meta data
raiseError(tr("Unsupported KeePass variant map version.")); raiseError(tr("Unsupported KeePass variant map version."));
return {}; return {};
} }
@ -310,6 +311,7 @@ QVariantMap Kdbx4Reader::readVariantMap(QIODevice* device)
!= KeePass2::VariantMapFieldType::End)) { != KeePass2::VariantMapFieldType::End)) {
auto nameLen = Endian::readSizedInt<quint32>(device, KeePass2::BYTEORDER, &ok); auto nameLen = Endian::readSizedInt<quint32>(device, KeePass2::BYTEORDER, &ok);
if (!ok) { if (!ok) {
//: Translation: variant map = data structure for storing meta data
raiseError(tr("Invalid variant map entry name length")); raiseError(tr("Invalid variant map entry name length"));
return {}; return {};
} }
@ -317,6 +319,7 @@ QVariantMap Kdbx4Reader::readVariantMap(QIODevice* device)
if (nameLen != 0) { if (nameLen != 0) {
nameBytes = device->read(nameLen); nameBytes = device->read(nameLen);
if (static_cast<quint32>(nameBytes.size()) != nameLen) { if (static_cast<quint32>(nameBytes.size()) != nameLen) {
//: Translation: variant map = data structure for storing meta data
raiseError(tr("Invalid variant map entry name data")); raiseError(tr("Invalid variant map entry name data"));
return {}; return {};
} }
@ -325,6 +328,7 @@ QVariantMap Kdbx4Reader::readVariantMap(QIODevice* device)
auto valueLen = Endian::readSizedInt<quint32>(device, KeePass2::BYTEORDER, &ok); auto valueLen = Endian::readSizedInt<quint32>(device, KeePass2::BYTEORDER, &ok);
if (!ok) { if (!ok) {
//: Translation: variant map = data structure for storing meta data
raiseError(tr("Invalid variant map entry value length")); raiseError(tr("Invalid variant map entry value length"));
return {}; return {};
} }
@ -332,6 +336,7 @@ QVariantMap Kdbx4Reader::readVariantMap(QIODevice* device)
if (valueLen != 0) { if (valueLen != 0) {
valueBytes = device->read(valueLen); valueBytes = device->read(valueLen);
if (static_cast<quint32>(valueBytes.size()) != valueLen) { if (static_cast<quint32>(valueBytes.size()) != valueLen) {
//: Translation comment: variant map = data structure for storing meta data
raiseError(tr("Invalid variant map entry value data")); raiseError(tr("Invalid variant map entry value data"));
return {}; return {};
} }
@ -342,6 +347,7 @@ QVariantMap Kdbx4Reader::readVariantMap(QIODevice* device)
if (valueLen == 1) { if (valueLen == 1) {
vm.insert(name, QVariant(valueBytes.at(0) != 0)); vm.insert(name, QVariant(valueBytes.at(0) != 0));
} else { } else {
//: Translation: variant map = data structure for storing meta data
raiseError(tr("Invalid variant map Bool entry value length")); raiseError(tr("Invalid variant map Bool entry value length"));
return {}; return {};
} }
@ -351,6 +357,7 @@ QVariantMap Kdbx4Reader::readVariantMap(QIODevice* device)
if (valueLen == 4) { if (valueLen == 4) {
vm.insert(name, QVariant(Endian::bytesToSizedInt<qint32>(valueBytes, KeePass2::BYTEORDER))); vm.insert(name, QVariant(Endian::bytesToSizedInt<qint32>(valueBytes, KeePass2::BYTEORDER)));
} else { } else {
//: Translation: variant map = data structure for storing meta data
raiseError(tr("Invalid variant map Int32 entry value length")); raiseError(tr("Invalid variant map Int32 entry value length"));
return {}; return {};
} }
@ -360,6 +367,7 @@ QVariantMap Kdbx4Reader::readVariantMap(QIODevice* device)
if (valueLen == 4) { if (valueLen == 4) {
vm.insert(name, QVariant(Endian::bytesToSizedInt<quint32>(valueBytes, KeePass2::BYTEORDER))); vm.insert(name, QVariant(Endian::bytesToSizedInt<quint32>(valueBytes, KeePass2::BYTEORDER)));
} else { } else {
//: Translation: variant map = data structure for storing meta data
raiseError(tr("Invalid variant map UInt32 entry value length")); raiseError(tr("Invalid variant map UInt32 entry value length"));
return {}; return {};
} }
@ -369,6 +377,7 @@ QVariantMap Kdbx4Reader::readVariantMap(QIODevice* device)
if (valueLen == 8) { if (valueLen == 8) {
vm.insert(name, QVariant(Endian::bytesToSizedInt<qint64>(valueBytes, KeePass2::BYTEORDER))); vm.insert(name, QVariant(Endian::bytesToSizedInt<qint64>(valueBytes, KeePass2::BYTEORDER)));
} else { } else {
//: Translation: variant map = data structure for storing meta data
raiseError(tr("Invalid variant map Int64 entry value length")); raiseError(tr("Invalid variant map Int64 entry value length"));
return {}; return {};
} }
@ -378,6 +387,7 @@ QVariantMap Kdbx4Reader::readVariantMap(QIODevice* device)
if (valueLen == 8) { if (valueLen == 8) {
vm.insert(name, QVariant(Endian::bytesToSizedInt<quint64>(valueBytes, KeePass2::BYTEORDER))); vm.insert(name, QVariant(Endian::bytesToSizedInt<quint64>(valueBytes, KeePass2::BYTEORDER)));
} else { } else {
//: Translation: variant map = data structure for storing meta data
raiseError(tr("Invalid variant map UInt64 entry value length")); raiseError(tr("Invalid variant map UInt64 entry value length"));
return {}; return {};
} }
@ -392,12 +402,14 @@ QVariantMap Kdbx4Reader::readVariantMap(QIODevice* device)
break; break;
default: default:
//: Translation: variant map = data structure for storing meta data
raiseError(tr("Invalid variant map entry type")); raiseError(tr("Invalid variant map entry type"));
return {}; return {};
} }
} }
if (fieldTypeArray.size() != 1) { if (fieldTypeArray.size() != 1) {
//: Translation: variant map = data structure for storing meta data
raiseError(tr("Invalid variant map field type size")); raiseError(tr("Invalid variant map field type size"));
return {}; return {};
} }

View File

@ -41,7 +41,7 @@ bool Kdbx4Writer::writeDatabase(QIODevice* device, Database* db)
} }
int ivSize = SymmetricCipher::algorithmIvSize(algo); int ivSize = SymmetricCipher::algorithmIvSize(algo);
if (ivSize < 0) { if (ivSize < 0) {
raiseError(tr("Invalid symmetric cipher IV size.")); raiseError(tr("Invalid symmetric cipher IV size.", "IV = Initialization Vector for symmetric cipher"));
return false; return false;
} }
@ -82,6 +82,7 @@ bool Kdbx4Writer::writeDatabase(QIODevice* device, Database* db)
QVariantMap kdfParams = KeePass2::kdfToParameters(db->kdf()); QVariantMap kdfParams = KeePass2::kdfToParameters(db->kdf());
QByteArray kdfParamBytes; QByteArray kdfParamBytes;
if (!serializeVariantMap(kdfParams, kdfParamBytes)) { if (!serializeVariantMap(kdfParams, kdfParamBytes)) {
//: Translation comment: variant map = data structure for storing meta data
raiseError(tr("Failed to serialize KDF parameters variant map")); raiseError(tr("Failed to serialize KDF parameters variant map"));
return false; return false;
} }

View File

@ -1120,6 +1120,7 @@ QByteArray KdbxXmlReader::readCompressedBinary()
QByteArray result; QByteArray result;
if (!Tools::readAllFromDevice(&compressor, result)) { if (!Tools::readAllFromDevice(&compressor, result)) {
//: Translator meant is a binary data inside an entry
raiseError(tr("Unable to decompress binary")); raiseError(tr("Unable to decompress binary"));
} }
return result; return result;

View File

@ -126,37 +126,37 @@ Database* KeePass1Reader::readDatabase(QIODevice* device, const QString& passwor
m_encryptionIV = m_device->read(16); m_encryptionIV = m_device->read(16);
if (m_encryptionIV.size() != 16) { if (m_encryptionIV.size() != 16) {
raiseError("Unable to read encryption IV"); raiseError(tr("Unable to read encryption IV", "IV = Initialization Vector for symmetric cipher"));
return nullptr; return nullptr;
} }
auto numGroups = Endian::readSizedInt<quint32>(m_device, KeePass1::BYTEORDER, &ok); auto numGroups = Endian::readSizedInt<quint32>(m_device, KeePass1::BYTEORDER, &ok);
if (!ok) { if (!ok) {
raiseError("Invalid number of groups"); raiseError(tr("Invalid number of groups"));
return nullptr; return nullptr;
} }
auto numEntries = Endian::readSizedInt<quint32>(m_device, KeePass1::BYTEORDER, &ok); auto numEntries = Endian::readSizedInt<quint32>(m_device, KeePass1::BYTEORDER, &ok);
if (!ok) { if (!ok) {
raiseError("Invalid number of entries"); raiseError(tr("Invalid number of entries"));
return nullptr; return nullptr;
} }
m_contentHashHeader = m_device->read(32); m_contentHashHeader = m_device->read(32);
if (m_contentHashHeader.size() != 32) { if (m_contentHashHeader.size() != 32) {
raiseError("Invalid content hash size"); raiseError(tr("Invalid content hash size"));
return nullptr; return nullptr;
} }
m_transformSeed = m_device->read(32); m_transformSeed = m_device->read(32);
if (m_transformSeed.size() != 32) { if (m_transformSeed.size() != 32) {
raiseError("Invalid transform seed size"); raiseError(tr("Invalid transform seed size"));
return nullptr; return nullptr;
} }
m_transformRounds = Endian::readSizedInt<quint32>(m_device, KeePass1::BYTEORDER, &ok); m_transformRounds = Endian::readSizedInt<quint32>(m_device, KeePass1::BYTEORDER, &ok);
if (!ok) { if (!ok) {
raiseError("Invalid number of transform rounds"); raiseError(tr("Invalid number of transform rounds"));
return nullptr; return nullptr;
} }
auto kdf = QSharedPointer<AesKdf>::create(true); auto kdf = QSharedPointer<AesKdf>::create(true);
@ -191,7 +191,7 @@ Database* KeePass1Reader::readDatabase(QIODevice* device, const QString& passwor
} }
if (!constructGroupTree(groups)) { if (!constructGroupTree(groups)) {
raiseError("Unable to construct group tree"); raiseError(tr("Unable to construct group tree"));
return nullptr; return nullptr;
} }
@ -401,7 +401,7 @@ QByteArray KeePass1Reader::key(const QByteArray& password, const QByteArray& key
bool result = key.transform(*m_db->kdf(), transformedKey); bool result = key.transform(*m_db->kdf(), transformedKey);
if (!result) { if (!result) {
raiseError("Key transformation failed"); raiseError(tr("Key transformation failed"));
return QByteArray(); return QByteArray();
} }
@ -445,19 +445,19 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream)
do { do {
quint16 fieldType = Endian::readSizedInt<quint16>(cipherStream, KeePass1::BYTEORDER, &ok); quint16 fieldType = Endian::readSizedInt<quint16>(cipherStream, KeePass1::BYTEORDER, &ok);
if (!ok) { if (!ok) {
raiseError("Invalid group field type number"); raiseError(tr("Invalid group field type number"));
return nullptr; return nullptr;
} }
int fieldSize = static_cast<int>(Endian::readSizedInt<quint32>(cipherStream, KeePass1::BYTEORDER, &ok)); int fieldSize = static_cast<int>(Endian::readSizedInt<quint32>(cipherStream, KeePass1::BYTEORDER, &ok));
if (!ok) { if (!ok) {
raiseError("Invalid group field size"); raiseError(tr("Invalid group field size"));
return nullptr; return nullptr;
} }
QByteArray fieldData = cipherStream->read(fieldSize); QByteArray fieldData = cipherStream->read(fieldSize);
if (fieldData.size() != fieldSize) { if (fieldData.size() != fieldSize) {
raiseError("Read group field data doesn't match size"); raiseError(tr("Read group field data doesn't match size"));
return nullptr; return nullptr;
} }
@ -467,7 +467,7 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream)
break; break;
case 0x0001: case 0x0001:
if (fieldSize != 4) { if (fieldSize != 4) {
raiseError("Incorrect group id field size"); raiseError(tr("Incorrect group id field size"));
return nullptr; return nullptr;
} }
groupId = Endian::bytesToSizedInt<quint32>(fieldData, KeePass1::BYTEORDER); groupId = Endian::bytesToSizedInt<quint32>(fieldData, KeePass1::BYTEORDER);
@ -479,7 +479,7 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream)
case 0x0003: case 0x0003:
{ {
if (fieldSize != 5) { if (fieldSize != 5) {
raiseError("Incorrect group creation time field size"); raiseError(tr("Incorrect group creation time field size"));
return nullptr; return nullptr;
} }
QDateTime dateTime = dateFromPackedStruct(fieldData); QDateTime dateTime = dateFromPackedStruct(fieldData);
@ -491,7 +491,7 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream)
case 0x0004: case 0x0004:
{ {
if (fieldSize != 5) { if (fieldSize != 5) {
raiseError("Incorrect group modification time field size"); raiseError(tr("Incorrect group modification time field size"));
return nullptr; return nullptr;
} }
QDateTime dateTime = dateFromPackedStruct(fieldData); QDateTime dateTime = dateFromPackedStruct(fieldData);
@ -503,7 +503,7 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream)
case 0x0005: case 0x0005:
{ {
if (fieldSize != 5) { if (fieldSize != 5) {
raiseError("Incorrect group access time field size"); raiseError(tr("Incorrect group access time field size"));
} }
QDateTime dateTime = dateFromPackedStruct(fieldData); QDateTime dateTime = dateFromPackedStruct(fieldData);
if (dateTime.isValid()) { if (dateTime.isValid()) {
@ -514,7 +514,7 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream)
case 0x0006: case 0x0006:
{ {
if (fieldSize != 5) { if (fieldSize != 5) {
raiseError("Incorrect group expiry time field size"); raiseError(tr("Incorrect group expiry time field size"));
} }
QDateTime dateTime = dateFromPackedStruct(fieldData); QDateTime dateTime = dateFromPackedStruct(fieldData);
if (dateTime.isValid()) { if (dateTime.isValid()) {
@ -526,7 +526,7 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream)
case 0x0007: case 0x0007:
{ {
if (fieldSize != 4) { if (fieldSize != 4) {
raiseError("Incorrect group icon field size"); raiseError(tr("Incorrect group icon field size"));
return nullptr; return nullptr;
} }
quint32 iconNumber = Endian::bytesToSizedInt<quint32>(fieldData, KeePass1::BYTEORDER); quint32 iconNumber = Endian::bytesToSizedInt<quint32>(fieldData, KeePass1::BYTEORDER);
@ -536,7 +536,7 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream)
case 0x0008: case 0x0008:
{ {
if (fieldSize != 2) { if (fieldSize != 2) {
raiseError("Incorrect group level field size"); raiseError(tr("Incorrect group level field size"));
return nullptr; return nullptr;
} }
groupLevel = Endian::bytesToSizedInt<quint16>(fieldData, KeePass1::BYTEORDER); groupLevel = Endian::bytesToSizedInt<quint16>(fieldData, KeePass1::BYTEORDER);
@ -551,13 +551,13 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream)
break; break;
default: default:
// invalid field // invalid field
raiseError("Invalid group field type"); raiseError(tr("Invalid group field type"));
return nullptr; return nullptr;
} }
} while (!reachedEnd); } while (!reachedEnd);
if (!groupIdSet || !groupLevelSet) { if (!groupIdSet || !groupLevelSet) {
raiseError("Missing group id or level"); raiseError(tr("Missing group id or level"));
return nullptr; return nullptr;
} }
@ -583,19 +583,19 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream)
do { do {
quint16 fieldType = Endian::readSizedInt<quint16>(cipherStream, KeePass1::BYTEORDER, &ok); quint16 fieldType = Endian::readSizedInt<quint16>(cipherStream, KeePass1::BYTEORDER, &ok);
if (!ok) { if (!ok) {
raiseError("Missing entry field type number"); raiseError(tr("Missing entry field type number"));
return nullptr; return nullptr;
} }
int fieldSize = static_cast<int>(Endian::readSizedInt<quint32>(cipherStream, KeePass1::BYTEORDER, &ok)); int fieldSize = static_cast<int>(Endian::readSizedInt<quint32>(cipherStream, KeePass1::BYTEORDER, &ok));
if (!ok) { if (!ok) {
raiseError("Invalid entry field size"); raiseError(tr("Invalid entry field size"));
return nullptr; return nullptr;
} }
QByteArray fieldData = cipherStream->read(fieldSize); QByteArray fieldData = cipherStream->read(fieldSize);
if (fieldData.size() != fieldSize) { if (fieldData.size() != fieldSize) {
raiseError("Read entry field data doesn't match size"); raiseError(tr("Read entry field data doesn't match size"));
return nullptr; return nullptr;
} }
@ -605,7 +605,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream)
break; break;
case 0x0001: case 0x0001:
if (fieldSize != 16) { if (fieldSize != 16) {
raiseError("Invalid entry uuid field size"); raiseError(tr("Invalid entry uuid field size"));
return nullptr; return nullptr;
} }
m_entryUuids.insert(fieldData, entry.data()); m_entryUuids.insert(fieldData, entry.data());
@ -613,7 +613,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream)
case 0x0002: case 0x0002:
{ {
if (fieldSize != 4) { if (fieldSize != 4) {
raiseError("Invalid entry group id field size"); raiseError(tr("Invalid entry group id field size"));
return nullptr; return nullptr;
} }
quint32 groupId = Endian::bytesToSizedInt<quint32>(fieldData, KeePass1::BYTEORDER); quint32 groupId = Endian::bytesToSizedInt<quint32>(fieldData, KeePass1::BYTEORDER);
@ -623,7 +623,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream)
case 0x0003: case 0x0003:
{ {
if (fieldSize != 4) { if (fieldSize != 4) {
raiseError("Invalid entry icon field size"); raiseError(tr("Invalid entry icon field size"));
return nullptr; return nullptr;
} }
quint32 iconNumber = Endian::bytesToSizedInt<quint32>(fieldData, KeePass1::BYTEORDER); quint32 iconNumber = Endian::bytesToSizedInt<quint32>(fieldData, KeePass1::BYTEORDER);
@ -648,7 +648,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream)
case 0x0009: case 0x0009:
{ {
if (fieldSize != 5) { if (fieldSize != 5) {
raiseError("Invalid entry creation time field size"); raiseError(tr("Invalid entry creation time field size"));
return nullptr; return nullptr;
} }
QDateTime dateTime = dateFromPackedStruct(fieldData); QDateTime dateTime = dateFromPackedStruct(fieldData);
@ -660,7 +660,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream)
case 0x000A: case 0x000A:
{ {
if (fieldSize != 5) { if (fieldSize != 5) {
raiseError("Invalid entry modification time field size"); raiseError(tr("Invalid entry modification time field size"));
return nullptr; return nullptr;
} }
QDateTime dateTime = dateFromPackedStruct(fieldData); QDateTime dateTime = dateFromPackedStruct(fieldData);
@ -672,7 +672,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream)
case 0x000B: case 0x000B:
{ {
if (fieldSize != 5) { if (fieldSize != 5) {
raiseError("Invalid entry creation time field size"); raiseError(tr("Invalid entry creation time field size"));
return nullptr; return nullptr;
} }
QDateTime dateTime = dateFromPackedStruct(fieldData); QDateTime dateTime = dateFromPackedStruct(fieldData);
@ -684,7 +684,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream)
case 0x000C: case 0x000C:
{ {
if (fieldSize != 5) { if (fieldSize != 5) {
raiseError("Invalid entry expiry time field size"); raiseError(tr("Invalid entry expiry time field size"));
return nullptr; return nullptr;
} }
QDateTime dateTime = dateFromPackedStruct(fieldData); QDateTime dateTime = dateFromPackedStruct(fieldData);
@ -707,7 +707,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream)
break; break;
default: default:
// invalid field // invalid field
raiseError("Invalid entry field type"); raiseError(tr("Invalid entry field type"));
return nullptr; return nullptr;
} }
} while (!reachedEnd); } while (!reachedEnd);

View File

@ -142,7 +142,7 @@ void DatabaseSettingsWidget::save()
if (kdf->uuid() == KeePass2::KDF_ARGON2 && m_uiEncryption->transformRoundsSpinBox->value() > 10000) { if (kdf->uuid() == KeePass2::KDF_ARGON2 && m_uiEncryption->transformRoundsSpinBox->value() > 10000) {
QMessageBox warning; QMessageBox warning;
warning.setIcon(QMessageBox::Warning); warning.setIcon(QMessageBox::Warning);
warning.setWindowTitle(tr("Number of rounds too high")); warning.setWindowTitle(tr("Number of rounds too high", "Key transformation rounds"));
warning.setText(tr("You are using a very high number of key transform rounds with Argon2.\n\n" warning.setText(tr("You are using a very high number of key transform rounds with Argon2.\n\n"
"If you keep this number, your database may take hours or days (or even longer) to open!")); "If you keep this number, your database may take hours or days (or even longer) to open!"));
auto ok = warning.addButton(tr("Understood, keep number"), QMessageBox::ButtonRole::AcceptRole); auto ok = warning.addButton(tr("Understood, keep number"), QMessageBox::ButtonRole::AcceptRole);
@ -156,7 +156,7 @@ void DatabaseSettingsWidget::save()
&& m_uiEncryption->transformRoundsSpinBox->value() < 100000) { && m_uiEncryption->transformRoundsSpinBox->value() < 100000) {
QMessageBox warning; QMessageBox warning;
warning.setIcon(QMessageBox::Warning); warning.setIcon(QMessageBox::Warning);
warning.setWindowTitle(tr("Number of rounds too low")); warning.setWindowTitle(tr("Number of rounds too low", "Key transformation rounds"));
warning.setText(tr("You are using a very low number of key transform rounds with AES-KDF.\n\n" warning.setText(tr("You are using a very low number of key transform rounds with AES-KDF.\n\n"
"If you keep this number, your database may be too easy to crack!")); "If you keep this number, your database may be too easy to crack!"));
auto ok = warning.addButton(tr("Understood, keep number"), QMessageBox::ButtonRole::AcceptRole); auto ok = warning.addButton(tr("Understood, keep number"), QMessageBox::ButtonRole::AcceptRole);

View File

@ -85,7 +85,7 @@ void DatabaseTabWidget::newDatabase()
{ {
DatabaseManagerStruct dbStruct; DatabaseManagerStruct dbStruct;
Database* db = new Database(); Database* db = new Database();
db->rootGroup()->setName(tr("Root")); db->rootGroup()->setName(tr("Root", "Root group"));
dbStruct.dbWidget = new DatabaseWidget(db, this); dbStruct.dbWidget = new DatabaseWidget(db, this);
CompositeKey emptyKey; CompositeKey emptyKey;

View File

@ -1277,7 +1277,7 @@ void DatabaseWidget::reloadDatabaseFile()
if (! config()->get("AutoReloadOnChange").toBool()) { if (! config()->get("AutoReloadOnChange").toBool()) {
// Ask if we want to reload the db // Ask if we want to reload the db
QMessageBox::StandardButton mb = MessageBox::question(this, tr("Autoreload Request"), QMessageBox::StandardButton mb = MessageBox::question(this, tr("File has changed"),
tr("The database file has changed. Do you want to load the changes?"), tr("The database file has changed. Do you want to load the changes?"),
QMessageBox::Yes | QMessageBox::No); QMessageBox::Yes | QMessageBox::No);

View File

@ -180,7 +180,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>800</width> <width>800</width>
<height>21</height> <height>34</height>
</rect> </rect>
</property> </property>
<widget class="QMenu" name="menuFile"> <widget class="QMenu" name="menuFile">
@ -243,7 +243,7 @@
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="title"> <property name="title">
<string>Timed one-time password</string> <string>Time-based one-time password</string>
</property> </property>
<addaction name="actionEntryCopyTotp"/> <addaction name="actionEntryCopyTotp"/>
<addaction name="actionEntryTotp"/> <addaction name="actionEntryTotp"/>

View File

@ -283,16 +283,16 @@ void PasswordGeneratorWidget::colorStrengthIndicator(double entropy)
// <https://community.kde.org/KDE_Visual_Design_Group/HIG/Color> // <https://community.kde.org/KDE_Visual_Design_Group/HIG/Color>
if (entropy < 40) { if (entropy < 40) {
m_ui->entropyProgressBar->setStyleSheet(style.arg("#c0392b")); m_ui->entropyProgressBar->setStyleSheet(style.arg("#c0392b"));
m_ui->strengthLabel->setText(tr("Password Quality: %1").arg(tr("Poor"))); m_ui->strengthLabel->setText(tr("Password Quality: %1").arg(tr("Poor", "Password quality")));
} else if (entropy >= 40 && entropy < 65) { } else if (entropy >= 40 && entropy < 65) {
m_ui->entropyProgressBar->setStyleSheet(style.arg("#f39c1f")); m_ui->entropyProgressBar->setStyleSheet(style.arg("#f39c1f"));
m_ui->strengthLabel->setText(tr("Password Quality: %1").arg(tr("Weak"))); m_ui->strengthLabel->setText(tr("Password Quality: %1").arg(tr("Weak", "Password quality")));
} else if (entropy >= 65 && entropy < 100) { } else if (entropy >= 65 && entropy < 100) {
m_ui->entropyProgressBar->setStyleSheet(style.arg("#11d116")); m_ui->entropyProgressBar->setStyleSheet(style.arg("#11d116"));
m_ui->strengthLabel->setText(tr("Password Quality: %1").arg(tr("Good"))); m_ui->strengthLabel->setText(tr("Password Quality: %1").arg(tr("Good", "Password quality")));
} else { } else {
m_ui->entropyProgressBar->setStyleSheet(style.arg("#27ae60")); m_ui->entropyProgressBar->setStyleSheet(style.arg("#27ae60"));
m_ui->strengthLabel->setText(tr("Password Quality: %1").arg(tr("Excellent"))); m_ui->strengthLabel->setText(tr("Password Quality: %1").arg(tr("Excellent", "Password quality")));
} }
} }

View File

@ -2,6 +2,14 @@
<ui version="4.0"> <ui version="4.0">
<class>PasswordGeneratorWidget</class> <class>PasswordGeneratorWidget</class>
<widget class="QWidget" name="PasswordGeneratorWidget"> <widget class="QWidget" name="PasswordGeneratorWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>547</width>
<height>352</height>
</rect>
</property>
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed"> <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch> <horstretch>0</horstretch>
@ -100,7 +108,7 @@ QProgressBar::chunk {
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>strength</string> <string comment="Password strength">strength</string>
</property> </property>
<property name="textFormat"> <property name="textFormat">
<enum>Qt::PlainText</enum> <enum>Qt::PlainText</enum>

View File

@ -415,7 +415,7 @@
</sizepolicy> </sizepolicy>
</property> </property>
<property name="suffix"> <property name="suffix">
<string> ms</string> <string comment="Milliseconds"> ms</string>
</property> </property>
<property name="prefix"> <property name="prefix">
<string/> <string/>

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>595</width> <width>595</width>
<height>443</height> <height>446</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
@ -48,7 +48,7 @@
</sizepolicy> </sizepolicy>
</property> </property>
<property name="suffix"> <property name="suffix">
<string> sec</string> <string comment="Seconds"> sec</string>
</property> </property>
<property name="minimum"> <property name="minimum">
<number>1</number> <number>1</number>
@ -86,7 +86,7 @@
</sizepolicy> </sizepolicy>
</property> </property>
<property name="suffix"> <property name="suffix">
<string> sec</string> <string comment="Seconds"> sec</string>
</property> </property>
<property name="minimum"> <property name="minimum">
<number>10</number> <number>10</number>

View File

@ -132,7 +132,7 @@
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="suffix"> <property name="suffix">
<string> sec</string> <string comment="Seconds"> sec</string>
</property> </property>
<property name="minimum"> <property name="minimum">
<number>1</number> <number>1</number>

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>471</width> <width>498</width>
<height>480</height> <height>518</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -166,7 +166,7 @@
<item row="3" column="2"> <item row="3" column="2">
<widget class="QPushButton" name="browseButton"> <widget class="QPushButton" name="browseButton">
<property name="text"> <property name="text">
<string>Browse...</string> <string extracomment="Button for opening file dialog">Browse...</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -52,7 +52,7 @@
<item> <item>
<widget class="QCheckBox" name="showNotification"> <widget class="QCheckBox" name="showNotification">
<property name="text"> <property name="text">
<string>Sh&amp;ow a notification when credentials are requested</string> <string extracomment="Credentials mean login data requested via browser extension">Sh&amp;ow a notification when credentials are requested</string>
</property> </property>
<property name="checked"> <property name="checked">
<bool>true</bool> <bool>true</bool>