11 Commits
0.7 ... 0.7.1

Author SHA1 Message Date
michael starke
c2dd64ff70 do not enabled non-working remove plugin button 2017-11-16 19:14:50 +01:00
michael starke
3113c38a20 bumped version 2017-11-16 19:13:22 +01:00
michael starke
089a3075ec using KeePassKit 1.7.6 2017-11-16 19:09:25 +01:00
michael starke
ad0a198b48 Extended and cleaned localizations 2017-11-16 19:08:38 +01:00
michael starke
36b98bcd6d customized open panels throughout the app. Added brows plugins button to plugin settings 2017-11-16 17:55:08 +01:00
michael starke
29a6c39c1f Added rudementary support to add plugins via the plugin settings tab 2017-11-16 17:34:03 +01:00
michael starke
95659e6121 Fixed typo in german localization for plugin settings view 2017-11-16 17:33:28 +01:00
michael starke
995625b229 disable notes field if nothing is selected (fixes #684) 2017-11-16 17:32:40 +01:00
michael starke
7a60b06c66 Added history item to table header selection 2017-11-16 11:20:17 +01:00
michael starke
97b3f3809b Using stringdicts for pluralization on duplicate entry action 2017-11-16 11:19:51 +01:00
michael starke
e1feefd041 Added missing english localizations 2017-11-16 06:50:57 +01:00
36 changed files with 470 additions and 442 deletions

View File

@@ -1,3 +1,3 @@
github "MacPass/KeePassKit" "1.7.5"
github "MacPass/KeePassKit" "1.7.6"
github "mstarke/HNHUi" "1.4.1"
github "sparkle-project/Sparkle" "1.18.1"

View File

@@ -643,6 +643,8 @@
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>"; };
4C8DEAA11C314D2C00D24C32 /* MPTestAutotypeDelay.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTestAutotypeDelay.m; 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>"; };
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>"; };
@@ -2317,6 +2319,7 @@
FA9FD3281FB5E8F4003CEDD6 /* Base */,
FA9FD32B1FB5E8FD003CEDD6 /* pl */,
4C73EB951FBB5A8F0033000F /* de */,
4C93C5701FBDFEF700F36855 /* en */,
);
name = AutotypeCandidateSelectionView.xib;
sourceTree = "<group>";
@@ -2327,6 +2330,7 @@
FA9FD32D1FB5EDD3003CEDD6 /* Base */,
FA9FD32F1FB5EDDE003CEDD6 /* pl */,
4C73EB961FBB5A910033000F /* de */,
4C93C5711FBDFEF900F36855 /* en */,
);
name = AutotypeBuilderView.xib;
sourceTree = "<group>";
@@ -2407,6 +2411,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 0.7.1;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
@@ -2459,6 +2464,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "";
COPY_PHASE_STRIP = YES;
CURRENT_PROJECT_VERSION = 0.7.1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
@@ -2488,6 +2494,7 @@
CLANG_ENABLE_OBJC_ARC = YES;
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "";
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = "${CURRENT_PROJECT_VERSION}";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Carthage/Build/Mac",
@@ -2517,6 +2524,7 @@
CLANG_ENABLE_OBJC_ARC = YES;
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "";
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = "${CURRENT_PROJECT_VERSION}";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Carthage/Build/Mac",

View File

@@ -134,7 +134,16 @@
<size key="maxSize" width="463" height="10000000"/>
<color key="insertionPointColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
<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="unc-qC-MMH">
<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">
<string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary>

View File

@@ -1,14 +1,15 @@
<?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>
<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="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPPluginSettingsController">
<connections>
<outlet property="addRemovePluginsControl" destination="B9Q-hq-K4N" id="Oqj-Ko-8UR"/>
<outlet property="loadInsecurePlugsinCheckButton" destination="CqP-oK-S8k" id="YET-o6-7Cc"/>
<outlet property="pluginTableView" destination="Ocu-C0-03d" id="jbH-qr-bVT"/>
<outlet property="settingsView" destination="tD5-Na-7XI" id="Pa0-Tt-20U"/>
@@ -18,24 +19,24 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<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>
<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">
<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"/>
</view>
</box>
<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">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<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">
<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>
@@ -44,13 +45,13 @@
</textFieldCell>
</textField>
<scrollView autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" 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">
<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"/>
<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">
<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"/>
<size key="intercellSpacing" width="3" height="2"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
@@ -106,23 +107,56 @@
<autoresizingMask key="autoresizingMask"/>
</scroller>
</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>
<constraints>
<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="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 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 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="bottom" secondItem="fCk-fL-jU8" secondAttribute="bottom" constant="20" id="aeb-kZ-RSU"/>
<constraint firstAttribute="bottom" secondItem="vBs-Ga-aq0" secondAttribute="bottom" constant="20" id="czn-HC-o7k"/>
<constraint firstItem="SNe-cc-CZs" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="B9Q-hq-K4N" secondAttribute="trailing" constant="8" symbolic="YES" id="a62-en-kDA"/>
<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="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="aoG-FD-ds8" firstAttribute="top" secondItem="CqP-oK-S8k" secondAttribute="bottom" constant="8" symbolic="YES" id="zSW-h3-BrT"/>
</constraints>
<point key="canvasLocation" x="108" y="118"/>
<point key="canvasLocation" x="-214" y="11"/>
</customView>
</objects>
<resources>
<image name="NSAddTemplate" width="11" height="11"/>
<image name="NSRemoveTemplate" width="11" height="11"/>
</resources>
</document>

View File

@@ -777,7 +777,7 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
}
}
[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 +787,11 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
}
- (void)duplicateEntryWithOptions:(KPKCopyOptions)options {
BOOL plural = self.selectedEntries.count > 1;
for(KPKEntry *entry in self.selectedEntries) {
KPKEntry *duplicate = [entry copyWithTitle:nil options:options];
[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

View File

@@ -264,6 +264,8 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
openPanel.canChooseDirectories = NO;
openPanel.canChooseFiles = YES;
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) {
if(result == NSFileHandlingPanelOKButton) {
[document readXMLfromURL:openPanel.URL];

View File

@@ -222,6 +222,8 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) {
openPanel.canChooseDirectories = NO;
openPanel.canChooseFiles = 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) {
if(result == NSFileHandlingPanelOKButton) {
for (NSURL *attachmentURL in openPanel.URLs) {

View File

@@ -632,13 +632,14 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
- (void)_setupHeaderMenu {
NSMenu *headerMenu = [[NSMenu allocWithZone:[NSMenu menuZone]] init];
[headerMenu addItemWithTitle:NSLocalizedString(@"TITLE", "") action:NULL keyEquivalent:@""];
[headerMenu addItemWithTitle:NSLocalizedString(@"USERNAME", "") action:NULL keyEquivalent:@""];
[headerMenu addItemWithTitle:NSLocalizedString(@"PASSWORD", "") action:NULL keyEquivalent:@""];
[headerMenu addItemWithTitle:NSLocalizedString(@"URL", "") action:NULL keyEquivalent:@""];
[headerMenu addItemWithTitle:NSLocalizedString(@"NOTES", "") action:NULL keyEquivalent:@""];
[headerMenu addItemWithTitle:NSLocalizedString(@"ATTACHMENTS", "") action:NULL keyEquivalent:@""];
[headerMenu addItemWithTitle:NSLocalizedString(@"MODIFIED", "") 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", "Menu item to toggle display of username column in entry table") 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", "Menu item to toggle display of url column in entry table") 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", "Menu item to toggle display of attachment count column in entry table") 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,
MPEntryTableUserNameColumnIdentifier,
@@ -646,7 +647,8 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
MPEntryTableURLColumnIdentifier,
MPEntryTableNotesColumnIdentifier,
MPEntryTableAttachmentColumnIdentifier,
MPEntryTableModfiedColumnIdentifier ];
MPEntryTableModfiedColumnIdentifier,
MPEntryTableHistoryColumnIdentifier ];
NSDictionary *options = @{ NSValueTransformerNameBindingOption : NSNegateBooleanTransformerName };
for(NSMenuItem *item in headerMenu.itemArray) {

View File

@@ -170,7 +170,7 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
#pragma mark Custom Setter/Getter
- (void)setDatabaseNameWrapper:(NSString *)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];
}
}

View File

@@ -38,4 +38,6 @@ FOUNDATION_EXPORT NSString *const MPPluginHostPluginBundleIdentifiyerKey;
- (instancetype)init NS_UNAVAILABLE;
- (BOOL)installPluginAtURL:(NSURL *)url error:(NSError *__autoreleasing *)error;
@end

View File

@@ -26,6 +26,8 @@
#import "NSApplication+MPAdditions.h"
#import "MPSettingsHelper.h"
#import "NSError+Messages.h"
#import "KeePassKit/KeePassKit.h"
@@ -35,7 +37,7 @@ NSString *const MPPluginHostDidLoadPlugin = @"comt.hicknhack.macpass.MPPluginHos
NSString *const MPPluginHostPluginBundleIdentifiyerKey = @"MPPluginHostPluginBundleIdentifiyerKey";
@interface MPPluginHost ()
@interface MPPluginHost () <NSFileManagerDelegate>
@property (strong) NSMutableArray<MPPlugin __kindof *> *mutablePlugins;
@property (nonatomic) BOOL loadUnsecurePlugins;
@@ -80,6 +82,31 @@ NSString *const MPPluginHostPluginBundleIdentifiyerKey = @"MPPluginHostPluginBun
return [self.mutablePlugins copy];
}
- (BOOL)installPluginAtURL:(NSURL *)url error:(NSError *__autoreleasing *)error {
if(![self _validURL: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];
NSFileManager.defaultManager.delegate = self;
return [NSFileManager.defaultManager moveItemAtURL:url toURL:destinationURL error:error];
}
#pragma mark - NSFileManagerDelegate
- (BOOL)fileManager:(NSFileManager *)fileManager shouldProceedAfterError:(NSError *)error movingItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL {
return NO;
}
#pragma mark - Plugin Loading
- (void)_loadPlugins {
NSURL *appSupportDir = [NSApp applicationSupportDirectoryURL:YES];
NSError *error;
@@ -131,7 +158,7 @@ NSString *const MPPluginHostPluginBundleIdentifiyerKey = @"MPPluginHostPluginBun
}
if(![pluginBundle loadAndReturnError:&error]) {
NSLog(@"Bunlde Loading Error %@ %@", error.localizedDescription, error.localizedFailureReason);
NSLog(@"Bundle Loading Error %@ %@", error.localizedDescription, error.localizedFailureReason);
continue;
}

View File

@@ -25,4 +25,7 @@
@interface MPPluginSettingsController : MPViewController <MPSettingsTab>
- (IBAction)addOrRemovePlugin:(id)sender;
- (IBAction)browsePlugins:(id)sender;
@end

View File

@@ -26,11 +26,21 @@
#import "MPSettingsHelper.h"
#import "NSApplication+MPAdditions.h"
#import <Foundation/Foundation.h>
typedef NS_ENUM(NSUInteger, MPPluginSegmentType) {
MPAddPluginSegment = 0,
MPRemovePluginSegment = 1
};
@interface MPPluginSettingsController () <NSTableViewDataSource, NSTableViewDelegate>
@property (weak) IBOutlet NSTableView *pluginTableView;
@property (weak) IBOutlet NSView *settingsView;
@property (weak) IBOutlet NSButton *loadInsecurePlugsinCheckButton;
@property (weak) IBOutlet NSSegmentedControl *addRemovePluginsControl;
@end
@@ -55,12 +65,14 @@
- (void)viewDidLoad {
self.pluginTableView.delegate = self;
self.pluginTableView.dataSource = self;
[self.addRemovePluginsControl setEnabled:NO forSegment:MPRemovePluginSegment];
[self.loadInsecurePlugsinCheckButton bind:NSValueBinding
toObject:[NSUserDefaultsController sharedUserDefaultsController]
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyLoadUnsecurePlugins]
options:nil];
}
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
@@ -98,7 +110,67 @@
- (void)tableViewSelectionDidChange:(NSNotification *)notification {
NSTableView *table = notification.object;
[self showSettingsForPlugin:[self pluginForRow:table.selectedRow]];
MPPlugin *plugin = [self pluginForRow:table.selectedRow];
//[self.addRemovePluginsControl setEnabled:(nil != plugin) forSegment:MPRemovePluginSegment];
[self showSettingsForPlugin:plugin];
}
- (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:
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 {
NSAlert *alert = [[NSAlert alloc] init];
alert.alertStyle = NSAlertStyleInformational;
alert.messageText = NSLocalizedString(@"ALERT_MESSAGE_TEXT_PLUGIN_INSTALLED_SUGGEST_RESTART", "Alert message text when a plugin was successfully installed");
alert.informativeText = NSLocalizedString(@"ALERT_INFORMATIVE_TEXT_PLUGIN_INSTALLED_SUGGEST_RESTART", "ALert informative text when a plugin was sucessfully installed");
[alert addButtonWithTitle:NSLocalizedString(@"CANCEL", @"Cancel button in plugin installed, request restart alert")];
[alert addButtonWithTitle:NSLocalizedString(@"RESTART", @"Restart button in plugin installed, request restart alert")];
[alert beginSheetModalForWindow:self.view.window completionHandler:^(NSModalResponse returnCode) {
if(returnCode == NSAlertSecondButtonReturn) {
[NSApp relaunchAfterDelay:3];
}
}];
}
}
@end

View File

@@ -228,16 +228,16 @@ NSString *const MPToolbarItemHistory = @"TOOLBAR_HISTORY";
static NSDictionary *labelDict;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
labelDict = @{ MPToolbarItemLock: NSLocalizedString(@"LOCK", @""),
MPToolbarItemAction: NSLocalizedString(@"ACTION", @""),
MPToolbarItemAddEntry: NSLocalizedString(@"NEW_ENTRY", @""),
MPToolbarItemAddGroup: NSLocalizedString(@"NEW_GROUP", @""),
MPToolbarItemCopyPassword: NSLocalizedString(@"COPY_PASSWORD", @""),
MPToolbarItemCopyUsername: NSLocalizedString(@"COPY_USERNAME", @""),
MPToolbarItemDelete: NSLocalizedString(@"DELETE", @""),
MPToolbarItemInspector: NSLocalizedString(@"INSPECTOR", @""),
MPToolbarItemSearch: NSLocalizedString(@"SEARCH", @""),
MPToolbarItemHistory: NSLocalizedString(@"SHOW_HISTORY", @""),
labelDict = @{ MPToolbarItemLock: NSLocalizedString(@"LOCK", @"Toolbar item to Lock the database"),
MPToolbarItemAction: NSLocalizedString(@"ACTION", @"Toolbar item with action menu"),
MPToolbarItemAddEntry: NSLocalizedString(@"NEW_ENTRY", @"Toolbar item new entry"),
MPToolbarItemAddGroup: NSLocalizedString(@"NEW_GROUP", @"Toolbar item new group"),
MPToolbarItemCopyPassword: NSLocalizedString(@"COPY_PASSWORD", @"Toolbar item copy password"),
MPToolbarItemCopyUsername: NSLocalizedString(@"COPY_USERNAME", @"Toolbar item copy username"),
MPToolbarItemDelete: NSLocalizedString(@"DELETE", @"Toolbar item delete item"),
MPToolbarItemInspector: NSLocalizedString(@"INSPECTOR", @"Toolbar item toggle inspector"),
MPToolbarItemSearch: NSLocalizedString(@"SEARCH", @"Search input in Toolbar "),
MPToolbarItemHistory: NSLocalizedString(@"SHOW_HISTORY", @"Toolbar item to toggel history display"),
};
});
return labelDict[identifier];
@@ -263,13 +263,13 @@ NSString *const MPToolbarItemHistory = @"TOOLBAR_HISTORY";
- (NSMenu *)_allocateSearchMenuTemplate {
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;
[menu addItem:item];
[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;
[menu addItem:item];

View File

@@ -80,6 +80,8 @@
openPanel.allowsMultipleSelection = NO;
openPanel.canChooseDirectories = NO;
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 beginSheetModalForWindow:self.view.window completionHandler:^(NSInteger result) {

View File

@@ -58,7 +58,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.7</string>
<string>${CURRENT_PROJECT_VERSION}</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>

View File

@@ -29,8 +29,8 @@ NS_ASSUME_NONNULL_BEGIN
@property (copy, readonly) NSString *applicationName;
@property (copy, readonly, nullable) NSURL *applicationSupportDirectoryURL;
- (NSURL * _Nullable)applicationSupportDirectoryURL:(BOOL)create;
- (NSURL *_Nullable)applicationSupportDirectoryURL:(BOOL)create;
- (void)relaunchAfterDelay:(CGFloat)seconds;
@end
NS_ASSUME_NONNULL_END

View File

@@ -52,4 +52,12 @@
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

View File

@@ -26,6 +26,7 @@ FOUNDATION_EXPORT NSString *const MPErrorDomain;
typedef NS_ENUM(NSInteger, MPErrorCodes) {
MPErrorNoPasswordOrKeyFile = 10000,
MPErrorInvalidPlugin
};
@interface NSError (Messages)

View File

@@ -1,18 +1,9 @@
/* (No Comment) */
"%@_COPY" = "Kopie von %@";
/* Display format for days. Should contain a long decimal placeholder! */
"%ld_DAYS" = "%ld Tage";
/* % days ago */
"%ld_DAYS_AGO" = "%vor %ld Tagen";
/* (No Comment) */
"%ld_ENTRIES" = "%ld Einträge";
/* (No Comment) */
"%ld_ENTRY" = "%ld Eintrag";
/* % Hours ago */
"%ld_HOURS_AGO" = "vor etwa %ld Stunden";
@@ -162,14 +153,13 @@
/* No comment provided by engineer. */
"DOCUMENT_AUTOTYPE_CORRUPTION_WARNING" = "Bitte Autotypekorrektur durchführen!";
/* No comment provided by engineer. */
"DUPLICATE_ENTRIES" = "Eintrag klonen";
/* Menu item to directly diplicate an entry */
"DUPLICATE_ENTRY" = "Eintrag klonen";
"DUPLICATE_ENTRY" = "Eintrag duplizieren";
"DUPLICATE_ENTRIES_%ld" = "Einträge duplizieren %ld";
/* 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";
@@ -181,9 +171,6 @@
Menu item on the add entry context menu to edit template groups */
"EDIT_TEMPLATE_GROUP" = "Vorlagengruppe bearbeiten";
/* (No Comment) */
"EMAIL" = "E-Mail";
/* Empty Trash
Menu item in the database outline context menu to empyt the trash
Menu item in the database outline to empty the trash
@@ -236,9 +223,6 @@
/* No comment provided by engineer. */
"FILE_OPEN_ERROR" = "Fehler beim Öffnen der Datei.";
/* (No Comment) */
"GENERAL" = "Allgemein";
/* General Settings Label */
"GENERAL_SETTINGS" = "Allgemein";
@@ -248,9 +232,6 @@
/* History count column title */
"HISTORY" = "Historie";
/* (No Comment) */
"HOMEBANKING" = "Homebanking";
/* Imports a dragged URL for a new entry */
"IMPORT_URL" = "URL importieren";
@@ -260,9 +241,6 @@
/* Label for the integration settings tab */
"INTEGRATION_SETTINGS" = "Integration";
/* (No Comment) */
"INTERNET" = "Internet";
/* Just now */
"JUST_NOW" = "Gerade eben";
@@ -293,12 +271,6 @@
/* Action title for moving a group via drag and drop */
"MOVE_GROUP" = "Gruppe bewegem";
/* (No Comment) */
"NAME" = "Name";
/* (No Comment) */
"NETWORK" = "Netzwerk";
/* Name for a newly created Database */
"NEW_DATABASE" = "Datenbank";
@@ -444,24 +416,6 @@
/* 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.";
/* (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) */
"SHORT_FILE_CHANGE_STRATEGY_ASK" = "Nachfragen";

View File

@@ -1,12 +1,40 @@
{
"EVERY_%ld_DAYS" = {
NSStringLocalizedFormatKey = "%#@variable@";
variable = {
NSStringFormatSpecTypeKey = NSStringPluralRuleType;
NSStringFormatValueTypeKey = ld;
one = "jeden Tag";
other = "alle %ld Tage";
zero = "nach jedem Entsperren";
};
};
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>DUPLICATE_ENTRIES_%ld</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@entries@</string>
<key>entries</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>Eintrag duplizieren</string>
<key>other</key>
<string>Einträge duplizieren</string>
</dict>
</dict>
<key>EVERY_%ld_DAYS</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@days@</string>
<key>days</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>jeden Tag</string>
<key>other</key>
<string>alle %ld Tage</string>
<key>zero</key>
<string>nach jedem Entsperren</string>
</dict>
</dict>
</dict>
</plist>

View File

@@ -1,5 +1,5 @@
/* 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"; */
"C4B-6z-ZqX.title" = "Unsichere Plugins laden";

View 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";

View 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";

View File

@@ -1,7 +1,18 @@
/* Class = "NSWindow"; title = "Window"; ObjectID = "1"; */
"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"; */
"190.title" = "Database name:";
@@ -62,18 +73,6 @@
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "1740"; */
"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"; */
"CtU-Eq-dgy.title" = "Recommend key change";
@@ -109,3 +108,4 @@
/* Class = "NSButtonCell"; title = "Force key change"; ObjectID = "z6u-YT-7LE"; */
"z6u-YT-7LE.title" = "Force key change";

View File

@@ -1,18 +1,9 @@
/* (No Comment) */
"%@_COPY" = "%@ Copy";
/* Display format for days. Should contain a long decimal placeholder! */
"%ld_DAYS" = "%ld_DAYS";
"%ld_DAYS" = "%ld days";
/* % days ago */
"%ld_DAYS_AGO" = "%ld days ago";
/* (No Comment) */
"%ld_ENTRIES" = "%ld Entries";
/* (No Comment) */
"%ld_ENTRY" = "%ld Entry";
/* % Hours ago */
"%ld_HOURS_AGO" = "about %ld hours ago";
@@ -26,7 +17,7 @@
"90_DAYS" = "in 90 days";
/* 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. */
"ACTION" = "Action";
@@ -34,13 +25,20 @@
/* No comment provided by engineer. */
"ADD_TREMPLATE_ENTRY" = "Create Template Entry";
/* Informartive text in alert when adding entry requires KDBX format */
"ALERT_KDB_UNSUPPORTED_ADD_ENTRY_INFORMATIVE" = "ALERT_KDB_UNSUPPORTED_ADD_ENTRY_INFORMATIVE";
/* ALert informative text when a plugin was sucessfully installed */
"ALERT_INFORMATIVE_TEXT_PLUGIN_INSTALLED_SUGGEST_RESTART" = "Plugins can only be loaded at start up. To activate the installed pluing, please restart MacPass.";
/* Message in alert to inform the user that adding an entry requires KDBX format */
"ALERT_KDB_UNSUPPORTED_ADD_ENTRY_MESSAGE" = "ALERT_KDB_UNSUPPORTED_ADD_ENTRY_MESSAGE";
/* (No Comment) */
"ALERT_KDB_UNSUPPORTED_ADD_ENTRY_INFORMATIVE" = "The KDB format does not support entries inside this group. The entry will be moved when the file is saved.";
/* No comment provided by engineer. */
/* (No Comment) */
"ALERT_KDB_UNSUPPORTED_ADD_ENTRY_MESSAGE" = "Adding entries not supported";
/* Alert message text when a plugin was successfully installed */
"ALERT_MESSAGE_TEXT_PLUGIN_INSTALLED_SUGGEST_RESTART" = "Sucessfully installed Plugin!";
/* Attachments column title (shows counts)
Menu item to toggle display of attachment count column in entry table */
"ATTACHMENTS" = "Attachments";
/* Menu item for automatic trash creation */
@@ -64,10 +62,12 @@
/* No comment provided by engineer. */
"AUTOTYPE_YES" = "Enable Autotype";
/* No comment provided by engineer. */
"AUTO_MERGE_NOTIFICATION_TEXT" = "AUTO_MERGE_NOTIFICATION_TEXT";
/* Sucessfully merged external changes */
"AUTO_MERGE_NOTIFICATION_TEXT" = "Auto merge successfull!";
/* Cancel */
/* Cancel
Cancel button in plugin installed, request restart alert
Cancel button to postpone password change */
"CANCEL" = "Cancel";
/* Menu item in the database outline context menu to change the database name */
@@ -76,7 +76,8 @@
/* (No Comment) */
"CHANGE_FORMAT" = "Change File Format to KDBX";
/* No comment provided by engineer. */
/* Button to show the password change dialog
Single button to show the password change dialog */
"CHANGE_PASSWORD_WITH_DOTS" = "Change Password…";
/* Menu item in the database outline context menu to change the trash group */
@@ -86,7 +87,7 @@
"CLEARING_PASTEBOARD" = "Cleared";
/* Clear Autotype Button */
"CLEAR_AUTOTYPE" = "CLEAR_AUTOTYPE";
"CLEAR_AUTOTYPE" = "Clear Autotype";
/* No comment provided by engineer. */
"CLEAR_RECENT_SEARCHES" = "Clear recent searches";
@@ -107,34 +108,34 @@
"COPY_CUSTOM_FIELDS" = "Copy Custom Fields";
/* 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";
/* Mask for title to copy field value */
"COPY_FIELD_%@" = "Copy %@";
/* No comment provided by engineer. */
/* Action title for copying a group via drag and drop */
"COPY_GROUP" = "Copy Group";
/* No comment provided by engineer. */
/* Menu item to copy the password of an entry */
"COPY_PASSWORD" = "Copy Password";
/* No comment provided by engineer. */
/* Menu item to copy the URL of an entry */
"COPY_URL" = "Copy URL";
/* No comment provided by engineer. */
/* Menu item to copy the username of an entry */
"COPY_USERNAME" = "Copy Username";
/* Created at template string. %@ is replaced by locaized date and time */
/* (No Comment) */
"CREATED_AT_%@" = "Created: %@";
/* Curstom attribute reference item */
"CUSTOM_ATTRIBUTE" = "CUSTOM_ATTRIBUTE";
"CUSTOM_ATTRIBUTE" = "Custom Attribute";
/* 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 */
"DATABASE" = "Database";
@@ -154,10 +155,13 @@
/* Title for a newly created group */
"DEFAULT_GROUP_NAME" = "New Group";
/* No comment provided by engineer. */
/* Default window title for a new window association */
"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 */
"DELETE" = "Delete";
/* No comment provided by engineer. */
@@ -167,21 +171,21 @@
"DELETE_GROUP" = "Delete Group";
/* Empty Trash */
"DELETE_TRASHED_ENTRY" = "DELETE_TRASHED_ENTRY";
"DELETE_TRASHED_ENTRY" = "Delete Trashed Entry";
/* Empty Trash */
"DELETE_TRASHED_GROUP" = "DELETE_TRASHED_GROUP";
"DELETE_TRASHED_GROUP" = "Delete Trashed Group";
/* No comment provided by engineer. */
"DOCUMENT_AUTOTYPE_CORRUPTION_WARNING" = "Please run Fix Autotype...";
/* No comment provided by engineer. */
"DUPLICATE_ENTRIES" = "DUPLICATE_ENTRIES";
/* Action name for duplicating entries */
"DUPLICATE_ENTRIES_%ld" = "Duplicate Entries %ld";
/* No comment provided by engineer. */
/* Menu item to directly diplicate an 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…";
/* (No Comment) */
@@ -194,23 +198,24 @@
Menu item on the add entry context menu to edit template groups */
"EDIT_TEMPLATE_GROUP" = "Edit Entry Template Group";
/* (No Comment) */
"EMAIL" = "EMail";
/* Empty 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";
/* 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.";
/* No comment provided by engineer. */
/* Message text for the enforce password change alert */
"ENFORCE_PASSWORD_CHANGE_ALERT_TITLE" = "The database password expired!";
/* Keyfile not valid */
"ERROR_INVALID_KEYFILE" = "Keyfile is invalid!";
/* Error description given when adding an invalid plugin */
"ERROR_INVALID_PLUGIN" = "Invalid plugin";
/* Passwords do not match */
"ERROR_PASSWORD_MISSMATCH" = "Passwords do not match!";
@@ -218,13 +223,13 @@
"ERROR_PASSWORD_MISSMATCH_INVALID_KEYFILE" = "Passwords do not match and keyfile is invalid!";
/* 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 */
"EXPIRES_AT_DATE_%@" = "Expires: %@";
/* 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 */
"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,38 +237,34 @@
/* Message displayed when an open file was changed from another application */
"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";
/* 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";
/* 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";
/* 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";
/* No comment provided by engineer. */
"FILE_OPEN_ERROR" = "Error opening file.";
/* (No Comment) */
"GENERAL" = "General";
/* General Settings Label */
"GENERAL_SETTINGS" = "General";
/* No comment provided by engineer. */
/* Group column title */
"GROUP" = "Group";
/* No comment provided by engineer. */
"HISTORY" = "HISTORY";
/* (No Comment) */
"HOMEBANKING" = "Homebanking";
/* History count column title
Menu item to toggle display of history count column in entry table */
"HISTORY" = "History";
/* Imports a dragged URL for a new entry */
"IMPORT_URL" = "IMPORT_URL";
"IMPORT_URL" = "Import URL";
/* No comment provided by engineer. */
"INSPECTOR" = "Inspector";
@@ -271,9 +272,6 @@
/* Label for the integration settings tab */
"INTEGRATION_SETTINGS" = "Integration";
/* (No Comment) */
"INTERNET" = "Internet";
/* Just now */
"JUST_NOW" = "Just now";
@@ -292,40 +290,44 @@
/* No comment provided by engineer. */
"LOCK" = "Lock";
/* Modifed at template string. %@ is replaced by locaized date and time */
"MODIFED_AT_%@" = "Modified: %@";
/* Message in the open panel to add attachments to an entry */
"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";
/* No comment provided by engineer. */
/* Action title for moving an entry via drag and drop */
"MOVE_ENTRY" = "Move Entry";
/* No comment provided by engineer. */
/* Action title for moving a group via drag and drop */
"MOVE_GROUP" = "Move Group";
/* (No Comment) */
"NAME" = "Name";
/* (No Comment) */
"NETWORK" = "Network";
/* Name for a newly created Database */
"NEW_DATABASE" = "Database";
/* No comment provided by engineer. */
/* Menu item to create a new entry */
"NEW_ENTRY" = "New Entry";
/* Submenu to add an entry via template */
"NEW_ENTRY_WITH_TEMPLATE_%@" = "Create Entry with Template %@";
/* No comment provided by engineer. */
/* Menu item to create a 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";
/* 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";
/* Expiration date format, when item does not expire */
@@ -352,16 +354,27 @@
/* preset to expire after one year from now */
"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";
/* Select Browser */
"OTHER_BROWSER" = "Select Browser…";
/* 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";
/* Button to reset the password defaults for a single entry */
@@ -370,55 +383,62 @@
/* Button to set the defaults of the password generator */
"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";
/* 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";
/* No comment provided by engineer. */
/* Placeholder for the repeat password field to aks for the repeated 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";
/* Label for plugin settings tab */
"PLUGIN_SETTINGS" = "Plugins";
/* No comment provided by engineer. */
/* Menu item to preview the selected attached file. */
"PREVIEW" = "Preview";
/* No comment provided by engineer. */
"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.";
/* No comment provided by engineer. */
/* Message text for the recommend password change alert */
"RECOMMEND_PASSWORD_CHANGE_ALERT_TITLE" = "Please change the database password!";
/* Action to restore and Entry to a previous state of it's history */
"RESTORE_HISTORY_ENTRY" = "RESTORE_HISTORY_ENTRY";
/* Restart button in plugin installed, request restart alert */
"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";
/* No comment provided by engineer. */
/* Button title to save the generated key file */
"SAVE_KEYFILE" = "Save Keyfile";
/* (No Comment) */
"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…";
/* No comment provided by engineer. */
"SEARCH" = "Search";
/* No comment provided by engineer. */
/* Search option: Find duplicate passwords */
"SEARCH_DUPLICATE_PASSWORDS" = "Duplicate Passwords";
/* No comment provided by engineer. */
/* Search option: Find expired entries */
"SEARCH_EXPIRED_ENTRIES" = "Expired";
/* No comment provided by engineer. */
@@ -428,63 +448,50 @@
"SEARCH_NO" = "Exclude from Search";
/* No comment provided by engineer. */
"SEARCH_VALUE" = "";
"SEARCH_VALUE" = "Search Value";
/* No comment provided by engineer. */
"SEARCH_YES" = "Include in Search";
/* (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 */
"SELECT_DATE_PRESET" = "Use preset…";
/* Message for the dialog to open a file for merge */
"SELECT_FILE_TO_MERGE" = "";
/* Message on the open panel for selecting which browser to use for opening URLs */
"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…";
/* 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.";
/* (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) */
"SHORT_FILE_CHANGE_STRATEGY_ASK" = "Ask";
/* No comment provided by engineer. */
/* Menu item to show the history of the selected entry */
"SHOW_HISTORY" = "Show History";
/* Menu item to show the reference builder in a text view's context menu */
"SHOW_REFERENCE_BUILDER" = "Show Reference Builder";
/* 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" = "Title";
/* preset to expire tomorrow */
"TOMORROW" = "Tomorrow";
/* (No Comment) */
"TRASH" = "Trash";
/* Move Entry to Trash */
"TRASH_ENTRY" = "Trash Entry";
@@ -492,18 +499,23 @@
"TRASH_GROUP" = "Trash Group";
/* No comment provided by engineer. */
"UNKNOWN_FILE_VERSION" = "";
"UNKNOWN_FILE_VERSION" = "Unknown File Version";
/* No comment provided by engineer. */
"UNKNOWN_TOOLBAR_ITEM" = "";
"UNKNOWN_TOOLBAR_ITEM" = "Unknown Toolbar Item";
/* Update Settings Label */
"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";
/* Username reference item */
/* Menu item to toggle display of username column in entry table
Username column title
Username reference item */
"USERNAME" = "Username";
/* Displayed name when uuid field was copied
@@ -517,15 +529,15 @@
"WARNING_NO_PASSWORD_OR_KEYFILE" = "No password or keyfile supplied!";
/* 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. */
"WARNING_ON_DELETE_TRASHED_NODE_TITLE" = "";
/* Message text for the alert displayed when deleting a node */
"WARNING_ON_DELETE_TRASHED_NODE_TITLE" = "Deleting Trashed Item";
/* Informative Text displayed when clearing the Trash */
"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?";
/* (No Comment) */

View File

@@ -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" = {
NSStringLocalizedFormatKey = "%#@variable@";
variable = {
NSStringLocalizedFormatKey = "%#@days@";
days = {
NSStringFormatSpecTypeKey = NSStringPluralRuleType;
NSStringFormatValueTypeKey = ld;
one = "every day";

View File

@@ -10,6 +10,9 @@
/* 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";

View File

@@ -44,12 +44,6 @@
"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "Reiniciar";
"TRASH_ENTRY" = "Entrada 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";
/*
@@ -70,16 +64,10 @@
"DATABASE" = "Base de Datos";
"DELETE" = "Eliminar";
"EDIT" = "Editar";
"EMAIL" = "EMail";
"GROUP" = "Grupo";
"GENERAL" = "General";
"HOMEBANKING" = "Bancos";
"INSPECTOR" = "Inspector";
"INTERNET" = "Internet";
"LOCK" = "Bloquear";
"MODIFIED" = "Modificado";
"NAME" = "Nombre";
"NETWORK" = "Red";
"NONE" = "Ninguno";
"NOTES" = "Notas";
"PASSWORD" = "Contraseña";
@@ -87,7 +75,6 @@
"SAVE_WITH_DOTS" = "Guardar…";
"SEARCH" = "Buscar";
"TITLE" = "Título";
"TRASH" = "Papelera";
"URL" = "URL";
"USERNAME" = "Nombre de usuario";
"WINDOWS" = "Ventanas";
@@ -95,7 +82,6 @@
"CHANGE_DATABASE_NAME" = "Cambiar Nombre de Base";
"CHANGE_TRASH_GROUP" = "Cambiar Grupo de Papelera";
"%@_COPY" = "%@ Copiar";
"DUPLICTE_PASSWORDS" = "Duplicar Contraseñas";
@@ -144,13 +130,6 @@
"DEFAULT_GROUP_NAME" = "Nuevo Grupo";
"DEFAULT_WINDOW_TITLE" = "Título de Ventana";
/* Number of Entries
Plural (0, >1)
Singular (1)
*/
"%ld_ENTRIES" = "%ld Entradas";
"%ld_ENTRY" = "%ld Entrada";
/* Settings */
"GENERAL_SETTINGS" = "General";
"INTEGRATION_SETTINGS" = "Integración";

View File

@@ -44,12 +44,6 @@
"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "Réinitialiser";
"TRASH_ENTRY" = "Effacer entrée";
"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";
@@ -71,16 +65,10 @@
"DATABASE" = "Base de données";
"DELETE" = "Effacer";
"EDIT" = "Modifier";
"EMAIL" = "Courrier électronique";
"GROUP" = "Groupe";
"GENERAL" = "Général";
"HOMEBANKING" = "Banque";
"INSPECTOR" = "Inspecteur";
"INTERNET" = "Internet";
"LOCK" = "Verrouiller";
"MODIFIED" = "Modifié";
"NAME" = "Nom";
"NETWORK" = "Réseau";
"NONE" = "NONE";
"NOTES" = "Notes";
"PASSWORD" = "Mot de passe";
@@ -88,7 +76,6 @@
"SAVE_WITH_DOTS" = "Sauvegarder…";
"SEARCH" = "Rechercher";
"TITLE" = "Titre";
"TRASH" = "Corbeille";
"URL" = "URL";
"USERNAME" = "Utilisateur";
"WINDOWS" = "Windows";
@@ -96,7 +83,6 @@
"CHANGE_DATABASE_NAME" = "Modifier nom base de données";
"CHANGE_TRASH_GROUP" = "Modifier le groupe corbeille";
"%@_COPY" = "%@_COPY"; //TODO
"DUPLICTE_PASSWORDS" = "Dupliquer mots de passe";
@@ -145,13 +131,6 @@
"DEFAULT_GROUP_NAME" = "Nouveau groupe";
"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" = "Général";
"INTEGRATION_SETTINGS" = "Intégration";

View File

@@ -44,12 +44,6 @@
"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "Reimposta";
"TRASH_ENTRY" = "Cestina Elemento";
"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";
/*
@@ -70,16 +64,10 @@
"DATABASE" = "Database";
"DELETE" = "Elimina";
"EDIT" = "Modifica";
"EMAIL" = "EMail";
"GROUP" = "Gruppo";
"GENERAL" = "Generale";
"HOMEBANKING" = "Homebanking";
"INSPECTOR" = "Inspector";
"INTERNET" = "Internet";
"LOCK" = "Blocca";
"MODIFIED" = "Modificato";
"NAME" = "Nome";
"NETWORK" = "Rete";
"NONE" = "Nessun";
"NOTES" = "Note";
"PASSWORD" = "Password";
@@ -87,7 +75,6 @@
"SAVE_WITH_DOTS" = "Salva…";
"SEARCH" = "Cerca";
"TITLE" = "Titolo";
"TRASH" = "Cestino";
"URL" = "URL";
"USERNAME" = "Nome Utente";
"WINDOWS" = "Windows";
@@ -95,7 +82,6 @@
"CHANGE_DATABASE_NAME" = "Cambia Nome Database";
"CHANGE_TRASH_GROUP" = "Cambia Gruppo Cestino";
"%@_COPY" = "%@ Copia";
"DUPLICTE_PASSWORDS" = "Duplica Passwords";
@@ -144,13 +130,6 @@
"DEFAULT_GROUP_NAME" = "Nuovo Gruppo";
"DEFAULT_WINDOW_TITLE" = "Titolo Finestra";
/* Number of Entries
Plural (0, >1)
Singular (1)
*/
"%ld_ENTRIES" = "%ld Elementi";
"%ld_ENTRY" = "%ld Elemento";
/* Settings */
"GENERAL_SETTINGS" = "Generale";
"INTEGRATION_SETTINGS" = "Integrazione";

View File

@@ -44,12 +44,6 @@
"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "Reset";
"TRASH_ENTRY" = "Prullenmand Item";
"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";
/*
@@ -70,16 +64,10 @@
"DATABASE" = "Database";
"DELETE" = "Verwijder";
"EDIT" = "Wijzig";
"EMAIL" = "E-Mail";
"GROUP" = "Groep";
"GENERAL" = "Algemeen";
"HOMEBANKING" = "Thuisbankieren";
"INSPECTOR" = "Inspector";
"INTERNET" = "Internet";
"LOCK" = "Vergrendel";
"MODIFIED" = "Gewijzigd";
"NAME" = "Naam";
"NETWORK" = "Netwerk";
"NOTES" = "Notities";
"NONE" = "NONE";
"PASSWORD" = "Wachtwoord";
@@ -87,7 +75,6 @@
"SAVE_WITH_DOTS" = "Bewaar…";
"SEARCH" = "Zoeken";
"TITLE" = "Titel";
"TRASH" = "Prullenmand";
"URL" = "URL";
"USERNAME" = "Gebruikersnaam";
"WINDOWS" = "Vensters";
@@ -95,7 +82,6 @@
"CHANGE_DATABASE_NAME" = "Wijzig Databasenaam";
"CHANGE_TRASH_GROUP" = "Wijzig Prullenmand Groep";
"%@_COPY" = "%@ Kopieer";
"DUPLICTE_PASSWORDS" = "Dupliceer Wachtwoorden";
@@ -144,13 +130,6 @@
"DEFAULT_GROUP_NAME" = "Nieuwe Groep";
"DEFAULT_WINDOW_TITLE" = "Window Title";
/* Number of Entries
Plural (0, >1)
Singular (1)
*/
"%ld_ENTRIES" = "%ld Items";
"%ld_ENTRY" = "%ld Item";
/* Settings */
"GENERAL_SETTINGS" = "Algemeen";
"INTEGRATION_SETTINGS" = "Integratie";

View File

@@ -1,18 +1,9 @@
/* (No Comment) */
"%@_COPY" = "%@ kopiuj";
/* Display format for days. Should contain a long decimal placeholder! */
"%ld_DAYS" = "%ld dni";
/* % days ago */
"%ld_DAYS_AGO" = "%ld days ago";
/* (No Comment) */
"%ld_ENTRIES" = "%ld wpisy/ów";
/* (No Comment) */
"%ld_ENTRY" = "%ld wpis";
/* % 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 */
"EDIT_TEMPLATE_GROUP" = "Edit Entry Template Group";
/* (No Comment) */
"EMAIL" = "E-mail";
/* Empty Trash
Menu item in the database outline context menu to empyt the trash
Menu item in the database outline to empty the trash */
@@ -214,9 +202,6 @@
/* No comment provided by engineer. */
"FILE_OPEN_ERROR" = "Błąd! Nie można otworzyć pliku.";
/* (No Comment) */
"GENERAL" = "Ogólne";
/* General Settings Label */
"GENERAL_SETTINGS" = "Ogólne";
@@ -226,18 +211,12 @@
/* No comment provided by engineer. */
"HISTORY" = "Historia";
/* (No Comment) */
"HOMEBANKING" = "Homebanking";
/* No comment provided by engineer. */
"INSPECTOR" = "Inspektor";
/* Label for the integration settings tab */
"INTEGRATION_SETTINGS" = "Integracje";
/* (No Comment) */
"INTERNET" = "Internet";
/* Just now */
"JUST_NOW" = "Just now";
@@ -268,12 +247,6 @@
/* No comment provided by engineer. */
"MOVE_GROUP" = "Przenieś grupę";
/* (No Comment) */
"NAME" = "Nazwa";
/* (No Comment) */
"NETWORK" = "Sieć";
/* Name for a newly created Database */
"NEW_DATABASE" = "Database";
@@ -360,7 +333,7 @@
"RECOMMEND_PASSWORD_CHANGE_ALERT_TITLE" = "Proszę zmienić hasło bazy danych!";
/* 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. */
"SAVE" = "Zapisz";
@@ -404,24 +377,6 @@
/* 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.";
/* (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) */
"SHORT_FILE_CHANGE_STRATEGY_ASK" = "Pytaj";
@@ -435,9 +390,6 @@
/* preset to expire tomorrow */
"TOMORROW" = "jutro";
/* (No Comment) */
"TRASH" = "Kosz";
/* Move Entry to Trash */
"TRASH_ENTRY" = "Trash Entry";

View File

@@ -1,9 +1,9 @@
{
"EVERY_%ld_DAYS" = {
NSStringLocalizedFormatKey = "%#@variable@";
variable = {
NSStringFormatSpecTypeKey = NSStringPluralRuleType;
NSStringFormatValueTypeKey = ld;
"NSStringLocalizedFormatKey" = "%#@days@";
days = {
"NSStringFormatSpecTypeKey" = "NSStringPluralRuleType";
"NSStringFormatValueTypeKey" = ld;
few = "co %ld dni";
many = "co %ld dni";
one = "co dzie\U0144";

View File

@@ -44,12 +44,6 @@
"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "Сброс";
"TRASH_ENTRY" = "Удалить Запись";
"TRASH_GROUP" = "Удалить Группу";
"SET_NAME" = "Изменить Имя";
"SET_TITLE" = "Изменить Заголовок";
"SET_USERNAME" = "Изменить Имя пользователя";
"SET_PASSWORD" = "Изменить Пароль";
"SET_URL" = "Изменить URL";
"SET_NOTES" = "Изменить Заметки";
"SHOW_HISTORY" = "SHOW_HISTORY";
/*
@@ -70,16 +64,10 @@
"DATABASE" = "База данных";
"DELETE" = "Удалить";
"EDIT" = "Изменено";
"EMAIL" = "EMail";
"GROUP" = "Группа";
"GENERAL" = "Общие";
"HOMEBANKING" = "Домашний банк";
"INSPECTOR" = "Инспектор";
"INTERNET" = "Интернет";
"LOCK" = "Блокировка";
"MODIFIED" = "Изменить";
"NAME" = "Имя";
"NETWORK" = "Сеть";
"NONE" = "Нет";
"NOTES" = "Заметки";
"PASSWORD" = "Пароль";
@@ -87,7 +75,6 @@
"SAVE_WITH_DOTS" = "Сохранить…";
"SEARCH" = "Поиск";
"TITLE" = "Заголовок";
"TRASH" = "Удалить";
"URL" = "URL";
"USERNAME" = "Имя пользователя";
"WINDOWS" = "Окна";
@@ -95,7 +82,6 @@
"CHANGE_DATABASE_NAME" = "Изменить Имя базы данных";
"CHANGE_TRASH_GROUP" = "Изменить группу для мусора";
"%@_COPY" = "%@ Копировать";
"DUPLICTE_PASSWORDS" = "Дубли паролей";
@@ -144,13 +130,6 @@
"DEFAULT_GROUP_NAME" = "Новая Группа";
"DEFAULT_WINDOW_TITLE" = "Заголовок Окна";
/* Number of Entries
Plural (0, >1)
Singular (1)
*/
"%ld_ENTRIES" = "%ld записей";
"%ld_ENTRY" = "%ld запись";
/* Settings */
"GENERAL_SETTINGS" = "Общие";
"INTEGRATION_SETTINGS" = "Интеграция";

View File

@@ -44,12 +44,6 @@
"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "重置";
"TRASH_ENTRY" = "将项目移入废纸篓";
"TRASH_GROUP" = "将组移入废纸篓";
"SET_NAME" = "编辑名称";
"SET_TITLE" = "编辑标题";
"SET_USERNAME" = "编辑用户名";
"SET_PASSWORD" = "编辑密码";
"SET_URL" = "编辑 URL";
"SET_NOTES" = "编辑注释";
"SHOW_HISTORY" = "显示历史";
/*
@@ -70,16 +64,10 @@
"DATABASE" = "数据库";
"DELETE" = "删除";
"EDIT" = "编辑";
"EMAIL" = "电子邮件";
"GROUP" = "组";
"GENERAL" = "通用";
"HOMEBANKING" = "家庭银行";
"INSPECTOR" = "检查器";
"INTERNET" = "互联网";
"LOCK" = "锁定";
"MODIFIED" = "修改时间";
"NAME" = "名称";
"NETWORK" = "网络";
"NONE" = "无";
"NOTES" = "注释";
"PASSWORD" = "密码";
@@ -87,7 +75,6 @@
"SAVE_WITH_DOTS" = "保存…";
"SEARCH" = "搜索";
"TITLE" = "标题";
"TRASH" = "废纸篓";
"URL" = "URL";
"USERNAME" = "用户名";
"WINDOWS" = "Windows";
@@ -95,7 +82,6 @@
"CHANGE_DATABASE_NAME" = "修改数据库名称";
"CHANGE_TRASH_GROUP" = "修改废纸篓的项目组";
"%@_COPY" = "%@ 拷贝";
"DUPLICTE_PASSWORDS" = "重复的密码";
@@ -144,13 +130,6 @@
"DEFAULT_GROUP_NAME" = "项目组";
"DEFAULT_WINDOW_TITLE" = "Window Title";
/* Number of Entries
Plural (0, >1)
Singular (1)
*/
"%ld_ENTRIES" = "%ld 个项目";
"%ld_ENTRY" = "%ld 个项目";
/* Settings */
"GENERAL_SETTINGS" = "通用";
"INTEGRATION_SETTINGS" = "集成";