mirror of
https://github.com/MacPass/MacPass.git
synced 2026-01-30 21:38:19 +00:00
Compare commits
28 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
287356d93e | ||
|
|
775dbd07ee | ||
|
|
547e61fc4b | ||
|
|
ded8eeadb1 | ||
|
|
1bcb002ed0 | ||
|
|
4b5aa003bf | ||
|
|
5f7331aa4d | ||
|
|
bc2ee9a98f | ||
|
|
4e5d491264 | ||
|
|
74573de85f | ||
|
|
d051421f14 | ||
|
|
68a4864051 | ||
|
|
15d1ce8419 | ||
|
|
7f43f3a7ba | ||
|
|
c33c6a8cfa | ||
|
|
ec62a3e12c | ||
|
|
07a8085705 | ||
|
|
c2dd64ff70 | ||
|
|
3113c38a20 | ||
|
|
089a3075ec | ||
|
|
ad0a198b48 | ||
|
|
36b98bcd6d | ||
|
|
29a6c39c1f | ||
|
|
95659e6121 | ||
|
|
995625b229 | ||
|
|
7a60b06c66 | ||
|
|
97b3f3809b | ||
|
|
e1feefd041 |
2
Cartfile
2
Cartfile
@@ -1,3 +1,3 @@
|
|||||||
github "sparkle-project/Sparkle" ~> 1.18.1
|
github "sparkle-project/Sparkle" ~> 1.18.1
|
||||||
github "MacPass/KeePassKit" ~> 1.7.5
|
github "MacPass/KeePassKit" ~> 1.7.6
|
||||||
github "mstarke/HNHUi" ~> 1.4.1
|
github "mstarke/HNHUi" ~> 1.4.1
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
github "MacPass/KeePassKit" "1.7.5"
|
github "MacPass/KeePassKit" "1.7.7"
|
||||||
github "mstarke/HNHUi" "1.4.1"
|
github "mstarke/HNHUi" "1.4.1"
|
||||||
github "sparkle-project/Sparkle" "1.18.1"
|
github "sparkle-project/Sparkle" "1.18.1"
|
||||||
|
|||||||
@@ -247,6 +247,7 @@
|
|||||||
4CEED1C617D7BD0E007180F1 /* NSError+Messages.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CEED1C517D7BD0E007180F1 /* NSError+Messages.m */; };
|
4CEED1C617D7BD0E007180F1 /* NSError+Messages.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CEED1C517D7BD0E007180F1 /* NSError+Messages.m */; };
|
||||||
4CF29BF417879D0000851B60 /* 26_FileSaveTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4CF29BF317879D0000851B60 /* 26_FileSaveTemplate.pdf */; };
|
4CF29BF417879D0000851B60 /* 26_FileSaveTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4CF29BF317879D0000851B60 /* 26_FileSaveTemplate.pdf */; };
|
||||||
4CF5BE6D1BF33E3000048505 /* NSApplication+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF5BE6C1BF33E3000048505 /* NSApplication+MPAdditions.m */; };
|
4CF5BE6D1BF33E3000048505 /* NSApplication+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF5BE6C1BF33E3000048505 /* NSApplication+MPAdditions.m */; };
|
||||||
|
4CF6C3021FBF39BF0055AD03 /* MPPluginTabelCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF6C3011FBF39BF0055AD03 /* MPPluginTabelCellView.m */; };
|
||||||
4CF6C711176F4533007A811D /* MPStringLengthValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF6C710176F4533007A811D /* MPStringLengthValueTransformer.m */; };
|
4CF6C711176F4533007A811D /* MPStringLengthValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF6C710176F4533007A811D /* MPStringLengthValueTransformer.m */; };
|
||||||
4CF78064176E75AD0032EE71 /* MPIntegrationSettingsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF78063176E75AD0032EE71 /* MPIntegrationSettingsController.m */; };
|
4CF78064176E75AD0032EE71 /* MPIntegrationSettingsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF78063176E75AD0032EE71 /* MPIntegrationSettingsController.m */; };
|
||||||
4CFB18E418A17FA20097A34B /* MPUpdateSettingsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFB18E318A17FA20097A34B /* MPUpdateSettingsController.m */; };
|
4CFB18E418A17FA20097A34B /* MPUpdateSettingsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFB18E318A17FA20097A34B /* MPUpdateSettingsController.m */; };
|
||||||
@@ -487,7 +488,6 @@
|
|||||||
4C586FA116D07F6A00E7DB57 /* 02_MessageBoxWarningTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 02_MessageBoxWarningTemplate.pdf; sourceTree = "<group>"; };
|
4C586FA116D07F6A00E7DB57 /* 02_MessageBoxWarningTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 02_MessageBoxWarningTemplate.pdf; sourceTree = "<group>"; };
|
||||||
4C5A11FB1708DE8700223D8A /* MPPasswordCreatorViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordCreatorViewController.h; sourceTree = "<group>"; };
|
4C5A11FB1708DE8700223D8A /* MPPasswordCreatorViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordCreatorViewController.h; sourceTree = "<group>"; };
|
||||||
4C5A11FC1708DE8700223D8A /* MPPasswordCreatorViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordCreatorViewController.m; sourceTree = "<group>"; };
|
4C5A11FC1708DE8700223D8A /* MPPasswordCreatorViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordCreatorViewController.m; sourceTree = "<group>"; };
|
||||||
4C5ADC2E17830AFB004E1E8D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InspectorView.strings; sourceTree = "<group>"; };
|
|
||||||
4C5ADC3017830B09004E1E8D /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InspectorView.strings; sourceTree = "<group>"; };
|
4C5ADC3017830B09004E1E8D /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InspectorView.strings; sourceTree = "<group>"; };
|
||||||
4C5CD34017D158DE000B7F38 /* fr */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; lineEnding = 0; name = fr; path = fr.lproj/Localizable.strings; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; };
|
4C5CD34017D158DE000B7F38 /* fr */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; lineEnding = 0; name = fr; path = fr.lproj/Localizable.strings; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; };
|
||||||
4C5CD34117D158DE000B7F38 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = fr; path = fr.lproj/Credits.rtf; sourceTree = "<group>"; };
|
4C5CD34117D158DE000B7F38 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = fr; path = fr.lproj/Credits.rtf; sourceTree = "<group>"; };
|
||||||
@@ -497,6 +497,7 @@
|
|||||||
4C5CD34617D15912000B7F38 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/MainMenu.strings; sourceTree = "<group>"; };
|
4C5CD34617D15912000B7F38 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/MainMenu.strings; sourceTree = "<group>"; };
|
||||||
4C5CD34717D1591A000B7F38 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/PasswordInputView.strings; sourceTree = "<group>"; };
|
4C5CD34717D1591A000B7F38 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/PasswordInputView.strings; sourceTree = "<group>"; };
|
||||||
4C5CD34817D15920000B7F38 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InspectorView.strings; sourceTree = "<group>"; };
|
4C5CD34817D15920000B7F38 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InspectorView.strings; sourceTree = "<group>"; };
|
||||||
|
4C5F72851FC4351E00929153 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InspectorView.strings; sourceTree = "<group>"; };
|
||||||
4C5FE9AC17843CE20001D5A8 /* MPSelectedAttachmentTableCellView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPSelectedAttachmentTableCellView.h; sourceTree = "<group>"; };
|
4C5FE9AC17843CE20001D5A8 /* MPSelectedAttachmentTableCellView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPSelectedAttachmentTableCellView.h; sourceTree = "<group>"; };
|
||||||
4C5FE9AD17843CE20001D5A8 /* MPSelectedAttachmentTableCellView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPSelectedAttachmentTableCellView.m; sourceTree = "<group>"; };
|
4C5FE9AD17843CE20001D5A8 /* MPSelectedAttachmentTableCellView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPSelectedAttachmentTableCellView.m; sourceTree = "<group>"; };
|
||||||
4C61EA0116D2FD0800AC519E /* MPOutlineViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPOutlineViewController.h; sourceTree = "<group>"; };
|
4C61EA0116D2FD0800AC519E /* MPOutlineViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPOutlineViewController.h; sourceTree = "<group>"; };
|
||||||
@@ -642,7 +643,11 @@
|
|||||||
4C89F523182FB4740069C73C /* MPAutotypeCommand.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAutotypeCommand.m; sourceTree = "<group>"; };
|
4C89F523182FB4740069C73C /* MPAutotypeCommand.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAutotypeCommand.m; sourceTree = "<group>"; };
|
||||||
4C8B36A917A6ED4B005E1FF1 /* MPOutlineContextMenuDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPOutlineContextMenuDelegate.h; sourceTree = "<group>"; };
|
4C8B36A917A6ED4B005E1FF1 /* MPOutlineContextMenuDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPOutlineContextMenuDelegate.h; sourceTree = "<group>"; };
|
||||||
4C8B36AA17A6ED4B005E1FF1 /* MPOutlineContextMenuDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPOutlineContextMenuDelegate.m; sourceTree = "<group>"; };
|
4C8B36AA17A6ED4B005E1FF1 /* MPOutlineContextMenuDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPOutlineContextMenuDelegate.m; sourceTree = "<group>"; };
|
||||||
|
4C8C10061FC489D8003DDD5E /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/PluginSettings.strings; sourceTree = "<group>"; };
|
||||||
4C8DEAA11C314D2C00D24C32 /* MPTestAutotypeDelay.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTestAutotypeDelay.m; sourceTree = "<group>"; };
|
4C8DEAA11C314D2C00D24C32 /* MPTestAutotypeDelay.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTestAutotypeDelay.m; sourceTree = "<group>"; };
|
||||||
|
4C8FB9FA1FC2D0EF003691AA /* MPPlugin_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPPlugin_Private.h; sourceTree = "<group>"; };
|
||||||
|
4C93C5701FBDFEF700F36855 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/AutotypeCandidateSelectionView.strings; sourceTree = "<group>"; };
|
||||||
|
4C93C5711FBDFEF900F36855 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/AutotypeBuilderView.strings; sourceTree = "<group>"; };
|
||||||
4C978E0C19AE54AB003067DF /* MPFlagsHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPFlagsHelper.m; sourceTree = "<group>"; };
|
4C978E0C19AE54AB003067DF /* MPFlagsHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPFlagsHelper.m; sourceTree = "<group>"; };
|
||||||
4C97CCEF1FA727DC00E58F8C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
4C97CCEF1FA727DC00E58F8C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||||
4CA08D9E17A831B200A6544B /* MPAddEntryContextMenuDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAddEntryContextMenuDelegate.h; sourceTree = "<group>"; };
|
4CA08D9E17A831B200A6544B /* MPAddEntryContextMenuDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAddEntryContextMenuDelegate.h; sourceTree = "<group>"; };
|
||||||
@@ -759,6 +764,8 @@
|
|||||||
4CF29BF317879D0000851B60 /* 26_FileSaveTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 26_FileSaveTemplate.pdf; sourceTree = "<group>"; };
|
4CF29BF317879D0000851B60 /* 26_FileSaveTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 26_FileSaveTemplate.pdf; sourceTree = "<group>"; };
|
||||||
4CF5BE6B1BF33E3000048505 /* NSApplication+MPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSApplication+MPAdditions.h"; sourceTree = "<group>"; };
|
4CF5BE6B1BF33E3000048505 /* NSApplication+MPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSApplication+MPAdditions.h"; sourceTree = "<group>"; };
|
||||||
4CF5BE6C1BF33E3000048505 /* NSApplication+MPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSApplication+MPAdditions.m"; sourceTree = "<group>"; };
|
4CF5BE6C1BF33E3000048505 /* NSApplication+MPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSApplication+MPAdditions.m"; sourceTree = "<group>"; };
|
||||||
|
4CF6C3001FBF39BF0055AD03 /* MPPluginTabelCellView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPPluginTabelCellView.h; sourceTree = "<group>"; };
|
||||||
|
4CF6C3011FBF39BF0055AD03 /* MPPluginTabelCellView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPPluginTabelCellView.m; sourceTree = "<group>"; };
|
||||||
4CF6C70F176F4533007A811D /* MPStringLengthValueTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPStringLengthValueTransformer.h; sourceTree = "<group>"; };
|
4CF6C70F176F4533007A811D /* MPStringLengthValueTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPStringLengthValueTransformer.h; sourceTree = "<group>"; };
|
||||||
4CF6C710176F4533007A811D /* MPStringLengthValueTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPStringLengthValueTransformer.m; sourceTree = "<group>"; };
|
4CF6C710176F4533007A811D /* MPStringLengthValueTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPStringLengthValueTransformer.m; sourceTree = "<group>"; };
|
||||||
4CF78062176E75AD0032EE71 /* MPIntegrationSettingsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPIntegrationSettingsController.h; sourceTree = "<group>"; };
|
4CF78062176E75AD0032EE71 /* MPIntegrationSettingsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPIntegrationSettingsController.h; sourceTree = "<group>"; };
|
||||||
@@ -934,6 +941,8 @@
|
|||||||
4CCEDE29179F203B008402BE /* MPOutlineView.m */,
|
4CCEDE29179F203B008402BE /* MPOutlineView.m */,
|
||||||
4CE082C11F6FCD2A0034FF56 /* MPCollectionView.h */,
|
4CE082C11F6FCD2A0034FF56 /* MPCollectionView.h */,
|
||||||
4CE082C21F6FCD2A0034FF56 /* MPCollectionView.m */,
|
4CE082C21F6FCD2A0034FF56 /* MPCollectionView.m */,
|
||||||
|
4CF6C3001FBF39BF0055AD03 /* MPPluginTabelCellView.h */,
|
||||||
|
4CF6C3011FBF39BF0055AD03 /* MPPluginTabelCellView.m */,
|
||||||
);
|
);
|
||||||
name = Views;
|
name = Views;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -1534,6 +1543,7 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
4CD034A41BFE113B003C002C /* MPPlugin.h */,
|
4CD034A41BFE113B003C002C /* MPPlugin.h */,
|
||||||
|
4C8FB9FA1FC2D0EF003691AA /* MPPlugin_Private.h */,
|
||||||
4CD034A51BFE113B003C002C /* MPPlugin.m */,
|
4CD034A51BFE113B003C002C /* MPPlugin.m */,
|
||||||
4CD034A81BFE113B003C002C /* MPPluginHost.h */,
|
4CD034A81BFE113B003C002C /* MPPluginHost.h */,
|
||||||
4CD034A91BFE113B003C002C /* MPPluginHost.m */,
|
4CD034A91BFE113B003C002C /* MPPluginHost.m */,
|
||||||
@@ -1865,6 +1875,7 @@
|
|||||||
4C4B728518E4B9B400A1A5D5 /* MPDockTileHelper.m in Sources */,
|
4C4B728518E4B9B400A1A5D5 /* MPDockTileHelper.m in Sources */,
|
||||||
4C5FE9AE17843CE20001D5A8 /* MPSelectedAttachmentTableCellView.m in Sources */,
|
4C5FE9AE17843CE20001D5A8 /* MPSelectedAttachmentTableCellView.m in Sources */,
|
||||||
4C3666411787327E00B249F1 /* MPDocument+Attachments.m in Sources */,
|
4C3666411787327E00B249F1 /* MPDocument+Attachments.m in Sources */,
|
||||||
|
4CF6C3021FBF39BF0055AD03 /* MPPluginTabelCellView.m in Sources */,
|
||||||
4C10412C178CDD44001B5239 /* NSDate+Humanized.m in Sources */,
|
4C10412C178CDD44001B5239 /* NSDate+Humanized.m in Sources */,
|
||||||
4C0C59F118B17F10009C7B76 /* DDHotKeyUtilities.m in Sources */,
|
4C0C59F118B17F10009C7B76 /* DDHotKeyUtilities.m in Sources */,
|
||||||
4CEE46DD181C301D006BF1E5 /* MPAutotypeDaemon.m in Sources */,
|
4CEE46DD181C301D006BF1E5 /* MPAutotypeDaemon.m in Sources */,
|
||||||
@@ -1931,6 +1942,7 @@
|
|||||||
4C4161081F50333B003BC0AF /* es */,
|
4C4161081F50333B003BC0AF /* es */,
|
||||||
4CA182761F96512800DD4A4A /* de */,
|
4CA182761F96512800DD4A4A /* de */,
|
||||||
4C79B6411FB0562D008250D8 /* en */,
|
4C79B6411FB0562D008250D8 /* en */,
|
||||||
|
4C8C10061FC489D8003DDD5E /* nl */,
|
||||||
);
|
);
|
||||||
name = PluginSettings.xib;
|
name = PluginSettings.xib;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -2022,7 +2034,6 @@
|
|||||||
isa = PBXVariantGroup;
|
isa = PBXVariantGroup;
|
||||||
children = (
|
children = (
|
||||||
4C7615701764C0E80015A1A6 /* Base */,
|
4C7615701764C0E80015A1A6 /* Base */,
|
||||||
4C5ADC2E17830AFB004E1E8D /* en */,
|
|
||||||
4C5ADC3017830B09004E1E8D /* de */,
|
4C5ADC3017830B09004E1E8D /* de */,
|
||||||
4C5CD34817D15920000B7F38 /* fr */,
|
4C5CD34817D15920000B7F38 /* fr */,
|
||||||
601F811418E016340028F3DE /* zh-Hans */,
|
601F811418E016340028F3DE /* zh-Hans */,
|
||||||
@@ -2031,6 +2042,7 @@
|
|||||||
4825CC8C1C414D58003E37E9 /* it */,
|
4825CC8C1C414D58003E37E9 /* it */,
|
||||||
4C840C4F1D773E5E0081F605 /* pl */,
|
4C840C4F1D773E5E0081F605 /* pl */,
|
||||||
4C4161091F50333B003BC0AF /* es */,
|
4C4161091F50333B003BC0AF /* es */,
|
||||||
|
4C5F72851FC4351E00929153 /* en */,
|
||||||
);
|
);
|
||||||
name = InspectorView.xib;
|
name = InspectorView.xib;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -2317,6 +2329,7 @@
|
|||||||
FA9FD3281FB5E8F4003CEDD6 /* Base */,
|
FA9FD3281FB5E8F4003CEDD6 /* Base */,
|
||||||
FA9FD32B1FB5E8FD003CEDD6 /* pl */,
|
FA9FD32B1FB5E8FD003CEDD6 /* pl */,
|
||||||
4C73EB951FBB5A8F0033000F /* de */,
|
4C73EB951FBB5A8F0033000F /* de */,
|
||||||
|
4C93C5701FBDFEF700F36855 /* en */,
|
||||||
);
|
);
|
||||||
name = AutotypeCandidateSelectionView.xib;
|
name = AutotypeCandidateSelectionView.xib;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -2327,6 +2340,7 @@
|
|||||||
FA9FD32D1FB5EDD3003CEDD6 /* Base */,
|
FA9FD32D1FB5EDD3003CEDD6 /* Base */,
|
||||||
FA9FD32F1FB5EDDE003CEDD6 /* pl */,
|
FA9FD32F1FB5EDDE003CEDD6 /* pl */,
|
||||||
4C73EB961FBB5A910033000F /* de */,
|
4C73EB961FBB5A910033000F /* de */,
|
||||||
|
4C93C5711FBDFEF900F36855 /* en */,
|
||||||
);
|
);
|
||||||
name = AutotypeBuilderView.xib;
|
name = AutotypeBuilderView.xib;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -2407,6 +2421,7 @@
|
|||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
CODE_SIGN_IDENTITY = "";
|
CODE_SIGN_IDENTITY = "";
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
|
CURRENT_PROJECT_VERSION = 0.7.2;
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
ENABLE_TESTABILITY = YES;
|
ENABLE_TESTABILITY = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
@@ -2459,6 +2474,7 @@
|
|||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
CODE_SIGN_IDENTITY = "";
|
CODE_SIGN_IDENTITY = "";
|
||||||
COPY_PHASE_STRIP = YES;
|
COPY_PHASE_STRIP = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = 0.7.2;
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
@@ -2488,6 +2504,7 @@
|
|||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "";
|
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "";
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = "${CURRENT_PROJECT_VERSION}";
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Carthage/Build/Mac",
|
"$(PROJECT_DIR)/Carthage/Build/Mac",
|
||||||
@@ -2517,6 +2534,7 @@
|
|||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "";
|
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "";
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = "${CURRENT_PROJECT_VERSION}";
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Carthage/Build/Mac",
|
"$(PROJECT_DIR)/Carthage/Build/Mac",
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
<outlet property="enforceKeyChangeIntervalStepper" destination="lH4-xp-5QF" id="K1S-Og-OGK"/>
|
<outlet property="enforceKeyChangeIntervalStepper" destination="lH4-xp-5QF" id="K1S-Og-OGK"/>
|
||||||
<outlet property="enforceKeyChangeIntervalTextField" destination="VYh-cm-fix" id="aqu-Dm-tlH"/>
|
<outlet property="enforceKeyChangeIntervalTextField" destination="VYh-cm-fix" id="aqu-Dm-tlH"/>
|
||||||
<outlet property="enforceKeyChangeOnceCheckButton" destination="VMc-Qg-eCr" id="Ith-Jn-JVX"/>
|
<outlet property="enforceKeyChangeOnceCheckButton" destination="VMc-Qg-eCr" id="Ith-Jn-JVX"/>
|
||||||
|
<outlet property="fileVersionTextField" destination="1Ci-0B-yV5" id="hZ9-TU-hZE"/>
|
||||||
<outlet property="historyMaximumItemsStepper" destination="599" id="aRL-wb-JSA"/>
|
<outlet property="historyMaximumItemsStepper" destination="599" id="aRL-wb-JSA"/>
|
||||||
<outlet property="historyMaximumItemsTextField" destination="593" id="NrX-e0-8Dw"/>
|
<outlet property="historyMaximumItemsTextField" destination="593" id="NrX-e0-8Dw"/>
|
||||||
<outlet property="historyMaximumSizeStepper" destination="1294" id="Jbo-ZY-5h6"/>
|
<outlet property="historyMaximumSizeStepper" destination="1294" id="Jbo-ZY-5h6"/>
|
||||||
@@ -50,7 +51,7 @@
|
|||||||
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="1">
|
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="1">
|
||||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||||
<rect key="contentRect" x="196" y="240" width="500" height="335"/>
|
<rect key="contentRect" x="196" y="240" width="500" height="360"/>
|
||||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||||
<view key="contentView" id="2">
|
<view key="contentView" id="2">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="500" height="336"/>
|
<rect key="frame" x="0.0" y="0.0" width="500" height="336"/>
|
||||||
@@ -88,11 +89,11 @@ Gw
|
|||||||
<tabViewItems>
|
<tabViewItems>
|
||||||
<tabViewItem label="General" identifier="1" id="358">
|
<tabViewItem label="General" identifier="1" id="358">
|
||||||
<view key="view" id="361">
|
<view key="view" id="361">
|
||||||
<rect key="frame" x="10" y="33" width="454" height="242"/>
|
<rect key="frame" x="10" y="33" width="454" height="267"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="231">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="231">
|
||||||
<rect key="frame" x="154" y="200" width="280" height="22"/>
|
<rect key="frame" x="154" y="225" width="280" height="22"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" constant="280" id="cra-uC-nCv"/>
|
<constraint firstAttribute="width" constant="280" id="cra-uC-nCv"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -103,7 +104,7 @@ Gw
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="256">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="256">
|
||||||
<rect key="frame" x="70" y="176" width="78" height="17"/>
|
<rect key="frame" x="70" y="201" width="78" height="17"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Description:" id="257">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Description:" id="257">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -111,7 +112,7 @@ Gw
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="189">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="189">
|
||||||
<rect key="frame" x="46" y="204" width="102" height="17"/>
|
<rect key="frame" x="46" y="229" width="102" height="17"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Database name:" id="190">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Database name:" id="190">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -119,7 +120,7 @@ Gw
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1394">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1394">
|
||||||
<rect key="frame" x="152" y="48" width="70" height="26"/>
|
<rect key="frame" x="152" y="73" width="70" height="26"/>
|
||||||
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="1395">
|
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="1395">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="menu"/>
|
||||||
@@ -132,7 +133,7 @@ Gw
|
|||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1404">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1404">
|
||||||
<rect key="frame" x="60" y="53" width="88" height="17"/>
|
<rect key="frame" x="60" y="78" width="88" height="17"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Compression:" id="1405">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Compression:" id="1405">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -140,7 +141,7 @@ Gw
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1434">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1434">
|
||||||
<rect key="frame" x="107" y="23" width="41" height="17"/>
|
<rect key="frame" x="107" y="48" width="41" height="17"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Color:" id="1435">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Color:" id="1435">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -148,7 +149,7 @@ Gw
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<colorWell translatesAutoresizingMaskIntoConstraints="NO" id="1439" customClass="HNHUIColorWell">
|
<colorWell translatesAutoresizingMaskIntoConstraints="NO" id="1439" customClass="HNHUIColorWell">
|
||||||
<rect key="frame" x="154" y="20" width="44" height="23"/>
|
<rect key="frame" x="154" y="45" width="44" height="23"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" constant="44" id="XBF-V3-71G"/>
|
<constraint firstAttribute="width" constant="44" id="XBF-V3-71G"/>
|
||||||
<constraint firstAttribute="height" constant="23" id="fgN-h5-Mr8"/>
|
<constraint firstAttribute="height" constant="23" id="fgN-h5-Mr8"/>
|
||||||
@@ -156,7 +157,7 @@ Gw
|
|||||||
<color key="color" red="0.05813049898" green="0.055541899059999997" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="color" red="0.05813049898" green="0.055541899059999997" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
</colorWell>
|
</colorWell>
|
||||||
<scrollView horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1530">
|
<scrollView horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1530">
|
||||||
<rect key="frame" x="154" y="92" width="280" height="100"/>
|
<rect key="frame" x="154" y="117" width="280" height="100"/>
|
||||||
<clipView key="contentView" id="WOI-1v-RCe">
|
<clipView key="contentView" id="WOI-1v-RCe">
|
||||||
<rect key="frame" x="1" y="1" width="278" height="98"/>
|
<rect key="frame" x="1" y="1" width="278" height="98"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
@@ -185,14 +186,34 @@ Gw
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</scroller>
|
</scroller>
|
||||||
</scrollView>
|
</scrollView>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="RhU-5I-S5l">
|
||||||
|
<rect key="frame" x="75" y="20" width="73" height="17"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="File format:" id="bTk-YZ-x0G">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1Ci-0B-yV5">
|
||||||
|
<rect key="frame" x="152" y="20" width="72" height="17"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="VersionInfo" id="Ush-4r-A1A">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
|
<constraint firstItem="RhU-5I-S5l" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="361" secondAttribute="leading" constant="20" symbolic="YES" id="2g6-05-Nm9"/>
|
||||||
<constraint firstItem="1439" firstAttribute="centerY" secondItem="1434" secondAttribute="centerY" id="3SK-ML-kPr"/>
|
<constraint firstItem="1439" firstAttribute="centerY" secondItem="1434" secondAttribute="centerY" id="3SK-ML-kPr"/>
|
||||||
<constraint firstItem="231" firstAttribute="top" secondItem="361" secondAttribute="top" constant="20" symbolic="YES" id="3xl-TE-tQd"/>
|
<constraint firstItem="231" firstAttribute="top" secondItem="361" secondAttribute="top" constant="20" symbolic="YES" id="3xl-TE-tQd"/>
|
||||||
<constraint firstItem="231" firstAttribute="baseline" secondItem="189" secondAttribute="baseline" constant="1" id="46f-FB-PcR"/>
|
<constraint firstItem="231" firstAttribute="baseline" secondItem="189" secondAttribute="baseline" constant="1" id="46f-FB-PcR"/>
|
||||||
|
<constraint firstItem="1Ci-0B-yV5" firstAttribute="baseline" secondItem="RhU-5I-S5l" secondAttribute="baseline" id="4jg-Kd-kVn"/>
|
||||||
<constraint firstItem="1530" firstAttribute="top" secondItem="231" secondAttribute="bottom" constant="8" symbolic="YES" id="BRY-Gk-wEF"/>
|
<constraint firstItem="1530" firstAttribute="top" secondItem="231" secondAttribute="bottom" constant="8" symbolic="YES" id="BRY-Gk-wEF"/>
|
||||||
<constraint firstItem="189" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="361" secondAttribute="leading" constant="20" symbolic="YES" id="EE1-wx-54f"/>
|
<constraint firstItem="189" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="361" secondAttribute="leading" constant="20" symbolic="YES" id="EE1-wx-54f"/>
|
||||||
<constraint firstItem="1394" firstAttribute="leading" secondItem="231" secondAttribute="leading" id="EZ7-AG-XXT"/>
|
<constraint firstItem="1394" firstAttribute="leading" secondItem="231" secondAttribute="leading" id="EZ7-AG-XXT"/>
|
||||||
|
<constraint firstItem="1Ci-0B-yV5" firstAttribute="leading" secondItem="RhU-5I-S5l" secondAttribute="trailing" constant="8" symbolic="YES" id="GGY-c2-Uhw"/>
|
||||||
|
<constraint firstItem="1Ci-0B-yV5" firstAttribute="top" secondItem="1439" secondAttribute="bottom" constant="8" symbolic="YES" id="HGD-Tw-rab"/>
|
||||||
<constraint firstItem="1434" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="361" secondAttribute="leading" constant="20" symbolic="YES" id="ICF-se-FFb"/>
|
<constraint firstItem="1434" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="361" secondAttribute="leading" constant="20" symbolic="YES" id="ICF-se-FFb"/>
|
||||||
<constraint firstItem="1404" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="361" secondAttribute="leading" constant="20" symbolic="YES" id="LeH-TL-Zoq"/>
|
<constraint firstItem="1404" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="361" secondAttribute="leading" constant="20" symbolic="YES" id="LeH-TL-Zoq"/>
|
||||||
<constraint firstItem="1404" firstAttribute="centerY" secondItem="1394" secondAttribute="centerY" id="OSA-6P-L0N"/>
|
<constraint firstItem="1404" firstAttribute="centerY" secondItem="1394" secondAttribute="centerY" id="OSA-6P-L0N"/>
|
||||||
@@ -204,11 +225,13 @@ Gw
|
|||||||
<constraint firstItem="1439" firstAttribute="top" secondItem="1394" secondAttribute="bottom" constant="8" symbolic="YES" id="ZeI-7b-IjZ"/>
|
<constraint firstItem="1439" firstAttribute="top" secondItem="1394" secondAttribute="bottom" constant="8" symbolic="YES" id="ZeI-7b-IjZ"/>
|
||||||
<constraint firstItem="256" firstAttribute="trailing" secondItem="189" secondAttribute="trailing" id="al9-qI-MaZ"/>
|
<constraint firstItem="256" firstAttribute="trailing" secondItem="189" secondAttribute="trailing" id="al9-qI-MaZ"/>
|
||||||
<constraint firstItem="1394" firstAttribute="leading" secondItem="1439" secondAttribute="leading" id="bFE-Ho-9Zk"/>
|
<constraint firstItem="1394" firstAttribute="leading" secondItem="1439" secondAttribute="leading" id="bFE-Ho-9Zk"/>
|
||||||
<constraint firstAttribute="bottom" secondItem="1439" secondAttribute="bottom" constant="20" symbolic="YES" id="dCq-34-0z2"/>
|
|
||||||
<constraint firstItem="1394" firstAttribute="top" secondItem="1530" secondAttribute="bottom" constant="20" symbolic="YES" id="dfD-cv-lGp"/>
|
<constraint firstItem="1394" firstAttribute="top" secondItem="1530" secondAttribute="bottom" constant="20" symbolic="YES" id="dfD-cv-lGp"/>
|
||||||
|
<constraint firstItem="RhU-5I-S5l" firstAttribute="trailing" secondItem="1434" secondAttribute="trailing" id="ff7-L0-hkA"/>
|
||||||
<constraint firstItem="256" firstAttribute="trailing" secondItem="1404" secondAttribute="trailing" id="gwL-uv-AGV"/>
|
<constraint firstItem="256" firstAttribute="trailing" secondItem="1404" secondAttribute="trailing" id="gwL-uv-AGV"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="1Ci-0B-yV5" secondAttribute="bottom" constant="20" symbolic="YES" id="js5-RZ-xg6"/>
|
||||||
<constraint firstItem="231" firstAttribute="leading" secondItem="189" secondAttribute="trailing" constant="8" symbolic="YES" id="uMg-uh-Qq6"/>
|
<constraint firstItem="231" firstAttribute="leading" secondItem="189" secondAttribute="trailing" constant="8" symbolic="YES" id="uMg-uh-Qq6"/>
|
||||||
<constraint firstItem="256" firstAttribute="top" secondItem="189" secondAttribute="bottom" constant="11" id="z3y-bc-AMm"/>
|
<constraint firstItem="256" firstAttribute="top" secondItem="189" secondAttribute="bottom" constant="11" id="z3y-bc-AMm"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="1Ci-0B-yV5" secondAttribute="trailing" constant="20" symbolic="YES" id="zL8-X5-0oc"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
</tabViewItem>
|
</tabViewItem>
|
||||||
@@ -727,7 +750,7 @@ Gw
|
|||||||
<constraint firstItem="956" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="2" secondAttribute="leading" constant="20" symbolic="YES" id="Yla-YR-bgz"/>
|
<constraint firstItem="956" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="2" secondAttribute="leading" constant="20" symbolic="YES" id="Yla-YR-bgz"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
<point key="canvasLocation" x="-1217" y="-566"/>
|
<point key="canvasLocation" x="-2020" y="-860"/>
|
||||||
</window>
|
</window>
|
||||||
</objects>
|
</objects>
|
||||||
</document>
|
</document>
|
||||||
|
|||||||
@@ -134,15 +134,25 @@
|
|||||||
<size key="maxSize" width="463" height="10000000"/>
|
<size key="maxSize" width="463" height="10000000"/>
|
||||||
<color key="insertionPointColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="insertionPointColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<connections>
|
<connections>
|
||||||
<binding destination="-2" name="editable" keyPath="representedObject.isHistory" id="zUB-H2-SkW">
|
<binding destination="-2" name="editable2" keyPath="representedObject" previousBinding="3gj-Fz-0G8" id="AI9-fU-m4Z">
|
||||||
|
<dictionary key="options">
|
||||||
|
<integer key="NSMultipleValuesPlaceholder" value="-1"/>
|
||||||
|
<integer key="NSNoSelectionPlaceholder" value="-1"/>
|
||||||
|
<integer key="NSNotApplicablePlaceholder" value="-1"/>
|
||||||
|
<integer key="NSNullPlaceholder" value="-1"/>
|
||||||
|
<string key="NSValueTransformerName">NSIsNotNil</string>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
<binding destination="-2" name="editable" keyPath="representedObject.isHistory" id="3gj-Fz-0G8">
|
||||||
<dictionary key="options">
|
<dictionary key="options">
|
||||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||||
</dictionary>
|
</dictionary>
|
||||||
</binding>
|
</binding>
|
||||||
<binding destination="-2" name="value" keyPath="representedObject.notes" id="E0d-ZH-Wbc">
|
<binding destination="-2" name="value" keyPath="representedObject.notes" id="Xpb-G8-gXl">
|
||||||
<dictionary key="options">
|
<dictionary key="options">
|
||||||
<bool key="NSConditionallySetsEditable" value="NO"/>
|
<bool key="NSConditionallySetsEditable" value="NO"/>
|
||||||
<string key="NSNoSelectionPlaceholder">No Selection</string>
|
<string key="NSNoSelectionPlaceholder">No Selection</string>
|
||||||
|
<string key="NSNullPlaceholder">None</string>
|
||||||
</dictionary>
|
</dictionary>
|
||||||
</binding>
|
</binding>
|
||||||
<outlet property="delegate" destination="-2" id="8oq-Ga-UQD"/>
|
<outlet property="delegate" destination="-2" id="8oq-Ga-UQD"/>
|
||||||
|
|||||||
@@ -1,14 +1,17 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13196" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13196"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13529"/>
|
||||||
<capability name="box content view" minToolsVersion="7.0"/>
|
<capability name="box content view" minToolsVersion="7.0"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="MPPluginSettingsController">
|
<customObject id="-2" userLabel="File's Owner" customClass="MPPluginSettingsController">
|
||||||
<connections>
|
<connections>
|
||||||
|
<outlet property="addRemovePluginsControl" destination="B9Q-hq-K4N" id="Oqj-Ko-8UR"/>
|
||||||
|
<outlet property="fallbackDescriptionTextField" destination="qPL-FR-ky7" id="xCb-ED-NIX"/>
|
||||||
|
<outlet property="fallbackSettingsView" destination="wIk-iw-Tcz" id="dHl-zW-0aI"/>
|
||||||
<outlet property="loadInsecurePlugsinCheckButton" destination="CqP-oK-S8k" id="YET-o6-7Cc"/>
|
<outlet property="loadInsecurePlugsinCheckButton" destination="CqP-oK-S8k" id="YET-o6-7Cc"/>
|
||||||
<outlet property="pluginTableView" destination="Ocu-C0-03d" id="jbH-qr-bVT"/>
|
<outlet property="pluginTableView" destination="Ocu-C0-03d" id="jbH-qr-bVT"/>
|
||||||
<outlet property="settingsView" destination="tD5-Na-7XI" id="Pa0-Tt-20U"/>
|
<outlet property="settingsView" destination="tD5-Na-7XI" id="Pa0-Tt-20U"/>
|
||||||
@@ -18,24 +21,51 @@
|
|||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="Hz6-mo-xeY">
|
<customView translatesAutoresizingMaskIntoConstraints="NO" id="Hz6-mo-xeY">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="520" height="434"/>
|
<rect key="frame" x="0.0" y="0.0" width="520" height="473"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<box borderType="line" title="Box" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="vBs-Ga-aq0">
|
<box borderType="line" title="Box" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="vBs-Ga-aq0">
|
||||||
<rect key="frame" x="175" y="16" width="328" height="342"/>
|
<rect key="frame" x="175" y="46" width="328" height="351"/>
|
||||||
<view key="contentView" id="tD5-Na-7XI">
|
<view key="contentView" id="tD5-Na-7XI">
|
||||||
<rect key="frame" x="1" y="1" width="326" height="340"/>
|
<rect key="frame" x="1" y="1" width="326" height="349"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<customView translatesAutoresizingMaskIntoConstraints="NO" id="wIk-iw-Tcz">
|
||||||
|
<rect key="frame" x="20" y="20" width="286" height="309"/>
|
||||||
|
<subviews>
|
||||||
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qPL-FR-ky7">
|
||||||
|
<rect key="frame" x="18" y="272" width="122" height="17"/>
|
||||||
|
<textFieldCell key="cell" controlSize="mini" sendsActionOnEndEditing="YES" title="Plugin Settings Info" id="OOr-SW-jZb">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="qPL-FR-ky7" firstAttribute="top" secondItem="wIk-iw-Tcz" secondAttribute="top" constant="20" symbolic="YES" id="BAH-sF-W03"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="qPL-FR-ky7" secondAttribute="trailing" constant="20" symbolic="YES" id="HKa-7h-OiN"/>
|
||||||
|
<constraint firstItem="qPL-FR-ky7" firstAttribute="leading" secondItem="wIk-iw-Tcz" secondAttribute="leading" constant="20" symbolic="YES" id="UTY-Lu-pvl"/>
|
||||||
|
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="qPL-FR-ky7" secondAttribute="bottom" constant="20" symbolic="YES" id="wpb-76-pxa"/>
|
||||||
|
</constraints>
|
||||||
|
</customView>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="wIk-iw-Tcz" firstAttribute="top" secondItem="tD5-Na-7XI" secondAttribute="top" constant="20" symbolic="YES" id="JEm-yQ-dbO"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="wIk-iw-Tcz" secondAttribute="trailing" constant="20" symbolic="YES" id="Zfc-6L-EPa"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="wIk-iw-Tcz" secondAttribute="bottom" constant="20" symbolic="YES" id="mGC-Qx-83s"/>
|
||||||
|
<constraint firstItem="wIk-iw-Tcz" firstAttribute="leading" secondItem="tD5-Na-7XI" secondAttribute="leading" constant="20" symbolic="YES" id="phc-Nv-2hD"/>
|
||||||
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
</box>
|
</box>
|
||||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="CqP-oK-S8k">
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="CqP-oK-S8k">
|
||||||
<rect key="frame" x="18" y="398" width="159" height="18"/>
|
<rect key="frame" x="18" y="437" width="159" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Load unsecure Plugins" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="C4B-6z-ZqX">
|
<buttonCell key="cell" type="check" title="Load unsecure Plugins" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="C4B-6z-ZqX">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="aoG-FD-ds8">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="aoG-FD-ds8">
|
||||||
<rect key="frame" x="18" y="364" width="484" height="28"/>
|
<rect key="frame" x="18" y="403" width="484" height="28"/>
|
||||||
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" id="2bX-8S-9XM">
|
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" id="2bX-8S-9XM">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<string key="title">If enabled, only properly signed Plugins will be loaded. Keep in mind, that Plugins have full access to your data! Changes take affect on restart.</string>
|
<string key="title">If enabled, only properly signed Plugins will be loaded. Keep in mind, that Plugins have full access to your data! Changes take affect on restart.</string>
|
||||||
@@ -43,14 +73,14 @@
|
|||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<scrollView autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fCk-fL-jU8">
|
<scrollView autohidesScrollers="YES" horizontalLineScroll="37" horizontalPageScroll="10" verticalLineScroll="37" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fCk-fL-jU8">
|
||||||
<rect key="frame" x="20" y="20" width="150" height="336"/>
|
<rect key="frame" x="20" y="50" width="150" height="345"/>
|
||||||
<clipView key="contentView" id="lTL-Q2-k45">
|
<clipView key="contentView" id="lTL-Q2-k45">
|
||||||
<rect key="frame" x="1" y="1" width="148" height="334"/>
|
<rect key="frame" x="1" y="1" width="148" height="343"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowSizeStyle="automatic" viewBased="YES" id="Ocu-C0-03d">
|
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="35" rowSizeStyle="automatic" viewBased="YES" id="Ocu-C0-03d">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="148" height="334"/>
|
<rect key="frame" x="0.0" y="0.0" width="148" height="343"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<size key="intercellSpacing" width="3" height="2"/>
|
<size key="intercellSpacing" width="3" height="2"/>
|
||||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -69,21 +99,38 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||||
<prototypeCellViews>
|
<prototypeCellViews>
|
||||||
<tableCellView id="vVt-P3-yLp">
|
<tableCellView id="vVt-P3-yLp" customClass="MPPluginTabelCellView">
|
||||||
<rect key="frame" x="1" y="1" width="145" height="17"/>
|
<rect key="frame" x="1" y="1" width="145" height="35"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="q1P-PD-0LW">
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="q1P-PD-0LW">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="100" height="17"/>
|
<rect key="frame" x="0.0" y="18" width="127" height="17"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Table View Cell" id="fug-79-n9g">
|
||||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="fug-79-n9g">
|
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="fQy-Sz-4VA">
|
||||||
|
<rect key="frame" x="0.0" y="2" width="145" height="14"/>
|
||||||
|
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" title="Label" id="yuK-qH-jxx">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
</subviews>
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="fQy-Sz-4VA" secondAttribute="bottom" constant="2" id="Flm-uU-Rzj"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="fQy-Sz-4VA" secondAttribute="trailing" constant="2" id="Iy0-iV-Mbx"/>
|
||||||
|
<constraint firstItem="fQy-Sz-4VA" firstAttribute="top" secondItem="q1P-PD-0LW" secondAttribute="bottom" constant="2" id="RZb-58-Zwr"/>
|
||||||
|
<constraint firstItem="q1P-PD-0LW" firstAttribute="leading" secondItem="vVt-P3-yLp" secondAttribute="leading" constant="2" id="bTc-2c-BYB"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="q1P-PD-0LW" secondAttribute="trailing" constant="20" symbolic="YES" id="gSi-vN-xzX"/>
|
||||||
|
<constraint firstItem="q1P-PD-0LW" firstAttribute="top" secondItem="vVt-P3-yLp" secondAttribute="top" id="tTs-2E-33f"/>
|
||||||
|
<constraint firstItem="fQy-Sz-4VA" firstAttribute="leading" secondItem="vVt-P3-yLp" secondAttribute="leading" constant="2" id="zLP-Ci-nUM"/>
|
||||||
|
</constraints>
|
||||||
<connections>
|
<connections>
|
||||||
|
<outlet property="addionalTextField" destination="fQy-Sz-4VA" id="nr7-5w-TEg"/>
|
||||||
<outlet property="textField" destination="q1P-PD-0LW" id="yB7-Uf-IIx"/>
|
<outlet property="textField" destination="q1P-PD-0LW" id="yB7-Uf-IIx"/>
|
||||||
</connections>
|
</connections>
|
||||||
</tableCellView>
|
</tableCellView>
|
||||||
@@ -98,7 +145,7 @@
|
|||||||
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="150" id="eXb-yq-O8y"/>
|
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="150" id="eXb-yq-O8y"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="UK5-gt-5o5">
|
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="UK5-gt-5o5">
|
||||||
<rect key="frame" x="1" y="133" width="148" height="16"/>
|
<rect key="frame" x="1" y="328" width="148" height="16"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</scroller>
|
</scroller>
|
||||||
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="oqL-7I-4H1">
|
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="oqL-7I-4H1">
|
||||||
@@ -106,23 +153,56 @@
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</scroller>
|
</scroller>
|
||||||
</scrollView>
|
</scrollView>
|
||||||
|
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="B9Q-hq-K4N">
|
||||||
|
<rect key="frame" x="20" y="18" width="67" height="25"/>
|
||||||
|
<segmentedCell key="cell" borderStyle="border" alignment="left" style="texturedSquare" trackingMode="momentary" id="cj3-R6-g1E">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<segments>
|
||||||
|
<segment image="NSAddTemplate" width="32"/>
|
||||||
|
<segment image="NSRemoveTemplate" width="32" tag="1"/>
|
||||||
|
</segments>
|
||||||
|
</segmentedCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="addOrRemovePlugin:" target="-2" id="ywK-Vi-MR4"/>
|
||||||
|
</connections>
|
||||||
|
</segmentedControl>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="SNe-cc-CZs">
|
||||||
|
<rect key="frame" x="383" y="18" width="117" height="25"/>
|
||||||
|
<buttonCell key="cell" type="roundTextured" title="Browse Plugins…" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="sqO-8H-n1y">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="browsePlugins:" target="-2" id="16S-2u-Tmi"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstItem="CqP-oK-S8k" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="20" id="1Rj-zS-7t2"/>
|
<constraint firstItem="CqP-oK-S8k" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="20" id="1Rj-zS-7t2"/>
|
||||||
<constraint firstItem="vBs-Ga-aq0" firstAttribute="top" secondItem="fCk-fL-jU8" secondAttribute="top" id="2h6-C9-4N5"/>
|
<constraint firstItem="vBs-Ga-aq0" firstAttribute="top" secondItem="fCk-fL-jU8" secondAttribute="top" id="2h6-C9-4N5"/>
|
||||||
|
<constraint firstItem="B9Q-hq-K4N" firstAttribute="top" secondItem="fCk-fL-jU8" secondAttribute="bottom" constant="8" symbolic="YES" id="3vA-Oh-cFO"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="B9Q-hq-K4N" secondAttribute="bottom" constant="20" symbolic="YES" id="7HD-ji-Whc"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="SNe-cc-CZs" secondAttribute="trailing" constant="20" symbolic="YES" id="8Je-yg-f1l"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="aoG-FD-ds8" secondAttribute="trailing" constant="20" symbolic="YES" id="95O-Jh-0KG"/>
|
<constraint firstAttribute="trailing" secondItem="aoG-FD-ds8" secondAttribute="trailing" constant="20" symbolic="YES" id="95O-Jh-0KG"/>
|
||||||
|
<constraint firstItem="vBs-Ga-aq0" firstAttribute="bottom" secondItem="fCk-fL-jU8" secondAttribute="bottom" id="BQ2-Wp-Fsh"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="SNe-cc-CZs" secondAttribute="bottom" constant="20" symbolic="YES" id="Fqe-ch-vsS"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="vBs-Ga-aq0" secondAttribute="trailing" constant="20" id="LUb-Un-azV"/>
|
<constraint firstAttribute="trailing" secondItem="vBs-Ga-aq0" secondAttribute="trailing" constant="20" id="LUb-Un-azV"/>
|
||||||
<constraint firstItem="aoG-FD-ds8" firstAttribute="leading" secondItem="CqP-oK-S8k" secondAttribute="leading" id="NcW-ya-DPx"/>
|
<constraint firstItem="aoG-FD-ds8" firstAttribute="leading" secondItem="CqP-oK-S8k" secondAttribute="leading" id="NcW-ya-DPx"/>
|
||||||
|
<constraint firstItem="B9Q-hq-K4N" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" symbolic="YES" id="Rtj-Ad-zkg"/>
|
||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="CqP-oK-S8k" secondAttribute="trailing" constant="20" symbolic="YES" id="TXL-mf-nxu"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="CqP-oK-S8k" secondAttribute="trailing" constant="20" symbolic="YES" id="TXL-mf-nxu"/>
|
||||||
<constraint firstAttribute="bottom" secondItem="fCk-fL-jU8" secondAttribute="bottom" constant="20" id="aeb-kZ-RSU"/>
|
<constraint firstItem="SNe-cc-CZs" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="B9Q-hq-K4N" secondAttribute="trailing" constant="8" symbolic="YES" id="a62-en-kDA"/>
|
||||||
<constraint firstAttribute="bottom" secondItem="vBs-Ga-aq0" secondAttribute="bottom" constant="20" id="czn-HC-o7k"/>
|
|
||||||
<constraint firstItem="fCk-fL-jU8" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" id="fzW-4b-L8S"/>
|
<constraint firstItem="fCk-fL-jU8" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" id="fzW-4b-L8S"/>
|
||||||
|
<constraint firstItem="SNe-cc-CZs" firstAttribute="top" secondItem="vBs-Ga-aq0" secondAttribute="bottom" constant="8" symbolic="YES" id="r4X-iM-iYU"/>
|
||||||
<constraint firstItem="CqP-oK-S8k" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" id="rN1-3Z-BBi"/>
|
<constraint firstItem="CqP-oK-S8k" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" id="rN1-3Z-BBi"/>
|
||||||
<constraint firstItem="fCk-fL-jU8" firstAttribute="top" secondItem="aoG-FD-ds8" secondAttribute="bottom" constant="8" id="vl9-MY-WW1"/>
|
<constraint firstItem="fCk-fL-jU8" firstAttribute="top" secondItem="aoG-FD-ds8" secondAttribute="bottom" constant="8" id="vl9-MY-WW1"/>
|
||||||
<constraint firstItem="vBs-Ga-aq0" firstAttribute="leading" secondItem="fCk-fL-jU8" secondAttribute="trailing" constant="8" id="xNu-Sj-xQO"/>
|
<constraint firstItem="vBs-Ga-aq0" firstAttribute="leading" secondItem="fCk-fL-jU8" secondAttribute="trailing" constant="8" id="xNu-Sj-xQO"/>
|
||||||
<constraint firstItem="aoG-FD-ds8" firstAttribute="top" secondItem="CqP-oK-S8k" secondAttribute="bottom" constant="8" symbolic="YES" id="zSW-h3-BrT"/>
|
<constraint firstItem="aoG-FD-ds8" firstAttribute="top" secondItem="CqP-oK-S8k" secondAttribute="bottom" constant="8" symbolic="YES" id="zSW-h3-BrT"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<point key="canvasLocation" x="108" y="118"/>
|
<point key="canvasLocation" x="-163" y="-18"/>
|
||||||
</customView>
|
</customView>
|
||||||
</objects>
|
</objects>
|
||||||
|
<resources>
|
||||||
|
<image name="NSAddTemplate" width="11" height="11"/>
|
||||||
|
<image name="NSRemoveTemplate" width="11" height="11"/>
|
||||||
|
</resources>
|
||||||
</document>
|
</document>
|
||||||
|
|||||||
@@ -314,7 +314,7 @@ NSString *const MPHelpURLKey = @"MPHelpURL";
|
|||||||
if(error != nil){
|
if(error != nil){
|
||||||
|
|
||||||
NSAlert *alert = [[NSAlert alloc] init];
|
NSAlert *alert = [[NSAlert alloc] init];
|
||||||
[alert setMessageText: NSLocalizedString(@"FILE_OPEN_ERROR", nil)];
|
[alert setMessageText: NSLocalizedString(@"FILE_OPEN_ERROR", "Error while reopening last known documents")];
|
||||||
[alert setInformativeText: [error localizedDescription]];
|
[alert setInformativeText: [error localizedDescription]];
|
||||||
[alert setAlertStyle:NSCriticalAlertStyle ];
|
[alert setAlertStyle:NSCriticalAlertStyle ];
|
||||||
[alert runModal];
|
[alert runModal];
|
||||||
|
|||||||
@@ -51,7 +51,7 @@
|
|||||||
KPKEntry *entry = document.selectedEntries.count == 1 ? document.selectedEntries.lastObject : nil;
|
KPKEntry *entry = document.selectedEntries.count == 1 ? document.selectedEntries.lastObject : nil;
|
||||||
|
|
||||||
NSPasteboard *draggingPasteBoard = [info draggingPasteboard];
|
NSPasteboard *draggingPasteBoard = [info draggingPasteboard];
|
||||||
NSArray *arrayOfURLs = [draggingPasteBoard readObjectsForClasses:@[[NSURL class]] options:nil];
|
NSArray *arrayOfURLs = [draggingPasteBoard readObjectsForClasses:@[NSURL.class] options:nil];
|
||||||
|
|
||||||
for(NSURL *fileUrl in arrayOfURLs) {
|
for(NSURL *fileUrl in arrayOfURLs) {
|
||||||
[document addAttachment:fileUrl toEntry:entry];
|
[document addAttachment:fileUrl toEntry:entry];
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
FOUNDATION_EXPORT NSString *const MPPasteBoardType;
|
FOUNDATION_EXPORT NSString *const MPPasteBoardType;
|
||||||
FOUNDATION_EXPORT NSString *const MPKdbDocumentUTI;
|
FOUNDATION_EXPORT NSString *const MPKdbDocumentUTI;
|
||||||
FOUNDATION_EXPORT NSString *const MPKdbxDocumentUTI;
|
FOUNDATION_EXPORT NSString *const MPKdbxDocumentUTI;
|
||||||
|
FOUNDATION_EXPORT NSString *const MPPluginUTI;
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -25,3 +25,4 @@
|
|||||||
NSString *const MPPasteBoardType = @"com.hicknhack.macpass.pasteboard";
|
NSString *const MPPasteBoardType = @"com.hicknhack.macpass.pasteboard";
|
||||||
NSString *const MPKdbDocumentUTI = @"com.hicknhack.macpass.kdb";
|
NSString *const MPKdbDocumentUTI = @"com.hicknhack.macpass.kdb";
|
||||||
NSString *const MPKdbxDocumentUTI = @"com.hicknhack.macpass.kdbx";
|
NSString *const MPKdbxDocumentUTI = @"com.hicknhack.macpass.kdbx";
|
||||||
|
NSString *const MPPluginUTI = @"com.hicknhack.macpass.plugin";
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ typedef NS_ENUM(NSUInteger, MPDatabaseSettingsTab) {
|
|||||||
@property (weak) IBOutlet NSPopUpButton *databaseCompressionPopupButton;
|
@property (weak) IBOutlet NSPopUpButton *databaseCompressionPopupButton;
|
||||||
@property (unsafe_unretained) IBOutlet NSTextView *databaseDescriptionTextView;
|
@property (unsafe_unretained) IBOutlet NSTextView *databaseDescriptionTextView;
|
||||||
@property (weak) IBOutlet NSColorWell *databaseColorColorWell;
|
@property (weak) IBOutlet NSColorWell *databaseColorColorWell;
|
||||||
|
@property (weak) IBOutlet NSTextField *fileVersionTextField;
|
||||||
|
|
||||||
/* Security Tab */
|
/* Security Tab */
|
||||||
@property (weak) IBOutlet NSButton *createKeyDerivationParametersButton;
|
@property (weak) IBOutlet NSButton *createKeyDerivationParametersButton;
|
||||||
|
|||||||
@@ -204,10 +204,10 @@
|
|||||||
return; // no document, just leave
|
return; // no document, just leave
|
||||||
}
|
}
|
||||||
/* Update all stuff that might have changed */
|
/* Update all stuff that might have changed */
|
||||||
KPKMetaData *metaData = ((MPDocument *)self.document).tree.metaData;
|
KPKTree *tree = ((MPDocument *)self.document).tree;
|
||||||
[self _setupDatabaseTab:metaData];
|
[self _setupDatabaseTab:tree];
|
||||||
[self _setupSecurityTab:metaData];
|
[self _setupSecurityTab:tree.metaData];
|
||||||
[self _setupAdvancedTab:((MPDocument *)self.document).tree];
|
[self _setupAdvancedTab:tree];
|
||||||
self.isDirty = NO;
|
self.isDirty = NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -237,12 +237,30 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark Private Helper
|
#pragma mark Private Helper
|
||||||
- (void)_setupDatabaseTab:(KPKMetaData *)metaData {
|
- (void)_setupDatabaseTab:(KPKTree *)tree {
|
||||||
self.databaseNameTextField.stringValue = metaData.databaseName;
|
self.databaseNameTextField.stringValue = tree.metaData.databaseName;
|
||||||
self.databaseDescriptionTextView.string = metaData.databaseDescription;
|
self.databaseDescriptionTextView.string = tree.metaData.databaseDescription;
|
||||||
[self.databaseCompressionPopupButton selectItemAtIndex:metaData.compressionAlgorithm];
|
[self.databaseCompressionPopupButton selectItemAtIndex:tree.metaData.compressionAlgorithm];
|
||||||
NSColor *databaseColor = metaData.color ? metaData.color : [NSColor clearColor];
|
self.databaseColorColorWell.color = tree.metaData.color ? tree.metaData.color : NSColor.clearColor;
|
||||||
self.databaseColorColorWell.color = databaseColor;
|
|
||||||
|
|
||||||
|
NSData *fileData = [NSData dataWithContentsOfURL:((MPDocument *)self.document).fileURL];
|
||||||
|
if(!fileData) {
|
||||||
|
self.fileVersionTextField.stringValue = NSLocalizedString(@"UNKNOWN_FORMAT_FILE_NOT_SAVED_YET", "Database format is unknown since the file is not saved yet");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
KPKFileVersion version = [[KPKFormat sharedFormat] fileVersionForData:fileData];
|
||||||
|
NSDictionary *nameMappings = @{
|
||||||
|
@(KPKDatabaseFormatKdb): @"Kdb",
|
||||||
|
@(KPKDatabaseFormatKdbx): @"Kdbx",
|
||||||
|
@(KPKDatabaseFormatUnknown): NSLocalizedString(@"UNKNOWN_FORMAT", "Unknown databas format.")
|
||||||
|
};
|
||||||
|
|
||||||
|
NSUInteger mayor = (version.version >> 16);
|
||||||
|
NSUInteger minor = (version.version & 0xFFFF);
|
||||||
|
|
||||||
|
self.fileVersionTextField.stringValue = [NSString stringWithFormat:@"%@ (Version %ld.%ld)", nameMappings[@(version.format)], mayor, minor];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)_setupSecurityTab:(KPKMetaData *)metaData {
|
- (void)_setupSecurityTab:(KPKMetaData *)metaData {
|
||||||
|
|||||||
@@ -42,9 +42,9 @@ NSString *const kMPDocumentSearchResultsKey = @"kMPDocumentSearchResul
|
|||||||
- (void)enterSearchWithContext:(MPEntrySearchContext *)context {
|
- (void)enterSearchWithContext:(MPEntrySearchContext *)context {
|
||||||
/* the search context is loaded via defaults */
|
/* the search context is loaded via defaults */
|
||||||
self.searchContext = context;
|
self.searchContext = context;
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateSearch:) name:NSUndoManagerDidRedoChangeNotification object:self.undoManager];
|
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(updateSearch:) name:NSUndoManagerDidRedoChangeNotification object:self.undoManager];
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateSearch:) name:NSUndoManagerDidUndoChangeNotification object:self.undoManager];
|
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(updateSearch:) name:NSUndoManagerDidUndoChangeNotification object:self.undoManager];
|
||||||
[[NSNotificationCenter defaultCenter] postNotificationName:MPDocumentDidEnterSearchNotification object:self];
|
[NSNotificationCenter.defaultCenter postNotificationName:MPDocumentDidEnterSearchNotification object:self];
|
||||||
[self updateSearch:self];
|
[self updateSearch:self];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -440,6 +440,8 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
|
|||||||
}
|
}
|
||||||
self.tree = nil;
|
self.tree = nil;
|
||||||
self.compositeKey = nil;
|
self.compositeKey = nil;
|
||||||
|
self.selectedGroups = nil;
|
||||||
|
self.selectedEntries = nil;
|
||||||
[NSNotificationCenter.defaultCenter postNotificationName:MPDocumentDidLockDatabaseNotification object:self];
|
[NSNotificationCenter.defaultCenter postNotificationName:MPDocumentDidLockDatabaseNotification object:self];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -636,7 +638,7 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
|
|||||||
[self.undoManager enableUndoRegistration];
|
[self.undoManager enableUndoRegistration];
|
||||||
}
|
}
|
||||||
[newEntry addToGroup:parent];
|
[newEntry addToGroup:parent];
|
||||||
[newEntry.undoManager setActionName:NSLocalizedString(@"NEW_ENTRY", "")];
|
[newEntry.undoManager setActionName:NSLocalizedString(@"NEW_ENTRY", "Action name for a newly created entry")];
|
||||||
[NSNotificationCenter.defaultCenter postNotificationName:MPDocumentDidAddEntryNotification
|
[NSNotificationCenter.defaultCenter postNotificationName:MPDocumentDidAddEntryNotification
|
||||||
object:self
|
object:self
|
||||||
userInfo:@{ MPDocumentEntryKey: newEntry }];
|
userInfo:@{ MPDocumentEntryKey: newEntry }];
|
||||||
@@ -661,7 +663,7 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
|
|||||||
[self.undoManager enableUndoRegistration];
|
[self.undoManager enableUndoRegistration];
|
||||||
}
|
}
|
||||||
[newGroup addToGroup:parent];
|
[newGroup addToGroup:parent];
|
||||||
[newGroup.undoManager setActionName:NSLocalizedString(@"NEW_GROUP", "")];
|
[newGroup.undoManager setActionName:NSLocalizedString(@"NEW_GROUP", "Action name for a newly created group")];
|
||||||
[NSNotificationCenter.defaultCenter postNotificationName:MPDocumentDidAddGroupNotification
|
[NSNotificationCenter.defaultCenter postNotificationName:MPDocumentDidAddGroupNotification
|
||||||
object:self
|
object:self
|
||||||
userInfo:@{ MPDocumentGroupKey : newGroup }];
|
userInfo:@{ MPDocumentGroupKey : newGroup }];
|
||||||
@@ -699,7 +701,7 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
|
|||||||
[self.undoManager setActionName:permanent ? NSLocalizedString(@"DELETE_GROUP", "Delete Group") : NSLocalizedString(@"TRASH_GROUP", "Move Group to Trash")];
|
[self.undoManager setActionName:permanent ? NSLocalizedString(@"DELETE_GROUP", "Delete Group") : NSLocalizedString(@"TRASH_GROUP", "Move Group to Trash")];
|
||||||
}
|
}
|
||||||
else if(node.asEntry) {
|
else if(node.asEntry) {
|
||||||
[self.undoManager setActionName:permanent ? NSLocalizedString(@"DELETE_ENTRY", "") : NSLocalizedString(@"TRASH_ENTRY", "Move Entry to Trash")];
|
[self.undoManager setActionName:permanent ? NSLocalizedString(@"DELETE_ENTRY", "Delete Entry") : NSLocalizedString(@"TRASH_ENTRY", "Move Entry to Trash")];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -777,7 +779,7 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
[copy addToGroup:group];
|
[copy addToGroup:group];
|
||||||
[self.undoManager setActionName:NSLocalizedString(@"ADD_TREMPLATE_ENTRY", "")];
|
[self.undoManager setActionName:NSLocalizedString(@"ADD_TREMPLATE_ENTRY", "Action to add an entry via template")];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -787,12 +789,11 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)duplicateEntryWithOptions:(KPKCopyOptions)options {
|
- (void)duplicateEntryWithOptions:(KPKCopyOptions)options {
|
||||||
BOOL plural = self.selectedEntries.count > 1;
|
|
||||||
for(KPKEntry *entry in self.selectedEntries) {
|
for(KPKEntry *entry in self.selectedEntries) {
|
||||||
KPKEntry *duplicate = [entry copyWithTitle:nil options:options];
|
KPKEntry *duplicate = [entry copyWithTitle:nil options:options];
|
||||||
[duplicate addToGroup:entry.parent];
|
[duplicate addToGroup:entry.parent];
|
||||||
}
|
}
|
||||||
[self.undoManager setActionName:plural ? NSLocalizedString(@"DUPLICATE_ENTRIES", "") : NSLocalizedString(@"DUPLICATE_ENTRY", "")];
|
[self.undoManager setActionName:[NSString stringWithFormat:NSLocalizedString(@"DUPLICATE_ENTRIES_%ld", @"Action name for duplicating entries"), self.selectedEntries.count]];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark Validation
|
#pragma mark Validation
|
||||||
@@ -855,10 +856,8 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
|
|||||||
break;
|
break;
|
||||||
case MPActionDatabaseSettings:
|
case MPActionDatabaseSettings:
|
||||||
case MPActionEditPassword:
|
case MPActionEditPassword:
|
||||||
valid &= !self.encrypted;
|
|
||||||
break;
|
|
||||||
case MPActionLock:
|
case MPActionLock:
|
||||||
valid &= self.compositeKey.hasPasswordOrKeyFile;
|
valid &= !self.encrypted;
|
||||||
break;
|
break;
|
||||||
case MPActionShowEntryHistory:
|
case MPActionShowEntryHistory:
|
||||||
valid &= (nil != targetEntry);
|
valid &= (nil != targetEntry);
|
||||||
|
|||||||
@@ -264,6 +264,8 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
|
|||||||
openPanel.canChooseDirectories = NO;
|
openPanel.canChooseDirectories = NO;
|
||||||
openPanel.canChooseFiles = YES;
|
openPanel.canChooseFiles = YES;
|
||||||
openPanel.allowedFileTypes = @[(id)kUTTypeXML];
|
openPanel.allowedFileTypes = @[(id)kUTTypeXML];
|
||||||
|
openPanel.prompt = NSLocalizedString(@"OPEN_BUTTON_IMPORT_XML_OPEN_PANEL", "Open button in the open panel to import an XML file");
|
||||||
|
openPanel.message = NSLocalizedString(@"MESSAGE_XML_OPEN_PANEL", "Message in the open panel to import an XML file");
|
||||||
[openPanel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result) {
|
[openPanel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result) {
|
||||||
if(result == NSFileHandlingPanelOKButton) {
|
if(result == NSFileHandlingPanelOKButton) {
|
||||||
[document readXMLfromURL:openPanel.URL];
|
[document readXMLfromURL:openPanel.URL];
|
||||||
@@ -291,7 +293,7 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
|
|||||||
if(!self.fixAutotypeWindowController) {
|
if(!self.fixAutotypeWindowController) {
|
||||||
self.fixAutotypeWindowController = [[MPFixAutotypeWindowController alloc] init];
|
self.fixAutotypeWindowController = [[MPFixAutotypeWindowController alloc] init];
|
||||||
}
|
}
|
||||||
[self.document addWindowController:self.fixAutotypeWindowController];
|
self.fixAutotypeWindowController.document = self.document;
|
||||||
[self.fixAutotypeWindowController.window makeKeyAndOrderFront:sender];
|
[self.fixAutotypeWindowController.window makeKeyAndOrderFront:sender];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -341,8 +343,13 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
|
|||||||
|
|
||||||
- (IBAction)lock:(id)sender {
|
- (IBAction)lock:(id)sender {
|
||||||
MPDocument *document = [self document];
|
MPDocument *document = [self document];
|
||||||
if(!document.compositeKey.hasPasswordOrKeyFile) {
|
if(!document.compositeKey) {
|
||||||
return; // Document needs a password/keyfile to be lockable
|
[self editPasswordWithCompetionHandler:^(NSInteger result) {
|
||||||
|
if(result == NSModalResponseOK) {
|
||||||
|
[self lock:sender];
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
if(document.encrypted) {
|
if(document.encrypted) {
|
||||||
return; // Document already locked
|
return; // Document already locked
|
||||||
@@ -554,7 +561,7 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
|
|||||||
alert.informativeText = NSLocalizedString(@"RECOMMEND_PASSWORD_CHANGE_ALERT_DESCRIPTION", "Informative text for the recommend password change alert");
|
alert.informativeText = NSLocalizedString(@"RECOMMEND_PASSWORD_CHANGE_ALERT_DESCRIPTION", "Informative text for the recommend password change alert");
|
||||||
|
|
||||||
[alert addButtonWithTitle:NSLocalizedString(@"CHANGE_PASSWORD_WITH_DOTS", "Button to show the password change dialog")];
|
[alert addButtonWithTitle:NSLocalizedString(@"CHANGE_PASSWORD_WITH_DOTS", "Button to show the password change dialog")];
|
||||||
[alert addButtonWithTitle:NSLocalizedString(@"CANCEL", "Cancel button to postpone password change")];
|
[alert addButtonWithTitle:NSLocalizedString(@"CHANGE_LATER", "Button to postpone the password change")];
|
||||||
alert.buttons[1].keyEquivalent = [NSString stringWithFormat:@"%c", 0x1b];
|
alert.buttons[1].keyEquivalent = [NSString stringWithFormat:@"%c", 0x1b];
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -222,6 +222,8 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) {
|
|||||||
openPanel.canChooseDirectories = NO;
|
openPanel.canChooseDirectories = NO;
|
||||||
openPanel.canChooseFiles = YES;
|
openPanel.canChooseFiles = YES;
|
||||||
openPanel.allowsMultipleSelection = YES;
|
openPanel.allowsMultipleSelection = YES;
|
||||||
|
openPanel.prompt = NSLocalizedString(@"OPEN_BUTTON_ADD_ATTACHMENT_OPEN_PANEL", "Open button in the open panel to add attachments to an entry");
|
||||||
|
openPanel.message = NSLocalizedString(@"MESSAGE_ADD_ATTACHMENT_OPEN_PANEL", "Message in the open panel to add attachments to an entry");
|
||||||
[openPanel beginSheetModalForWindow:self.windowController.window completionHandler:^(NSInteger result) {
|
[openPanel beginSheetModalForWindow:self.windowController.window completionHandler:^(NSInteger result) {
|
||||||
if(result == NSFileHandlingPanelOKButton) {
|
if(result == NSFileHandlingPanelOKButton) {
|
||||||
for (NSURL *attachmentURL in openPanel.URLs) {
|
for (NSURL *attachmentURL in openPanel.URLs) {
|
||||||
|
|||||||
@@ -49,23 +49,22 @@ typedef NS_OPTIONS(NSUInteger, MPEntrySearchFlags) {
|
|||||||
|
|
||||||
/* Wrap search criteria to be able to store them */
|
/* Wrap search criteria to be able to store them */
|
||||||
@interface MPEntrySearchContext : NSObject <NSSecureCoding,NSCopying>
|
@interface MPEntrySearchContext : NSObject <NSSecureCoding,NSCopying>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a default search context initialized with sane values.
|
* Returns a default search context initialized with sane values.
|
||||||
*
|
*
|
||||||
* @return The default search context
|
* @return The default search context
|
||||||
*/
|
*/
|
||||||
+ (instancetype)defaultContext;
|
@property (readonly, class) MPEntrySearchContext *defaultContext;
|
||||||
/**
|
/**
|
||||||
* Returns the search context using the users preferences. If none are found, a default context is created
|
* Returns the search context using the users preferences. If none are found, a default context is created
|
||||||
*
|
*
|
||||||
* @return Search context configured to the users data. If nothing is configures, defaultContext is used
|
* @return Search context configured to the users data. If nothing is configures, defaultContext is used
|
||||||
*/
|
*/
|
||||||
+ (instancetype)userContext;
|
@property (readonly, class) MPEntrySearchContext *userContext;
|
||||||
|
|
||||||
- (instancetype)initWithString:(NSString *)searchString flags:(MPEntrySearchFlags)flags;
|
|
||||||
|
|
||||||
@property (nonatomic, assign) NSInteger searchFlags;
|
@property (nonatomic, assign) NSInteger searchFlags;
|
||||||
@property (nonatomic, copy) NSString *searchString;
|
@property (nonatomic, copy) NSString *searchString;
|
||||||
|
|
||||||
|
- (instancetype)initWithString:(NSString *)searchString flags:(MPEntrySearchFlags)flags;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -632,13 +632,14 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
|
|||||||
- (void)_setupHeaderMenu {
|
- (void)_setupHeaderMenu {
|
||||||
NSMenu *headerMenu = [[NSMenu allocWithZone:[NSMenu menuZone]] init];
|
NSMenu *headerMenu = [[NSMenu allocWithZone:[NSMenu menuZone]] init];
|
||||||
|
|
||||||
[headerMenu addItemWithTitle:NSLocalizedString(@"TITLE", "") action:NULL keyEquivalent:@""];
|
[headerMenu addItemWithTitle:NSLocalizedString(@"TITLE", "Menu item to toggle display of title column in entry table") action:NULL keyEquivalent:@""];
|
||||||
[headerMenu addItemWithTitle:NSLocalizedString(@"USERNAME", "") action:NULL keyEquivalent:@""];
|
[headerMenu addItemWithTitle:NSLocalizedString(@"USERNAME", "Menu item to toggle display of username column in entry table") action:NULL keyEquivalent:@""];
|
||||||
[headerMenu addItemWithTitle:NSLocalizedString(@"PASSWORD", "") action:NULL keyEquivalent:@""];
|
[headerMenu addItemWithTitle:NSLocalizedString(@"PASSWORD", "Menu item to toggle display of password column in entry table") action:NULL keyEquivalent:@""];
|
||||||
[headerMenu addItemWithTitle:NSLocalizedString(@"URL", "") action:NULL keyEquivalent:@""];
|
[headerMenu addItemWithTitle:NSLocalizedString(@"URL", "Menu item to toggle display of url column in entry table") action:NULL keyEquivalent:@""];
|
||||||
[headerMenu addItemWithTitle:NSLocalizedString(@"NOTES", "") action:NULL keyEquivalent:@""];
|
[headerMenu addItemWithTitle:NSLocalizedString(@"NOTES", "Menu item to toggle display of notes column in entry table") action:NULL keyEquivalent:@""];
|
||||||
[headerMenu addItemWithTitle:NSLocalizedString(@"ATTACHMENTS", "") action:NULL keyEquivalent:@""];
|
[headerMenu addItemWithTitle:NSLocalizedString(@"ATTACHMENTS", "Menu item to toggle display of attachment count column in entry table") action:NULL keyEquivalent:@""];
|
||||||
[headerMenu addItemWithTitle:NSLocalizedString(@"MODIFIED", "") action:NULL keyEquivalent:@""];
|
[headerMenu addItemWithTitle:NSLocalizedString(@"MODIFIED", "Menu item to toggle display of modified date column in entry table") action:NULL keyEquivalent:@""];
|
||||||
|
[headerMenu addItemWithTitle:NSLocalizedString(@"HISTORY", "Menu item to toggle display of history count column in entry table") action:NULL keyEquivalent:@""];
|
||||||
|
|
||||||
NSArray *identifier = @[ MPEntryTableTitleColumnIdentifier,
|
NSArray *identifier = @[ MPEntryTableTitleColumnIdentifier,
|
||||||
MPEntryTableUserNameColumnIdentifier,
|
MPEntryTableUserNameColumnIdentifier,
|
||||||
@@ -646,7 +647,8 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
|
|||||||
MPEntryTableURLColumnIdentifier,
|
MPEntryTableURLColumnIdentifier,
|
||||||
MPEntryTableNotesColumnIdentifier,
|
MPEntryTableNotesColumnIdentifier,
|
||||||
MPEntryTableAttachmentColumnIdentifier,
|
MPEntryTableAttachmentColumnIdentifier,
|
||||||
MPEntryTableModfiedColumnIdentifier ];
|
MPEntryTableModfiedColumnIdentifier,
|
||||||
|
MPEntryTableHistoryColumnIdentifier ];
|
||||||
|
|
||||||
NSDictionary *options = @{ NSValueTransformerNameBindingOption : NSNegateBooleanTransformerName };
|
NSDictionary *options = @{ NSValueTransformerNameBindingOption : NSNegateBooleanTransformerName };
|
||||||
for(NSMenuItem *item in headerMenu.itemArray) {
|
for(NSMenuItem *item in headerMenu.itemArray) {
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ NSString *const kMPIconCell = @"IconCell";
|
|||||||
|
|
||||||
- (void)dealloc {
|
- (void)dealloc {
|
||||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||||
[self.window orderOut:self];
|
[self.window performClose:self];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -75,11 +75,11 @@
|
|||||||
[self.view layoutSubtreeIfNeeded];
|
[self.view layoutSubtreeIfNeeded];
|
||||||
|
|
||||||
NSMenu *autotypeMenu = self.autotypePopupButton.menu;
|
NSMenu *autotypeMenu = self.autotypePopupButton.menu;
|
||||||
NSMenuItem *inheritAutotype = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"AUTOTYPE_INHERIT", "") action:NULL keyEquivalent:@""];
|
NSMenuItem *inheritAutotype = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"AUTOTYPE_INHERIT", "Inherit autotype settings menu item") action:NULL keyEquivalent:@""];
|
||||||
inheritAutotype.tag = KPKInherit;
|
inheritAutotype.tag = KPKInherit;
|
||||||
NSMenuItem *enableAutotype = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"AUTOTYPE_YES", "") action:NULL keyEquivalent:@""];
|
NSMenuItem *enableAutotype = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"AUTOTYPE_YES", "Enable autotype menu item") action:NULL keyEquivalent:@""];
|
||||||
enableAutotype.tag = KPKInheritYES;
|
enableAutotype.tag = KPKInheritYES;
|
||||||
NSMenuItem *disableAutotype = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"AUTOTYPE_NO", "") action:NULL keyEquivalent:@""];
|
NSMenuItem *disableAutotype = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"AUTOTYPE_NO", "Disable autotype menu item") action:NULL keyEquivalent:@""];
|
||||||
disableAutotype.tag = KPKInheritNO;
|
disableAutotype.tag = KPKInheritNO;
|
||||||
|
|
||||||
[autotypeMenu addItem:inheritAutotype];
|
[autotypeMenu addItem:inheritAutotype];
|
||||||
@@ -87,11 +87,11 @@
|
|||||||
[autotypeMenu addItem:disableAutotype];
|
[autotypeMenu addItem:disableAutotype];
|
||||||
|
|
||||||
NSMenu *searchMenu = self.searchPopupButton.menu;
|
NSMenu *searchMenu = self.searchPopupButton.menu;
|
||||||
NSMenuItem *inheritSearch = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"SEARCH_INHERIT", "") action:NULL keyEquivalent:@""];
|
NSMenuItem *inheritSearch = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"SEARCH_INHERIT", "Inherit search settings menu item") action:NULL keyEquivalent:@""];
|
||||||
inheritSearch.tag = KPKInherit;
|
inheritSearch.tag = KPKInherit;
|
||||||
NSMenuItem *includeInSearch = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"SEARCH_YES", "") action:NULL keyEquivalent:@""];
|
NSMenuItem *includeInSearch = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"SEARCH_YES", "Enable search menu item") action:NULL keyEquivalent:@""];
|
||||||
includeInSearch.tag = KPKInheritYES;
|
includeInSearch.tag = KPKInheritYES;
|
||||||
NSMenuItem *excludeFromSearch = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"SEARCH_NO", "") action:NULL keyEquivalent:@""];
|
NSMenuItem *excludeFromSearch = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"SEARCH_NO", "Disable search menu item") action:NULL keyEquivalent:@""];
|
||||||
excludeFromSearch.tag = KPKInheritNO;
|
excludeFromSearch.tag = KPKInheritNO;
|
||||||
|
|
||||||
[searchMenu addItem:inheritSearch];
|
[searchMenu addItem:inheritSearch];
|
||||||
@@ -102,10 +102,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)_establishBindings {
|
- (void)_establishBindings {
|
||||||
|
NSDictionary *nullPlaceholderOptionsDict = @ {NSNullPlaceholderBindingOption: NSLocalizedString(@"NONE", @"Null placeholder for item input field") };
|
||||||
[self.titleTextField bind:NSValueBinding
|
[self.titleTextField bind:NSValueBinding
|
||||||
toObject:self
|
toObject:self
|
||||||
withKeyPath:[NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(title))]
|
withKeyPath:[NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(title))]
|
||||||
options:@{NSNullPlaceholderBindingOption: NSLocalizedString(@"NONE", @"")}];
|
options:nullPlaceholderOptionsDict];
|
||||||
[self.expiresCheckButton bind:NSValueBinding
|
[self.expiresCheckButton bind:NSValueBinding
|
||||||
toObject:self
|
toObject:self
|
||||||
withKeyPath:[NSString stringWithFormat:@"%@.%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(timeInfo)), NSStringFromSelector(@selector(expires))]
|
withKeyPath:[NSString stringWithFormat:@"%@.%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(timeInfo)), NSStringFromSelector(@selector(expires))]
|
||||||
@@ -121,7 +122,7 @@
|
|||||||
[self.autotypeSequenceTextField bind:NSValueBinding
|
[self.autotypeSequenceTextField bind:NSValueBinding
|
||||||
toObject:self
|
toObject:self
|
||||||
withKeyPath:[NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(defaultAutoTypeSequence))]
|
withKeyPath:[NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(defaultAutoTypeSequence))]
|
||||||
options:@{NSNullPlaceholderBindingOption: NSLocalizedString(@"NONE", @"")}];
|
options:nullPlaceholderOptionsDict];
|
||||||
[self.searchPopupButton bind:NSSelectedTagBinding
|
[self.searchPopupButton bind:NSSelectedTagBinding
|
||||||
toObject:self
|
toObject:self
|
||||||
withKeyPath:[NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(isSearchEnabled))]
|
withKeyPath:[NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(isSearchEnabled))]
|
||||||
|
|||||||
@@ -170,7 +170,7 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
|
|||||||
#pragma mark Custom Setter/Getter
|
#pragma mark Custom Setter/Getter
|
||||||
- (void)setDatabaseNameWrapper:(NSString *)databaseNameWrapper {
|
- (void)setDatabaseNameWrapper:(NSString *)databaseNameWrapper {
|
||||||
if(![_databaseNameWrapper isEqualToString:databaseNameWrapper]) {
|
if(![_databaseNameWrapper isEqualToString:databaseNameWrapper]) {
|
||||||
_databaseNameWrapper = (databaseNameWrapper.length == 0) ? NSLocalizedString(@"DATABASE", "Default name database") : [databaseNameWrapper copy];
|
_databaseNameWrapper = (databaseNameWrapper.length == 0) ? NSLocalizedString(@"DATABASE", "Default display name for KDB databases") : [databaseNameWrapper copy];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -47,9 +47,6 @@
|
|||||||
@property (weak) IBOutlet NSButton *changePasswordButton;
|
@property (weak) IBOutlet NSButton *changePasswordButton;
|
||||||
@property (weak) IBOutlet NSButton *hasPasswordSwitchButton;
|
@property (weak) IBOutlet NSButton *hasPasswordSwitchButton;
|
||||||
|
|
||||||
//@property (nonatomic,assign) BOOL allowsEmptyPasswordOrKey;
|
|
||||||
//@property (weak) id<MPPasswordEditWindowDelegate> delegate;
|
|
||||||
|
|
||||||
- (IBAction)clearKey:(id)sender;
|
- (IBAction)clearKey:(id)sender;
|
||||||
- (IBAction)generateKey:(id)sender;
|
- (IBAction)generateKey:(id)sender;
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ FOUNDATION_EXPORT NSString *const kMPPluginFileExtension;
|
|||||||
@property (copy, readonly) NSString *identifier;
|
@property (copy, readonly) NSString *identifier;
|
||||||
@property (copy, readonly) NSString *name;
|
@property (copy, readonly) NSString *name;
|
||||||
@property (copy, readonly) NSString *version;
|
@property (copy, readonly) NSString *version;
|
||||||
|
@property (nonatomic, strong, readonly) NSBundle *bundle;
|
||||||
|
|
||||||
- (instancetype)initWithPluginHost:(MPPluginHost *)host NS_DESIGNATED_INITIALIZER;
|
- (instancetype)initWithPluginHost:(MPPluginHost *)host NS_DESIGNATED_INITIALIZER;
|
||||||
- (instancetype)init NS_UNAVAILABLE;
|
- (instancetype)init NS_UNAVAILABLE;
|
||||||
@@ -48,8 +49,6 @@ FOUNDATION_EXPORT NSString *const kMPPluginFileExtension;
|
|||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@class KPKTree;
|
|
||||||
|
|
||||||
@interface MPPlugin (Deprecated)
|
@interface MPPlugin (Deprecated)
|
||||||
|
|
||||||
- (instancetype)initWithPluginManager:(id)manager;
|
- (instancetype)initWithPluginManager:(id)manager;
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import "MPPlugin.h"
|
#import "MPPlugin.h"
|
||||||
|
#import "MPPlugin_Private.h"
|
||||||
#import "MPPluginHost.h"
|
#import "MPPluginHost.h"
|
||||||
#import "MPSettingsHelper.h"
|
#import "MPSettingsHelper.h"
|
||||||
|
|
||||||
@@ -28,15 +29,35 @@ NSString *const kMPPluginFileExtension = @"mpplugin";
|
|||||||
|
|
||||||
@implementation MPPlugin
|
@implementation MPPlugin
|
||||||
|
|
||||||
|
@synthesize bundle = _bundle;
|
||||||
|
|
||||||
- (instancetype)initWithPluginHost:(MPPluginHost *)host {
|
- (instancetype)initWithPluginHost:(MPPluginHost *)host {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
|
if(self) {
|
||||||
|
_enabled = YES;
|
||||||
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSBundle *)bundle {
|
||||||
|
if(_enabled) {
|
||||||
|
return [NSBundle bundleForClass:self.class];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return _bundle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setBundle:(NSBundle *)bundle {
|
||||||
|
self.enabled = NO;
|
||||||
|
if(_bundle != bundle) {
|
||||||
|
_bundle = bundle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
- (NSString *)identifier {
|
- (NSString *)identifier {
|
||||||
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
|
if(self.bundle.bundleIdentifier) {
|
||||||
if(bundle && bundle.bundleIdentifier) {
|
return self.bundle.bundleIdentifier;
|
||||||
return bundle.bundleIdentifier;
|
|
||||||
}
|
}
|
||||||
return [NSString stringWithFormat:@"unknown.bundle.identifier"];
|
return [NSString stringWithFormat:@"unknown.bundle.identifier"];
|
||||||
}
|
}
|
||||||
@@ -47,11 +68,16 @@ NSString *const kMPPluginFileExtension = @"mpplugin";
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (NSString *)version {
|
- (NSString *)version {
|
||||||
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
|
if(self.bundle) {
|
||||||
NSString *version;
|
NSString *humanVersion = self.bundle.infoDictionary[@"CFBundleShortVersionString"];
|
||||||
if(bundle) {
|
NSString *version = self.bundle.infoDictionary[(NSString *)kCFBundleVersionKey];
|
||||||
version = bundle.infoDictionary[(NSString *)kCFBundleVersionKey];
|
if(humanVersion && version) {
|
||||||
if(version) {
|
return [NSString stringWithFormat:@"%@ (%@)", humanVersion, version];
|
||||||
|
}
|
||||||
|
else if(humanVersion) {
|
||||||
|
return humanVersion;
|
||||||
|
}
|
||||||
|
else if(version) {
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -71,7 +97,7 @@ NSString *const kMPPluginFileExtension = @"mpplugin";
|
|||||||
NSLog(@"Deprecated initalizer. Use initWithPluginHost: instead!");
|
NSLog(@"Deprecated initalizer. Use initWithPluginHost: instead!");
|
||||||
#pragma clang diagnostic push
|
#pragma clang diagnostic push
|
||||||
#pragma clang diagnostic ignored "-Wnonnull"
|
#pragma clang diagnostic ignored "-Wnonnull"
|
||||||
self = [self initWithPluginHost:nil];
|
self = [self initWithPluginHost:manager];
|
||||||
#pragma cland diagnostic pop
|
#pragma cland diagnostic pop
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ FOUNDATION_EXPORT NSString *const MPPluginHostPluginBundleIdentifiyerKey;
|
|||||||
|
|
||||||
@interface MPPluginHost : NSObject
|
@interface MPPluginHost : NSObject
|
||||||
|
|
||||||
|
/* List of all plugins known to the plugin manager. Disabled plugins are also present! */
|
||||||
@property (readonly, copy) NSArray <MPPlugin __kindof*> *plugins;
|
@property (readonly, copy) NSArray <MPPlugin __kindof*> *plugins;
|
||||||
@property (nonatomic, readonly) BOOL loadUnsecurePlugins;
|
@property (nonatomic, readonly) BOOL loadUnsecurePlugins;
|
||||||
|
|
||||||
@@ -38,4 +39,9 @@ FOUNDATION_EXPORT NSString *const MPPluginHostPluginBundleIdentifiyerKey;
|
|||||||
|
|
||||||
- (instancetype)init NS_UNAVAILABLE;
|
- (instancetype)init NS_UNAVAILABLE;
|
||||||
|
|
||||||
|
- (BOOL)installPluginAtURL:(NSURL *)url error:(NSError *__autoreleasing *)error;
|
||||||
|
- (BOOL)uninstallPlugin:(MPPlugin *)plugin error:(NSError *__autoreleasing *)error;
|
||||||
|
- (void)disablePlugin:(MPPlugin *)plugin;
|
||||||
|
- (void)enablePlugin:(MPPlugin *)plugin;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -23,9 +23,12 @@
|
|||||||
#import "MPPluginHost.h"
|
#import "MPPluginHost.h"
|
||||||
|
|
||||||
#import "MPPlugin.h"
|
#import "MPPlugin.h"
|
||||||
|
#import "MPPlugin_Private.h"
|
||||||
#import "NSApplication+MPAdditions.h"
|
#import "NSApplication+MPAdditions.h"
|
||||||
#import "MPSettingsHelper.h"
|
#import "MPSettingsHelper.h"
|
||||||
|
|
||||||
|
#import "NSError+Messages.h"
|
||||||
|
|
||||||
#import "KeePassKit/KeePassKit.h"
|
#import "KeePassKit/KeePassKit.h"
|
||||||
|
|
||||||
|
|
||||||
@@ -36,9 +39,9 @@ NSString *const MPPluginHostPluginBundleIdentifiyerKey = @"MPPluginHostPluginBun
|
|||||||
|
|
||||||
|
|
||||||
@interface MPPluginHost ()
|
@interface MPPluginHost ()
|
||||||
|
|
||||||
@property (strong) NSMutableArray<MPPlugin __kindof *> *mutablePlugins;
|
@property (strong) NSMutableArray<MPPlugin __kindof *> *mutablePlugins;
|
||||||
@property (nonatomic) BOOL loadUnsecurePlugins;
|
@property (nonatomic) BOOL loadUnsecurePlugins;
|
||||||
|
@property (copy) NSArray<NSString *> *disabledPlugins;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@@ -65,13 +68,18 @@ NSString *const MPPluginHostPluginBundleIdentifiyerKey = @"MPPluginHostPluginBun
|
|||||||
self = [super init];
|
self = [super init];
|
||||||
if(self) {
|
if(self) {
|
||||||
_mutablePlugins = [[NSMutableArray alloc] init];
|
_mutablePlugins = [[NSMutableArray alloc] init];
|
||||||
|
_disabledPlugins = [[NSUserDefaults standardUserDefaults] arrayForKey:kMPSettingsKeyLoadUnsecurePlugins];
|
||||||
_loadUnsecurePlugins = [[NSUserDefaults standardUserDefaults] boolForKey:kMPSettingsKeyLoadUnsecurePlugins];
|
_loadUnsecurePlugins = [[NSUserDefaults standardUserDefaults] boolForKey:kMPSettingsKeyLoadUnsecurePlugins];
|
||||||
[self _loadPlugins];
|
[self _loadPlugins];
|
||||||
|
|
||||||
[self bind:NSStringFromSelector(@selector(loadUnsecurePlugins))
|
[self bind:NSStringFromSelector(@selector(loadUnsecurePlugins))
|
||||||
toObject:[NSUserDefaultsController sharedUserDefaultsController]
|
toObject:NSUserDefaultsController.sharedUserDefaultsController
|
||||||
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyLoadUnsecurePlugins]
|
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyLoadUnsecurePlugins]
|
||||||
options:nil];
|
options:nil];
|
||||||
|
[self bind:NSStringFromSelector(@selector(disabledPlugins))
|
||||||
|
toObject:NSUserDefaultsController.sharedUserDefaultsController
|
||||||
|
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyDisabledPlugins]
|
||||||
|
options:nil];
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
@@ -80,20 +88,50 @@ NSString *const MPPluginHostPluginBundleIdentifiyerKey = @"MPPluginHostPluginBun
|
|||||||
return [self.mutablePlugins copy];
|
return [self.mutablePlugins copy];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)installPluginAtURL:(NSURL *)url error:(NSError *__autoreleasing *)error {
|
||||||
|
if(![self _isValidPluginURL:url]) {
|
||||||
|
if(error) {
|
||||||
|
*error = [NSError errorWithCode:MPErrorInvalidPlugin description:NSLocalizedString(@"ERROR_INVALID_PLUGIN", @"Error description given when adding an invalid plugin")];
|
||||||
|
}
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
NSString *fileName;
|
||||||
|
if(![url getResourceValue:&fileName forKey:NSURLNameKey error:error]) {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
NSURL *appSupportURL = [NSApp applicationSupportDirectoryURL:YES];
|
||||||
|
NSURL *destinationURL = [appSupportURL URLByAppendingPathComponent:fileName];
|
||||||
|
return [NSFileManager.defaultManager moveItemAtURL:url toURL:destinationURL error:error];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)uninstallPlugin:(MPPlugin *)plugin error:(NSError *__autoreleasing *)error {
|
||||||
|
return [NSFileManager.defaultManager trashItemAtURL:plugin.bundle.bundleURL resultingItemURL:nil error:error];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)disablePlugin:(MPPlugin *)plugin {
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)enablePlugin:(MPPlugin *)plugin {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#pragma mark - Plugin Loading
|
||||||
|
|
||||||
- (void)_loadPlugins {
|
- (void)_loadPlugins {
|
||||||
NSURL *appSupportDir = [NSApp applicationSupportDirectoryURL:YES];
|
NSURL *appSupportDir = [NSApp applicationSupportDirectoryURL:YES];
|
||||||
NSError *error;
|
NSError *error;
|
||||||
|
NSLog(@"Looking for external plugins at %@.", appSupportDir.path);
|
||||||
NSArray *externalPluginsURLs = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:appSupportDir
|
NSArray *externalPluginsURLs = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:appSupportDir
|
||||||
includingPropertiesForKeys:@[]
|
includingPropertiesForKeys:@[]
|
||||||
options:NSDirectoryEnumerationSkipsHiddenFiles
|
options:NSDirectoryEnumerationSkipsHiddenFiles
|
||||||
error:&error];
|
error:&error];
|
||||||
|
|
||||||
|
NSLog(@"Looking for internal plugins");
|
||||||
NSArray *internalPluginsURLs = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:[NSBundle mainBundle].builtInPlugInsURL
|
NSArray *internalPluginsURLs = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:[NSBundle mainBundle].builtInPlugInsURL
|
||||||
includingPropertiesForKeys:@[]
|
includingPropertiesForKeys:@[]
|
||||||
options:NSDirectoryEnumerationSkipsHiddenFiles
|
options:NSDirectoryEnumerationSkipsHiddenFiles
|
||||||
error:&error];
|
error:&error];
|
||||||
|
|
||||||
|
|
||||||
if(!externalPluginsURLs) {
|
if(!externalPluginsURLs) {
|
||||||
// No external plugins
|
// No external plugins
|
||||||
NSLog(@"No external plugins found!");
|
NSLog(@"No external plugins found!");
|
||||||
@@ -105,23 +143,31 @@ NSString *const MPPluginHostPluginBundleIdentifiyerKey = @"MPPluginHostPluginBun
|
|||||||
NSArray *pluginURLs = [externalPluginsURLs arrayByAddingObjectsFromArray:internalPluginsURLs];
|
NSArray *pluginURLs = [externalPluginsURLs arrayByAddingObjectsFromArray:internalPluginsURLs];
|
||||||
|
|
||||||
for(NSURL *pluginURL in pluginURLs) {
|
for(NSURL *pluginURL in pluginURLs) {
|
||||||
|
if(![self _isValidPluginURL:pluginURL]) {
|
||||||
if(![self _validURL:pluginURL]) {
|
NSLog(@"Skipping %@. No valid plugin file.", pluginURL.path);
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(![self _validSignature:pluginURL]) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
NSBundle *pluginBundle = [NSBundle bundleWithURL:pluginURL];
|
NSBundle *pluginBundle = [NSBundle bundleWithURL:pluginURL];
|
||||||
if(!pluginBundle) {
|
if(!pluginBundle) {
|
||||||
NSLog(@"Could not create bundle %@", pluginURL.path);
|
NSLog(@"Could not access plugin bundle %@", pluginURL.path);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(![self _isSignedPluginURL:pluginURL]) {
|
||||||
|
if(self.loadUnsecurePlugins) {
|
||||||
|
NSLog(@"Loading unsecure Plugin at %@.", pluginURL.path);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
[self _addPluginForBundle:pluginBundle error:NSLocalizedString(@"PLUGIN_ERROR_UNSECURE_PLUGIN", "Error for a plugin that was not signed properly")];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
NSError *error;
|
NSError *error;
|
||||||
if(![pluginBundle preflightAndReturnError:&error]) {
|
if(![pluginBundle preflightAndReturnError:&error]) {
|
||||||
NSLog(@"Preflight Error %@ %@", error.localizedDescription, error.localizedFailureReason );
|
NSLog(@"Preflight Error %@ %@", error.localizedDescription, error.localizedFailureReason );
|
||||||
|
[self _addPluginForBundle:pluginBundle error:error.localizedDescription];
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -131,19 +177,29 @@ NSString *const MPPluginHostPluginBundleIdentifiyerKey = @"MPPluginHostPluginBun
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(![pluginBundle loadAndReturnError:&error]) {
|
if(![pluginBundle loadAndReturnError:&error]) {
|
||||||
NSLog(@"Bunlde Loading Error %@ %@", error.localizedDescription, error.localizedFailureReason);
|
NSLog(@"Bundle Loading Error %@ %@", error.localizedDescription, error.localizedFailureReason);
|
||||||
|
[self _addPluginForBundle:pluginBundle error:error.localizedDescription];
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(![self _validateClass:pluginBundle.principalClass]) {
|
if(![self _isValidPluginClass:pluginBundle.principalClass]) {
|
||||||
NSLog(@"Wrong principal Class.");
|
NSLog(@"Wrong principal Class.");
|
||||||
|
[self _addPluginForBundle:pluginBundle error:NSLocalizedString(@"PLUGIN_ERROR_WRONG_PRINCIPAL_CLASS", "Plugin specifies the wrong principla class!".)];
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if([pluginBundle.principalClass instancesRespondToSelector:NSSelectorFromString(@"initWithPluginManager:")]) {
|
|
||||||
|
IMP defaultImp = [MPPlugin.class instanceMethodForSelector:@selector(initWithPluginManager:)];
|
||||||
|
IMP pluginImp = [pluginBundle.principalClass instanceMethodForSelector:@selector(initWithPluginManager:)];
|
||||||
|
|
||||||
|
MPPlugin *plugin;
|
||||||
|
if(defaultImp != pluginImp) {
|
||||||
NSLog(@"Plugin uses old interface. Update plugin to use initWithPluginHost: instead of initWithPluginManager:!");
|
NSLog(@"Plugin uses old interface. Update plugin to use initWithPluginHost: instead of initWithPluginManager:!");
|
||||||
|
plugin = [[pluginBundle.principalClass alloc] initWithPluginManager:self];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
plugin = [[pluginBundle.principalClass alloc] initWithPluginHost:self];
|
||||||
}
|
}
|
||||||
|
|
||||||
MPPlugin *plugin = [[pluginBundle.principalClass alloc] initWithPluginHost:self];
|
|
||||||
if(plugin) {
|
if(plugin) {
|
||||||
NSLog(@"Loaded plugin instance %@", pluginBundle.principalClass);
|
NSLog(@"Loaded plugin instance %@", pluginBundle.principalClass);
|
||||||
[[NSNotificationCenter defaultCenter] postNotificationName:MPPluginHostWillLoadPlugin
|
[[NSNotificationCenter defaultCenter] postNotificationName:MPPluginHostWillLoadPlugin
|
||||||
@@ -156,10 +212,19 @@ NSString *const MPPluginHostPluginBundleIdentifiyerKey = @"MPPluginHostPluginBun
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
NSLog(@"Unable to create instance of plugin class %@", pluginBundle.principalClass);
|
NSLog(@"Unable to create instance of plugin class %@", pluginBundle.principalClass);
|
||||||
|
[self _addPluginForBundle:pluginBundle error:NSLocalizedString(@"PLUGIN_ERROR_INTILIZATION_FAILED", "The plugin could not be initalized".)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)_addPluginForBundle:(NSBundle *)bundle error:(NSString *)errorMessage {
|
||||||
|
MPPlugin *plugin = [[MPPlugin alloc] initWithPluginHost:self];
|
||||||
|
plugin.bundle = bundle;
|
||||||
|
plugin.enabled = NO;
|
||||||
|
plugin.errorMessage = errorMessage;
|
||||||
|
[self.mutablePlugins addObject:plugin];
|
||||||
|
}
|
||||||
|
|
||||||
- (BOOL)_validateUniqueBundle:(NSBundle *)bundle {
|
- (BOOL)_validateUniqueBundle:(NSBundle *)bundle {
|
||||||
for(MPPlugin *plugin in self.mutablePlugins) {
|
for(MPPlugin *plugin in self.mutablePlugins) {
|
||||||
NSBundle *pluginBundle = [NSBundle bundleForClass:plugin.class];
|
NSBundle *pluginBundle = [NSBundle bundleForClass:plugin.class];
|
||||||
@@ -170,24 +235,20 @@ NSString *const MPPluginHostPluginBundleIdentifiyerKey = @"MPPluginHostPluginBun
|
|||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)_validURL:(NSURL *)url {
|
- (BOOL)_isValidPluginURL:(NSURL *)url {
|
||||||
return (NSOrderedSame == [url.pathExtension compare:kMPPluginFileExtension options:NSCaseInsensitiveSearch]);
|
return (NSOrderedSame == [url.pathExtension compare:kMPPluginFileExtension options:NSCaseInsensitiveSearch]);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)_validateClass:(Class)class {
|
- (BOOL)_isValidPluginClass:(Class)class {
|
||||||
return [class isSubclassOfClass:[MPPlugin class]];
|
return [class isSubclassOfClass:[MPPlugin class]];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Code by Jedda Wignall<jedda@jedda.me> http://jedda.me/2012/03/verifying-plugin-bundles-using-code-signing/ */
|
/* Code by Jedda Wignall<jedda@jedda.me> http://jedda.me/2012/03/verifying-plugin-bundles-using-code-signing/ */
|
||||||
- (BOOL)_validSignature:(NSURL *)url {
|
- (BOOL)_isSignedPluginURL:(NSURL *)url {
|
||||||
if(!url.path) {
|
if(!url.path) {
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(self.loadUnsecurePlugins) {
|
|
||||||
return YES;
|
|
||||||
}
|
|
||||||
|
|
||||||
NSTask * task = [[NSTask alloc] init];
|
NSTask * task = [[NSTask alloc] init];
|
||||||
NSPipe * pipe = [NSPipe pipe];
|
NSPipe * pipe = [NSPipe pipe];
|
||||||
NSArray* args = @[ @"--verify",
|
NSArray* args = @[ @"--verify",
|
||||||
@@ -207,16 +268,16 @@ NSString *const MPPluginHostPluginBundleIdentifiyerKey = @"MPPluginHostPluginBun
|
|||||||
NSString * taskString = [[NSString alloc] initWithData:pipe.fileHandleForReading.readDataToEndOfFile encoding:NSASCIIStringEncoding];
|
NSString * taskString = [[NSString alloc] initWithData:pipe.fileHandleForReading.readDataToEndOfFile encoding:NSASCIIStringEncoding];
|
||||||
if ([taskString rangeOfString:@"modified"].length > 0 || [taskString rangeOfString:@"a sealed resource is missing or invalid"].length > 0) {
|
if ([taskString rangeOfString:@"modified"].length > 0 || [taskString rangeOfString:@"a sealed resource is missing or invalid"].length > 0) {
|
||||||
// The plugin has been modified or resources removed since being signed. You probably don't want to load this.
|
// The plugin has been modified or resources removed since being signed. You probably don't want to load this.
|
||||||
NSLog(@"Plugin %@ modified - not loaded", pluginPath); // log a real error here
|
NSLog(@"Plugin %@ modified", pluginPath); // log a real error here
|
||||||
}
|
}
|
||||||
else if ([taskString rangeOfString:@"failed to satisfy"].length > 0) {
|
else if ([taskString rangeOfString:@"failed to satisfy"].length > 0) {
|
||||||
// The plugin is missing resources since being signed. Don't load.
|
// The plugin is missing resources since being signed. Don't load.
|
||||||
// throw an error
|
// throw an error
|
||||||
NSLog(@"Plugin %@ not signed by correct CA - not loaded", pluginPath); // log a real error here
|
NSLog(@"Plugin %@ not signed by correct CA", pluginPath); // log a real error here
|
||||||
}
|
}
|
||||||
else if ([taskString rangeOfString:@"not signed at all"].length > 0) {
|
else if ([taskString rangeOfString:@"not signed at all"].length > 0) {
|
||||||
// The plugin was not code signed at all. Don't load.
|
// The plugin was not code signed at all. Don't load.
|
||||||
NSLog(@"Plugin %@ not signed at all - don't load.", pluginPath); // log a real error here
|
NSLog(@"Plugin %@ not signed at all.", pluginPath); // log a real error here
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
NSLog(@"Unkown CodeSign Error!");
|
NSLog(@"Unkown CodeSign Error!");
|
||||||
@@ -225,5 +286,4 @@ NSString *const MPPluginHostPluginBundleIdentifiyerKey = @"MPPluginHostPluginBun
|
|||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -25,4 +25,7 @@
|
|||||||
|
|
||||||
@interface MPPluginSettingsController : MPViewController <MPSettingsTab>
|
@interface MPPluginSettingsController : MPViewController <MPSettingsTab>
|
||||||
|
|
||||||
|
- (IBAction)addOrRemovePlugin:(id)sender;
|
||||||
|
- (IBAction)browsePlugins:(id)sender;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -21,16 +21,31 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import "MPPluginSettingsController.h"
|
#import "MPPluginSettingsController.h"
|
||||||
|
#import "MPPluginTabelCellView.h"
|
||||||
#import "MPPluginHost.h"
|
#import "MPPluginHost.h"
|
||||||
#import "MPPlugin.h"
|
#import "MPPlugin.h"
|
||||||
|
#import "MPPlugin_Private.h"
|
||||||
|
|
||||||
|
#import "MPConstants.h"
|
||||||
#import "MPSettingsHelper.h"
|
#import "MPSettingsHelper.h"
|
||||||
|
|
||||||
|
#import "NSApplication+MPAdditions.h"
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
typedef NS_ENUM(NSUInteger, MPPluginSegmentType) {
|
||||||
|
MPAddPluginSegment = 0,
|
||||||
|
MPRemovePluginSegment = 1
|
||||||
|
};
|
||||||
|
|
||||||
@interface MPPluginSettingsController () <NSTableViewDataSource, NSTableViewDelegate>
|
@interface MPPluginSettingsController () <NSTableViewDataSource, NSTableViewDelegate>
|
||||||
|
|
||||||
@property (weak) IBOutlet NSTableView *pluginTableView;
|
@property (weak) IBOutlet NSTableView *pluginTableView;
|
||||||
@property (weak) IBOutlet NSView *settingsView;
|
@property (weak) IBOutlet NSView *settingsView;
|
||||||
|
@property (strong) IBOutlet NSView *fallbackSettingsView;
|
||||||
|
@property (weak) IBOutlet NSTextField *fallbackDescriptionTextField;
|
||||||
@property (weak) IBOutlet NSButton *loadInsecurePlugsinCheckButton;
|
@property (weak) IBOutlet NSButton *loadInsecurePlugsinCheckButton;
|
||||||
|
@property (weak) IBOutlet NSSegmentedControl *addRemovePluginsControl;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@@ -55,28 +70,39 @@
|
|||||||
- (void)viewDidLoad {
|
- (void)viewDidLoad {
|
||||||
self.pluginTableView.delegate = self;
|
self.pluginTableView.delegate = self;
|
||||||
self.pluginTableView.dataSource = self;
|
self.pluginTableView.dataSource = self;
|
||||||
|
[self.addRemovePluginsControl setEnabled:NO forSegment:MPRemovePluginSegment];
|
||||||
|
[self.fallbackSettingsView removeFromSuperview];
|
||||||
[self.loadInsecurePlugsinCheckButton bind:NSValueBinding
|
[self.loadInsecurePlugsinCheckButton bind:NSValueBinding
|
||||||
toObject:[NSUserDefaultsController sharedUserDefaultsController]
|
toObject:[NSUserDefaultsController sharedUserDefaultsController]
|
||||||
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyLoadUnsecurePlugins]
|
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyLoadUnsecurePlugins]
|
||||||
options:nil];
|
options:nil];
|
||||||
|
[self.pluginTableView registerForDraggedTypes:@[(NSString *)kUTTypeFileURL]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# pragma mark - TableView
|
||||||
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
|
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
|
||||||
return [MPPluginHost sharedHost].plugins.count;
|
return [MPPluginHost sharedHost].plugins.count;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
|
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
|
||||||
MPPlugin *plugin = [self pluginForRow:row];
|
MPPlugin *plugin = [self pluginForRow:row];
|
||||||
NSTableCellView *view = [tableView makeViewWithIdentifier:tableColumn.identifier owner:nil];
|
MPPluginTabelCellView *view = [tableView makeViewWithIdentifier:tableColumn.identifier owner:nil];
|
||||||
|
if(plugin.enabled) {
|
||||||
view.textField.stringValue = plugin.name;
|
view.textField.stringValue = plugin.name;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
view.textField.stringValue = (plugin.errorMessage.length > 0
|
||||||
|
? [NSString stringWithFormat:NSLocalizedString(@"PLUGIN_NAME_ERROR_%@", "Name for unloaded plugin with errors"), plugin.name]
|
||||||
|
: [NSString stringWithFormat:NSLocalizedString(@"PLUGIN_NAME_DISABLED_%@", "name for disabled unloaded plugin"), plugin.name]);
|
||||||
|
}
|
||||||
|
view.addionalTextField.stringValue = [NSString stringWithFormat:NSLocalizedString(@"PLUGIN_VERSION_%@", "Plugin version. Include a %@ placeholder for version string"), plugin.version];
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)showSettingsForPlugin:(MPPlugin *)plugin {
|
- (void)showSettingsForPlugin:(MPPlugin *)plugin {
|
||||||
/* move old one regardless */
|
/* move old one regardless */
|
||||||
[self.settingsView.subviews.firstObject removeFromSuperview];
|
[self.settingsView.subviews.firstObject removeFromSuperview];
|
||||||
|
if(plugin.enabled) {
|
||||||
if([plugin conformsToProtocol:@protocol(MPPluginSettings)]) {
|
if([plugin conformsToProtocol:@protocol(MPPluginSettings)]) {
|
||||||
NSAssert([plugin respondsToSelector:@selector(settingsViewController)], @"Required getter for settings on plugins");
|
NSAssert([plugin respondsToSelector:@selector(settingsViewController)], @"Required getter for settings on plugins");
|
||||||
NSViewController *viewController = ((id<MPPluginSettings>)plugin).settingsViewController;
|
NSViewController *viewController = ((id<MPPluginSettings>)plugin).settingsViewController;
|
||||||
@@ -87,6 +113,20 @@
|
|||||||
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:dict]];
|
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:dict]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(nil != plugin) {
|
||||||
|
[self.settingsView addSubview:self.fallbackSettingsView];
|
||||||
|
NSDictionary *dict = @{ @"view" : self.fallbackSettingsView,
|
||||||
|
@"table" : self.pluginTableView.enclosingScrollView };
|
||||||
|
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|" options:0 metrics:nil views:dict]];
|
||||||
|
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:dict]];
|
||||||
|
if(plugin.errorMessage.length > 0) {
|
||||||
|
self.fallbackDescriptionTextField.stringValue = plugin.errorMessage;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
self.fallbackDescriptionTextField.stringValue = NSLocalizedString(@"PLUGIN_SETTINGS_GENERIC_ERROR_MESSAGE", "Generic message displayed if no details are know why a plugin was not loaded.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
- (MPPlugin *)pluginForRow:(NSInteger)row {
|
- (MPPlugin *)pluginForRow:(NSInteger)row {
|
||||||
NSArray<MPPlugin __kindof *> *plugins = [MPPluginHost sharedHost].plugins;
|
NSArray<MPPlugin __kindof *> *plugins = [MPPluginHost sharedHost].plugins;
|
||||||
@@ -98,7 +138,137 @@
|
|||||||
|
|
||||||
- (void)tableViewSelectionDidChange:(NSNotification *)notification {
|
- (void)tableViewSelectionDidChange:(NSNotification *)notification {
|
||||||
NSTableView *table = notification.object;
|
NSTableView *table = notification.object;
|
||||||
[self showSettingsForPlugin:[self pluginForRow:table.selectedRow]];
|
if(table != self.pluginTableView) {
|
||||||
|
return; // wrong tableview
|
||||||
|
}
|
||||||
|
MPPlugin *plugin = [self pluginForRow:table.selectedRow];
|
||||||
|
[self.addRemovePluginsControl setEnabled:(nil != plugin) forSegment:MPRemovePluginSegment];
|
||||||
|
[self showSettingsForPlugin:plugin];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSDragOperation)tableView:(NSTableView *)tableView validateDrop:(id <NSDraggingInfo>)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)dropOperation {
|
||||||
|
NSArray *arrayOfURLs = [[info draggingPasteboard] readObjectsForClasses:@[NSURL.class] options:nil];
|
||||||
|
if(arrayOfURLs.count != 1) {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
NSURL *pluginURL = arrayOfURLs.firstObject;
|
||||||
|
if(!pluginURL.isFileURL) {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
if(![pluginURL.lastPathComponent.pathExtension isEqualToString:kMPPluginFileExtension]) {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
[tableView setDropRow:-1 dropOperation:NSTableViewDropOn];
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)tableView:(NSTableView *)tableView acceptDrop:(nonnull id<NSDraggingInfo>)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)dropOperation {
|
||||||
|
/* dispatch installation since we do not want to wait for the result */
|
||||||
|
if(dropOperation != NSTableViewDropOn) {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
NSPasteboard *draggingPasteboard = [info draggingPasteboard];
|
||||||
|
NSArray *arrayOfURLs = [draggingPasteboard readObjectsForClasses:@[NSURL.class] options:nil];
|
||||||
|
if(arrayOfURLs.count != 1) {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
[self _addPlugin:arrayOfURLs.firstObject];
|
||||||
|
});
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - Actions
|
||||||
|
|
||||||
|
- (IBAction)browsePlugins:(id)sender {
|
||||||
|
[NSWorkspace.sharedWorkspace openURL:[NSApp applicationSupportDirectoryURL:YES]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)addOrRemovePlugin:(id)sender {
|
||||||
|
if(sender != self.addRemovePluginsControl) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch(self.addRemovePluginsControl.selectedSegment) {
|
||||||
|
case MPAddPluginSegment:
|
||||||
|
[self showAddPluginPanel];
|
||||||
|
break;
|
||||||
|
case MPRemovePluginSegment:
|
||||||
|
[self showRemovePluginAlert];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)showAddPluginPanel {
|
||||||
|
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
|
||||||
|
openPanel.allowedFileTypes = @[kMPPluginFileExtension];
|
||||||
|
openPanel.allowsMultipleSelection = NO;
|
||||||
|
openPanel.canChooseFiles = YES;
|
||||||
|
openPanel.canChooseDirectories = NO;
|
||||||
|
openPanel.prompt = NSLocalizedString(@"OPEN_BUTTON_ADD_PLUGIN_OPEN_PANEL", "Open button in the add plugin open panel");
|
||||||
|
openPanel.message = NSLocalizedString(@"MESSAGE_ADD_PLUGIN_OPEN_PANEL", "Message in the add plugin open panel");
|
||||||
|
[openPanel beginSheetModalForWindow:self.view.window completionHandler:^(NSModalResponse result) {
|
||||||
|
if(NSModalResponseOK) {
|
||||||
|
if(openPanel.URLs.count == 1) {
|
||||||
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||||
|
[self _addPlugin:openPanel.URLs.firstObject];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_addPlugin:(NSURL *)bundleURL {
|
||||||
|
NSError *error;
|
||||||
|
if(![[MPPluginHost sharedHost] installPluginAtURL:bundleURL error:&error]) {
|
||||||
|
[NSApp presentError:error modalForWindow:self.view.window delegate:nil didPresentSelector:NULL contextInfo:NULL];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
[self _showRestartAlert];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)showRemovePluginAlert {
|
||||||
|
MPPlugin *plugin = [self pluginForRow:self.pluginTableView.selectedRow];
|
||||||
|
if(!plugin) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
NSAlert *alert = [[NSAlert alloc] init];
|
||||||
|
alert.alertStyle = NSAlertStyleWarning;
|
||||||
|
alert.messageText = [NSString stringWithFormat:NSLocalizedString(@"ALERT_MESSAGE_TEXT_REALLY_UNINSTALL_PLUGIN_%@", "Alert message text to ask the user if he really want to uninstall the plugin. Include %@ placeholder for plugin name"), plugin.name];
|
||||||
|
alert.informativeText = NSLocalizedString(@"ALERT_INFORMATIVE_TEXT_REALLY_UNINSTALL_PLUGIN", "Alert informative text to ask the user if he really want to uninstall the plugin");
|
||||||
|
[alert addButtonWithTitle:NSLocalizedString(@"UNINSTALL", @"Uninstall plugin")];
|
||||||
|
[alert addButtonWithTitle:NSLocalizedString(@"KEEP_PLUGIN", @"Do not install the plugin")];
|
||||||
|
[alert beginSheetModalForWindow:self.view.window completionHandler:^(NSModalResponse returnCode) {
|
||||||
|
if(returnCode == NSAlertFirstButtonReturn) {
|
||||||
|
[self _removePlugin:plugin];
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_removePlugin:(MPPlugin *)plugin {
|
||||||
|
NSError *error;
|
||||||
|
if(![[MPPluginHost sharedHost] uninstallPlugin:plugin error:&error]) {
|
||||||
|
[NSApp presentError:error modalForWindow:self.view.window delegate:nil didPresentSelector:NULL contextInfo:NULL];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
[self _showRestartAlert];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_showRestartAlert {
|
||||||
|
NSAlert *alert = [[NSAlert alloc] init];
|
||||||
|
alert.alertStyle = NSAlertStyleInformational;
|
||||||
|
alert.messageText = NSLocalizedString(@"ALERT_MESSAGE_PLUGINS_CHANGED_SUGGEST_RESTART", "Alert message text when plugins or their settings change and require a restart");
|
||||||
|
alert.informativeText = NSLocalizedString(@"ALERT_INFORMATIVE_TEXT_PLUGINS_CHANGED_SUGGEST_RESTART", "Alert informative text when plugins or their settings change and require a restart");
|
||||||
|
[alert addButtonWithTitle:NSLocalizedString(@"RESTART", @"Restart")];
|
||||||
|
[alert addButtonWithTitle:NSLocalizedString(@"KEEP_RUNNING", @"Do not restart MacPass")];
|
||||||
|
[alert beginSheetModalForWindow:self.view.window completionHandler:^(NSModalResponse returnCode) {
|
||||||
|
if(returnCode == NSAlertFirstButtonReturn) {
|
||||||
|
[NSApp relaunchAfterDelay:3];
|
||||||
|
}
|
||||||
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
15
MacPass/MPPluginTabelCellView.h
Normal file
15
MacPass/MPPluginTabelCellView.h
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
//
|
||||||
|
// MPPluginTabelCellView.h
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 17.11.17.
|
||||||
|
// Copyright © 2017 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
@interface MPPluginTabelCellView : NSTableCellView
|
||||||
|
|
||||||
|
@property (weak) IBOutlet NSTextField *addionalTextField;
|
||||||
|
|
||||||
|
@end
|
||||||
13
MacPass/MPPluginTabelCellView.m
Normal file
13
MacPass/MPPluginTabelCellView.m
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
//
|
||||||
|
// MPPluginTabelCellView.m
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 17.11.17.
|
||||||
|
// Copyright © 2017 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MPPluginTabelCellView.h"
|
||||||
|
|
||||||
|
@implementation MPPluginTabelCellView
|
||||||
|
|
||||||
|
@end
|
||||||
17
MacPass/MPPlugin_Private.h
Normal file
17
MacPass/MPPlugin_Private.h
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// MPPlugin+Private.h
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 20.11.17.
|
||||||
|
// Copyright © 2017 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MPPlugin.h"
|
||||||
|
|
||||||
|
@interface MPPlugin ()
|
||||||
|
|
||||||
|
@property (nonatomic, strong) NSBundle *bundle;
|
||||||
|
@property (copy) NSString *errorMessage;
|
||||||
|
@property BOOL enabled;
|
||||||
|
|
||||||
|
@end
|
||||||
@@ -79,6 +79,7 @@ APPKIT_EXTERN NSString *const kMPSettingsKeyUpdatePasswordOnTemplateEntries;
|
|||||||
|
|
||||||
/* Plugins */
|
/* Plugins */
|
||||||
APPKIT_EXTERN NSString *const kMPSettingsKeyLoadUnsecurePlugins; // If set to YES this will load all plugins regardless of their codesignature status
|
APPKIT_EXTERN NSString *const kMPSettingsKeyLoadUnsecurePlugins; // If set to YES this will load all plugins regardless of their codesignature status
|
||||||
|
APPKIT_EXTERN NSString *const kMPSettingsKeyDisabledPlugins; // NSArray of bundle identifiers of disabled plugins
|
||||||
|
|
||||||
typedef NS_ENUM(NSUInteger, MPFileChangeStrategy) {
|
typedef NS_ENUM(NSUInteger, MPFileChangeStrategy) {
|
||||||
MPFileChangeStrategyAsk,
|
MPFileChangeStrategyAsk,
|
||||||
|
|||||||
@@ -74,7 +74,8 @@ NSString *const kMPSettingsKeyDoubleClickURLAction = @"Double
|
|||||||
NSString *const kMPSettingsKeyDoubleClickTitleAction = @"DoubleClickTitleAction";
|
NSString *const kMPSettingsKeyDoubleClickTitleAction = @"DoubleClickTitleAction";
|
||||||
NSString *const kMPSettingsKeyUpdatePasswordOnTemplateEntries = @"UpdatePasswordOnTemplateEntries";
|
NSString *const kMPSettingsKeyUpdatePasswordOnTemplateEntries = @"UpdatePasswordOnTemplateEntries";
|
||||||
|
|
||||||
NSString *const kMPSettingsKeyLoadUnsecurePlugins = @"MPLoadUnsecurePlugins";
|
NSString *const kMPSettingsKeyLoadUnsecurePlugins = @"LoadUnsecurePlugins";
|
||||||
|
NSString *const kMPSettingsKeyDisabledPlugins = @"DisabledPlugins";
|
||||||
|
|
||||||
/* Deprecated */
|
/* Deprecated */
|
||||||
NSString *const kMPDeprecatedSettingsKeyRememberKeyFilesForDatabases = @"kMPSettingsKeyRememberKeyFilesForDatabases";
|
NSString *const kMPDeprecatedSettingsKeyRememberKeyFilesForDatabases = @"kMPSettingsKeyRememberKeyFilesForDatabases";
|
||||||
@@ -86,6 +87,7 @@ NSString *const kMPDeprecatedSettingsKeyHttpPort = @"Ht
|
|||||||
NSString *const kMPDeprecatedSettingsKeyEnableHttpServer = @"EnableHttpServer";
|
NSString *const kMPDeprecatedSettingsKeyEnableHttpServer = @"EnableHttpServer";
|
||||||
NSString *const kMPDeprecatedSettingsKeyShowMenuItem = @"ShowMenuItem";
|
NSString *const kMPDeprecatedSettingsKeyShowMenuItem = @"ShowMenuItem";
|
||||||
NSString *const kMPDeprecatedSettingsKeyDefaultPasswordRounds = @"KeyDefaultPasswordRounds";
|
NSString *const kMPDeprecatedSettingsKeyDefaultPasswordRounds = @"KeyDefaultPasswordRounds";
|
||||||
|
NSString *const kMPDepricatedSettingsKeyLoadUnsecurePlugins = @"MPLoadUnsecurePlugins";
|
||||||
|
|
||||||
|
|
||||||
@implementation MPSettingsHelper
|
@implementation MPSettingsHelper
|
||||||
@@ -99,6 +101,7 @@ NSString *const kMPDeprecatedSettingsKeyDefaultPasswordRounds = @"Ke
|
|||||||
[self _migrateURLDoubleClickPreferences];
|
[self _migrateURLDoubleClickPreferences];
|
||||||
[self _migrateEntrySearchFlags];
|
[self _migrateEntrySearchFlags];
|
||||||
[self _migrateRememberedKeyFiles];
|
[self _migrateRememberedKeyFiles];
|
||||||
|
[self _migrateLoadUnsecurePlugins];
|
||||||
[self _removeDeprecatedValues];
|
[self _removeDeprecatedValues];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,7 +146,8 @@ NSString *const kMPDeprecatedSettingsKeyDefaultPasswordRounds = @"Ke
|
|||||||
kMPSettingsKeyDoubleClickURLAction: @(MPDoubleClickURLActionCopy),
|
kMPSettingsKeyDoubleClickURLAction: @(MPDoubleClickURLActionCopy),
|
||||||
kMPSettingsKeyDoubleClickTitleAction: @(MPDoubleClickTitleActionInspect),
|
kMPSettingsKeyDoubleClickTitleAction: @(MPDoubleClickTitleActionInspect),
|
||||||
kMPSettingsKeyLoadUnsecurePlugins: @NO,
|
kMPSettingsKeyLoadUnsecurePlugins: @NO,
|
||||||
kMPSettingsKeyUpdatePasswordOnTemplateEntries: @YES
|
kMPSettingsKeyUpdatePasswordOnTemplateEntries: @YES,
|
||||||
|
kMPSettingsKeyDisabledPlugins: @[]
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
return standardDefaults;
|
return standardDefaults;
|
||||||
@@ -162,7 +166,8 @@ NSString *const kMPDeprecatedSettingsKeyDefaultPasswordRounds = @"Ke
|
|||||||
/* Moved to KeePassHttp Plugin */
|
/* Moved to KeePassHttp Plugin */
|
||||||
kMPDeprecatedSettingsKeyHttpPort,
|
kMPDeprecatedSettingsKeyHttpPort,
|
||||||
kMPDeprecatedSettingsKeyEnableHttpServer,
|
kMPDeprecatedSettingsKeyEnableHttpServer,
|
||||||
kMPDeprecatedSettingsKeyShowMenuItem
|
kMPDeprecatedSettingsKeyShowMenuItem,
|
||||||
|
kMPDepricatedSettingsKeyLoadUnsecurePlugins
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
return deprecatedSettings;
|
return deprecatedSettings;
|
||||||
@@ -251,4 +256,16 @@ NSString *const kMPDeprecatedSettingsKeyDefaultPasswordRounds = @"Ke
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
+ (void)_migrateLoadUnsecurePlugins {
|
||||||
|
id value = [NSUserDefaults.standardUserDefaults objectForKey:kMPDepricatedSettingsKeyLoadUnsecurePlugins];
|
||||||
|
if(!value) {
|
||||||
|
return; // value already migrated or was set to default value
|
||||||
|
}
|
||||||
|
BOOL oldValue = [NSUserDefaults.standardUserDefaults boolForKey:kMPDepricatedSettingsKeyLoadUnsecurePlugins];
|
||||||
|
if(oldValue != [[self _standardDefaults][kMPDepricatedSettingsKeyLoadUnsecurePlugins] boolValue]) {
|
||||||
|
[NSUserDefaults.standardUserDefaults setBool:oldValue forKey:kMPSettingsKeyLoadUnsecurePlugins];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -228,16 +228,16 @@ NSString *const MPToolbarItemHistory = @"TOOLBAR_HISTORY";
|
|||||||
static NSDictionary *labelDict;
|
static NSDictionary *labelDict;
|
||||||
static dispatch_once_t onceToken;
|
static dispatch_once_t onceToken;
|
||||||
dispatch_once(&onceToken, ^{
|
dispatch_once(&onceToken, ^{
|
||||||
labelDict = @{ MPToolbarItemLock: NSLocalizedString(@"LOCK", @""),
|
labelDict = @{ MPToolbarItemLock: NSLocalizedString(@"LOCK", @"Toolbar item to Lock the database"),
|
||||||
MPToolbarItemAction: NSLocalizedString(@"ACTION", @""),
|
MPToolbarItemAction: NSLocalizedString(@"ACTION", @"Toolbar item with action menu"),
|
||||||
MPToolbarItemAddEntry: NSLocalizedString(@"NEW_ENTRY", @""),
|
MPToolbarItemAddEntry: NSLocalizedString(@"NEW_ENTRY", @"Toolbar item new entry"),
|
||||||
MPToolbarItemAddGroup: NSLocalizedString(@"NEW_GROUP", @""),
|
MPToolbarItemAddGroup: NSLocalizedString(@"NEW_GROUP", @"Toolbar item new group"),
|
||||||
MPToolbarItemCopyPassword: NSLocalizedString(@"COPY_PASSWORD", @""),
|
MPToolbarItemCopyPassword: NSLocalizedString(@"COPY_PASSWORD", @"Toolbar item copy password"),
|
||||||
MPToolbarItemCopyUsername: NSLocalizedString(@"COPY_USERNAME", @""),
|
MPToolbarItemCopyUsername: NSLocalizedString(@"COPY_USERNAME", @"Toolbar item copy username"),
|
||||||
MPToolbarItemDelete: NSLocalizedString(@"DELETE", @""),
|
MPToolbarItemDelete: NSLocalizedString(@"DELETE", @"Toolbar item delete item"),
|
||||||
MPToolbarItemInspector: NSLocalizedString(@"INSPECTOR", @""),
|
MPToolbarItemInspector: NSLocalizedString(@"INSPECTOR", @"Toolbar item toggle inspector"),
|
||||||
MPToolbarItemSearch: NSLocalizedString(@"SEARCH", @""),
|
MPToolbarItemSearch: NSLocalizedString(@"SEARCH", @"Search input in Toolbar "),
|
||||||
MPToolbarItemHistory: NSLocalizedString(@"SHOW_HISTORY", @""),
|
MPToolbarItemHistory: NSLocalizedString(@"SHOW_HISTORY", @"Toolbar item to toggel history display"),
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
return labelDict[identifier];
|
return labelDict[identifier];
|
||||||
@@ -263,13 +263,13 @@ NSString *const MPToolbarItemHistory = @"TOOLBAR_HISTORY";
|
|||||||
|
|
||||||
- (NSMenu *)_allocateSearchMenuTemplate {
|
- (NSMenu *)_allocateSearchMenuTemplate {
|
||||||
NSMenu *menu = [[NSMenu alloc] init];
|
NSMenu *menu = [[NSMenu alloc] init];
|
||||||
NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"CLEAR_RECENT_SEARCHES", @"") action:NULL keyEquivalent:@""];
|
NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"CLEAR_RECENT_SEARCHES", @"Menu to clear recent searches") action:NULL keyEquivalent:@""];
|
||||||
item.tag = NSSearchFieldClearRecentsMenuItemTag;
|
item.tag = NSSearchFieldClearRecentsMenuItemTag;
|
||||||
[menu addItem:item];
|
[menu addItem:item];
|
||||||
|
|
||||||
[menu addItem:[NSMenuItem separatorItem]];
|
[menu addItem:[NSMenuItem separatorItem]];
|
||||||
|
|
||||||
item = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"RECENT_SEARCHES", @"") action:NULL keyEquivalent:@""];
|
item = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"RECENT_SEARCHES", @"Recent searches menu item") action:NULL keyEquivalent:@""];
|
||||||
item.tag = NSSearchFieldRecentsTitleMenuItemTag;
|
item.tag = NSSearchFieldRecentsTitleMenuItemTag;
|
||||||
[menu addItem:item];
|
[menu addItem:item];
|
||||||
|
|
||||||
|
|||||||
@@ -80,6 +80,8 @@
|
|||||||
openPanel.allowsMultipleSelection = NO;
|
openPanel.allowsMultipleSelection = NO;
|
||||||
openPanel.canChooseDirectories = NO;
|
openPanel.canChooseDirectories = NO;
|
||||||
openPanel.canChooseFiles = YES;
|
openPanel.canChooseFiles = YES;
|
||||||
|
openPanel.prompt = NSLocalizedString(@"SELECT_DEFAULT_BROWSER_OPEN_PANEL_SELECT_BUTTON", "Label for the select browser button on the open panel for selecting which browser to use for opening URLs");
|
||||||
|
openPanel.message = NSLocalizedString(@"SELECT_DEFAULT_BROWSER_OPEN_PANEL_MESSAGE", "Message on the open panel for selecting which browser to use for opening URLs");
|
||||||
openPanel.allowedFileTypes = @[@"app"];
|
openPanel.allowedFileTypes = @[@"app"];
|
||||||
|
|
||||||
[openPanel beginSheetModalForWindow:self.view.window completionHandler:^(NSInteger result) {
|
[openPanel beginSheetModalForWindow:self.view.window completionHandler:^(NSInteger result) {
|
||||||
|
|||||||
@@ -58,7 +58,7 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>0.7</string>
|
<string>${CURRENT_PROJECT_VERSION}</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
@@ -68,7 +68,7 @@
|
|||||||
<key>MPHelpURL</key>
|
<key>MPHelpURL</key>
|
||||||
<string>https://github.com/mstarke/MacPass</string>
|
<string>https://github.com/mstarke/MacPass</string>
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
<string>Copyright © 2012-2016 HicknHack Software GmbH. All rights reserved.</string>
|
<string>Copyright © 2012-2017 HicknHack Software GmbH. All rights reserved.</string>
|
||||||
<key>NSMainNibFile</key>
|
<key>NSMainNibFile</key>
|
||||||
<string>MainMenu</string>
|
<string>MainMenu</string>
|
||||||
<key>NSPrincipalClass</key>
|
<key>NSPrincipalClass</key>
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
@property (copy, readonly, nullable) NSURL *applicationSupportDirectoryURL;
|
@property (copy, readonly, nullable) NSURL *applicationSupportDirectoryURL;
|
||||||
|
|
||||||
- (NSURL *_Nullable)applicationSupportDirectoryURL:(BOOL)create;
|
- (NSURL *_Nullable)applicationSupportDirectoryURL:(BOOL)create;
|
||||||
|
- (void)relaunchAfterDelay:(CGFloat)seconds;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
|||||||
@@ -52,4 +52,12 @@
|
|||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)relaunchAfterDelay:(CGFloat)seconds {
|
||||||
|
NSTask *task = [[NSTask alloc] init];
|
||||||
|
task.launchPath = @"/bin/sh";
|
||||||
|
task.arguments = @[ @"-c", [NSString stringWithFormat:@"sleep %f; open \"%@\"", seconds, NSBundle.mainBundle.bundlePath] ];
|
||||||
|
[task launch];
|
||||||
|
[self terminate:nil];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ FOUNDATION_EXPORT NSString *const MPErrorDomain;
|
|||||||
|
|
||||||
typedef NS_ENUM(NSInteger, MPErrorCodes) {
|
typedef NS_ENUM(NSInteger, MPErrorCodes) {
|
||||||
MPErrorNoPasswordOrKeyFile = 10000,
|
MPErrorNoPasswordOrKeyFile = 10000,
|
||||||
|
MPErrorInvalidPlugin
|
||||||
};
|
};
|
||||||
|
|
||||||
@interface NSError (Messages)
|
@interface NSError (Messages)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
"TN3-3a-LaA.title" = "Inhalt";
|
"TN3-3a-LaA.title" = "Inhalt";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "There are multiple matches for the current window. Please select which match should be used."; ObjectID = "gcf-gb-ZsF"; */
|
/* Class = "NSTextFieldCell"; title = "There are multiple matches for the current window. Please select which match should be used."; ObjectID = "gcf-gb-ZsF"; */
|
||||||
"gcf-gb-ZsF.title" = "Es gibt mehrere Treffer für den aktuellen Fenstertitel. Bitte wählen Sie den Eintrag aus der Liste aus, welcher verwendet werdern soll.";
|
"gcf-gb-ZsF.title" = "Es gibt mehrere Treffer für den aktuellen Fenstertitel. Bitte wählen Sie den Eintrag aus der Liste aus, welcher verwendet werden soll.";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Perform Autotype"; ObjectID = "w7H-hx-CUF"; */
|
/* Class = "NSButtonCell"; title = "Perform Autotype"; ObjectID = "w7H-hx-CUF"; */
|
||||||
"w7H-hx-CUF.title" = "Auto-Type ausführen.";
|
"w7H-hx-CUF.title" = "Auto-Type ausführen.";
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
/* Class = "NSTextFieldCell"; title = "Search:"; ObjectID = "7"; */
|
/* Class = "NSTextFieldCell"; title = "Search:"; ObjectID = "7"; */
|
||||||
"7.title" = "Search:";
|
"7.title" = "Suche:";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Empty Trash"; ObjectID = "8Ok-oe-6AB"; */
|
/* Class = "NSButtonCell"; title = "Empty Trash"; ObjectID = "8Ok-oe-6AB"; */
|
||||||
"8Ok-oe-6AB.title" = "Empty Trash";
|
"8Ok-oe-6AB.title" = "Papierkorb leeren.";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Trash"; ObjectID = "8P1-Rp-sF4"; */
|
/* Class = "NSTextFieldCell"; title = "Trash"; ObjectID = "8P1-Rp-sF4"; */
|
||||||
"8P1-Rp-sF4.title" = "Trash";
|
"8P1-Rp-sF4.title" = "Papierkorb";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Title"; ObjectID = "53D-ne-nv6"; */
|
/* Class = "NSButtonCell"; title = "Title"; ObjectID = "53D-ne-nv6"; */
|
||||||
"53D-ne-nv6.title" = "Title";
|
"53D-ne-nv6.title" = "Titel";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "URL"; ObjectID = "92o-gN-Psj"; */
|
/* Class = "NSButtonCell"; title = "URL"; ObjectID = "92o-gN-Psj"; */
|
||||||
"92o-gN-Psj.title" = "URL";
|
"92o-gN-Psj.title" = "URL";
|
||||||
@@ -17,13 +17,13 @@
|
|||||||
"CFk-71-NYQ.title" = "Item 3";
|
"CFk-71-NYQ.title" = "Item 3";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "History"; ObjectID = "ER3-Ic-v0N"; */
|
/* Class = "NSTextFieldCell"; title = "History"; ObjectID = "ER3-Ic-v0N"; */
|
||||||
"ER3-Ic-v0N.title" = "History";
|
"ER3-Ic-v0N.title" = "Historie";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Item 1"; ObjectID = "LRm-iZ-XrA"; */
|
/* Class = "NSMenuItem"; title = "Item 1"; ObjectID = "LRm-iZ-XrA"; */
|
||||||
"LRm-iZ-XrA.title" = "Item 1";
|
"LRm-iZ-XrA.title" = "Item 1";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Restore Entry"; ObjectID = "UTg-y9-4DN"; */
|
/* Class = "NSButtonCell"; title = "Restore Entry"; ObjectID = "UTg-y9-4DN"; */
|
||||||
"UTg-y9-4DN.title" = "Restore Entry";
|
"UTg-y9-4DN.title" = "Eintrag wiederherstellen";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Filter"; ObjectID = "Ud6-Nz-6PS"; */
|
/* Class = "NSTabViewItem"; label = "Filter"; ObjectID = "Ud6-Nz-6PS"; */
|
||||||
"Ud6-Nz-6PS.label" = "Filter";
|
"Ud6-Nz-6PS.label" = "Filter";
|
||||||
@@ -32,23 +32,23 @@
|
|||||||
"cpr-p6-YAY.title" = "Item 2";
|
"cpr-p6-YAY.title" = "Item 2";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Exit History"; ObjectID = "ewQ-8F-e1E"; */
|
/* Class = "NSButtonCell"; title = "Exit History"; ObjectID = "ewQ-8F-e1E"; */
|
||||||
"ewQ-8F-e1E.title" = "Exit History";
|
"ewQ-8F-e1E.title" = "Historie verlassen";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Notes"; ObjectID = "iDN-2E-hwt"; */
|
/* Class = "NSButtonCell"; title = "Notes"; ObjectID = "iDN-2E-hwt"; */
|
||||||
"iDN-2E-hwt.title" = "Notes";
|
"iDN-2E-hwt.title" = "Notizten";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Username"; ObjectID = "jfQ-Jh-2gl"; */
|
/* Class = "NSButtonCell"; title = "Username"; ObjectID = "jfQ-Jh-2gl"; */
|
||||||
"jfQ-Jh-2gl.title" = "Username";
|
"jfQ-Jh-2gl.title" = "Benutzername";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Trash"; ObjectID = "na6-h9-r9q"; */
|
/* Class = "NSTabViewItem"; label = "Trash"; ObjectID = "na6-h9-r9q"; */
|
||||||
"na6-h9-r9q.label" = "Trash";
|
"na6-h9-r9q.label" = "Papierkorb";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Password"; ObjectID = "rvQ-4V-SsS"; */
|
/* Class = "NSButtonCell"; title = "Password"; ObjectID = "rvQ-4V-SsS"; */
|
||||||
"rvQ-4V-SsS.title" = "Password";
|
"rvQ-4V-SsS.title" = "Passwort";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "wC4-fF-dLW"; */
|
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "wC4-fF-dLW"; */
|
||||||
"wC4-fF-dLW.title" = "OtherViews";
|
"wC4-fF-dLW.title" = "OtherViews";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "History"; ObjectID = "z4I-cp-nhf"; */
|
/* Class = "NSTabViewItem"; label = "History"; ObjectID = "z4I-cp-nhf"; */
|
||||||
"z4I-cp-nhf.label" = "History";
|
"z4I-cp-nhf.label" = "Historie";
|
||||||
|
|
||||||
|
|||||||
@@ -82,9 +82,15 @@
|
|||||||
/* Class = "NSButtonCell"; title = "Generate Parameters"; ObjectID = "PoI-Er-Y8P"; */
|
/* Class = "NSButtonCell"; title = "Generate Parameters"; ObjectID = "PoI-Er-Y8P"; */
|
||||||
"PoI-Er-Y8P.title" = "Parameter bestimmen";
|
"PoI-Er-Y8P.title" = "Parameter bestimmen";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "VersionInfo"; ObjectID = "Ush-4r-A1A"; */
|
||||||
|
"Ush-4r-A1A.title" = "Versionsinformation";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Recommend key change"; ObjectID = "Xib-Fn-sqx"; */
|
/* Class = "NSTextFieldCell"; title = "Recommend key change"; ObjectID = "Xib-Fn-sqx"; */
|
||||||
"Xib-Fn-sqx.title" = "Empfehlung zur Änderung des Schlüssels";
|
"Xib-Fn-sqx.title" = "Empfehlung zur Änderung des Schlüssels";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "File format:"; ObjectID = "bTk-YZ-x0G"; */
|
||||||
|
"bTk-YZ-x0G.title" = "Dateiformat:";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Aes"; ObjectID = "ft1-pl-lpO"; */
|
/* Class = "NSTabViewItem"; label = "Aes"; ObjectID = "ft1-pl-lpO"; */
|
||||||
"ft1-pl-lpO.label" = "AES";
|
"ft1-pl-lpO.label" = "AES";
|
||||||
|
|
||||||
|
|||||||
@@ -1,72 +1,3 @@
|
|||||||
/* (No Comment) */
|
|
||||||
"101.title" = "Name";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1266.title" = "Name";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1267.title" = "Nutzername";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1268.title" = "URL";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1269.title" = "Passwort";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1274.title" = "Password erstellen";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1394.label" = "Allgemein";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1395.label" = "Notizen";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1481.title" = "Text Cell";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1513.title" = "Anhänge";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1529.title" = "Notizen";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1568.title" = "Table View Cell";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1581.title" = "Neue Datei";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1586.title" = "Datei speichern";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1605.title" = "Qualität";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1885.title" = "Erstellt";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1930.title" = "Verändert";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1945.label" = "Anhänge";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1947.label" = "Fields";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1991.title" = "Eigene Werte";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"2017.title" = "Text Cell";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"2043.placeholderString" = "Wert";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"2049.placeholderString" = "Titel";
|
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Group"; ObjectID = "2896"; */
|
/* Class = "NSTabViewItem"; label = "Group"; ObjectID = "2896"; */
|
||||||
"2896.label" = "Gruppe";
|
"2896.label" = "Gruppe";
|
||||||
|
|
||||||
@@ -82,8 +13,11 @@
|
|||||||
/* Class = "NSTextFieldCell"; title = "Label"; ObjectID = "3014"; */
|
/* Class = "NSTextFieldCell"; title = "Label"; ObjectID = "3014"; */
|
||||||
"3014.title" = "Bezeichnung";
|
"3014.title" = "Bezeichnung";
|
||||||
|
|
||||||
/* Class = "CocoaBindingsConnection"; ibShadowedNoSelectionPlaceholder = "No Selection"; ObjectID = "E0d-ZH-Wbc"; */
|
/* Class = "CocoaBindingsConnection"; ibShadowedIsNilPlaceholder = "None"; ObjectID = "Xpb-G8-gXl"; */
|
||||||
"E0d-ZH-Wbc.ibShadowedNoSelectionPlaceholder" = "Keine Auswahl";
|
"Xpb-G8-gXl.ibShadowedIsNilPlaceholder" = "Leer";
|
||||||
|
|
||||||
|
/* Class = "CocoaBindingsConnection"; ibShadowedNoSelectionPlaceholder = "No Selection"; ObjectID = "Xpb-G8-gXl"; */
|
||||||
|
"Xpb-G8-gXl.ibShadowedNoSelectionPlaceholder" = "Keine Auswahl";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Notes"; ObjectID = "hwn-UY-9Cr"; */
|
/* Class = "NSTextFieldCell"; title = "Notes"; ObjectID = "hwn-UY-9Cr"; */
|
||||||
"hwn-UY-9Cr.title" = "Notizen";
|
"hwn-UY-9Cr.title" = "Notizen";
|
||||||
|
|||||||
@@ -1,18 +1,9 @@
|
|||||||
/* (No Comment) */
|
|
||||||
"%@_COPY" = "Kopie von %@";
|
|
||||||
|
|
||||||
/* Display format for days. Should contain a long decimal placeholder! */
|
/* Display format for days. Should contain a long decimal placeholder! */
|
||||||
"%ld_DAYS" = "%ld Tage";
|
"%ld_DAYS" = "%ld Tage";
|
||||||
|
|
||||||
/* % days ago */
|
/* % days ago */
|
||||||
"%ld_DAYS_AGO" = "%vor %ld Tagen";
|
"%ld_DAYS_AGO" = "%vor %ld Tagen";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"%ld_ENTRIES" = "%ld Einträge";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"%ld_ENTRY" = "%ld Eintrag";
|
|
||||||
|
|
||||||
/* % Hours ago */
|
/* % Hours ago */
|
||||||
"%ld_HOURS_AGO" = "vor etwa %ld Stunden";
|
"%ld_HOURS_AGO" = "vor etwa %ld Stunden";
|
||||||
|
|
||||||
@@ -28,22 +19,35 @@
|
|||||||
/* Button label to abort a merge on a file with changed master key! */
|
/* Button label to abort a merge on a file with changed master key! */
|
||||||
"ABORT_MERGE_KEEP_MINE" = "Synchronisation abbrechen. Meine Änderungen behalten.";
|
"ABORT_MERGE_KEEP_MINE" = "Synchronisation abbrechen. Meine Änderungen behalten.";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Toolbar item with action menu */
|
||||||
"ACTION" = "Aktion";
|
"ACTION" = "Aktion";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Action to add an entry via template */
|
||||||
"ADD_TREMPLATE_ENTRY" = "Vorgabeeintrag erstellen";
|
"ADD_TREMPLATE_ENTRY" = "Vorgabeeintrag erstellen";
|
||||||
|
|
||||||
/* Attachments column title (shows counts) */
|
/* Alert informative text when plugins or their settings change and require a restart */
|
||||||
|
"ALERT_INFORMATIVE_TEXT_PLUGINS_CHANGED_SUGGEST_RESTART" = "Änderungen zu den globalen Einstellungen von Plugins treten erst nach einem Neustadt in Kraft. Soll MacPass jetzt neu gestartet werden?";
|
||||||
|
|
||||||
|
/* Alert informative text to ask the user if he really want to uninstall the plugin */
|
||||||
|
"ALERT_INFORMATIVE_TEXT_REALLY_UNINSTALL_PLUGIN" = "Das Plugin wird in den Papierkorb verschoben";
|
||||||
|
|
||||||
|
/* Alert message text when plugins or their settings change and require a restart */
|
||||||
|
"ALERT_MESSAGE_PLUGINS_CHANGED_SUGGEST_RESTART" = "Die globalen Plugineinstellungen haben sich geändert.";
|
||||||
|
|
||||||
|
/* Alert message text to ask the user if he really want to uninstall the plugin. Include %@ placeholder for plugin name */
|
||||||
|
"ALERT_MESSAGE_TEXT_REALLY_UNINSTALL_PLUGIN_%@" = "Möchten Sie das Plugin %@ wirklich deinstallieren?";
|
||||||
|
|
||||||
|
/* Attachments column title (shows counts)
|
||||||
|
Menu item to toggle display of attachment count column in entry table */
|
||||||
"ATTACHMENTS" = "Anhänge";
|
"ATTACHMENTS" = "Anhänge";
|
||||||
|
|
||||||
/* Menu item for automatic trash creation */
|
/* Menu item for automatic trash creation */
|
||||||
"AUTOCREATE_TRASH_FOLDER" = "Automatisch erstellen";
|
"AUTOCREATE_TRASH_FOLDER" = "Automatisch erstellen";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Inherit autotype settings menu item */
|
||||||
"AUTOTYPE_INHERIT" = "Autotype Einstellungen vererben";
|
"AUTOTYPE_INHERIT" = "Autotype Einstellungen vererben";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Disable autotype menu item */
|
||||||
"AUTOTYPE_NO" = "Autotype deaktiveren";
|
"AUTOTYPE_NO" = "Autotype deaktiveren";
|
||||||
|
|
||||||
/* Notification: Autotype failed, no documents are open */
|
/* Notification: Autotype failed, no documents are open */
|
||||||
@@ -55,11 +59,13 @@
|
|||||||
/* Notification: Autotype found a single match. */
|
/* Notification: Autotype found a single match. */
|
||||||
"AUTOTYPE_OVERLAY_SINGLE_MATCH" = "Treffer!";
|
"AUTOTYPE_OVERLAY_SINGLE_MATCH" = "Treffer!";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Enable autotype menu item */
|
||||||
"AUTOTYPE_YES" = "Autotype aktivieren";
|
"AUTOTYPE_YES" = "Autotype aktivieren";
|
||||||
|
|
||||||
/* Cancel
|
/* Sucessfully merged external changes */
|
||||||
Cancel button to postpone password change */
|
"AUTO_MERGE_NOTIFICATION_TEXT" = "Daten wurden erfolgreich automatische synchronisiert";
|
||||||
|
|
||||||
|
/* Cancel */
|
||||||
"CANCEL" = "Abbrechen";
|
"CANCEL" = "Abbrechen";
|
||||||
|
|
||||||
/* Menu item in the database outline context menu to change the database name */
|
/* Menu item in the database outline context menu to change the database name */
|
||||||
@@ -68,6 +74,9 @@
|
|||||||
/* (No Comment) */
|
/* (No Comment) */
|
||||||
"CHANGE_FORMAT" = "Als KDBX speichern";
|
"CHANGE_FORMAT" = "Als KDBX speichern";
|
||||||
|
|
||||||
|
/* Button to postpone the password change */
|
||||||
|
"CHANGE_LATER" = "Später Ändern";
|
||||||
|
|
||||||
/* Button to show the password change dialog
|
/* Button to show the password change dialog
|
||||||
Single button to show the password change dialog */
|
Single button to show the password change dialog */
|
||||||
"CHANGE_PASSWORD_WITH_DOTS" = "Password ändern …";
|
"CHANGE_PASSWORD_WITH_DOTS" = "Password ändern …";
|
||||||
@@ -81,7 +90,7 @@
|
|||||||
/* Clear Autotype Button */
|
/* Clear Autotype Button */
|
||||||
"CLEAR_AUTOTYPE" = "Autotype Löschen";
|
"CLEAR_AUTOTYPE" = "Autotype Löschen";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Menu to clear recent searches */
|
||||||
"CLEAR_RECENT_SEARCHES" = "Letzte Suchanfragen entfernen";
|
"CLEAR_RECENT_SEARCHES" = "Letzte Suchanfragen entfernen";
|
||||||
|
|
||||||
/* Field name that was copied to the pasteboard */
|
/* Field name that was copied to the pasteboard */
|
||||||
@@ -99,6 +108,9 @@
|
|||||||
/* Submenu to Copy custom fields */
|
/* Submenu to Copy custom fields */
|
||||||
"COPY_CUSTOM_FIELDS" = "Feld kopieren";
|
"COPY_CUSTOM_FIELDS" = "Feld kopieren";
|
||||||
|
|
||||||
|
/* Context menu sub-menu to copy custom fields to clipboard */
|
||||||
|
"COPY_CUSTOM_FIELDS_MENU" = "Feld kopieren…";
|
||||||
|
|
||||||
/* Action title for copying an entry via drag and drop */
|
/* Action title for copying an entry via drag and drop */
|
||||||
"COPY_ENTRY" = "Eintrag kopieren";
|
"COPY_ENTRY" = "Eintrag kopieren";
|
||||||
|
|
||||||
@@ -108,19 +120,27 @@
|
|||||||
/* Action title for copying a group via drag and drop */
|
/* Action title for copying a group via drag and drop */
|
||||||
"COPY_GROUP" = "Gruppe kopieren";
|
"COPY_GROUP" = "Gruppe kopieren";
|
||||||
|
|
||||||
/* Menu item to copy the password of an entry */
|
/* Menu item to copy the password of an entry
|
||||||
|
Toolbar item copy password */
|
||||||
"COPY_PASSWORD" = "Passwort kopieren";
|
"COPY_PASSWORD" = "Passwort kopieren";
|
||||||
|
|
||||||
/* Menu item to copy the URL of an entry */
|
/* Menu item to copy the URL of an entry */
|
||||||
"COPY_URL" = "Adresse kopieren";
|
"COPY_URL" = "Adresse kopieren";
|
||||||
|
|
||||||
/* Menu item to copy the username of an entry */
|
/* Menu item to copy the username of an entry
|
||||||
|
Toolbar item copy username */
|
||||||
"COPY_USERNAME" = "Benutzername kopieren";
|
"COPY_USERNAME" = "Benutzername kopieren";
|
||||||
|
|
||||||
/* (No Comment) */
|
/* (No Comment) */
|
||||||
"CREATED_AT_%@" = "erstellt: %@";
|
"CREATED_AT_%@" = "erstellt: %@";
|
||||||
|
|
||||||
/* Default name database */
|
/* Curstom attribute reference item */
|
||||||
|
"CUSTOM_ATTRIBUTE" = "Spezielle Eigenschaften";
|
||||||
|
|
||||||
|
/* Title for menu for custom search filters */
|
||||||
|
"CUSTOM_SEARCH_FILTER_MENU" = "Spezielle Suchefilter…";
|
||||||
|
|
||||||
|
/* Default display name for KDB databases */
|
||||||
"DATABASE" = "Datenbank";
|
"DATABASE" = "Datenbank";
|
||||||
|
|
||||||
/* Default Browser */
|
/* Default Browser */
|
||||||
@@ -144,7 +164,8 @@
|
|||||||
/* Menu item in the database outline context menu to delete the node from the trash
|
/* Menu item in the database outline context menu to delete the node from the trash
|
||||||
Menu item to delete an entry
|
Menu item to delete an entry
|
||||||
Menu item to delete the selected attached file
|
Menu item to delete the selected attached file
|
||||||
Menu item to delete the selected custom icon */
|
Menu item to delete the selected custom icon
|
||||||
|
Toolbar item delete item */
|
||||||
"DELETE" = "Löschen";
|
"DELETE" = "Löschen";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
@@ -162,28 +183,19 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"DOCUMENT_AUTOTYPE_CORRUPTION_WARNING" = "Bitte Autotypekorrektur durchführen!";
|
"DOCUMENT_AUTOTYPE_CORRUPTION_WARNING" = "Bitte Autotypekorrektur durchführen!";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Action name for duplicating entries */
|
||||||
"DUPLICATE_ENTRIES" = "Eintrag klonen";
|
"DUPLICATE_ENTRIES_%ld" = "Einträge duplizieren %ld";
|
||||||
|
|
||||||
/* Menu item to directly diplicate an entry */
|
/* Menu item to directly diplicate an entry */
|
||||||
"DUPLICATE_ENTRY" = "Eintrag klonen";
|
"DUPLICATE_ENTRY" = "Eintrag duplizieren";
|
||||||
|
|
||||||
/* Menu item to duplicate an entry with options how to duplicate. Will present a dialog. */
|
/* Menu item to duplicate an entry with options how to duplicate. Will present a dialog. */
|
||||||
"DUPLICATE_ENTRY_WITH_OPTIONS" = "Eintrag klonen …";
|
"DUPLICATE_ENTRY_WITH_OPTIONS" = "Eintrag duplizieren…";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"DUPLICTE_PASSWORDS" = "Doppelte Passwörter";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"EDIT" = "Bearbeiten";
|
|
||||||
|
|
||||||
/* Menu item in the database outline context menu to change the template group
|
/* Menu item in the database outline context menu to change the template group
|
||||||
Menu item on the add entry context menu to edit template groups */
|
Menu item on the add entry context menu to edit template groups */
|
||||||
"EDIT_TEMPLATE_GROUP" = "Vorlagengruppe bearbeiten";
|
"EDIT_TEMPLATE_GROUP" = "Vorlagengruppe bearbeiten";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"EMAIL" = "E-Mail";
|
|
||||||
|
|
||||||
/* Empty Trash
|
/* Empty Trash
|
||||||
Menu item in the database outline context menu to empyt the trash
|
Menu item in the database outline context menu to empyt the trash
|
||||||
Menu item in the database outline to empty the trash
|
Menu item in the database outline to empty the trash
|
||||||
@@ -199,6 +211,9 @@
|
|||||||
/* Keyfile not valid */
|
/* Keyfile not valid */
|
||||||
"ERROR_INVALID_KEYFILE" = "Schlüsseldatei ist ungültig";
|
"ERROR_INVALID_KEYFILE" = "Schlüsseldatei ist ungültig";
|
||||||
|
|
||||||
|
/* Error description given when adding an invalid plugin */
|
||||||
|
"ERROR_INVALID_PLUGIN" = "Kein MacPass-Plugin";
|
||||||
|
|
||||||
/* Passwords do not match */
|
/* Passwords do not match */
|
||||||
"ERROR_PASSWORD_MISSMATCH" = "Passwörter stimmen nicht überein";
|
"ERROR_PASSWORD_MISSMATCH" = "Passwörter stimmen nicht überein";
|
||||||
|
|
||||||
@@ -233,36 +248,28 @@
|
|||||||
/* External file change strategy option: Use the changed file and discard local changes */
|
/* External file change strategy option: Use the changed file and discard local changes */
|
||||||
"FILE_CHANGE_STRATEGY_USE_OTHER" = "Lade die andere Version und verwerfe meine Änderungen";
|
"FILE_CHANGE_STRATEGY_USE_OTHER" = "Lade die andere Version und verwerfe meine Änderungen";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Error while reopening last known documents */
|
||||||
"FILE_OPEN_ERROR" = "Fehler beim Öffnen der Datei.";
|
"FILE_OPEN_ERROR" = "Fehler beim Öffnen der Datei.";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"GENERAL" = "Allgemein";
|
|
||||||
|
|
||||||
/* General Settings Label */
|
/* General Settings Label */
|
||||||
"GENERAL_SETTINGS" = "Allgemein";
|
"GENERAL_SETTINGS" = "Allgemein";
|
||||||
|
|
||||||
/* Group column title */
|
/* Group column title */
|
||||||
"GROUP" = "Gruppe";
|
"GROUP" = "Gruppe";
|
||||||
|
|
||||||
/* History count column title */
|
/* History count column title
|
||||||
|
Menu item to toggle display of history count column in entry table */
|
||||||
"HISTORY" = "Historie";
|
"HISTORY" = "Historie";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"HOMEBANKING" = "Homebanking";
|
|
||||||
|
|
||||||
/* Imports a dragged URL for a new entry */
|
/* Imports a dragged URL for a new entry */
|
||||||
"IMPORT_URL" = "URL importieren";
|
"IMPORT_URL" = "URL importieren";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Toolbar item toggle inspector */
|
||||||
"INSPECTOR" = "Inspektor";
|
"INSPECTOR" = "Inspektor";
|
||||||
|
|
||||||
/* Label for the integration settings tab */
|
/* Label for the integration settings tab */
|
||||||
"INTEGRATION_SETTINGS" = "Integration";
|
"INTEGRATION_SETTINGS" = "Integration";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"INTERNET" = "Internet";
|
|
||||||
|
|
||||||
/* Just now */
|
/* Just now */
|
||||||
"JUST_NOW" = "Gerade eben";
|
"JUST_NOW" = "Gerade eben";
|
||||||
|
|
||||||
@@ -275,16 +282,29 @@
|
|||||||
/* Reopen the file! */
|
/* Reopen the file! */
|
||||||
"KEEP_OTHER_DISCARD_MINE" = "Behalte andere, verwerfe meine!";
|
"KEEP_OTHER_DISCARD_MINE" = "Behalte andere, verwerfe meine!";
|
||||||
|
|
||||||
|
/* Do not install the plugin */
|
||||||
|
"KEEP_PLUGIN" = "Plugin Behalten";
|
||||||
|
|
||||||
|
/* Do not restart MacPass */
|
||||||
|
"KEEP_RUNNING" = "Nicht Neustarten";
|
||||||
|
|
||||||
/* last week */
|
/* last week */
|
||||||
"LAST_WEEK" = "Letze Woche";
|
"LAST_WEEK" = "Letze Woche";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Toolbar item to Lock the database */
|
||||||
"LOCK" = "Sperren";
|
"LOCK" = "Sperren";
|
||||||
|
|
||||||
/* (No Comment) */
|
/* Message in the open panel to add attachments to an entry */
|
||||||
"MODIFED_AT_%@" = "verändert: %@";
|
"MESSAGE_ADD_ATTACHMENT_OPEN_PANEL" = "Bitte wählen Sie die Datei aus, die hinzugefügt werden soll";
|
||||||
|
|
||||||
/* Modification date column title */
|
/* Message in the add plugin open panel */
|
||||||
|
"MESSAGE_ADD_PLUGIN_OPEN_PANEL" = "Bitte wählen Sie das Plugin aus, welches installiert werden soll";
|
||||||
|
|
||||||
|
/* Message in the open panel to import an XML file */
|
||||||
|
"MESSAGE_XML_OPEN_PANEL" = "Bitte wählen Sie die XML-Datei aus, die importiert werden soll.";
|
||||||
|
|
||||||
|
/* Menu item to toggle display of modified date column in entry table
|
||||||
|
Modification date column title */
|
||||||
"MODIFIED" = "Verändert";
|
"MODIFIED" = "Verändert";
|
||||||
|
|
||||||
/* Action title for moving an entry via drag and drop */
|
/* Action title for moving an entry via drag and drop */
|
||||||
@@ -293,28 +313,26 @@
|
|||||||
/* Action title for moving a group via drag and drop */
|
/* Action title for moving a group via drag and drop */
|
||||||
"MOVE_GROUP" = "Gruppe bewegem";
|
"MOVE_GROUP" = "Gruppe bewegem";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"NAME" = "Name";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"NETWORK" = "Netzwerk";
|
|
||||||
|
|
||||||
/* Name for a newly created Database */
|
/* Name for a newly created Database */
|
||||||
"NEW_DATABASE" = "Datenbank";
|
"NEW_DATABASE" = "Datenbank";
|
||||||
|
|
||||||
/* Menu item to create a new entry */
|
/* Menu item to create a new entry
|
||||||
|
Toolbar item new entry */
|
||||||
"NEW_ENTRY" = "Neuer Eintrag";
|
"NEW_ENTRY" = "Neuer Eintrag";
|
||||||
|
|
||||||
/* Submenu to add an entry via template */
|
/* Submenu to add an entry via template */
|
||||||
"NEW_ENTRY_WITH_TEMPLATE_%@" = "Neuer Eintrag aus Vorlage %@";
|
"NEW_ENTRY_WITH_TEMPLATE_%@" = "Neuer Eintrag aus Vorlage %@";
|
||||||
|
|
||||||
/* Menu item to create a new group */
|
/* Menu item to create a new group
|
||||||
|
Toolbar item new group */
|
||||||
"NEW_GROUP" = "Neue Gruppe";
|
"NEW_GROUP" = "Neue Gruppe";
|
||||||
|
|
||||||
/* Placeholder text for input fields if no entry or group is selected */
|
/* Null placeholder for item input field
|
||||||
|
Placeholder text for input fields if no entry or group is selected */
|
||||||
"NONE" = "Leer";
|
"NONE" = "Leer";
|
||||||
|
|
||||||
/* Displayed name when notes or part of notes was copied
|
/* Displayed name when notes or part of notes was copied
|
||||||
|
Menu item to toggle display of notes column in entry table
|
||||||
Notes column title
|
Notes column title
|
||||||
Notes reference item */
|
Notes reference item */
|
||||||
"NOTES" = "Notizen";
|
"NOTES" = "Notizen";
|
||||||
@@ -343,6 +361,15 @@
|
|||||||
/* preset to expire after one year from now */
|
/* preset to expire after one year from now */
|
||||||
"ONE_YEAR" = "in enem Jahr";
|
"ONE_YEAR" = "in enem Jahr";
|
||||||
|
|
||||||
|
/* Open button in the open panel to add attachments to an entry */
|
||||||
|
"OPEN_BUTTON_ADD_ATTACHMENT_OPEN_PANEL" = "Hinzufügen";
|
||||||
|
|
||||||
|
/* Open button in the add plugin open panel */
|
||||||
|
"OPEN_BUTTON_ADD_PLUGIN_OPEN_PANEL" = "Installieren";
|
||||||
|
|
||||||
|
/* Open button in the open panel to import an XML file */
|
||||||
|
"OPEN_BUTTON_IMPORT_XML_OPEN_PANEL" = "Importieren";
|
||||||
|
|
||||||
/* Menu item to open the URL with the default application */
|
/* Menu item to open the URL with the default application */
|
||||||
"OPEN_URL" = "Adresse öffnen";
|
"OPEN_URL" = "Adresse öffnen";
|
||||||
|
|
||||||
@@ -352,7 +379,8 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"OUTPUT_VALUE" = "Ausgabewert";
|
"OUTPUT_VALUE" = "Ausgabewert";
|
||||||
|
|
||||||
/* Password column title
|
/* Menu item to toggle display of password column in entry table
|
||||||
|
Password column title
|
||||||
Password reference item */
|
Password reference item */
|
||||||
"PASSWORD" = "Passwort";
|
"PASSWORD" = "Passwort";
|
||||||
|
|
||||||
@@ -375,15 +403,36 @@
|
|||||||
"PASSWORD_INPUT_REPEAT_PASSWORD" = "Passwort wiederholen";
|
"PASSWORD_INPUT_REPEAT_PASSWORD" = "Passwort wiederholen";
|
||||||
|
|
||||||
/* Menu item to perform autotype with the selected entry */
|
/* Menu item to perform autotype with the selected entry */
|
||||||
"PERFORM_AUTOTYPE_FOR_ENTRY" = "Autotype ausführen";
|
"PERFORM_AUTOTYPE_FOR_ENTRY" = "Auto-Type ausführen";
|
||||||
|
|
||||||
|
/* The plugin could not be initalized */
|
||||||
|
"PLUGIN_ERROR_INTILIZATION_FAILED" = "Das Plugin konnten nicht korrekt initialisiert werden";
|
||||||
|
|
||||||
|
/* Error for a plugin that was not signed properly */
|
||||||
|
"PLUGIN_ERROR_UNSECURE_PLUGIN" = "Das Plugin ist nicht korrekt signiert";
|
||||||
|
|
||||||
|
/* Plugin specifies the wrong principla class! */
|
||||||
|
"PLUGIN_ERROR_WRONG_PRINCIPAL_CLASS" = "Die Hauptklasse des Plugins stimmt nicht mit der erwarteten überein";
|
||||||
|
|
||||||
|
/* name for disabled unloaded plugin */
|
||||||
|
"PLUGIN_NAME_DISABLED_%@" = "🚫 %@";
|
||||||
|
|
||||||
|
/* Name for unloaded plugin with errors */
|
||||||
|
"PLUGIN_NAME_ERROR_%@" = "⚠️ %@";
|
||||||
|
|
||||||
/* Label for plugin settings tab */
|
/* Label for plugin settings tab */
|
||||||
"PLUGIN_SETTINGS" = "Plugins";
|
"PLUGIN_SETTINGS" = "Plugins";
|
||||||
|
|
||||||
|
/* Generic message displayed if no details are know why a plugin was not loaded. */
|
||||||
|
"PLUGIN_SETTINGS_GENERIC_ERROR_MESSAGE" = "Das Plugin konnte nicht geladen werden.";
|
||||||
|
|
||||||
|
/* Plugin version. Include a %@ placeholder for version string */
|
||||||
|
"PLUGIN_VERSION_%@" = "Version: %@";
|
||||||
|
|
||||||
/* Menu item to preview the selected attached file. */
|
/* Menu item to preview the selected attached file. */
|
||||||
"PREVIEW" = "Vorschau";
|
"PREVIEW" = "Vorschau";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Recent searches menu item */
|
||||||
"RECENT_SEARCHES" = "Letze Suchanfragen";
|
"RECENT_SEARCHES" = "Letze Suchanfragen";
|
||||||
|
|
||||||
/* Informative text for the recommend password change alert */
|
/* Informative text for the recommend password change alert */
|
||||||
@@ -392,6 +441,9 @@
|
|||||||
/* Message text for the recommend password change alert */
|
/* Message text for the recommend password change alert */
|
||||||
"RECOMMEND_PASSWORD_CHANGE_ALERT_TITLE" = "Bitte ändern sie das Password der Datenbank!";
|
"RECOMMEND_PASSWORD_CHANGE_ALERT_TITLE" = "Bitte ändern sie das Password der Datenbank!";
|
||||||
|
|
||||||
|
/* Restart */
|
||||||
|
"RESTART" = "Neustarten";
|
||||||
|
|
||||||
/* Action to restore and Entry to a previous state of it's history */
|
/* Action to restore and Entry to a previous state of it's history */
|
||||||
"RESTORE_HISTORY_ENTRY" = "Eintrag wiederherstellen";
|
"RESTORE_HISTORY_ENTRY" = "Eintrag wiederherstellen";
|
||||||
|
|
||||||
@@ -408,7 +460,7 @@
|
|||||||
/* Save file menu item title when save will prompt for a location to save or ask for a password/key */
|
/* Save file menu item title when save will prompt for a location to save or ask for a password/key */
|
||||||
"SAVE_WITH_DOTS" = "Speichern…";
|
"SAVE_WITH_DOTS" = "Speichern…";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Search input in Toolbar */
|
||||||
"SEARCH" = "Suche";
|
"SEARCH" = "Suche";
|
||||||
|
|
||||||
/* Search option: Find duplicate passwords */
|
/* Search option: Find duplicate passwords */
|
||||||
@@ -417,16 +469,16 @@
|
|||||||
/* Search option: Find expired entries */
|
/* Search option: Find expired entries */
|
||||||
"SEARCH_EXPIRED_ENTRIES" = "Abgelaufen";
|
"SEARCH_EXPIRED_ENTRIES" = "Abgelaufen";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Inherit search settings menu item */
|
||||||
"SEARCH_INHERIT" = "Sucheeinstellung vererben";
|
"SEARCH_INHERIT" = "Sucheeinstellung vererben";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Disable search menu item */
|
||||||
"SEARCH_NO" = "Nicht durchsuchbar";
|
"SEARCH_NO" = "Nicht durchsuchbar";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"SEARCH_VALUE" = "Suchwert";
|
"SEARCH_VALUE" = "Suche nach";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Enable search menu item */
|
||||||
"SEARCH_YES" = "Durchsuchbar";
|
"SEARCH_YES" = "Durchsuchbar";
|
||||||
|
|
||||||
/* (No Comment) */
|
/* (No Comment) */
|
||||||
@@ -435,6 +487,12 @@
|
|||||||
/* Menu item title for the expiry preset selection menu in the date picker */
|
/* Menu item title for the expiry preset selection menu in the date picker */
|
||||||
"SELECT_DATE_PRESET" = "Datumvorgabe wählen …";
|
"SELECT_DATE_PRESET" = "Datumvorgabe wählen …";
|
||||||
|
|
||||||
|
/* Message on the open panel for selecting which browser to use for opening URLs */
|
||||||
|
"SELECT_DEFAULT_BROWSER_OPEN_PANEL_MESSAGE" = "Bitte wählen Sie einen Web-Browser, mit dem URLs geöffnet werden sollen";
|
||||||
|
|
||||||
|
/* Label for the select browser button on the open panel for selecting which browser to use for opening URLs */
|
||||||
|
"SELECT_DEFAULT_BROWSER_OPEN_PANEL_SELECT_BUTTON" = "Auswählen";
|
||||||
|
|
||||||
/* Message for the dialog to open a file for merge */
|
/* Message for the dialog to open a file for merge */
|
||||||
"SELECT_FILE_TO_MERGE" = "Datei für Synchronisation auswählen";
|
"SELECT_FILE_TO_MERGE" = "Datei für Synchronisation auswählen";
|
||||||
|
|
||||||
@@ -444,34 +502,18 @@
|
|||||||
/* Set the selection as default file change strategy! */
|
/* Set the selection as default file change strategy! */
|
||||||
"SET_AS_DEFAULT_FILE_CHANGE_STRATEGY" = "Die gewählte Strategie immer verwenden. Sie können die Strategie jederzeit in den Einstellungen anpassen.";
|
"SET_AS_DEFAULT_FILE_CHANGE_STRATEGY" = "Die gewählte Strategie immer verwenden. Sie können die Strategie jederzeit in den Einstellungen anpassen.";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"SET_NAME" = "Name ändern";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"SET_NOTES" = "Notizen ändern";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"SET_PASSWORD" = "Passwort ändern";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"SET_TITLE" = "Titel ändern";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"SET_URL" = "Adresse ändern";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"SET_USERNAME" = "Benutzername ändern";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
/* (No Comment) */
|
||||||
"SHORT_FILE_CHANGE_STRATEGY_ASK" = "Nachfragen";
|
"SHORT_FILE_CHANGE_STRATEGY_ASK" = "Nachfragen";
|
||||||
|
|
||||||
/* Menu item to show the history of the selected entry */
|
/* Menu item to show the history of the selected entry
|
||||||
|
Toolbar item to toggel history display */
|
||||||
"SHOW_HISTORY" = "Historie anzeigen";
|
"SHOW_HISTORY" = "Historie anzeigen";
|
||||||
|
|
||||||
/* Menu item to show the reference builder in a text view's context menu */
|
/* Menu item to show the reference builder in a text view's context menu */
|
||||||
"SHOW_REFERENCE_BUILDER" = "Referenz einfügen…";
|
"SHOW_REFERENCE_BUILDER" = "Referenz einfügen…";
|
||||||
|
|
||||||
/* Displayed name when title field was copied
|
/* Displayed name when title field was copied
|
||||||
|
Menu item to toggle display of title column in entry table
|
||||||
Title column title
|
Title column title
|
||||||
Title reference item */
|
Title reference item */
|
||||||
"TITLE" = "Titel";
|
"TITLE" = "Titel";
|
||||||
@@ -479,30 +521,38 @@
|
|||||||
/* preset to expire tomorrow */
|
/* preset to expire tomorrow */
|
||||||
"TOMORROW" = "Morgen";
|
"TOMORROW" = "Morgen";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"TRASH" = "Papierkorb";
|
|
||||||
|
|
||||||
/* Move Entry to Trash */
|
/* Move Entry to Trash */
|
||||||
"TRASH_ENTRY" = "Eintrag löschen";
|
"TRASH_ENTRY" = "Eintrag löschen";
|
||||||
|
|
||||||
/* Move Group to Trash */
|
/* Move Group to Trash */
|
||||||
"TRASH_GROUP" = "Gruppe löschen";
|
"TRASH_GROUP" = "Gruppe löschen";
|
||||||
|
|
||||||
|
/* Uninstall plugin */
|
||||||
|
"UNINSTALL" = "Deinstallieren";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"UNKNOWN_FILE_VERSION" = "Unbekannte Dateiversion";
|
"UNKNOWN_FILE_VERSION" = "Unbekannte Dateiversion";
|
||||||
|
|
||||||
|
/* Unknown databas format. */
|
||||||
|
"UNKNOWN_FORMAT" = "Unbekanntes Dateiformat";
|
||||||
|
|
||||||
|
/* Database format is unknown since the file is not saved yet */
|
||||||
|
"UNKNOWN_FORMAT_FILE_NOT_SAVED_YET" = "Unbekannt. Datei wurde noch nicht gespeichert.";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"UNKNOWN_TOOLBAR_ITEM" = "Unbekanntes Toolbar-Element";
|
"UNKNOWN_TOOLBAR_ITEM" = "Unbekanntes Toolbar-Element";
|
||||||
|
|
||||||
/* Update Settings Label */
|
/* Update Settings Label */
|
||||||
"UPDATE_SETTINGS" = "Aktualisierung";
|
"UPDATE_SETTINGS" = "Aktualisierung";
|
||||||
|
|
||||||
/* Submenu with options what to do with the URL of an entry
|
/* Menu item to toggle display of url column in entry table
|
||||||
|
Submenu with options what to do with the URL of an entry
|
||||||
Url column title
|
Url column title
|
||||||
URL reference item */
|
URL reference item */
|
||||||
"URL" = "Adresse";
|
"URL" = "Adresse";
|
||||||
|
|
||||||
/* Username column title
|
/* Menu item to toggle display of username column in entry table
|
||||||
|
Username column title
|
||||||
Username reference item */
|
Username reference item */
|
||||||
"USERNAME" = "Nutzername";
|
"USERNAME" = "Nutzername";
|
||||||
|
|
||||||
@@ -516,6 +566,12 @@
|
|||||||
/* No Key or Password */
|
/* No Key or Password */
|
||||||
"WARNING_NO_PASSWORD_OR_KEYFILE" = "Kein Password und/oder Schlüsseldatei festgelegt!";
|
"WARNING_NO_PASSWORD_OR_KEYFILE" = "Kein Password und/oder Schlüsseldatei festgelegt!";
|
||||||
|
|
||||||
|
/* Informative Text displayed when clearing the Trash */
|
||||||
|
"WARNING_ON_DELETE_TRASHED_NODE_DESCRIPTION" = "Die gewählten Elemente werden dauerhauft aus dem Papierkorb entfernt.";
|
||||||
|
|
||||||
|
/* Message text for the alert displayed when deleting a node */
|
||||||
|
"WARNING_ON_DELETE_TRASHED_NODE_TITLE" = "Gelöschtes Element entferen.";
|
||||||
|
|
||||||
/* Informative Text displayed when clearing the Trash */
|
/* Informative Text displayed when clearing the Trash */
|
||||||
"WARNING_ON_EMPTY_TRASH_DESCRIPTION" = "Das Leeren des Papierkorbs kann nicht rückgängig gemacht werdern.";
|
"WARNING_ON_EMPTY_TRASH_DESCRIPTION" = "Das Leeren des Papierkorbs kann nicht rückgängig gemacht werdern.";
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,16 @@
|
|||||||
{
|
{
|
||||||
|
"DUPLICATE_ENTRIES_%ld" = {
|
||||||
|
NSStringLocalizedFormatKey = "%#@entries@";
|
||||||
|
entries = {
|
||||||
|
NSStringFormatSpecTypeKey = NSStringPluralRuleType;
|
||||||
|
NSStringFormatValueTypeKey = ld;
|
||||||
|
one = "Eintrag duplizieren";
|
||||||
|
other = "Eintr\U00e4ge duplizieren";
|
||||||
|
};
|
||||||
|
};
|
||||||
"EVERY_%ld_DAYS" = {
|
"EVERY_%ld_DAYS" = {
|
||||||
NSStringLocalizedFormatKey = "%#@variable@";
|
NSStringLocalizedFormatKey = "%#@days@";
|
||||||
variable = {
|
days = {
|
||||||
NSStringFormatSpecTypeKey = NSStringPluralRuleType;
|
NSStringFormatSpecTypeKey = NSStringPluralRuleType;
|
||||||
NSStringFormatValueTypeKey = ld;
|
NSStringFormatValueTypeKey = ld;
|
||||||
one = "jeden Tag";
|
one = "jeden Tag";
|
||||||
|
|||||||
@@ -1,15 +1,24 @@
|
|||||||
/* Class = "NSTextFieldCell"; title = "If enabled, only properly signed Plugins will be loaded. Keep in mind, that Plugins have full access to your data! Changes take affect on restart."; ObjectID = "2bX-8S-9XM"; */
|
/* Class = "NSTextFieldCell"; title = "If enabled, only properly signed Plugins will be loaded. Keep in mind, that Plugins have full access to your data! Changes take affect on restart."; ObjectID = "2bX-8S-9XM"; */
|
||||||
"2bX-8S-9XM.title" = "Wenn diese Einstellung aktiv ist, werden nur korrekt signierte Plugins geladen. Bitte beachten Sie, dass Plugins vollständigen Zugriff auf Ihre Daten habe. Änderungen werden erst beim Neustart aktiv!";
|
"2bX-8S-9XM.title" = "Wenn diese Einstellung aktiv ist, werden nur korrekt signierte Plugins geladen. Bitte beachten Sie, dass Plugins vollständigen Zugriff auf Ihre Daten haben. Änderungen werden erst beim Neustart aktiv!";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Load unsecure Plugins"; ObjectID = "C4B-6z-ZqX"; */
|
/* Class = "NSButtonCell"; title = "Load unsecure Plugins"; ObjectID = "C4B-6z-ZqX"; */
|
||||||
"C4B-6z-ZqX.title" = "Unsichere Plugins laden";
|
"C4B-6z-ZqX.title" = "Unsichere Plugins laden";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "Plugin Settings Info"; ObjectID = "OOr-SW-jZb"; */
|
||||||
|
"OOr-SW-jZb.title" = "Informationen zu Plugin-Einstellungen";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "STt-PQ-Szr"; */
|
/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "STt-PQ-Szr"; */
|
||||||
"STt-PQ-Szr.title" = "Text Cell";
|
"STt-PQ-Szr.title" = "Text Cell";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "fug-79-n9g"; */
|
/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "fug-79-n9g"; */
|
||||||
"fug-79-n9g.title" = "Table View Cell";
|
"fug-79-n9g.title" = "Table View Cell";
|
||||||
|
|
||||||
|
/* Class = "NSButtonCell"; title = "Browse Plugins…"; ObjectID = "sqO-8H-n1y"; */
|
||||||
|
"sqO-8H-n1y.title" = "Plugins durchsuchen…";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Box"; ObjectID = "vBs-Ga-aq0"; */
|
/* Class = "NSBox"; title = "Box"; ObjectID = "vBs-Ga-aq0"; */
|
||||||
"vBs-Ga-aq0.title" = "Box";
|
"vBs-Ga-aq0.title" = "Box";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "Label"; ObjectID = "yuK-qH-jxx"; */
|
||||||
|
"yuK-qH-jxx.title" = "Bezeichnung";
|
||||||
|
|
||||||
|
|||||||
9
MacPass/en.lproj/AutotypeBuilderView.strings
Normal file
9
MacPass/en.lproj/AutotypeBuilderView.strings
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
/* Class = "NSTextFieldCell"; title = "Autotype Sequence"; ObjectID = "8ny-Qk-Jvo"; */
|
||||||
|
"8ny-Qk-Jvo.title" = "Autotype Sequence";
|
||||||
|
|
||||||
|
/* Class = "NSButtonCell"; title = "Set Autotype Sequence"; ObjectID = "aOD-Ih-Sft"; */
|
||||||
|
"aOD-Ih-Sft.title" = "Set Autotype Sequence";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "Available Commands and Placeholders"; ObjectID = "lug-97-H9D"; */
|
||||||
|
"lug-97-H9D.title" = "Available Commands and Placeholders";
|
||||||
|
|
||||||
15
MacPass/en.lproj/AutotypeCandidateSelectionView.strings
Normal file
15
MacPass/en.lproj/AutotypeCandidateSelectionView.strings
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "60p-7v-Nje"; */
|
||||||
|
"60p-7v-Nje.title" = "Cancel";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "PKW-gr-yqN"; */
|
||||||
|
"PKW-gr-yqN.title" = "Text Cell";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "Content"; ObjectID = "TN3-3a-LaA"; */
|
||||||
|
"TN3-3a-LaA.title" = "Content";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "There are multiple matches for the current window. Please select which match should be used."; ObjectID = "gcf-gb-ZsF"; */
|
||||||
|
"gcf-gb-ZsF.title" = "There are multiple matches for the current window. Please select which match should be used.";
|
||||||
|
|
||||||
|
/* Class = "NSButtonCell"; title = "Perform Autotype"; ObjectID = "w7H-hx-CUF"; */
|
||||||
|
"w7H-hx-CUF.title" = "Perform Autotype";
|
||||||
|
|
||||||
@@ -1,7 +1,18 @@
|
|||||||
|
|
||||||
/* Class = "NSWindow"; title = "Window"; ObjectID = "1"; */
|
/* Class = "NSWindow"; title = "Window"; ObjectID = "1"; */
|
||||||
"1.title" = "Window";
|
"1.title" = "Window";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "Threads"; ObjectID = "2QI-ne-N5d"; */
|
||||||
|
"2QI-ne-N5d.title" = "Threads";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "Iterations"; ObjectID = "2ZA-Gc-JdZ"; */
|
||||||
|
"2ZA-Gc-JdZ.title" = "Iterations";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "Enforce key change"; ObjectID = "5QH-N1-FHK"; */
|
||||||
|
"5QH-N1-FHK.title" = "Enforce key change";
|
||||||
|
|
||||||
|
/* Class = "NSTabViewItem"; label = "Argon2"; ObjectID = "6qB-sH-9FI"; */
|
||||||
|
"6qB-sH-9FI.label" = "Argon2";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Database name:"; ObjectID = "190"; */
|
/* Class = "NSTextFieldCell"; title = "Database name:"; ObjectID = "190"; */
|
||||||
"190.title" = "Database name:";
|
"190.title" = "Database name:";
|
||||||
|
|
||||||
@@ -62,18 +73,6 @@
|
|||||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "1740"; */
|
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "1740"; */
|
||||||
"1740.title" = "OtherViews";
|
"1740.title" = "OtherViews";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Threads"; ObjectID = "2QI-ne-N5d"; */
|
|
||||||
"2QI-ne-N5d.title" = "Threads";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Iterations"; ObjectID = "2ZA-Gc-JdZ"; */
|
|
||||||
"2ZA-Gc-JdZ.title" = "Iterations";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Enforce key change"; ObjectID = "5QH-N1-FHK"; */
|
|
||||||
"5QH-N1-FHK.title" = "Enforce key change";
|
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Argon2"; ObjectID = "6qB-sH-9FI"; */
|
|
||||||
"6qB-sH-9FI.label" = "Argon2";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Recommend key change"; ObjectID = "CtU-Eq-dgy"; */
|
/* Class = "NSButtonCell"; title = "Recommend key change"; ObjectID = "CtU-Eq-dgy"; */
|
||||||
"CtU-Eq-dgy.title" = "Recommend key change";
|
"CtU-Eq-dgy.title" = "Recommend key change";
|
||||||
|
|
||||||
@@ -83,9 +82,15 @@
|
|||||||
/* Class = "NSButtonCell"; title = "Generate Parameters"; ObjectID = "PoI-Er-Y8P"; */
|
/* Class = "NSButtonCell"; title = "Generate Parameters"; ObjectID = "PoI-Er-Y8P"; */
|
||||||
"PoI-Er-Y8P.title" = "Generate Parameters";
|
"PoI-Er-Y8P.title" = "Generate Parameters";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "VersionInfo"; ObjectID = "Ush-4r-A1A"; */
|
||||||
|
"Ush-4r-A1A.title" = "VersionInfo";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Recommend key change"; ObjectID = "Xib-Fn-sqx"; */
|
/* Class = "NSTextFieldCell"; title = "Recommend key change"; ObjectID = "Xib-Fn-sqx"; */
|
||||||
"Xib-Fn-sqx.title" = "Recommend key change";
|
"Xib-Fn-sqx.title" = "Recommend key change";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "File format:"; ObjectID = "bTk-YZ-x0G"; */
|
||||||
|
"bTk-YZ-x0G.title" = "File format:";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Aes"; ObjectID = "ft1-pl-lpO"; */
|
/* Class = "NSTabViewItem"; label = "Aes"; ObjectID = "ft1-pl-lpO"; */
|
||||||
"ft1-pl-lpO.label" = "Aes";
|
"ft1-pl-lpO.label" = "Aes";
|
||||||
|
|
||||||
@@ -109,3 +114,4 @@
|
|||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Force key change"; ObjectID = "z6u-YT-7LE"; */
|
/* Class = "NSButtonCell"; title = "Force key change"; ObjectID = "z6u-YT-7LE"; */
|
||||||
"z6u-YT-7LE.title" = "Force key change";
|
"z6u-YT-7LE.title" = "Force key change";
|
||||||
|
|
||||||
|
|||||||
@@ -1,71 +1,3 @@
|
|||||||
/* (No Comment) */
|
|
||||||
"101.title" = "Name";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1266.title" = "Name";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1267.title" = "Username";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1268.title" = "URL";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1269.title" = "Password";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1274.title" = "Generate";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1394.label" = "General";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1395.label" = "Notes";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1481.title" = "Text Cell";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1513.title" = "Attachments";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1529.title" = "Notes";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1568.title" = "Table View Cell";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1581.title" = "Add File";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1586.title" = "Save File";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1605.title" = "Quality";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1885.title" = "Created";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1930.title" = "Modified";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1945.label" = "Attachments";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1947.label" = "Fields";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"1991.title" = "Custom Fields";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"2017.title" = "Text Cell";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"2043.placeholderString" = "Value";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"2049.placeholderString" = "Title";
|
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Group"; ObjectID = "2896"; */
|
/* Class = "NSTabViewItem"; label = "Group"; ObjectID = "2896"; */
|
||||||
"2896.label" = "Group";
|
"2896.label" = "Group";
|
||||||
@@ -82,9 +14,11 @@
|
|||||||
/* Class = "NSTextFieldCell"; title = "Label"; ObjectID = "3014"; */
|
/* Class = "NSTextFieldCell"; title = "Label"; ObjectID = "3014"; */
|
||||||
"3014.title" = "Label";
|
"3014.title" = "Label";
|
||||||
|
|
||||||
/* Class = "CocoaBindingsConnection"; ibShadowedNoSelectionPlaceholder = "No Selection"; ObjectID = "E0d-ZH-Wbc"; */
|
/* Class = "CocoaBindingsConnection"; ibShadowedIsNilPlaceholder = "None"; ObjectID = "Xpb-G8-gXl"; */
|
||||||
"E0d-ZH-Wbc.ibShadowedNoSelectionPlaceholder" = "No Selection";
|
"Xpb-G8-gXl.ibShadowedIsNilPlaceholder" = "None";
|
||||||
|
|
||||||
|
/* Class = "CocoaBindingsConnection"; ibShadowedNoSelectionPlaceholder = "No Selection"; ObjectID = "Xpb-G8-gXl"; */
|
||||||
|
"Xpb-G8-gXl.ibShadowedNoSelectionPlaceholder" = "No Selection";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Notes"; ObjectID = "hwn-UY-9Cr"; */
|
/* Class = "NSTextFieldCell"; title = "Notes"; ObjectID = "hwn-UY-9Cr"; */
|
||||||
"hwn-UY-9Cr.title" = "Notes";
|
"hwn-UY-9Cr.title" = "Notes";
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,9 @@
|
|||||||
/* (No Comment) */
|
|
||||||
"%@_COPY" = "%@ Copy";
|
|
||||||
|
|
||||||
/* Display format for days. Should contain a long decimal placeholder! */
|
/* Display format for days. Should contain a long decimal placeholder! */
|
||||||
"%ld_DAYS" = "%ld_DAYS";
|
"%ld_DAYS" = "%ld days";
|
||||||
|
|
||||||
/* % days ago */
|
/* % days ago */
|
||||||
"%ld_DAYS_AGO" = "%ld days ago";
|
"%ld_DAYS_AGO" = "%ld days ago";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"%ld_ENTRIES" = "%ld Entries";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"%ld_ENTRY" = "%ld Entry";
|
|
||||||
|
|
||||||
/* % Hours ago */
|
/* % Hours ago */
|
||||||
"%ld_HOURS_AGO" = "about %ld hours ago";
|
"%ld_HOURS_AGO" = "about %ld hours ago";
|
||||||
|
|
||||||
@@ -26,21 +17,28 @@
|
|||||||
"90_DAYS" = "in 90 days";
|
"90_DAYS" = "in 90 days";
|
||||||
|
|
||||||
/* Button label to abort a merge on a file with changed master key! */
|
/* Button label to abort a merge on a file with changed master key! */
|
||||||
"ABORT_MERGE_KEEP_MINE" = "ABORT_MERGE_KEEP_MINE";
|
"ABORT_MERGE_KEEP_MINE" = "Abort Merge. Keep Mine.";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Toolbar item with action menu */
|
||||||
"ACTION" = "Action";
|
"ACTION" = "Action";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Action to add an entry via template */
|
||||||
"ADD_TREMPLATE_ENTRY" = "Create Template Entry";
|
"ADD_TREMPLATE_ENTRY" = "Create Template Entry";
|
||||||
|
|
||||||
/* Informartive text in alert when adding entry requires KDBX format */
|
/* Alert informative text when plugins or their settings change and require a restart */
|
||||||
"ALERT_KDB_UNSUPPORTED_ADD_ENTRY_INFORMATIVE" = "ALERT_KDB_UNSUPPORTED_ADD_ENTRY_INFORMATIVE";
|
"ALERT_INFORMATIVE_TEXT_PLUGINS_CHANGED_SUGGEST_RESTART" = "Changes to plugins and global plugin settings take only effect after restart. Restart MacPass now?";
|
||||||
|
|
||||||
/* Message in alert to inform the user that adding an entry requires KDBX format */
|
/* Alert informative text to ask the user if he really want to uninstall the plugin */
|
||||||
"ALERT_KDB_UNSUPPORTED_ADD_ENTRY_MESSAGE" = "ALERT_KDB_UNSUPPORTED_ADD_ENTRY_MESSAGE";
|
"ALERT_INFORMATIVE_TEXT_REALLY_UNINSTALL_PLUGIN" = "The Plugin will be moved to the Trash.";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Alert message text when plugins or their settings change and require a restart */
|
||||||
|
"ALERT_MESSAGE_PLUGINS_CHANGED_SUGGEST_RESTART" = "Plugin settings changed. Please restart.";
|
||||||
|
|
||||||
|
/* Alert message text to ask the user if he really want to uninstall the plugin. Include %@ placeholder for plugin name */
|
||||||
|
"ALERT_MESSAGE_TEXT_REALLY_UNINSTALL_PLUGIN_%@" = "Should the Plugin %@ really be uninstalled?";
|
||||||
|
|
||||||
|
/* Attachments column title (shows counts)
|
||||||
|
Menu item to toggle display of attachment count column in entry table */
|
||||||
"ATTACHMENTS" = "Attachments";
|
"ATTACHMENTS" = "Attachments";
|
||||||
|
|
||||||
/* Menu item for automatic trash creation */
|
/* Menu item for automatic trash creation */
|
||||||
@@ -64,8 +62,8 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"AUTOTYPE_YES" = "Enable Autotype";
|
"AUTOTYPE_YES" = "Enable Autotype";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Sucessfully merged external changes */
|
||||||
"AUTO_MERGE_NOTIFICATION_TEXT" = "AUTO_MERGE_NOTIFICATION_TEXT";
|
"AUTO_MERGE_NOTIFICATION_TEXT" = "Auto merge successfull!";
|
||||||
|
|
||||||
/* Cancel */
|
/* Cancel */
|
||||||
"CANCEL" = "Cancel";
|
"CANCEL" = "Cancel";
|
||||||
@@ -74,9 +72,13 @@
|
|||||||
"CHANGE_DATABASE_NAME" = "Change Database Name";
|
"CHANGE_DATABASE_NAME" = "Change Database Name";
|
||||||
|
|
||||||
/* (No Comment) */
|
/* (No Comment) */
|
||||||
"CHANGE_FORMAT" = "Change File Format to KDBX";
|
"CHANGE_FORMAT" = "Change File Format to Kdbx";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Button to postpone the password change */
|
||||||
|
"CHANGE_LATER" = "Change Later";
|
||||||
|
|
||||||
|
/* Button to show the password change dialog
|
||||||
|
Single button to show the password change dialog */
|
||||||
"CHANGE_PASSWORD_WITH_DOTS" = "Change Password…";
|
"CHANGE_PASSWORD_WITH_DOTS" = "Change Password…";
|
||||||
|
|
||||||
/* Menu item in the database outline context menu to change the trash group */
|
/* Menu item in the database outline context menu to change the trash group */
|
||||||
@@ -86,9 +88,9 @@
|
|||||||
"CLEARING_PASTEBOARD" = "Cleared";
|
"CLEARING_PASTEBOARD" = "Cleared";
|
||||||
|
|
||||||
/* Clear Autotype Button */
|
/* Clear Autotype Button */
|
||||||
"CLEAR_AUTOTYPE" = "CLEAR_AUTOTYPE";
|
"CLEAR_AUTOTYPE" = "Clear Autotype";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Menu to clear recent searches */
|
||||||
"CLEAR_RECENT_SEARCHES" = "Clear recent searches";
|
"CLEAR_RECENT_SEARCHES" = "Clear recent searches";
|
||||||
|
|
||||||
/* Field name that was copied to the pasteboard */
|
/* Field name that was copied to the pasteboard */
|
||||||
@@ -107,36 +109,38 @@
|
|||||||
"COPY_CUSTOM_FIELDS" = "Copy Custom Fields";
|
"COPY_CUSTOM_FIELDS" = "Copy Custom Fields";
|
||||||
|
|
||||||
/* Context menu sub-menu to copy custom fields to clipboard */
|
/* Context menu sub-menu to copy custom fields to clipboard */
|
||||||
"COPY_CUSTOM_FIELDS_MENU" = "COPY_CUSTOM_FIELDS_MENU";
|
"COPY_CUSTOM_FIELDS_MENU" = "Copy Custom Field…";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Action title for copying an entry via drag and drop */
|
||||||
"COPY_ENTRY" = "Copy Entry";
|
"COPY_ENTRY" = "Copy Entry";
|
||||||
|
|
||||||
/* Mask for title to copy field value */
|
/* Mask for title to copy field value */
|
||||||
"COPY_FIELD_%@" = "Copy %@";
|
"COPY_FIELD_%@" = "Copy %@";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Action title for copying a group via drag and drop */
|
||||||
"COPY_GROUP" = "Copy Group";
|
"COPY_GROUP" = "Copy Group";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Menu item to copy the password of an entry
|
||||||
|
Toolbar item copy password */
|
||||||
"COPY_PASSWORD" = "Copy Password";
|
"COPY_PASSWORD" = "Copy Password";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Menu item to copy the URL of an entry */
|
||||||
"COPY_URL" = "Copy URL";
|
"COPY_URL" = "Copy URL";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Menu item to copy the username of an entry
|
||||||
|
Toolbar item copy username */
|
||||||
"COPY_USERNAME" = "Copy Username";
|
"COPY_USERNAME" = "Copy Username";
|
||||||
|
|
||||||
/* Created at template string. %@ is replaced by locaized date and time */
|
/* (No Comment) */
|
||||||
"CREATED_AT_%@" = "Created: %@";
|
"CREATED_AT_%@" = "Created: %@";
|
||||||
|
|
||||||
/* Curstom attribute reference item */
|
/* Curstom attribute reference item */
|
||||||
"CUSTOM_ATTRIBUTE" = "CUSTOM_ATTRIBUTE";
|
"CUSTOM_ATTRIBUTE" = "Custom Attribute";
|
||||||
|
|
||||||
/* Title for menu for custom search filters */
|
/* Title for menu for custom search filters */
|
||||||
"CUSTOM_SEARCH_FILTER_MENU" = "CUSTOM_SEARCH_FILTER_MENU";
|
"CUSTOM_SEARCH_FILTER_MENU" = "Custom Search Filter…";
|
||||||
|
|
||||||
/* Default name database */
|
/* Default display name for KDB databases */
|
||||||
"DATABASE" = "Database";
|
"DATABASE" = "Database";
|
||||||
|
|
||||||
/* Default Browser */
|
/* Default Browser */
|
||||||
@@ -154,10 +158,14 @@
|
|||||||
/* Title for a newly created group */
|
/* Title for a newly created group */
|
||||||
"DEFAULT_GROUP_NAME" = "New Group";
|
"DEFAULT_GROUP_NAME" = "New Group";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Default window title for a new window association */
|
||||||
"DEFAULT_WINDOW_TITLE" = "Window Title";
|
"DEFAULT_WINDOW_TITLE" = "Window Title";
|
||||||
|
|
||||||
/* Menu item in the database outline context menu to delete the node from the trash */
|
/* Menu item in the database outline context menu to delete the node from the trash
|
||||||
|
Menu item to delete an entry
|
||||||
|
Menu item to delete the selected attached file
|
||||||
|
Menu item to delete the selected custom icon
|
||||||
|
Toolbar item delete item */
|
||||||
"DELETE" = "Delete";
|
"DELETE" = "Delete";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
@@ -167,50 +175,45 @@
|
|||||||
"DELETE_GROUP" = "Delete Group";
|
"DELETE_GROUP" = "Delete Group";
|
||||||
|
|
||||||
/* Empty Trash */
|
/* Empty Trash */
|
||||||
"DELETE_TRASHED_ENTRY" = "DELETE_TRASHED_ENTRY";
|
"DELETE_TRASHED_ENTRY" = "Delete Trashed Entry";
|
||||||
|
|
||||||
/* Empty Trash */
|
/* Empty Trash */
|
||||||
"DELETE_TRASHED_GROUP" = "DELETE_TRASHED_GROUP";
|
"DELETE_TRASHED_GROUP" = "Delete Trashed Group";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"DOCUMENT_AUTOTYPE_CORRUPTION_WARNING" = "Please run Fix Autotype...";
|
"DOCUMENT_AUTOTYPE_CORRUPTION_WARNING" = "Please run Fix Autotype...";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Action name for duplicating entries */
|
||||||
"DUPLICATE_ENTRIES" = "DUPLICATE_ENTRIES";
|
"DUPLICATE_ENTRIES_%ld" = "Duplicate Entries %ld";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Menu item to directly diplicate an entry */
|
||||||
"DUPLICATE_ENTRY" = "Duplicate Entry";
|
"DUPLICATE_ENTRY" = "Duplicate Entry";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Menu item to duplicate an entry with options how to duplicate. Will present a dialog. */
|
||||||
"DUPLICATE_ENTRY_WITH_OPTIONS" = "Duplicate Entry…";
|
"DUPLICATE_ENTRY_WITH_OPTIONS" = "Duplicate Entry…";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"DUPLICTE_PASSWORDS" = "Duplicate Passwords";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"EDIT" = "Edit";
|
|
||||||
|
|
||||||
/* Menu item in the database outline context menu to change the template group
|
/* Menu item in the database outline context menu to change the template group
|
||||||
Menu item on the add entry context menu to edit template groups */
|
Menu item on the add entry context menu to edit template groups */
|
||||||
"EDIT_TEMPLATE_GROUP" = "Edit Entry Template Group";
|
"EDIT_TEMPLATE_GROUP" = "Edit Entry Template Group";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"EMAIL" = "EMail";
|
|
||||||
|
|
||||||
/* Empty Trash
|
/* Empty Trash
|
||||||
Menu item in the database outline context menu to empyt the trash
|
Menu item in the database outline context menu to empyt the trash
|
||||||
Menu item in the database outline to empty the trash */
|
Menu item in the database outline to empty the trash
|
||||||
|
Menu item to empty the trash */
|
||||||
"EMPTY_TRASH" = "Empty Trash";
|
"EMPTY_TRASH" = "Empty Trash";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Informative text for the enforce password change alert */
|
||||||
"ENFORCE_PASSWORD_CHANGE_ALERT_DESCRIPTION" = "You will be unable to save until the password and/or keyfile has been changed.";
|
"ENFORCE_PASSWORD_CHANGE_ALERT_DESCRIPTION" = "You will be unable to save until the password and/or keyfile has been changed.";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Message text for the enforce password change alert */
|
||||||
"ENFORCE_PASSWORD_CHANGE_ALERT_TITLE" = "The database password expired!";
|
"ENFORCE_PASSWORD_CHANGE_ALERT_TITLE" = "The database password expired!";
|
||||||
|
|
||||||
/* Keyfile not valid */
|
/* Keyfile not valid */
|
||||||
"ERROR_INVALID_KEYFILE" = "Keyfile is invalid!";
|
"ERROR_INVALID_KEYFILE" = "Keyfile is invalid!";
|
||||||
|
|
||||||
|
/* Error description given when adding an invalid plugin */
|
||||||
|
"ERROR_INVALID_PLUGIN" = "Invalid plugin";
|
||||||
|
|
||||||
/* Passwords do not match */
|
/* Passwords do not match */
|
||||||
"ERROR_PASSWORD_MISSMATCH" = "Passwords do not match!";
|
"ERROR_PASSWORD_MISSMATCH" = "Passwords do not match!";
|
||||||
|
|
||||||
@@ -218,13 +221,13 @@
|
|||||||
"ERROR_PASSWORD_MISSMATCH_INVALID_KEYFILE" = "Passwords do not match and keyfile is invalid!";
|
"ERROR_PASSWORD_MISSMATCH_INVALID_KEYFILE" = "Passwords do not match and keyfile is invalid!";
|
||||||
|
|
||||||
/* Recommend/Enforce key change intervall format */
|
/* Recommend/Enforce key change intervall format */
|
||||||
"EVERY_%ld_DAYS" = "EVERY_%ld_DAYS";
|
"EVERY_%ld_DAYS" = "Every %ld days";
|
||||||
|
|
||||||
/* Format to returen the date an item expires. Includes %@ placehoder for date */
|
/* Format to returen the date an item expires. Includes %@ placehoder for date */
|
||||||
"EXPIRES_AT_DATE_%@" = "Expires: %@";
|
"EXPIRES_AT_DATE_%@" = "Expires: %@";
|
||||||
|
|
||||||
/* The master key was changed by an extrenal programm! */
|
/* The master key was changed by an extrenal programm! */
|
||||||
"EXTERN_CHANGE_OF_MASTERKEY" = "EXTERN_CHANGE_OF_MASTERKEY";
|
"EXTERN_CHANGE_OF_MASTERKEY" = "Master key was changed by another programm";
|
||||||
|
|
||||||
/* Informative text displayed when the file was change from another application */
|
/* Informative text displayed when the file was change from another application */
|
||||||
"FILE_CHANGED_BY_OTHERS_INFO_TEXT" = "The file loaded is not the same as the on on disk. How do you want to move on?";
|
"FILE_CHANGED_BY_OTHERS_INFO_TEXT" = "The file loaded is not the same as the on on disk. How do you want to move on?";
|
||||||
@@ -232,48 +235,41 @@
|
|||||||
/* Message displayed when an open file was changed from another application */
|
/* Message displayed when an open file was changed from another application */
|
||||||
"FILE_CHANGED_BY_OTHERS_MESSAGE_TEXT" = "The database file was modified!";
|
"FILE_CHANGED_BY_OTHERS_MESSAGE_TEXT" = "The database file was modified!";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* External file change strategy option: ask what to do */
|
||||||
"FILE_CHANGE_STRATEGY_ASK" = "Ask";
|
"FILE_CHANGE_STRATEGY_ASK" = "Ask";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* External file change strategy option: Keep local file an ignore external changes */
|
||||||
"FILE_CHANGE_STRATEGY_KEEP_MINE" = "Keep My Version and Ignore Other Changes";
|
"FILE_CHANGE_STRATEGY_KEEP_MINE" = "Keep My Version and Ignore Other Changes";
|
||||||
|
|
||||||
/* Merge changes into file! */
|
/* External file change strategy option: Merge external changes into local file.
|
||||||
|
Merge changes into file! */
|
||||||
"FILE_CHANGE_STRATEGY_MERGE" = "Merge Changes";
|
"FILE_CHANGE_STRATEGY_MERGE" = "Merge Changes";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* External file change strategy option: Use the changed file and discard local changes */
|
||||||
"FILE_CHANGE_STRATEGY_USE_OTHER" = "Load Changed Version and Discard Mine";
|
"FILE_CHANGE_STRATEGY_USE_OTHER" = "Load Changed Version and Discard Mine";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"FILE_OPEN_ERROR" = "Error opening file.";
|
"FILE_OPEN_ERROR" = "Error opening file.";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"GENERAL" = "General";
|
|
||||||
|
|
||||||
/* General Settings Label */
|
/* General Settings Label */
|
||||||
"GENERAL_SETTINGS" = "General";
|
"GENERAL_SETTINGS" = "General";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Group column title */
|
||||||
"GROUP" = "Group";
|
"GROUP" = "Group";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* History count column title
|
||||||
"HISTORY" = "HISTORY";
|
Menu item to toggle display of history count column in entry table */
|
||||||
|
"HISTORY" = "History";
|
||||||
/* (No Comment) */
|
|
||||||
"HOMEBANKING" = "Homebanking";
|
|
||||||
|
|
||||||
/* Imports a dragged URL for a new entry */
|
/* Imports a dragged URL for a new entry */
|
||||||
"IMPORT_URL" = "IMPORT_URL";
|
"IMPORT_URL" = "Import URL";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Toolbar item toggle inspector */
|
||||||
"INSPECTOR" = "Inspector";
|
"INSPECTOR" = "Inspector";
|
||||||
|
|
||||||
/* Label for the integration settings tab */
|
/* Label for the integration settings tab */
|
||||||
"INTEGRATION_SETTINGS" = "Integration";
|
"INTEGRATION_SETTINGS" = "Integration";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"INTERNET" = "Internet";
|
|
||||||
|
|
||||||
/* Just now */
|
/* Just now */
|
||||||
"JUST_NOW" = "Just now";
|
"JUST_NOW" = "Just now";
|
||||||
|
|
||||||
@@ -286,46 +282,58 @@
|
|||||||
/* Reopen the file! */
|
/* Reopen the file! */
|
||||||
"KEEP_OTHER_DISCARD_MINE" = "Keep Other, Discard Mine";
|
"KEEP_OTHER_DISCARD_MINE" = "Keep Other, Discard Mine";
|
||||||
|
|
||||||
|
/* Do not install the plugin */
|
||||||
|
"KEEP_PLUGIN" = "Keep Plugin";
|
||||||
|
|
||||||
|
/* Do not restart MacPass */
|
||||||
|
"KEEP_RUNNING" = "Keep Running";
|
||||||
|
|
||||||
/* last week */
|
/* last week */
|
||||||
"LAST_WEEK" = "Last week";
|
"LAST_WEEK" = "Last week";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Toolbar item to Lock the database */
|
||||||
"LOCK" = "Lock";
|
"LOCK" = "Lock";
|
||||||
|
|
||||||
/* Modifed at template string. %@ is replaced by locaized date and time */
|
/* Message in the open panel to add attachments to an entry */
|
||||||
"MODIFED_AT_%@" = "Modified: %@";
|
"MESSAGE_ADD_ATTACHMENT_OPEN_PANEL" = "Select the file to attach";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Message in the add plugin open panel */
|
||||||
|
"MESSAGE_ADD_PLUGIN_OPEN_PANEL" = "Select the plugin to install";
|
||||||
|
|
||||||
|
/* Message in the open panel to import an XML file */
|
||||||
|
"MESSAGE_XML_OPEN_PANEL" = "Select the XML file to import";
|
||||||
|
|
||||||
|
/* Menu item to toggle display of modified date column in entry table
|
||||||
|
Modification date column title */
|
||||||
"MODIFIED" = "Modified";
|
"MODIFIED" = "Modified";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Action title for moving an entry via drag and drop */
|
||||||
"MOVE_ENTRY" = "Move Entry";
|
"MOVE_ENTRY" = "Move Entry";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Action title for moving a group via drag and drop */
|
||||||
"MOVE_GROUP" = "Move Group";
|
"MOVE_GROUP" = "Move Group";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"NAME" = "Name";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"NETWORK" = "Network";
|
|
||||||
|
|
||||||
/* Name for a newly created Database */
|
/* Name for a newly created Database */
|
||||||
"NEW_DATABASE" = "Database";
|
"NEW_DATABASE" = "Database";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Menu item to create a new entry
|
||||||
|
Toolbar item new entry */
|
||||||
"NEW_ENTRY" = "New Entry";
|
"NEW_ENTRY" = "New Entry";
|
||||||
|
|
||||||
/* Submenu to add an entry via template */
|
/* Submenu to add an entry via template */
|
||||||
"NEW_ENTRY_WITH_TEMPLATE_%@" = "Create Entry with Template %@";
|
"NEW_ENTRY_WITH_TEMPLATE_%@" = "Create Entry with Template %@";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Menu item to create a new group
|
||||||
|
Toolbar item new group */
|
||||||
"NEW_GROUP" = "New Group";
|
"NEW_GROUP" = "New Group";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Placeholder text for input fields if no entry or group is selected */
|
||||||
"NONE" = "None";
|
"NONE" = "None";
|
||||||
|
|
||||||
/* Notes reference item */
|
/* Displayed name when notes or part of notes was copied
|
||||||
|
Menu item to toggle display of notes column in entry table
|
||||||
|
Notes column title
|
||||||
|
Notes reference item */
|
||||||
"NOTES" = "Notes";
|
"NOTES" = "Notes";
|
||||||
|
|
||||||
/* Expiration date format, when item does not expire */
|
/* Expiration date format, when item does not expire */
|
||||||
@@ -352,16 +360,27 @@
|
|||||||
/* preset to expire after one year from now */
|
/* preset to expire after one year from now */
|
||||||
"ONE_YEAR" = "in one year";
|
"ONE_YEAR" = "in one year";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Open button in the open panel to add attachments to an entry */
|
||||||
|
"OPEN_BUTTON_ADD_ATTACHMENT_OPEN_PANEL" = "Attach";
|
||||||
|
|
||||||
|
/* Open button in the add plugin open panel */
|
||||||
|
"OPEN_BUTTON_ADD_PLUGIN_OPEN_PANEL" = "Install";
|
||||||
|
|
||||||
|
/* Open button in the open panel to import an XML file */
|
||||||
|
"OPEN_BUTTON_IMPORT_XML_OPEN_PANEL" = "Import";
|
||||||
|
|
||||||
|
/* Menu item to open the URL with the default application */
|
||||||
"OPEN_URL" = "Open URL";
|
"OPEN_URL" = "Open URL";
|
||||||
|
|
||||||
/* Select Browser */
|
/* Select Browser */
|
||||||
"OTHER_BROWSER" = "Select Browser…";
|
"OTHER_BROWSER" = "Select Browser…";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"OUTPUT_VALUE" = "OUTPUT_VALUE";
|
"OUTPUT_VALUE" = "Output Value";
|
||||||
|
|
||||||
/* Password reference item */
|
/* Menu item to toggle display of password column in entry table
|
||||||
|
Password column title
|
||||||
|
Password reference item */
|
||||||
"PASSWORD" = "Password";
|
"PASSWORD" = "Password";
|
||||||
|
|
||||||
/* Button to reset the password defaults for a single entry */
|
/* Button to reset the password defaults for a single entry */
|
||||||
@@ -370,55 +389,83 @@
|
|||||||
/* Button to set the defaults of the password generator */
|
/* Button to set the defaults of the password generator */
|
||||||
"PASSWORD_GENERATOR_SET_DEFAULTS" = "Set Defaults";
|
"PASSWORD_GENERATOR_SET_DEFAULTS" = "Set Defaults";
|
||||||
|
|
||||||
/* Placeholder in the unlock-password input field if password is enabled */
|
/* Placeholder for the password field to aks for password
|
||||||
|
Placeholder in the unlock-password input field if password is enabled */
|
||||||
"PASSWORD_INPUT_ENTER_PASSWORD" = "Enter Password";
|
"PASSWORD_INPUT_ENTER_PASSWORD" = "Enter Password";
|
||||||
|
|
||||||
/* Placeholder in the unlock-password input field if password is disabled */
|
/* Placeholder for the password input field if passwords are disabled
|
||||||
|
Placeholder for the repeat password input if passwords are disabled
|
||||||
|
Placeholder in the unlock-password input field if password is disabled */
|
||||||
"PASSWORD_INPUT_NO_PASSWORD" = "No Password";
|
"PASSWORD_INPUT_NO_PASSWORD" = "No Password";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Placeholder for the repeat password field to aks for the repeated password */
|
||||||
"PASSWORD_INPUT_REPEAT_PASSWORD" = "Repeat Password";
|
"PASSWORD_INPUT_REPEAT_PASSWORD" = "Repeat Password";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Menu item to perform autotype with the selected entry */
|
||||||
"PERFORM_AUTOTYPE_FOR_ENTRY" = "Perform Autotype";
|
"PERFORM_AUTOTYPE_FOR_ENTRY" = "Perform Autotype";
|
||||||
|
|
||||||
|
/* The plugin could not be initalized */
|
||||||
|
"PLUGIN_ERROR_INTILIZATION_FAILED" = "Plugin could not be initalized";
|
||||||
|
|
||||||
|
/* Error for a plugin that was not signed properly */
|
||||||
|
"PLUGIN_ERROR_UNSECURE_PLUGIN" = "Plugin is not properly signed";
|
||||||
|
|
||||||
|
/* Plugin specifies the wrong principla class! */
|
||||||
|
"PLUGIN_ERROR_WRONG_PRINCIPAL_CLASS" = "Unexpected principal class in plugin";
|
||||||
|
|
||||||
|
/* name for disabled unloaded plugin */
|
||||||
|
"PLUGIN_NAME_DISABLED_%@" = "🚫 %@";
|
||||||
|
|
||||||
|
/* Name for unloaded plugin with errors */
|
||||||
|
"PLUGIN_NAME_ERROR_%@" = "⚠️ %@";
|
||||||
|
|
||||||
/* Label for plugin settings tab */
|
/* Label for plugin settings tab */
|
||||||
"PLUGIN_SETTINGS" = "Plugins";
|
"PLUGIN_SETTINGS" = "Plugins";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Generic message displayed if no details are know why a plugin was not loaded. */
|
||||||
|
"PLUGIN_SETTINGS_GENERIC_ERROR_MESSAGE" = "Plugin could not be loaded.";
|
||||||
|
|
||||||
|
/* Plugin version. Include a %@ placeholder for version string */
|
||||||
|
"PLUGIN_VERSION_%@" = "Version: %@";
|
||||||
|
|
||||||
|
/* Menu item to preview the selected attached file. */
|
||||||
"PREVIEW" = "Preview";
|
"PREVIEW" = "Preview";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Recent searches menu item */
|
||||||
"RECENT_SEARCHES" = "Recent searches";
|
"RECENT_SEARCHES" = "Recent searches";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Informative text for the recommend password change alert */
|
||||||
"RECOMMEND_PASSWORD_CHANGE_ALERT_DESCRIPTION" = "It is recommended to change the password and/or keyfile.";
|
"RECOMMEND_PASSWORD_CHANGE_ALERT_DESCRIPTION" = "It is recommended to change the password and/or keyfile.";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Message text for the recommend password change alert */
|
||||||
"RECOMMEND_PASSWORD_CHANGE_ALERT_TITLE" = "Please change the database password!";
|
"RECOMMEND_PASSWORD_CHANGE_ALERT_TITLE" = "Please change the database password!";
|
||||||
|
|
||||||
/* Action to restore and Entry to a previous state of it's history */
|
/* Restart */
|
||||||
"RESTORE_HISTORY_ENTRY" = "RESTORE_HISTORY_ENTRY";
|
"RESTART" = "Restart";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Action to restore and Entry to a previous state of it's history */
|
||||||
|
"RESTORE_HISTORY_ENTRY" = "Restore History Entry";
|
||||||
|
|
||||||
|
/* Menu item to save the selected attached file.
|
||||||
|
Save file menu item title when save will just save the file */
|
||||||
"SAVE" = "Save";
|
"SAVE" = "Save";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Button title to save the generated key file */
|
||||||
"SAVE_KEYFILE" = "Save Keyfile";
|
"SAVE_KEYFILE" = "Save Keyfile";
|
||||||
|
|
||||||
/* (No Comment) */
|
/* (No Comment) */
|
||||||
"SAVE_LOSSY" = "Save and lose data";
|
"SAVE_LOSSY" = "Save and lose data";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Save file menu item title when save will prompt for a location to save or ask for a password/key */
|
||||||
"SAVE_WITH_DOTS" = "Save…";
|
"SAVE_WITH_DOTS" = "Save…";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Search input in Toolbar */
|
||||||
"SEARCH" = "Search";
|
"SEARCH" = "Search";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Search option: Find duplicate passwords */
|
||||||
"SEARCH_DUPLICATE_PASSWORDS" = "Duplicate Passwords";
|
"SEARCH_DUPLICATE_PASSWORDS" = "Duplicate Passwords";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Search option: Find expired entries */
|
||||||
"SEARCH_EXPIRED_ENTRIES" = "Expired";
|
"SEARCH_EXPIRED_ENTRIES" = "Expired";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
@@ -428,82 +475,84 @@
|
|||||||
"SEARCH_NO" = "Exclude from Search";
|
"SEARCH_NO" = "Exclude from Search";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"SEARCH_VALUE" = "";
|
"SEARCH_VALUE" = "Search Value";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"SEARCH_YES" = "Include in Search";
|
"SEARCH_YES" = "Include in Search";
|
||||||
|
|
||||||
/* (No Comment) */
|
/* (No Comment) */
|
||||||
"SELECT_AUTOTYPE_CANDIDATE" = "Select candidate!";
|
"SELECT_AUTOTYPE_CANDIDATE" = "Select Candidate!";
|
||||||
|
|
||||||
/* Menu item title for the expiry preset selection menu in the date picker */
|
/* Menu item title for the expiry preset selection menu in the date picker */
|
||||||
"SELECT_DATE_PRESET" = "Use preset…";
|
"SELECT_DATE_PRESET" = "Use preset…";
|
||||||
|
|
||||||
/* Message for the dialog to open a file for merge */
|
/* Message on the open panel for selecting which browser to use for opening URLs */
|
||||||
"SELECT_FILE_TO_MERGE" = "";
|
"SELECT_DEFAULT_BROWSER_OPEN_PANEL_MESSAGE" = "Select the Browser to open URL with.";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Label for the select browser button on the open panel for selecting which browser to use for opening URLs */
|
||||||
|
"SELECT_DEFAULT_BROWSER_OPEN_PANEL_SELECT_BUTTON" = "Choose";
|
||||||
|
|
||||||
|
/* Message for the dialog to open a file for merge */
|
||||||
|
"SELECT_FILE_TO_MERGE" = "Select file to merge";
|
||||||
|
|
||||||
|
/* Menu displayed as popup selection for search options */
|
||||||
"SELECT_FILTER_WITH_DOTS" = "Select…";
|
"SELECT_FILTER_WITH_DOTS" = "Select…";
|
||||||
|
|
||||||
/* Set the selection as default file change strategy! */
|
/* Set the selection as default file change strategy! */
|
||||||
"SET_AS_DEFAULT_FILE_CHANGE_STRATEGY" = "Use this method as default. You can change this at any time in the preferences.";
|
"SET_AS_DEFAULT_FILE_CHANGE_STRATEGY" = "Use this method as default. You can change this at any time in the preferences.";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"SET_NAME" = "Edit Name";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"SET_NOTES" = "Edit Notes";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"SET_PASSWORD" = "Edit Password";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"SET_TITLE" = "Edit Title";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"SET_URL" = "Edit URL";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"SET_USERNAME" = "Edit Username";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
/* (No Comment) */
|
||||||
"SHORT_FILE_CHANGE_STRATEGY_ASK" = "Ask";
|
"SHORT_FILE_CHANGE_STRATEGY_ASK" = "Ask";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Menu item to show the history of the selected entry
|
||||||
|
Toolbar item to toggel history display */
|
||||||
"SHOW_HISTORY" = "Show History";
|
"SHOW_HISTORY" = "Show History";
|
||||||
|
|
||||||
/* Menu item to show the reference builder in a text view's context menu */
|
/* Menu item to show the reference builder in a text view's context menu */
|
||||||
"SHOW_REFERENCE_BUILDER" = "Show Reference Builder";
|
"SHOW_REFERENCE_BUILDER" = "Show Reference Builder";
|
||||||
|
|
||||||
/* Displayed name when title field was copied
|
/* Displayed name when title field was copied
|
||||||
|
Menu item to toggle display of title column in entry table
|
||||||
|
Title column title
|
||||||
Title reference item */
|
Title reference item */
|
||||||
"TITLE" = "Title";
|
"TITLE" = "Title";
|
||||||
|
|
||||||
/* preset to expire tomorrow */
|
/* preset to expire tomorrow */
|
||||||
"TOMORROW" = "Tomorrow";
|
"TOMORROW" = "Tomorrow";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"TRASH" = "Trash";
|
|
||||||
|
|
||||||
/* Move Entry to Trash */
|
/* Move Entry to Trash */
|
||||||
"TRASH_ENTRY" = "Trash Entry";
|
"TRASH_ENTRY" = "Trash Entry";
|
||||||
|
|
||||||
/* Move Group to Trash */
|
/* Move Group to Trash */
|
||||||
"TRASH_GROUP" = "Trash Group";
|
"TRASH_GROUP" = "Trash Group";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Uninstall plugin */
|
||||||
"UNKNOWN_FILE_VERSION" = "";
|
"UNINSTALL" = "Uninstall";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"UNKNOWN_TOOLBAR_ITEM" = "";
|
"UNKNOWN_FILE_VERSION" = "Unknown file version";
|
||||||
|
|
||||||
|
/* Unknown databas format. */
|
||||||
|
"UNKNOWN_FORMAT" = "Unknown file format";
|
||||||
|
|
||||||
|
/* Database format is unknown since the file is not saved yet */
|
||||||
|
"UNKNOWN_FORMAT_FILE_NOT_SAVED_YET" = "Unknown, file not saved yet";
|
||||||
|
|
||||||
|
/* No comment provided by engineer. */
|
||||||
|
"UNKNOWN_TOOLBAR_ITEM" = "Unknown Toolbar Item";
|
||||||
|
|
||||||
/* Update Settings Label */
|
/* Update Settings Label */
|
||||||
"UPDATE_SETTINGS" = "Updates";
|
"UPDATE_SETTINGS" = "Updates";
|
||||||
|
|
||||||
/* URL reference item */
|
/* Menu item to toggle display of url column in entry table
|
||||||
|
Submenu with options what to do with the URL of an entry
|
||||||
|
Url column title
|
||||||
|
URL reference item */
|
||||||
"URL" = "URL";
|
"URL" = "URL";
|
||||||
|
|
||||||
/* Username reference item */
|
/* Menu item to toggle display of username column in entry table
|
||||||
|
Username column title
|
||||||
|
Username reference item */
|
||||||
"USERNAME" = "Username";
|
"USERNAME" = "Username";
|
||||||
|
|
||||||
/* Displayed name when uuid field was copied
|
/* Displayed name when uuid field was copied
|
||||||
@@ -517,22 +566,22 @@
|
|||||||
"WARNING_NO_PASSWORD_OR_KEYFILE" = "No password or keyfile supplied!";
|
"WARNING_NO_PASSWORD_OR_KEYFILE" = "No password or keyfile supplied!";
|
||||||
|
|
||||||
/* Informative Text displayed when clearing the Trash */
|
/* Informative Text displayed when clearing the Trash */
|
||||||
"WARNING_ON_DELETE_TRASHED_NODE_DESCRIPTION" = "";
|
"WARNING_ON_DELETE_TRASHED_NODE_DESCRIPTION" = "The Trashed item(s) will be deleted!";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Message text for the alert displayed when deleting a node */
|
||||||
"WARNING_ON_DELETE_TRASHED_NODE_TITLE" = "";
|
"WARNING_ON_DELETE_TRASHED_NODE_TITLE" = "Deleting Trashed Item";
|
||||||
|
|
||||||
/* Informative Text displayed when clearing the Trash */
|
/* Informative Text displayed when clearing the Trash */
|
||||||
"WARNING_ON_EMPTY_TRASH_DESCRIPTION" = "Emptying the Trash is not undoable.";
|
"WARNING_ON_EMPTY_TRASH_DESCRIPTION" = "Emptying the Trash is not undoable.";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* Message text for the alert displayed when clearing the Trash */
|
||||||
"WARNING_ON_EMPTY_TRASH_TITLE" = "Empty Trash?";
|
"WARNING_ON_EMPTY_TRASH_TITLE" = "Empty Trash?";
|
||||||
|
|
||||||
/* (No Comment) */
|
/* (No Comment) */
|
||||||
"WARNING_ON_LOSSY_SAVE" = "Saving with KDB format, will lead to lost data.";
|
"WARNING_ON_LOSSY_SAVE" = "Saving with Kdb format, will lead to lost data.";
|
||||||
|
|
||||||
/* (No Comment) */
|
/* (No Comment) */
|
||||||
"WARNING_ON_LOSSY_SAVE_DESCRIPTION" = "The KDB file format cannot hold all information.";
|
"WARNING_ON_LOSSY_SAVE_DESCRIPTION" = "The Kdb file format cannot hold all information.";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"WARNING_ON_SAVE_NO_PASSWORD_OR_KEY_SET" = "No password or keyfile is set.";
|
"WARNING_ON_SAVE_NO_PASSWORD_OR_KEY_SET" = "No password or keyfile is set.";
|
||||||
|
|||||||
@@ -1,7 +1,17 @@
|
|||||||
{
|
{
|
||||||
|
"DUPLICATE_ENTRIES_%ld" = {
|
||||||
|
NSStringLocalizedFormatKey = "%#@entries@";
|
||||||
|
entries = {
|
||||||
|
NSStringFormatSpecTypeKey = NSStringPluralRuleType;
|
||||||
|
NSStringFormatValueTypeKey = ld;
|
||||||
|
one = "Duplicate Entry";
|
||||||
|
other = "Duplicate Entries";
|
||||||
|
zero = "Duplicate Entries";
|
||||||
|
};
|
||||||
|
};
|
||||||
"EVERY_%ld_DAYS" = {
|
"EVERY_%ld_DAYS" = {
|
||||||
NSStringLocalizedFormatKey = "%#@variable@";
|
NSStringLocalizedFormatKey = "%#@days@";
|
||||||
variable = {
|
days = {
|
||||||
NSStringFormatSpecTypeKey = NSStringPluralRuleType;
|
NSStringFormatSpecTypeKey = NSStringPluralRuleType;
|
||||||
NSStringFormatValueTypeKey = ld;
|
NSStringFormatValueTypeKey = ld;
|
||||||
one = "every day";
|
one = "every day";
|
||||||
|
|||||||
@@ -4,12 +4,21 @@
|
|||||||
/* Class = "NSButtonCell"; title = "Load unsecure Plugins"; ObjectID = "C4B-6z-ZqX"; */
|
/* Class = "NSButtonCell"; title = "Load unsecure Plugins"; ObjectID = "C4B-6z-ZqX"; */
|
||||||
"C4B-6z-ZqX.title" = "Load unsecure Plugins";
|
"C4B-6z-ZqX.title" = "Load unsecure Plugins";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "Plugin Settings Info"; ObjectID = "OOr-SW-jZb"; */
|
||||||
|
"OOr-SW-jZb.title" = "Plugin Settings Info";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "STt-PQ-Szr"; */
|
/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "STt-PQ-Szr"; */
|
||||||
"STt-PQ-Szr.title" = "Text Cell";
|
"STt-PQ-Szr.title" = "Text Cell";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "fug-79-n9g"; */
|
/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "fug-79-n9g"; */
|
||||||
"fug-79-n9g.title" = "Table View Cell";
|
"fug-79-n9g.title" = "Table View Cell";
|
||||||
|
|
||||||
|
/* Class = "NSButtonCell"; title = "Browse Plugins…"; ObjectID = "sqO-8H-n1y"; */
|
||||||
|
"sqO-8H-n1y.title" = "Browse Plugins…";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Box"; ObjectID = "vBs-Ga-aq0"; */
|
/* Class = "NSBox"; title = "Box"; ObjectID = "vBs-Ga-aq0"; */
|
||||||
"vBs-Ga-aq0.title" = "Box";
|
"vBs-Ga-aq0.title" = "Box";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "Label"; ObjectID = "yuK-qH-jxx"; */
|
||||||
|
"yuK-qH-jxx.title" = "Label";
|
||||||
|
|
||||||
|
|||||||
@@ -44,12 +44,6 @@
|
|||||||
"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "Reiniciar";
|
"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "Reiniciar";
|
||||||
"TRASH_ENTRY" = "Entrada de Papelera";
|
"TRASH_ENTRY" = "Entrada de Papelera";
|
||||||
"TRASH_GROUP" = "Grupo de Papelera";
|
"TRASH_GROUP" = "Grupo de Papelera";
|
||||||
"SET_NAME" = "Editar Nombre";
|
|
||||||
"SET_TITLE" = "Editar Título";
|
|
||||||
"SET_USERNAME" = "Editar Nombre de Usuario";
|
|
||||||
"SET_PASSWORD" = "Editar Contraseña";
|
|
||||||
"SET_URL" = "Editar URL";
|
|
||||||
"SET_NOTES" = "Editar Notas";
|
|
||||||
"SHOW_HISTORY" = "Show History";
|
"SHOW_HISTORY" = "Show History";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -70,16 +64,10 @@
|
|||||||
"DATABASE" = "Base de Datos";
|
"DATABASE" = "Base de Datos";
|
||||||
"DELETE" = "Eliminar";
|
"DELETE" = "Eliminar";
|
||||||
"EDIT" = "Editar";
|
"EDIT" = "Editar";
|
||||||
"EMAIL" = "EMail";
|
|
||||||
"GROUP" = "Grupo";
|
"GROUP" = "Grupo";
|
||||||
"GENERAL" = "General";
|
|
||||||
"HOMEBANKING" = "Bancos";
|
|
||||||
"INSPECTOR" = "Inspector";
|
"INSPECTOR" = "Inspector";
|
||||||
"INTERNET" = "Internet";
|
|
||||||
"LOCK" = "Bloquear";
|
"LOCK" = "Bloquear";
|
||||||
"MODIFIED" = "Modificado";
|
"MODIFIED" = "Modificado";
|
||||||
"NAME" = "Nombre";
|
|
||||||
"NETWORK" = "Red";
|
|
||||||
"NONE" = "Ninguno";
|
"NONE" = "Ninguno";
|
||||||
"NOTES" = "Notas";
|
"NOTES" = "Notas";
|
||||||
"PASSWORD" = "Contraseña";
|
"PASSWORD" = "Contraseña";
|
||||||
@@ -87,7 +75,6 @@
|
|||||||
"SAVE_WITH_DOTS" = "Guardar…";
|
"SAVE_WITH_DOTS" = "Guardar…";
|
||||||
"SEARCH" = "Buscar";
|
"SEARCH" = "Buscar";
|
||||||
"TITLE" = "Título";
|
"TITLE" = "Título";
|
||||||
"TRASH" = "Papelera";
|
|
||||||
"URL" = "URL";
|
"URL" = "URL";
|
||||||
"USERNAME" = "Nombre de usuario";
|
"USERNAME" = "Nombre de usuario";
|
||||||
"WINDOWS" = "Ventanas";
|
"WINDOWS" = "Ventanas";
|
||||||
@@ -95,7 +82,6 @@
|
|||||||
|
|
||||||
"CHANGE_DATABASE_NAME" = "Cambiar Nombre de Base";
|
"CHANGE_DATABASE_NAME" = "Cambiar Nombre de Base";
|
||||||
"CHANGE_TRASH_GROUP" = "Cambiar Grupo de Papelera";
|
"CHANGE_TRASH_GROUP" = "Cambiar Grupo de Papelera";
|
||||||
"%@_COPY" = "%@ Copiar";
|
|
||||||
|
|
||||||
"DUPLICTE_PASSWORDS" = "Duplicar Contraseñas";
|
"DUPLICTE_PASSWORDS" = "Duplicar Contraseñas";
|
||||||
|
|
||||||
@@ -144,13 +130,6 @@
|
|||||||
"DEFAULT_GROUP_NAME" = "Nuevo Grupo";
|
"DEFAULT_GROUP_NAME" = "Nuevo Grupo";
|
||||||
"DEFAULT_WINDOW_TITLE" = "Título de Ventana";
|
"DEFAULT_WINDOW_TITLE" = "Título de Ventana";
|
||||||
|
|
||||||
/* Number of Entries
|
|
||||||
Plural (0, >1)
|
|
||||||
Singular (1)
|
|
||||||
*/
|
|
||||||
"%ld_ENTRIES" = "%ld Entradas";
|
|
||||||
"%ld_ENTRY" = "%ld Entrada";
|
|
||||||
|
|
||||||
/* Settings */
|
/* Settings */
|
||||||
"GENERAL_SETTINGS" = "General";
|
"GENERAL_SETTINGS" = "General";
|
||||||
"INTEGRATION_SETTINGS" = "Integración";
|
"INTEGRATION_SETTINGS" = "Integración";
|
||||||
|
|||||||
@@ -44,12 +44,6 @@
|
|||||||
"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "Réinitialiser";
|
"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "Réinitialiser";
|
||||||
"TRASH_ENTRY" = "Effacer entrée";
|
"TRASH_ENTRY" = "Effacer entrée";
|
||||||
"TRASH_GROUP" = "Effacer groupe";
|
"TRASH_GROUP" = "Effacer groupe";
|
||||||
"SET_NAME" = "Modifier le nom";
|
|
||||||
"SET_TITLE" = "Modifier le titre";
|
|
||||||
"SET_USERNAME" = "Modifier utilisateur";
|
|
||||||
"SET_PASSWORD" = "Modifier mot de passe";
|
|
||||||
"SET_URL" = "Modifier URL";
|
|
||||||
"SET_NOTES" = "Modifier notes";
|
|
||||||
"SHOW_HISTORY" = "SHOW_HISTORY";
|
"SHOW_HISTORY" = "SHOW_HISTORY";
|
||||||
|
|
||||||
|
|
||||||
@@ -71,16 +65,10 @@
|
|||||||
"DATABASE" = "Base de données";
|
"DATABASE" = "Base de données";
|
||||||
"DELETE" = "Effacer";
|
"DELETE" = "Effacer";
|
||||||
"EDIT" = "Modifier";
|
"EDIT" = "Modifier";
|
||||||
"EMAIL" = "Courrier électronique";
|
|
||||||
"GROUP" = "Groupe";
|
"GROUP" = "Groupe";
|
||||||
"GENERAL" = "Général";
|
|
||||||
"HOMEBANKING" = "Banque";
|
|
||||||
"INSPECTOR" = "Inspecteur";
|
"INSPECTOR" = "Inspecteur";
|
||||||
"INTERNET" = "Internet";
|
|
||||||
"LOCK" = "Verrouiller";
|
"LOCK" = "Verrouiller";
|
||||||
"MODIFIED" = "Modifié";
|
"MODIFIED" = "Modifié";
|
||||||
"NAME" = "Nom";
|
|
||||||
"NETWORK" = "Réseau";
|
|
||||||
"NONE" = "NONE";
|
"NONE" = "NONE";
|
||||||
"NOTES" = "Notes";
|
"NOTES" = "Notes";
|
||||||
"PASSWORD" = "Mot de passe";
|
"PASSWORD" = "Mot de passe";
|
||||||
@@ -88,7 +76,6 @@
|
|||||||
"SAVE_WITH_DOTS" = "Sauvegarder…";
|
"SAVE_WITH_DOTS" = "Sauvegarder…";
|
||||||
"SEARCH" = "Rechercher";
|
"SEARCH" = "Rechercher";
|
||||||
"TITLE" = "Titre";
|
"TITLE" = "Titre";
|
||||||
"TRASH" = "Corbeille";
|
|
||||||
"URL" = "URL";
|
"URL" = "URL";
|
||||||
"USERNAME" = "Utilisateur";
|
"USERNAME" = "Utilisateur";
|
||||||
"WINDOWS" = "Windows";
|
"WINDOWS" = "Windows";
|
||||||
@@ -96,7 +83,6 @@
|
|||||||
|
|
||||||
"CHANGE_DATABASE_NAME" = "Modifier nom base de données";
|
"CHANGE_DATABASE_NAME" = "Modifier nom base de données";
|
||||||
"CHANGE_TRASH_GROUP" = "Modifier le groupe corbeille";
|
"CHANGE_TRASH_GROUP" = "Modifier le groupe corbeille";
|
||||||
"%@_COPY" = "%@_COPY"; //TODO
|
|
||||||
|
|
||||||
"DUPLICTE_PASSWORDS" = "Dupliquer mots de passe";
|
"DUPLICTE_PASSWORDS" = "Dupliquer mots de passe";
|
||||||
|
|
||||||
@@ -145,13 +131,6 @@
|
|||||||
"DEFAULT_GROUP_NAME" = "Nouveau groupe";
|
"DEFAULT_GROUP_NAME" = "Nouveau groupe";
|
||||||
"DEFAULT_WINDOW_TITLE" = "Titre de la fenêtre";
|
"DEFAULT_WINDOW_TITLE" = "Titre de la fenêtre";
|
||||||
|
|
||||||
/* Number of Entries
|
|
||||||
Plural (0, >1)
|
|
||||||
Singular (1)
|
|
||||||
*/
|
|
||||||
"%ld_ENTRIES" = "%ld entrées";
|
|
||||||
"%ld_ENTRY" = "%ld entrée";
|
|
||||||
|
|
||||||
/* General Settings Label */
|
/* General Settings Label */
|
||||||
"GENERAL_SETTINGS" = "Général";
|
"GENERAL_SETTINGS" = "Général";
|
||||||
"INTEGRATION_SETTINGS" = "Intégration";
|
"INTEGRATION_SETTINGS" = "Intégration";
|
||||||
|
|||||||
@@ -44,12 +44,6 @@
|
|||||||
"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "Reimposta";
|
"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "Reimposta";
|
||||||
"TRASH_ENTRY" = "Cestina Elemento";
|
"TRASH_ENTRY" = "Cestina Elemento";
|
||||||
"TRASH_GROUP" = "Cestina Gruppo";
|
"TRASH_GROUP" = "Cestina Gruppo";
|
||||||
"SET_NAME" = "Modifica Nome";
|
|
||||||
"SET_TITLE" = "Modifica Titolo";
|
|
||||||
"SET_USERNAME" = "Modifica Nome Utente";
|
|
||||||
"SET_PASSWORD" = "Modifica Password";
|
|
||||||
"SET_URL" = "Modifica URL";
|
|
||||||
"SET_NOTES" = "Modifica Note";
|
|
||||||
"SHOW_HISTORY" = "SHOW_HISTORY";
|
"SHOW_HISTORY" = "SHOW_HISTORY";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -70,16 +64,10 @@
|
|||||||
"DATABASE" = "Database";
|
"DATABASE" = "Database";
|
||||||
"DELETE" = "Elimina";
|
"DELETE" = "Elimina";
|
||||||
"EDIT" = "Modifica";
|
"EDIT" = "Modifica";
|
||||||
"EMAIL" = "EMail";
|
|
||||||
"GROUP" = "Gruppo";
|
"GROUP" = "Gruppo";
|
||||||
"GENERAL" = "Generale";
|
|
||||||
"HOMEBANKING" = "Homebanking";
|
|
||||||
"INSPECTOR" = "Inspector";
|
"INSPECTOR" = "Inspector";
|
||||||
"INTERNET" = "Internet";
|
|
||||||
"LOCK" = "Blocca";
|
"LOCK" = "Blocca";
|
||||||
"MODIFIED" = "Modificato";
|
"MODIFIED" = "Modificato";
|
||||||
"NAME" = "Nome";
|
|
||||||
"NETWORK" = "Rete";
|
|
||||||
"NONE" = "Nessun";
|
"NONE" = "Nessun";
|
||||||
"NOTES" = "Note";
|
"NOTES" = "Note";
|
||||||
"PASSWORD" = "Password";
|
"PASSWORD" = "Password";
|
||||||
@@ -87,7 +75,6 @@
|
|||||||
"SAVE_WITH_DOTS" = "Salva…";
|
"SAVE_WITH_DOTS" = "Salva…";
|
||||||
"SEARCH" = "Cerca";
|
"SEARCH" = "Cerca";
|
||||||
"TITLE" = "Titolo";
|
"TITLE" = "Titolo";
|
||||||
"TRASH" = "Cestino";
|
|
||||||
"URL" = "URL";
|
"URL" = "URL";
|
||||||
"USERNAME" = "Nome Utente";
|
"USERNAME" = "Nome Utente";
|
||||||
"WINDOWS" = "Windows";
|
"WINDOWS" = "Windows";
|
||||||
@@ -95,7 +82,6 @@
|
|||||||
|
|
||||||
"CHANGE_DATABASE_NAME" = "Cambia Nome Database";
|
"CHANGE_DATABASE_NAME" = "Cambia Nome Database";
|
||||||
"CHANGE_TRASH_GROUP" = "Cambia Gruppo Cestino";
|
"CHANGE_TRASH_GROUP" = "Cambia Gruppo Cestino";
|
||||||
"%@_COPY" = "%@ Copia";
|
|
||||||
|
|
||||||
"DUPLICTE_PASSWORDS" = "Duplica Passwords";
|
"DUPLICTE_PASSWORDS" = "Duplica Passwords";
|
||||||
|
|
||||||
@@ -144,13 +130,6 @@
|
|||||||
"DEFAULT_GROUP_NAME" = "Nuovo Gruppo";
|
"DEFAULT_GROUP_NAME" = "Nuovo Gruppo";
|
||||||
"DEFAULT_WINDOW_TITLE" = "Titolo Finestra";
|
"DEFAULT_WINDOW_TITLE" = "Titolo Finestra";
|
||||||
|
|
||||||
/* Number of Entries
|
|
||||||
Plural (0, >1)
|
|
||||||
Singular (1)
|
|
||||||
*/
|
|
||||||
"%ld_ENTRIES" = "%ld Elementi";
|
|
||||||
"%ld_ENTRY" = "%ld Elemento";
|
|
||||||
|
|
||||||
/* Settings */
|
/* Settings */
|
||||||
"GENERAL_SETTINGS" = "Generale";
|
"GENERAL_SETTINGS" = "Generale";
|
||||||
"INTEGRATION_SETTINGS" = "Integrazione";
|
"INTEGRATION_SETTINGS" = "Integrazione";
|
||||||
|
|||||||
@@ -44,12 +44,6 @@
|
|||||||
"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "Reset";
|
"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "Reset";
|
||||||
"TRASH_ENTRY" = "Prullenmand Item";
|
"TRASH_ENTRY" = "Prullenmand Item";
|
||||||
"TRASH_GROUP" = "Prullenmand Groep";
|
"TRASH_GROUP" = "Prullenmand Groep";
|
||||||
"SET_NAME" = "Wijzig Naam";
|
|
||||||
"SET_TITLE" = "Wijzig Titel";
|
|
||||||
"SET_USERNAME" = "Wijzig Gebruikersnaam";
|
|
||||||
"SET_PASSWORD" = "Wijzig Wachtwoord";
|
|
||||||
"SET_URL" = "Wijzig URL";
|
|
||||||
"SET_NOTES" = "Wijzig Notities";
|
|
||||||
"SHOW_HISTORY" = "SHOW_HISTORY";
|
"SHOW_HISTORY" = "SHOW_HISTORY";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -70,16 +64,10 @@
|
|||||||
"DATABASE" = "Database";
|
"DATABASE" = "Database";
|
||||||
"DELETE" = "Verwijder";
|
"DELETE" = "Verwijder";
|
||||||
"EDIT" = "Wijzig";
|
"EDIT" = "Wijzig";
|
||||||
"EMAIL" = "E-Mail";
|
|
||||||
"GROUP" = "Groep";
|
"GROUP" = "Groep";
|
||||||
"GENERAL" = "Algemeen";
|
|
||||||
"HOMEBANKING" = "Thuisbankieren";
|
|
||||||
"INSPECTOR" = "Inspector";
|
"INSPECTOR" = "Inspector";
|
||||||
"INTERNET" = "Internet";
|
|
||||||
"LOCK" = "Vergrendel";
|
"LOCK" = "Vergrendel";
|
||||||
"MODIFIED" = "Gewijzigd";
|
"MODIFIED" = "Gewijzigd";
|
||||||
"NAME" = "Naam";
|
|
||||||
"NETWORK" = "Netwerk";
|
|
||||||
"NOTES" = "Notities";
|
"NOTES" = "Notities";
|
||||||
"NONE" = "NONE";
|
"NONE" = "NONE";
|
||||||
"PASSWORD" = "Wachtwoord";
|
"PASSWORD" = "Wachtwoord";
|
||||||
@@ -87,7 +75,6 @@
|
|||||||
"SAVE_WITH_DOTS" = "Bewaar…";
|
"SAVE_WITH_DOTS" = "Bewaar…";
|
||||||
"SEARCH" = "Zoeken";
|
"SEARCH" = "Zoeken";
|
||||||
"TITLE" = "Titel";
|
"TITLE" = "Titel";
|
||||||
"TRASH" = "Prullenmand";
|
|
||||||
"URL" = "URL";
|
"URL" = "URL";
|
||||||
"USERNAME" = "Gebruikersnaam";
|
"USERNAME" = "Gebruikersnaam";
|
||||||
"WINDOWS" = "Vensters";
|
"WINDOWS" = "Vensters";
|
||||||
@@ -95,7 +82,6 @@
|
|||||||
|
|
||||||
"CHANGE_DATABASE_NAME" = "Wijzig Databasenaam";
|
"CHANGE_DATABASE_NAME" = "Wijzig Databasenaam";
|
||||||
"CHANGE_TRASH_GROUP" = "Wijzig Prullenmand Groep";
|
"CHANGE_TRASH_GROUP" = "Wijzig Prullenmand Groep";
|
||||||
"%@_COPY" = "%@ Kopieer";
|
|
||||||
|
|
||||||
"DUPLICTE_PASSWORDS" = "Dupliceer Wachtwoorden";
|
"DUPLICTE_PASSWORDS" = "Dupliceer Wachtwoorden";
|
||||||
|
|
||||||
@@ -144,13 +130,6 @@
|
|||||||
"DEFAULT_GROUP_NAME" = "Nieuwe Groep";
|
"DEFAULT_GROUP_NAME" = "Nieuwe Groep";
|
||||||
"DEFAULT_WINDOW_TITLE" = "Window Title";
|
"DEFAULT_WINDOW_TITLE" = "Window Title";
|
||||||
|
|
||||||
/* Number of Entries
|
|
||||||
Plural (0, >1)
|
|
||||||
Singular (1)
|
|
||||||
*/
|
|
||||||
"%ld_ENTRIES" = "%ld Items";
|
|
||||||
"%ld_ENTRY" = "%ld Item";
|
|
||||||
|
|
||||||
/* Settings */
|
/* Settings */
|
||||||
"GENERAL_SETTINGS" = "Algemeen";
|
"GENERAL_SETTINGS" = "Algemeen";
|
||||||
"INTEGRATION_SETTINGS" = "Integratie";
|
"INTEGRATION_SETTINGS" = "Integratie";
|
||||||
|
|||||||
24
MacPass/nl.lproj/PluginSettings.strings
Normal file
24
MacPass/nl.lproj/PluginSettings.strings
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "If enabled, only properly signed Plugins will be loaded. Keep in mind, that Plugins have full access to your data! Changes take affect on restart."; ObjectID = "2bX-8S-9XM"; */
|
||||||
|
"2bX-8S-9XM.title" = "If enabled, only properly signed Plugins will be loaded. Keep in mind, that Plugins have full access to your data! Changes take affect on restart.";
|
||||||
|
|
||||||
|
/* Class = "NSButtonCell"; title = "Load unsecure Plugins"; ObjectID = "C4B-6z-ZqX"; */
|
||||||
|
"C4B-6z-ZqX.title" = "Load unsecure Plugins";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "Plugin Settings Info"; ObjectID = "OOr-SW-jZb"; */
|
||||||
|
"OOr-SW-jZb.title" = "Plugin Settings Info";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "STt-PQ-Szr"; */
|
||||||
|
"STt-PQ-Szr.title" = "Text Cell";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "fug-79-n9g"; */
|
||||||
|
"fug-79-n9g.title" = "Table View Cell";
|
||||||
|
|
||||||
|
/* Class = "NSButtonCell"; title = "Browse Plugins…"; ObjectID = "sqO-8H-n1y"; */
|
||||||
|
"sqO-8H-n1y.title" = "Browse Plugins…";
|
||||||
|
|
||||||
|
/* Class = "NSBox"; title = "Box"; ObjectID = "vBs-Ga-aq0"; */
|
||||||
|
"vBs-Ga-aq0.title" = "Box";
|
||||||
|
|
||||||
|
/* Class = "NSTextFieldCell"; title = "Label"; ObjectID = "yuK-qH-jxx"; */
|
||||||
|
"yuK-qH-jxx.title" = "Label";
|
||||||
@@ -1,18 +1,9 @@
|
|||||||
/* (No Comment) */
|
|
||||||
"%@_COPY" = "%@ kopiuj";
|
|
||||||
|
|
||||||
/* Display format for days. Should contain a long decimal placeholder! */
|
/* Display format for days. Should contain a long decimal placeholder! */
|
||||||
"%ld_DAYS" = "%ld dni";
|
"%ld_DAYS" = "%ld dni";
|
||||||
|
|
||||||
/* % days ago */
|
/* % days ago */
|
||||||
"%ld_DAYS_AGO" = "%ld days ago";
|
"%ld_DAYS_AGO" = "%ld days ago";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"%ld_ENTRIES" = "%ld wpisy/ów";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"%ld_ENTRY" = "%ld wpis";
|
|
||||||
|
|
||||||
/* % Hours ago */
|
/* % Hours ago */
|
||||||
"%ld_HOURS_AGO" = "about %ld hours ago";
|
"%ld_HOURS_AGO" = "about %ld hours ago";
|
||||||
|
|
||||||
@@ -167,9 +158,6 @@
|
|||||||
Menu item on the add entry context menu to edit template groups */
|
Menu item on the add entry context menu to edit template groups */
|
||||||
"EDIT_TEMPLATE_GROUP" = "Edit Entry Template Group";
|
"EDIT_TEMPLATE_GROUP" = "Edit Entry Template Group";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"EMAIL" = "E-mail";
|
|
||||||
|
|
||||||
/* Empty Trash
|
/* Empty Trash
|
||||||
Menu item in the database outline context menu to empyt the trash
|
Menu item in the database outline context menu to empyt the trash
|
||||||
Menu item in the database outline to empty the trash */
|
Menu item in the database outline to empty the trash */
|
||||||
@@ -214,9 +202,6 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"FILE_OPEN_ERROR" = "Błąd! Nie można otworzyć pliku.";
|
"FILE_OPEN_ERROR" = "Błąd! Nie można otworzyć pliku.";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"GENERAL" = "Ogólne";
|
|
||||||
|
|
||||||
/* General Settings Label */
|
/* General Settings Label */
|
||||||
"GENERAL_SETTINGS" = "Ogólne";
|
"GENERAL_SETTINGS" = "Ogólne";
|
||||||
|
|
||||||
@@ -226,18 +211,12 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"HISTORY" = "Historia";
|
"HISTORY" = "Historia";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"HOMEBANKING" = "Homebanking";
|
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"INSPECTOR" = "Inspektor";
|
"INSPECTOR" = "Inspektor";
|
||||||
|
|
||||||
/* Label for the integration settings tab */
|
/* Label for the integration settings tab */
|
||||||
"INTEGRATION_SETTINGS" = "Integracje";
|
"INTEGRATION_SETTINGS" = "Integracje";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"INTERNET" = "Internet";
|
|
||||||
|
|
||||||
/* Just now */
|
/* Just now */
|
||||||
"JUST_NOW" = "Just now";
|
"JUST_NOW" = "Just now";
|
||||||
|
|
||||||
@@ -268,12 +247,6 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"MOVE_GROUP" = "Przenieś grupę";
|
"MOVE_GROUP" = "Przenieś grupę";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"NAME" = "Nazwa";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"NETWORK" = "Sieć";
|
|
||||||
|
|
||||||
/* Name for a newly created Database */
|
/* Name for a newly created Database */
|
||||||
"NEW_DATABASE" = "Database";
|
"NEW_DATABASE" = "Database";
|
||||||
|
|
||||||
@@ -360,7 +333,7 @@
|
|||||||
"RECOMMEND_PASSWORD_CHANGE_ALERT_TITLE" = "Proszę zmienić hasło bazy danych!";
|
"RECOMMEND_PASSWORD_CHANGE_ALERT_TITLE" = "Proszę zmienić hasło bazy danych!";
|
||||||
|
|
||||||
/* Action to restore and Entry to a previous state of it's history */
|
/* Action to restore and Entry to a previous state of it's history */
|
||||||
"RESTORE_HISTORY_ENTRY" = "";
|
"RESTORE_HISTORY_ENTRY" = "RESTORE_HISTORY_ENTRY";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"SAVE" = "Zapisz";
|
"SAVE" = "Zapisz";
|
||||||
@@ -404,24 +377,6 @@
|
|||||||
/* Set the selection as default file change strategy! */
|
/* Set the selection as default file change strategy! */
|
||||||
"SET_AS_DEFAULT_FILE_CHANGE_STRATEGY" = "Use this method as default. You can change this at any time in the preferences.";
|
"SET_AS_DEFAULT_FILE_CHANGE_STRATEGY" = "Use this method as default. You can change this at any time in the preferences.";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"SET_NAME" = "Edit Name";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"SET_NOTES" = "Edit Notes";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"SET_PASSWORD" = "Edit Password";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"SET_TITLE" = "Edit Title";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"SET_URL" = "Edit URL";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"SET_USERNAME" = "Edit Username";
|
|
||||||
|
|
||||||
/* (No Comment) */
|
/* (No Comment) */
|
||||||
"SHORT_FILE_CHANGE_STRATEGY_ASK" = "Pytaj";
|
"SHORT_FILE_CHANGE_STRATEGY_ASK" = "Pytaj";
|
||||||
|
|
||||||
@@ -435,9 +390,6 @@
|
|||||||
/* preset to expire tomorrow */
|
/* preset to expire tomorrow */
|
||||||
"TOMORROW" = "jutro";
|
"TOMORROW" = "jutro";
|
||||||
|
|
||||||
/* (No Comment) */
|
|
||||||
"TRASH" = "Kosz";
|
|
||||||
|
|
||||||
/* Move Entry to Trash */
|
/* Move Entry to Trash */
|
||||||
"TRASH_ENTRY" = "Trash Entry";
|
"TRASH_ENTRY" = "Trash Entry";
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"EVERY_%ld_DAYS" = {
|
"EVERY_%ld_DAYS" = {
|
||||||
NSStringLocalizedFormatKey = "%#@variable@";
|
"NSStringLocalizedFormatKey" = "%#@days@";
|
||||||
variable = {
|
days = {
|
||||||
NSStringFormatSpecTypeKey = NSStringPluralRuleType;
|
"NSStringFormatSpecTypeKey" = "NSStringPluralRuleType";
|
||||||
NSStringFormatValueTypeKey = ld;
|
"NSStringFormatValueTypeKey" = ld;
|
||||||
few = "co %ld dni";
|
few = "co %ld dni";
|
||||||
many = "co %ld dni";
|
many = "co %ld dni";
|
||||||
one = "co dzie\U0144";
|
one = "co dzie\U0144";
|
||||||
|
|||||||
@@ -44,12 +44,6 @@
|
|||||||
"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "Сброс";
|
"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "Сброс";
|
||||||
"TRASH_ENTRY" = "Удалить Запись";
|
"TRASH_ENTRY" = "Удалить Запись";
|
||||||
"TRASH_GROUP" = "Удалить Группу";
|
"TRASH_GROUP" = "Удалить Группу";
|
||||||
"SET_NAME" = "Изменить Имя";
|
|
||||||
"SET_TITLE" = "Изменить Заголовок";
|
|
||||||
"SET_USERNAME" = "Изменить Имя пользователя";
|
|
||||||
"SET_PASSWORD" = "Изменить Пароль";
|
|
||||||
"SET_URL" = "Изменить URL";
|
|
||||||
"SET_NOTES" = "Изменить Заметки";
|
|
||||||
"SHOW_HISTORY" = "SHOW_HISTORY";
|
"SHOW_HISTORY" = "SHOW_HISTORY";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -70,16 +64,10 @@
|
|||||||
"DATABASE" = "База данных";
|
"DATABASE" = "База данных";
|
||||||
"DELETE" = "Удалить";
|
"DELETE" = "Удалить";
|
||||||
"EDIT" = "Изменено";
|
"EDIT" = "Изменено";
|
||||||
"EMAIL" = "EMail";
|
|
||||||
"GROUP" = "Группа";
|
"GROUP" = "Группа";
|
||||||
"GENERAL" = "Общие";
|
|
||||||
"HOMEBANKING" = "Домашний банк";
|
|
||||||
"INSPECTOR" = "Инспектор";
|
"INSPECTOR" = "Инспектор";
|
||||||
"INTERNET" = "Интернет";
|
|
||||||
"LOCK" = "Блокировка";
|
"LOCK" = "Блокировка";
|
||||||
"MODIFIED" = "Изменить";
|
"MODIFIED" = "Изменить";
|
||||||
"NAME" = "Имя";
|
|
||||||
"NETWORK" = "Сеть";
|
|
||||||
"NONE" = "Нет";
|
"NONE" = "Нет";
|
||||||
"NOTES" = "Заметки";
|
"NOTES" = "Заметки";
|
||||||
"PASSWORD" = "Пароль";
|
"PASSWORD" = "Пароль";
|
||||||
@@ -87,7 +75,6 @@
|
|||||||
"SAVE_WITH_DOTS" = "Сохранить…";
|
"SAVE_WITH_DOTS" = "Сохранить…";
|
||||||
"SEARCH" = "Поиск";
|
"SEARCH" = "Поиск";
|
||||||
"TITLE" = "Заголовок";
|
"TITLE" = "Заголовок";
|
||||||
"TRASH" = "Удалить";
|
|
||||||
"URL" = "URL";
|
"URL" = "URL";
|
||||||
"USERNAME" = "Имя пользователя";
|
"USERNAME" = "Имя пользователя";
|
||||||
"WINDOWS" = "Окна";
|
"WINDOWS" = "Окна";
|
||||||
@@ -95,7 +82,6 @@
|
|||||||
|
|
||||||
"CHANGE_DATABASE_NAME" = "Изменить Имя базы данных";
|
"CHANGE_DATABASE_NAME" = "Изменить Имя базы данных";
|
||||||
"CHANGE_TRASH_GROUP" = "Изменить группу для мусора";
|
"CHANGE_TRASH_GROUP" = "Изменить группу для мусора";
|
||||||
"%@_COPY" = "%@ Копировать";
|
|
||||||
|
|
||||||
"DUPLICTE_PASSWORDS" = "Дубли паролей";
|
"DUPLICTE_PASSWORDS" = "Дубли паролей";
|
||||||
|
|
||||||
@@ -144,13 +130,6 @@
|
|||||||
"DEFAULT_GROUP_NAME" = "Новая Группа";
|
"DEFAULT_GROUP_NAME" = "Новая Группа";
|
||||||
"DEFAULT_WINDOW_TITLE" = "Заголовок Окна";
|
"DEFAULT_WINDOW_TITLE" = "Заголовок Окна";
|
||||||
|
|
||||||
/* Number of Entries
|
|
||||||
Plural (0, >1)
|
|
||||||
Singular (1)
|
|
||||||
*/
|
|
||||||
"%ld_ENTRIES" = "%ld записей";
|
|
||||||
"%ld_ENTRY" = "%ld запись";
|
|
||||||
|
|
||||||
/* Settings */
|
/* Settings */
|
||||||
"GENERAL_SETTINGS" = "Общие";
|
"GENERAL_SETTINGS" = "Общие";
|
||||||
"INTEGRATION_SETTINGS" = "Интеграция";
|
"INTEGRATION_SETTINGS" = "Интеграция";
|
||||||
|
|||||||
@@ -44,12 +44,6 @@
|
|||||||
"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "重置";
|
"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "重置";
|
||||||
"TRASH_ENTRY" = "将项目移入废纸篓";
|
"TRASH_ENTRY" = "将项目移入废纸篓";
|
||||||
"TRASH_GROUP" = "将组移入废纸篓";
|
"TRASH_GROUP" = "将组移入废纸篓";
|
||||||
"SET_NAME" = "编辑名称";
|
|
||||||
"SET_TITLE" = "编辑标题";
|
|
||||||
"SET_USERNAME" = "编辑用户名";
|
|
||||||
"SET_PASSWORD" = "编辑密码";
|
|
||||||
"SET_URL" = "编辑 URL";
|
|
||||||
"SET_NOTES" = "编辑注释";
|
|
||||||
"SHOW_HISTORY" = "显示历史";
|
"SHOW_HISTORY" = "显示历史";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -70,16 +64,10 @@
|
|||||||
"DATABASE" = "数据库";
|
"DATABASE" = "数据库";
|
||||||
"DELETE" = "删除";
|
"DELETE" = "删除";
|
||||||
"EDIT" = "编辑";
|
"EDIT" = "编辑";
|
||||||
"EMAIL" = "电子邮件";
|
|
||||||
"GROUP" = "组";
|
"GROUP" = "组";
|
||||||
"GENERAL" = "通用";
|
|
||||||
"HOMEBANKING" = "家庭银行";
|
|
||||||
"INSPECTOR" = "检查器";
|
"INSPECTOR" = "检查器";
|
||||||
"INTERNET" = "互联网";
|
|
||||||
"LOCK" = "锁定";
|
"LOCK" = "锁定";
|
||||||
"MODIFIED" = "修改时间";
|
"MODIFIED" = "修改时间";
|
||||||
"NAME" = "名称";
|
|
||||||
"NETWORK" = "网络";
|
|
||||||
"NONE" = "无";
|
"NONE" = "无";
|
||||||
"NOTES" = "注释";
|
"NOTES" = "注释";
|
||||||
"PASSWORD" = "密码";
|
"PASSWORD" = "密码";
|
||||||
@@ -87,7 +75,6 @@
|
|||||||
"SAVE_WITH_DOTS" = "保存…";
|
"SAVE_WITH_DOTS" = "保存…";
|
||||||
"SEARCH" = "搜索";
|
"SEARCH" = "搜索";
|
||||||
"TITLE" = "标题";
|
"TITLE" = "标题";
|
||||||
"TRASH" = "废纸篓";
|
|
||||||
"URL" = "URL";
|
"URL" = "URL";
|
||||||
"USERNAME" = "用户名";
|
"USERNAME" = "用户名";
|
||||||
"WINDOWS" = "Windows";
|
"WINDOWS" = "Windows";
|
||||||
@@ -95,7 +82,6 @@
|
|||||||
|
|
||||||
"CHANGE_DATABASE_NAME" = "修改数据库名称";
|
"CHANGE_DATABASE_NAME" = "修改数据库名称";
|
||||||
"CHANGE_TRASH_GROUP" = "修改废纸篓的项目组";
|
"CHANGE_TRASH_GROUP" = "修改废纸篓的项目组";
|
||||||
"%@_COPY" = "%@ 拷贝";
|
|
||||||
|
|
||||||
"DUPLICTE_PASSWORDS" = "重复的密码";
|
"DUPLICTE_PASSWORDS" = "重复的密码";
|
||||||
|
|
||||||
@@ -144,13 +130,6 @@
|
|||||||
"DEFAULT_GROUP_NAME" = "项目组";
|
"DEFAULT_GROUP_NAME" = "项目组";
|
||||||
"DEFAULT_WINDOW_TITLE" = "Window Title";
|
"DEFAULT_WINDOW_TITLE" = "Window Title";
|
||||||
|
|
||||||
/* Number of Entries
|
|
||||||
Plural (0, >1)
|
|
||||||
Singular (1)
|
|
||||||
*/
|
|
||||||
"%ld_ENTRIES" = "%ld 个项目";
|
|
||||||
"%ld_ENTRY" = "%ld 个项目";
|
|
||||||
|
|
||||||
/* Settings */
|
/* Settings */
|
||||||
"GENERAL_SETTINGS" = "通用";
|
"GENERAL_SETTINGS" = "通用";
|
||||||
"INTEGRATION_SETTINGS" = "集成";
|
"INTEGRATION_SETTINGS" = "集成";
|
||||||
|
|||||||
Reference in New Issue
Block a user