Added spanish localization. Extended english and german localization.

This commit is contained in:
michael starke
2017-08-25 14:01:40 +02:00
parent dbb44bbc85
commit 801889865f
32 changed files with 400 additions and 40 deletions

View File

@@ -413,6 +413,28 @@
4C3C4EAD18D7039300153127 /* MPValueTransformerHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPValueTransformerHelper.h; sourceTree = "<group>"; };
4C3C4EAE18D7039300153127 /* MPValueTransformerHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPValueTransformerHelper.m; sourceTree = "<group>"; };
4C3FFD9D16DAF60600DF9186 /* ContextBar.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ContextBar.xib; sourceTree = "<group>"; };
4C4161021F50333B003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/DatabaseSettingsWindow.strings; sourceTree = "<group>"; };
4C4161031F50333B003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/PasswordEditWindow.strings; sourceTree = "<group>"; };
4C4161041F50333B003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/GeneralSettings.strings; sourceTree = "<group>"; };
4C4161051F50333B003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/IntegrationSettings.strings; sourceTree = "<group>"; };
4C4161061F50333B003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/WorkflowSettings.strings; sourceTree = "<group>"; };
4C4161071F50333B003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/UpdateSettings.strings; sourceTree = "<group>"; };
4C4161081F50333B003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/PluginSettings.strings; sourceTree = "<group>"; };
4C4161091F50333B003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InspectorView.strings; sourceTree = "<group>"; };
4C41610A1F50333B003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/GroupInspectorView.strings; sourceTree = "<group>"; };
4C41610B1F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/EntryInspectorView.strings; sourceTree = "<group>"; };
4C41610C1F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/PasswordInputView.strings; sourceTree = "<group>"; };
4C41610D1F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/PasswordCreatorView.strings; sourceTree = "<group>"; };
4C41610E1F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/IconSelection.strings; sourceTree = "<group>"; };
4C41610F1F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/DatePickingView.strings; sourceTree = "<group>"; };
4C4161101F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/ReferenceBuilderView.strings; sourceTree = "<group>"; };
4C4161111F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/WelcomeWindow.strings; sourceTree = "<group>"; };
4C4161121F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/MainMenu.strings; sourceTree = "<group>"; };
4C4161131F50333C003BC0AF /* es */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = "<group>"; };
4C4161141F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = es; path = es.lproj/Credits.rtf; sourceTree = "<group>"; };
4C4161151F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
4C4161161F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/KPKLocalizable.strings; sourceTree = "<group>"; };
4C4161171F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
4C431BCB16E2A82700700A81 /* MPPasteBoardController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasteBoardController.h; sourceTree = "<group>"; };
4C431BCC16E2A82700700A81 /* MPPasteBoardController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasteBoardController.m; sourceTree = "<group>"; };
4C431BCE16E2BAB000700A81 /* OverlayWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = OverlayWindow.xib; sourceTree = "<group>"; };
@@ -1529,6 +1551,7 @@
ru,
it,
pl,
es,
);
mainGroup = 4C77E35715B84A240093A587;
productRefGroup = 4C77E36315B84A240093A587 /* Products */;
@@ -1840,6 +1863,7 @@
713F9B481C95CEA000605880 /* fr */,
4C840C4B1D773E5E0081F605 /* pl */,
60ECAD221F12231B00EA9DB3 /* zh-Hans */,
4C4161081F50333B003BC0AF /* es */,
);
name = PluginSettings.xib;
sourceTree = "<group>";
@@ -1854,6 +1878,7 @@
FA638D231C39BFCC00B10CC6 /* ru */,
4825CC961C414D58003E37E9 /* it */,
4C840C551D773E6B0081F605 /* pl */,
4C4161171F50333C003BC0AF /* es */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
@@ -1868,6 +1893,7 @@
BD6C366619484CF40089EB37 /* nl */,
FA638D221C39BFCC00B10CC6 /* ru */,
4825CC951C414D58003E37E9 /* it */,
4C4161161F50333C003BC0AF /* es */,
);
name = KPKLocalizable.strings;
sourceTree = "<group>";
@@ -1884,6 +1910,7 @@
FA638D1C1C39BFCC00B10CC6 /* ru */,
4825CC8F1C414D58003E37E9 /* it */,
4C840C521D773E5E0081F605 /* pl */,
4C41610E1F50333C003BC0AF /* es */,
);
name = IconSelection.xib;
sourceTree = "<group>";
@@ -1900,6 +1927,7 @@
FA638D111C39BFCB00B10CC6 /* ru */,
4825CC841C414D57003E37E9 /* it */,
4C840C471D773E5D0081F605 /* pl */,
4C4161041F50333B003BC0AF /* es */,
);
name = GeneralSettings.xib;
sourceTree = "<group>";
@@ -1916,6 +1944,7 @@
FA638D171C39BFCC00B10CC6 /* ru */,
4825CC8A1C414D57003E37E9 /* it */,
4C840C4D1D773E5E0081F605 /* pl */,
4C41610C1F50333C003BC0AF /* es */,
);
name = PasswordInputView.xib;
sourceTree = "<group>";
@@ -1932,6 +1961,7 @@
FA638D191C39BFCC00B10CC6 /* ru */,
4825CC8C1C414D58003E37E9 /* it */,
4C840C4F1D773E5E0081F605 /* pl */,
4C4161091F50333B003BC0AF /* es */,
);
name = InspectorView.xib;
sourceTree = "<group>";
@@ -1946,6 +1976,7 @@
BD6C366519484CF40089EB37 /* nl */,
FA638D211C39BFCC00B10CC6 /* ru */,
4825CC941C414D58003E37E9 /* it */,
4C4161151F50333C003BC0AF /* es */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
@@ -1962,6 +1993,7 @@
FA638D161C39BFCC00B10CC6 /* ru */,
4825CC891C414D57003E37E9 /* it */,
4C840C4C1D773E5E0081F605 /* pl */,
4C4161121F50333C003BC0AF /* es */,
);
name = MainMenu.xib;
sourceTree = "<group>";
@@ -1978,6 +2010,7 @@
FA638D101C39BFCB00B10CC6 /* ru */,
4825CC831C414D57003E37E9 /* it */,
4C840C461D773E5D0081F605 /* pl */,
4C4161111F50333C003BC0AF /* es */,
);
name = WelcomeWindow.xib;
sourceTree = "<group>";
@@ -1993,6 +2026,7 @@
FA638D1F1C39BFCC00B10CC6 /* ru */,
4825CC921C414D58003E37E9 /* it */,
4C43B02F1E266A3A000CB4D7 /* pl */,
4C4161131F50333C003BC0AF /* es */,
);
name = Localizable.strings;
sourceTree = "<group>";
@@ -2008,6 +2042,7 @@
FA638D201C39BFCC00B10CC6 /* ru */,
4825CC931C414D58003E37E9 /* it */,
4C43B0301E266A41000CB4D7 /* pl */,
4C4161141F50333C003BC0AF /* es */,
);
name = Credits.rtf;
sourceTree = "<group>";
@@ -2019,6 +2054,7 @@
FA638D1E1C39BFCC00B10CC6 /* ru */,
4825CC911C414D58003E37E9 /* it */,
4C840C541D773E5E0081F605 /* pl */,
4C4161101F50333C003BC0AF /* es */,
);
name = ReferenceBuilderView.xib;
sourceTree = "<group>";
@@ -2035,6 +2071,7 @@
FA638D1B1C39BFCC00B10CC6 /* ru */,
4825CC8E1C414D58003E37E9 /* it */,
4C840C511D773E5E0081F605 /* pl */,
4C41610B1F50333C003BC0AF /* es */,
);
name = EntryInspectorView.xib;
sourceTree = "<group>";
@@ -2051,6 +2088,7 @@
FA638D1A1C39BFCC00B10CC6 /* ru */,
4825CC8D1C414D58003E37E9 /* it */,
4C840C501D773E5E0081F605 /* pl */,
4C41610A1F50333B003BC0AF /* es */,
);
name = GroupInspectorView.xib;
sourceTree = "<group>";
@@ -2067,6 +2105,7 @@
4825CC851C414D57003E37E9 /* it */,
4C840C481D773E5D0081F605 /* pl */,
60ECAD271F12262400EA9DB3 /* zh-Hans */,
4C4161051F50333B003BC0AF /* es */,
);
name = IntegrationSettings.xib;
sourceTree = "<group>";
@@ -2083,6 +2122,7 @@
4825CC861C414D57003E37E9 /* it */,
4C840C491D773E5D0081F605 /* pl */,
60ECAD251F12253C00EA9DB3 /* zh-Hans */,
4C4161061F50333B003BC0AF /* es */,
);
name = WorkflowSettings.xib;
sourceTree = "<group>";
@@ -2099,6 +2139,7 @@
FA638D141C39BFCC00B10CC6 /* ru */,
4825CC871C414D57003E37E9 /* it */,
4C840C4A1D773E5D0081F605 /* pl */,
4C4161071F50333B003BC0AF /* es */,
);
name = UpdateSettings.xib;
sourceTree = "<group>";
@@ -2115,6 +2156,7 @@
FA638D1D1C39BFCC00B10CC6 /* ru */,
4825CC901C414D58003E37E9 /* it */,
4C840C531D773E5E0081F605 /* pl */,
4C41610F1F50333C003BC0AF /* es */,
);
name = DatePickingView.xib;
sourceTree = "<group>";
@@ -2131,6 +2173,7 @@
FA638D0F1C39BFCB00B10CC6 /* ru */,
4825CC821C414D57003E37E9 /* it */,
4C840C451D773E5D0081F605 /* pl */,
4C4161031F50333B003BC0AF /* es */,
);
name = PasswordEditWindow.xib;
sourceTree = "<group>";
@@ -2147,6 +2190,7 @@
FA638D181C39BFCC00B10CC6 /* ru */,
4825CC8B1C414D57003E37E9 /* it */,
4C840C4E1D773E5E0081F605 /* pl */,
4C41610D1F50333C003BC0AF /* es */,
);
name = PasswordCreatorView.xib;
sourceTree = "<group>";
@@ -2163,6 +2207,7 @@
FA638D0E1C39BFCB00B10CC6 /* ru */,
4825CC811C414D57003E37E9 /* it */,
4C840C441D773E5D0081F605 /* pl */,
4C4161021F50333B003BC0AF /* es */,
);
name = DatabaseSettingsWindow.xib;
sourceTree = "<group>";

View File

@@ -10,6 +10,7 @@
<connections>
<outlet property="clearPasteboardOnQuitCheckButton" destination="447" id="520"/>
<outlet property="clearPasteboardTimeoutPopup" destination="419" id="521"/>
<outlet property="fileChangeStrategyPopup" destination="wIu-Sh-2a2" id="oJo-dA-lEE"/>
<outlet property="idleTimeOutPopup" destination="584" id="809"/>
<outlet property="lockOnLogoutCheckButton" destination="5SP-Vi-1sn" id="yaI-LH-R5A"/>
<outlet property="lockOnSleepCheckButton" destination="630" id="810"/>
@@ -168,7 +169,7 @@
<constraint firstItem="447" firstAttribute="top" secondItem="431" secondAttribute="bottom" constant="8" symbolic="YES" id="zkd-Hf-09b"/>
</constraints>
</box>
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Startup" translatesAutoresizingMaskIntoConstraints="NO" id="888">
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="File Handling" translatesAutoresizingMaskIntoConstraints="NO" id="888">
<rect key="frame" x="17" y="286" width="366" height="85"/>
<view key="contentView" id="cpg-tt-SHE">
<rect key="frame" x="1" y="1" width="364" height="69"/>
@@ -182,25 +183,19 @@
</buttonCell>
</button>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="h3w-Ms-ohK">
<rect key="frame" x="16" y="20" width="207" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="On external changes to open files" id="QrK-hM-Xt1">
<rect key="frame" x="16" y="20" width="93" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="If file changes:" id="QrK-hM-Xt1">
<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>
<popUpButton verticalHuggingPriority="750" horizontalCompressionResistancePriority="749" translatesAutoresizingMaskIntoConstraints="NO" id="wIu-Sh-2a2">
<rect key="frame" x="227" y="14" width="120" height="26"/>
<popUpButtonCell key="cell" type="push" title="Merge changes" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="dbY-3j-eJU" id="1R2-5t-LWk">
<rect key="frame" x="113" y="13" width="234" height="26"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="1R2-5t-LWk">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="DQY-17-yKP">
<items>
<menuItem title="Merge changes" state="on" id="dbY-3j-eJU"/>
<menuItem title="Keep other" id="T1Y-M5-MlZ"/>
<menuItem title="Keep mine" id="BQb-L1-z8Y"/>
</items>
</menu>
<menu key="menu" id="DQY-17-yKP"/>
</popUpButtonCell>
</popUpButton>
</subviews>

View File

@@ -79,7 +79,7 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
@property (strong) IBOutlet NSView *warningView;
@property (weak) IBOutlet NSImageView *warningViewImage;
@property (assign) BOOL lockedForFileChange;
@property (atomic, assign) BOOL lockedForFileChange;
@end
@@ -288,35 +288,55 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
/* Dispatch the alert to the main queue */
__weak MPDocument *welf = self;
dispatch_async(dispatch_get_main_queue(), ^{
MPFileChangeStrategy strategy = (MPFileChangeStrategy)[NSUserDefaults.standardUserDefaults integerForKey:kMPSettingsKeyFileChangeStrategy];
if(strategy != MPFileChangeStrategyAsk) {
[welf _handleFileChangeWithStrategy:strategy setAsDefault:NO];
self.lockedForFileChange = NO;
return;
}
NSAlert *alert = [[NSAlert alloc] init];
alert.alertStyle = NSWarningAlertStyle;
alert.messageText = NSLocalizedString(@"FILE_CHANGED_BY_OTHERS_MESSAGE_TEXT", @"Message displayed when an open file was changed from another application");
alert.informativeText = NSLocalizedString(@"FILE_CHANGED_BY_OTHERS_INFO_TEXT", @"Informative text displayed when the file was change from another application");
[alert addButtonWithTitle:NSLocalizedString(@"MERGE_CHANGES", @"Merge changes into file!")];
[alert addButtonWithTitle:NSLocalizedString(@"LOAD_CHANGES", @"Reopen the file!")];
[alert addButtonWithTitle:NSLocalizedString(@"KEEP_MINE", @"Ignore the changes to an open file!")];
alert.showsSuppressionButton = YES;
alert.suppressionButton.title = NSLocalizedString(@"SET_AS_DEFAULT_FILE_CHANGE_STRATEGY", @"Set the selection as default file change strategy!");
[alert addButtonWithTitle:NSLocalizedString(@"FILE_CHANGE_STRATEGY_MERGE", @"Merge changes into file!")];
[alert addButtonWithTitle:NSLocalizedString(@"FILE_CHANGE_STRATEGY_USE_OTHER", @"Reopen the file!")];
[alert addButtonWithTitle:NSLocalizedString(@"FILE_CHANGE_STRATEGY_KEEP_MINE", @"Ignore the changes to an open file!")];
[alert beginSheetModalForWindow:welf.windowForSheet completionHandler:^(NSModalResponse returnCode) {
welf.lockedForFileChange = NO;
BOOL useAsDefault = (alert.suppressionButton.state == NSOnState);
switch(returnCode) {
case NSAlertFirstButtonReturn: {
[welf mergeWithContentsFromURL:self.fileURL];
[welf _handleFileChangeWithStrategy:MPFileChangeStrategyMerge setAsDefault:useAsDefault];
break;
}
case NSAlertSecondButtonReturn:
[welf revertToContentsOfURL:welf.fileURL ofType:welf.fileType error:nil];
[welf _handleFileChangeWithStrategy:MPFileChangeStrategyUseOther setAsDefault:useAsDefault];
break;
case NSAlertThirdButtonReturn:
// do not change anything
[welf _handleFileChangeWithStrategy:MPFileChangeStrategyKeepMine setAsDefault:useAsDefault];
default:
break;
}
welf.lockedForFileChange = NO;
}];
});
}
- (void)_handleFileChangeWithStrategy:(MPFileChangeStrategy)strategy setAsDefault:(BOOL)setAsDefault {
if(setAsDefault) {
[NSUserDefaults.standardUserDefaults setInteger:strategy forKey:kMPSettingsKeyFileChangeStrategy];
}
if(strategy == MPFileChangeStrategyMerge) {
[self mergeWithContentsFromURL:self.fileURL];
}
else if(strategy == MPFileChangeStrategyUseOther) {
[self revertToContentsOfURL:self.fileURL ofType:self.fileType error:nil];
}
// else do nothing!
}
- (void)writeXMLToURL:(NSURL *)url {
NSData *xmlData = [self.tree xmlData];
NSError *error;
@@ -356,6 +376,10 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
[self saveDocument] is enqued so that dataOfType is called too late to actually save teh database.
hence we need to get the ok from the NSDocument about the save, otherwise the lock fails!
*/
if(self.lockedForFileChange) {
// we have user interaction that cannot be dismissed, instead ignore locking!
return;
}
[self saveDocumentWithDelegate:self didSaveSelector:@selector(_lockDatabaseForDocument:didSave:contextInfo:) contextInfo:NULL];
}

View File

@@ -20,5 +20,6 @@
@property (weak) IBOutlet NSButton *reopenLastDatabase;
@property (weak) IBOutlet NSButton *createUntitledOnActivation;
@property (weak) IBOutlet NSButton *rememberKeyFileCheckButton;
@property (weak) IBOutlet NSPopUpButton *fileChangeStrategyPopup;
@end

View File

@@ -40,8 +40,21 @@ NSString *const MPGeneralSetingsIdentifier = @"GeneralSettingsTab";
[self.idleTimeOutPopup bind:NSSelectedTagBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyIdleLockTimeOut] options:nil];
[self.reopenLastDatabase bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyReopenLastDatabaseOnLaunch] options:nil];
[self.rememberKeyFileCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyRememberKeyFilesForDatabases] options:nil];
[self.createUntitledOnActivation setState:NSOffState]; //kMPSettingsKeyOpenEmptyDatabaseOnLaunch
/* File Change Strategy Menu */
NSDictionary *fileChangeStragegyDict = @{ @(MPFileChangeStrategyAsk) : NSLocalizedString(@"FILE_CHANGE_STRATEGY_ASK", @""),
@(MPFileChangeStrategyUseOther) : NSLocalizedString(@"FILE_CHANGE_STRATEGY_USE_OTHER", @""),
@(MPFileChangeStrategyKeepMine) : NSLocalizedString(@"FILE_CHANGE_STRATEGY_KEEP_MINE", @""),
@(MPFileChangeStrategyMerge) : NSLocalizedString(@"FILE_CHANGE_STRATEGY_MERGE", @""),
};
[self.fileChangeStrategyPopup.menu removeAllItems];
for(NSNumber *key in fileChangeStragegyDict) {
NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:fileChangeStragegyDict[key] action:NULL keyEquivalent:@""];
item.tag = key.integerValue;
[self.fileChangeStrategyPopup.menu addItem:item];
}
[self.fileChangeStrategyPopup bind:NSSelectedTagBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyFileChangeStrategy] options:nil];
[self.createUntitledOnActivation setState:NSOffState];
//kMPSettingsKeyOpenEmptyDatabaseOnLaunch
}
@end

View File

@@ -16,6 +16,7 @@ APPKIT_EXTERN NSString *const kMPSettingsKeyClearPasteboardOnQuit;
APPKIT_EXTERN NSString *const kMPSettingsKeyPasswordEncoding;
APPKIT_EXTERN NSString *const kMPSettingsKeyOpenEmptyDatabaseOnLaunch;
APPKIT_EXTERN NSString *const kMPSettingsKeyReopenLastDatabaseOnLaunch;
APPKIT_EXTERN NSString *const kMPSettingsKeyFileChangeStrategy;
/* URL handling */
APPKIT_EXTERN NSString *const kMPSettingsKeyBrowserBundleId;
@@ -65,6 +66,13 @@ APPKIT_EXTERN NSString *const kMPSettingsKeyUpdatePasswordOnTemplateEntries;
/* Plugins */
APPKIT_EXTERN NSString *const kMPSettingsKeyLoadUnsecurePlugins; // If set to YES this will load all plugins regardless of their codesignature status
typedef NS_ENUM(NSUInteger, MPFileChangeStrategy) {
MPFileChangeStrategyAsk,
MPFileChangeStrategyKeepMine,
MPFileChangeStrategyUseOther,
MPFileChangeStrategyMerge
};
typedef NS_ENUM(NSUInteger, MPDoubleClickURLAction) {
MPDoubleClickURLActionCopy,
MPDoubleClickURLActionOpen,
@@ -84,10 +92,6 @@ APPKIT_EXTERN NSString *const kMPSettingsKeyPasswordCustomString;
APPKIT_EXTERN NSString *const kMPSettingsKeyPasswordDefaultsForEntry;
typedef NS_ENUM(NSUInteger, MPPasswordEncoding) {
MPPasswordEncodingUTF8,
MPPasswordEncodingASCII,
};
@interface MPSettingsHelper : NSObject

View File

@@ -17,6 +17,7 @@ NSString *const kMPSettingsKeyClearPasteboardOnQuit = @"ClearC
NSString *const kMPSettingsKeyBrowserBundleId = @"BrowserBundleId";
NSString *const kMPSettingsKeyOpenEmptyDatabaseOnLaunch = @"OpenEmptyDatabaseOnLaunch";
NSString *const kMPSettingsKeyReopenLastDatabaseOnLaunch = @"ReopenLastDatabaseOnLaunch";
NSString *const kMPSettingsKeyFileChangeStrategy = @"FileChangeStrategy";
NSString *const kMPSettingsKeyLockOnSleep = @"LockOnSleep";
NSString *const kMPSettingskeyLockOnLogout = @"LockOnLogout";
NSString *const kMPSettingsKeyIdleLockTimeOut = @"IdleLockTimeOut";
@@ -101,6 +102,7 @@ NSString *const kMPDeprecatedSettingsKeyDefaultPasswordRounds = @"Ke
kMPSettingsKeyClearPasteboardOnQuit: @YES,
kMPSettingsKeyOpenEmptyDatabaseOnLaunch: @NO,
kMPSettingsKeyReopenLastDatabaseOnLaunch: @YES,
kMPSettingsKeyFileChangeStrategy: @(MPFileChangeStrategyAsk), // Ask what to do on a file change!
kMPSettingsKeyLockOnSleep: @YES,
kMPSettingskeyLockOnLogout: @NO,
kMPSettingsKeyIdleLockTimeOut: @0, // 5 minutes
@@ -207,7 +209,7 @@ NSString *const kMPDeprecatedSettingsKeyDefaultPasswordRounds = @"Ke
+ (void)_migrateRememberedKeyFiles {
/*
Database file paths was stored as plain text in keyfile mapping.
We only need to store the key file ulr in plain text, thus hashing the path is sufficent
We only need to store the key file url in plain text, thus hashing the path is sufficent
*/
NSDictionary<NSString *, NSString *> *currentMapping = [[NSUserDefaults standardUserDefaults] dictionaryForKey:kMPSettingsKeyRememeberdKeysForDatabases];
if(!currentMapping) {
@@ -225,7 +227,7 @@ NSString *const kMPDeprecatedSettingsKeyDefaultPasswordRounds = @"Ke
didHash = YES;
}
}
/* keep all hasehd or unknown data */
/* keep all hashed or unknown data */
else {
hashedDict[key] = currentMapping[key];
}

View File

@@ -193,19 +193,23 @@
"RECOMMEND_PASSWORD_CHANGE_ALERT_DESCRIPTION" = "Sie sollten das Password und/oder den Schlüssel ändern.";
"CHANGE_PASSWORD_WITH_DOTS" = "Password ändern …";
"WARNING_ON_SAVE_NO_PASSWORD_OR_KEY_SET" = "No password or keyfile is set.";
"WARNING_ON_SAVE_NO_PASSWORD_OR_KEY_SET_SUGGESTION" = "Please set a password and/or keyfile for this database. Aborting this will undo all changes and lock the document";
"WARNING_ON_SAVE_NO_PASSWORD_OR_KEY_SET" = "Weder Password noch Schlüsseldatei sind festgelegt!";
"WARNING_ON_SAVE_NO_PASSWORD_OR_KEY_SET_SUGGESTION" = "Bitte vergeben Sie ein Password und/oder einen Schlüssel. Sofern Sie abbrechen, werden Ihre Änderugnen rückgängig gemacht und die Datei gesperrt.";
/* Message displayed when an open file was changed from another application */
"FILE_CHANGED_BY_OTHERS_MESSAGE_TEXT" = "Die Datei wurde verändert!";
/* Informative text displayed when the file was change form another application */
"FILE_CHANGED_BY_OTHERS_INFO_TEXT" = "Die geöffnete Datei wurde von einem anderen Programm verändert! Der Inhalt stimmt nicht mehr mit dem geladenen Inhalt überein.";
/* 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.";
/* Always show a dialog after an external file change */
"FILE_CHANGE_STRATEGY_ASK" = "Jedesmal fragen";
/* Button to ignore the changes */
"KEEP_MINE" = "Geladenen Inhalt behalten!";
/* BUtton to reload the changes form disk */
"LOAD_CHANGES" = "Veränderten Inhalt laden!";
"FILE_CHANGE_STRATEGY_KEEP_MINE" = "Behalte meine Version ohne Änderungen";
/* Button to reload the changes form disk */
"FILE_CHANGE_STRATEGY_USE_OTHER" = "Lade die andere Version und verwerfe meine Änderungen";
/* Merge changes into file! */
"MERGE_CHANGES" = "Inhalte zusammenführen!";
"FILE_CHANGE_STRATEGY_MERGE" = "Inhalte zusammenführen";
/* Password Input Error and Warnings */
"PASSWORD_INPUT_NO_PASSWORD" = "Kein Passwort";

View File

@@ -199,12 +199,16 @@
"FILE_CHANGED_BY_OTHERS_MESSAGE_TEXT" = "The database file was modified!";
/* Informative text displayed when the file was change form 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?";
/* 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.";
/* Always show a dialog after an external file change */
"FILE_CHANGE_STRATEGY_ASK" = "Ask";
/* Button to ignore the changes */
"KEEP_MINE" = "Don't Load Modified Database";
"FILE_CHANGE_STRATEGY_KEEP_MINE" = "Keep My Version and Ignore Other Changes";
/* Button to reload the changes form disk */
"LOAD_CHANGES" = "Load Modified Database and Discard Mine";
"FILE_CHANGE_STRATEGY_USE_OTHER" = "Load Changed Version and Discard Mine";
/* Merge changes into file! */
"MERGE_CHANGES" = "Merge Changes";
"FILE_CHANGE_STRATEGY_MERGE" = "Merge Changes";
/* Password Input Messages, Errors and Warning */
"PASSWORD_INPUT_NO_PASSWORD" = "No Password";

View File

@@ -0,0 +1,224 @@
/* Formatted Times */
"%ld_DAYS_AGO" = "hace %ld días";
"%ld_HOURS_AGO" = "hace aproximadamente %ld horas";
"%ld_MINUTES_AGO" = "hace %ld minutos";
"%ld_WEEKS_AGO" = "hace %ld semanas";
"JUST_NOW" = "Justo ahora";
"LAST_WEEK" = "La semana pasada";
"ONE_WEEK_AGO" = "Hace una semana";
"YESTERDAY" = "Ayer";
"TOMORROW" = "Mañana";
"ONE_WEEK" = "en una semana";
"ONE_MONTH" = "en un mes";
"90_DAYS" = "en 90 días";
"ONE_YEAR" = "en un año";
/* Date Picker */
"SELECT_DATE_PRESET" = "Usar predefinido…";
/* Menu item for automatic trash creation */
"AUTOCREATE_TRASH_FOLDER" = "Crear automáticamente";
/*
Actions
*/
"ADD_ENTRY" = "Agregar Entrada";
"ADD_GROUP" = "Agregar Grupo";
"DUPLICATE_ENTRY" = "Duplicar Entrada";
"DUPLICATE_ENTRY_WITH_OPTIONS" = "Duplicar Entrada…";
"COPY_ENTRY" = "Copiar Entrada";
"COPY_GROUP" = "Copiar Grupo";
"ADD_TREMPLATE_ENTRY" = "Crear Plantilla de Entrada";
"DELETE_GROUP" = "Eliminar Grupo";
"DELETE_ENTRY" = "Eliminar Entrada";
"EDIT_TEMPLATE_GROUP" = "Editar Grupo de Plantilla";
"EMPTY_TRASH" = "Vaciar Papelera";
"MOVE_ENTRY" = "Mover Entrada";
"MOVE_GROUP" = "Mover Grupo";
"NEW_ENTRY_WITH_TEMPLATE_%@" = "Crear Entrada con Plantilla %@";
"NEW_DATABASE" = "Base de Datos";
"OPEN_URL" = "Abrir URL";
"PERFORM_AUTOTYPE_FOR_ENTRY" = "Generar Autotype";
"PREVIEW" = "Vista Previa";
"PASSWORD_GENERATOR_SET_DEFAULTS" = "Configurar Predeterminados";
"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";
/*
Search
*/
"CLEAR_RECENT_SEARCHES" = "Limpiar búsquedas recientes";
"RECENT_SEARCHES" = "Búsquedas recientes";
"SEARCH_DUPLICATE_PASSWORDS" = "Contraseñas duplicadas";
"SEARCH_EXPIRED_ENTRIES" = "Expirado";
"SELECT_FILTER_WITH_DOTS" = "Seleccionar…";
/*
Direct Translations
*/
"ACTION" = "Acción";
"ATTACHMENTS" = "Adjuntos";
"CANCEL" = "Cancelar";
"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";
"SAVE" = "Guardar";
"SAVE_WITH_DOTS" = "Guardar…";
"SEARCH" = "Buscar";
"TITLE" = "Título";
"TRASH" = "Papelera";
"URL" = "URL";
"USERNAME" = "Nombre de usuario";
"WINDOWS" = "Ventanas";
"CHANGE_DATABASE_NAME" = "Cambiar Nombre de Base";
"CHANGE_TRASH_GROUP" = "Cambiar Grupo de Papelera";
"%@_COPY" = "%@ Copiar";
"DUPLICTE_PASSWORDS" = "Duplicar Contraseñas";
/* Field nam that was copied to the pasteboard */
"COPIED_FIELD_%@" = "%@ copiado";
"COPIED_PASSWORD" = "Contraseña copiada";
"COPIED_URL" = "URL copiada";
"COPIED_USERNAME" = "Nombre de usuario copiado";
"COPY_CUSTOM_FIELDS" = "Copiar Campos Personalizados";
"COPY_FIELD_%@" = "Copiar %@";
"COPY_PASSWORD" = "Copiar Contraseña";
"COPY_URL" = "Copy URL";
"COPY_USERNAME" = "Copiar Nombre de Usuario";
/* Dock Badge */
"CLEARING_PASTEBOARD" = "…";
/* Group Inspector */
/* Autotype Combobox */
"AUTOTYPE_NO" = "Deshabilitar Autotype";
"AUTOTYPE_YES" = "Habilitar Autotype";
"AUTOTYPE_INHERIT" = "Heredar Configuración de Autotype";
/* Search Combobox */
"SEARCH_INHERIT" = "Inherit Search Settings";
"SEARCH_YES" = "Include in Search";
"SEARCH_NO" = "Exclude from Search";
/*
Date/Time Displays
*/
/* Created at template string. %@ is replaced by localized date and time */
"CREATED_AT_%@" = "Creado: %@";
/* Modifed at template string. %@ is replaced by localized date and time */
"MODIFED_AT_%@" = "Modificado: %@";
"EXPIRES_AT_DATE_%@" = "Expira: %@";
"NO_EXPIRE_DATE_SET" = "No expira.";
/*
Defaults for new objects
*/
"DEFAULT_CUSTOM_FIELD_TITLE" = "Personalizado";
"DEFAULT_CUSTOM_FIELD_VALUE" = "Valor";
"DEFAULT_ENTRY_TITLE" = "Nueva Entrada";
"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";
"UPDATE_SETTINGS" = "Actualizaciones";
"WORKFLOW_SETTINGS" = "Flujo de Trabajo";
"DEFAULT_BROWSER" = "Navegador Predeterminado";
"OTHER_BROWSER" = "Seleccionar Navegador…";
"PLUGIN_SETTINGS" = "Plugins";
/* Feature not supported in Version */
"KDBX_ONLY_FEATURE" = "Caraterística no soportada en base de datos KDB";
/* Template */
"NO_TEMPLATE_GROUP" = "Sin plantillas";
"NO_TEMPLATES" = "No se han encontrado Plantillas";
/* Kefile */
"SAVE_KEYFILE" = "Guardar Keyfile";
/* Autoype */
/* Candiate dialog */
"SELECT_AUTOTYPE_CANDIDATE" = "Seleccionar candidato";
"AUTOTYPE_OVERLAY_NO_DOCUMENTS" = "Please open a file to use Global Autotype!";
"AUTOTYPE_OVERLAY_NO_MATCH_FOR_%@" = "No hay registros para %@!";
"AUTOTYPE_OVERLAY_SINGLE_MATCH" = "Encontrado";
/* Alert Dialogs */
"WARNING_ON_EMPTY_TRASH_DESCRIPTION" = "Vaciar la Papelera es una acción no reversible.";
"WARNING_ON_EMPTY_TRASH_TITLE" = "¿Vaciar Papelera?";
"WARNING_ON_LOSSY_SAVE" = "Al guardar en formato KDB, se perderán algunos datos.";
"WARNING_ON_LOSSY_SAVE_DESCRIPTION" = "El formato de archivo KDB no permite guardar toda la información.";
"CHANGE_FORMAT" = "Cambiar formato de archivo a KDBX";
"SAVE_LOSSY" = "Guardar y perder datos";
"ENFORCE_PASSWORD_CHANGE_ALERT_TITLE" = "La contraseña de la base de datos ha expirado";
"ENFORCE_PASSWORD_CHANGE_ALERT_DESCRIPTION" = "No será posible guardar cambios hsata que la contraseña o el keyfile sean modificados.";
"RECOMMEND_PASSWORD_CHANGE_ALERT_TITLE" = "Por favor, cambia la contraseña para la base de datos.";
"RECOMMEND_PASSWORD_CHANGE_ALERT_DESCRIPTION" = "Es recomendado cambiar la contraseña y/o el keyfile.";
"CHANGE_PASSWORD_WITH_DOTS" = "Cambiar Contraseña…";
"WARNING_ON_SAVE_NO_PASSWORD_OR_KEY_SET" = "No hay contraseña o keyfile establecido.";
"WARNING_ON_SAVE_NO_PASSWORD_OR_KEY_SET_SUGGESTION" = "Por favor genera una contraseña o un keyfile para esta base de datos. Al salir, se perderán todos los cambios y el documento quedará bloqueado.";
/* Message displayed when an open file was changed from another application */
"FILE_CHANGED_BY_OTHERS_MESSAGE_TEXT" = "El archivo de la base de datos ha sido modificado";
/* Informative text displayed when the file was change form another application */
"FILE_CHANGED_BY_OTHERS_INFO_TEXT" = "El archivo cargado no coincide con el guardado en el disco. ¿Deseas continuar?";
/* Set the selection as default file change strategy */
"SET_AS_DEFAULT_FILE_CHANGE_STRATEGY" = "Use the selected strategy and do not ask me again!";
/* Always show a dialog after an external file change */
"FILE_CHANGE_STRATEGY_ASK" = "Ask Me What to Do";
/* Button to ignore the changes */
"KEEP_MINE" = "Conservar versión actual y descartar cambios";
/* Button to reload the changes form disk */
"LOAD_CHANGES" = "Cargar archivo modificado";
/* Merge changes into file! */
"MERGE_CHANGES" = "Merge changes!";
/* Password Input Messages, Errors and Warning */
"PASSWORD_INPUT_NO_PASSWORD" = "Sin Contraseña";
"PASSWORD_INPUT_ENTER_PASSWORD" = "Ingresar Contraseña";
"PASSWORD_INPUT_REPEAT_PASSWORD" = "Repetir Contraseña";
"WARNING_NO_PASSWORD_OR_KEYFILE" = "Sin contraseña o keyfile";
"ERROR_PASSWORD_MISSMATCH_INVALID_KEYFILE" = "Las contraseñas no coinciden y el keyfile no es válido";
"ERROR_PASSWORD_MISSMATCH" = "Las contraseñas no coinciden";
"ERROR_INVALID_KEYFILE" = "El Keyfile no es válido";
/* Misc */
"DOCUMENT_AUTOTYPE_CORRUPTION_WARNING" = "Por favor ejecuta Corregir Autotype...";
"FILE_OPEN_ERROR" = "Error al abrir el archivo.";

View File

@@ -0,0 +1,15 @@
/* 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 = "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 = "NSBox"; title = "Box"; ObjectID = "vBs-Ga-aq0"; */
"vBs-Ga-aq0.title" = "Box";

View File

@@ -0,0 +1,27 @@
/* Class = "NSMenuItem"; title = "Get"; ObjectID = "142-bE-IMZ"; */
"142-bE-IMZ.title" = "Get";
/* Class = "NSTextFieldCell"; title = "Match"; ObjectID = "9ce-da-syF"; */
"9ce-da-syF.title" = "Match";
/* Class = "NSTextFieldCell"; title = "Key"; ObjectID = "K1t-OZ-ACe"; */
"K1t-OZ-ACe.title" = "Key";
/* Class = "NSButtonCell"; title = "Use"; ObjectID = "Kqx-qm-nMG"; */
"Kqx-qm-nMG.title" = "Use";
/* Class = "NSTextFieldCell"; placeholderString = "Reference"; ObjectID = "dr9-x8-kKk"; */
"dr9-x8-kKk.placeholderString" = "Reference";
/* Class = "NSTextFieldCell"; placeholderString = "Value"; ObjectID = "fNP-ye-2bD"; */
"fNP-ye-2bD.placeholderString" = "Value";
/* Class = "NSTextFieldCell"; title = "Reference String"; ObjectID = "gik-Ha-hRd"; */
"gik-Ha-hRd.title" = "Reference String";
/* Class = "NSTextFieldCell"; title = "Reference"; ObjectID = "r1V-VE-ngy"; */
"r1V-VE-ngy.title" = "Reference";
/* Class = "NSMenuItem"; title = "Matching"; ObjectID = "yT1-XL-k6a"; */
"yT1-XL-k6a.title" = "Matching";

Binary file not shown.

View File

@@ -0,0 +1,2 @@
/* Localized versions of Info.plist keys */