diff --git a/MacPass.xcodeproj/project.pbxproj b/MacPass.xcodeproj/project.pbxproj index 6b8e6ad1..0680f66f 100644 --- a/MacPass.xcodeproj/project.pbxproj +++ b/MacPass.xcodeproj/project.pbxproj @@ -413,6 +413,28 @@ 4C3C4EAD18D7039300153127 /* MPValueTransformerHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPValueTransformerHelper.h; sourceTree = ""; }; 4C3C4EAE18D7039300153127 /* MPValueTransformerHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPValueTransformerHelper.m; sourceTree = ""; }; 4C3FFD9D16DAF60600DF9186 /* ContextBar.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ContextBar.xib; sourceTree = ""; }; + 4C4161021F50333B003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/DatabaseSettingsWindow.strings; sourceTree = ""; }; + 4C4161031F50333B003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/PasswordEditWindow.strings; sourceTree = ""; }; + 4C4161041F50333B003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/GeneralSettings.strings; sourceTree = ""; }; + 4C4161051F50333B003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/IntegrationSettings.strings; sourceTree = ""; }; + 4C4161061F50333B003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/WorkflowSettings.strings; sourceTree = ""; }; + 4C4161071F50333B003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/UpdateSettings.strings; sourceTree = ""; }; + 4C4161081F50333B003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/PluginSettings.strings; sourceTree = ""; }; + 4C4161091F50333B003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InspectorView.strings; sourceTree = ""; }; + 4C41610A1F50333B003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/GroupInspectorView.strings; sourceTree = ""; }; + 4C41610B1F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/EntryInspectorView.strings; sourceTree = ""; }; + 4C41610C1F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/PasswordInputView.strings; sourceTree = ""; }; + 4C41610D1F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/PasswordCreatorView.strings; sourceTree = ""; }; + 4C41610E1F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/IconSelection.strings; sourceTree = ""; }; + 4C41610F1F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/DatePickingView.strings; sourceTree = ""; }; + 4C4161101F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/ReferenceBuilderView.strings; sourceTree = ""; }; + 4C4161111F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/WelcomeWindow.strings; sourceTree = ""; }; + 4C4161121F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/MainMenu.strings; sourceTree = ""; }; + 4C4161131F50333C003BC0AF /* es */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; + 4C4161141F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = es; path = es.lproj/Credits.rtf; sourceTree = ""; }; + 4C4161151F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; + 4C4161161F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/KPKLocalizable.strings; sourceTree = ""; }; + 4C4161171F50333C003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; 4C431BCB16E2A82700700A81 /* MPPasteBoardController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasteBoardController.h; sourceTree = ""; }; 4C431BCC16E2A82700700A81 /* MPPasteBoardController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasteBoardController.m; sourceTree = ""; }; 4C431BCE16E2BAB000700A81 /* OverlayWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = OverlayWindow.xib; sourceTree = ""; }; @@ -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 = ""; @@ -1854,6 +1878,7 @@ FA638D231C39BFCC00B10CC6 /* ru */, 4825CC961C414D58003E37E9 /* it */, 4C840C551D773E6B0081F605 /* pl */, + 4C4161171F50333C003BC0AF /* es */, ); name = InfoPlist.strings; sourceTree = ""; @@ -1868,6 +1893,7 @@ BD6C366619484CF40089EB37 /* nl */, FA638D221C39BFCC00B10CC6 /* ru */, 4825CC951C414D58003E37E9 /* it */, + 4C4161161F50333C003BC0AF /* es */, ); name = KPKLocalizable.strings; sourceTree = ""; @@ -1884,6 +1910,7 @@ FA638D1C1C39BFCC00B10CC6 /* ru */, 4825CC8F1C414D58003E37E9 /* it */, 4C840C521D773E5E0081F605 /* pl */, + 4C41610E1F50333C003BC0AF /* es */, ); name = IconSelection.xib; sourceTree = ""; @@ -1900,6 +1927,7 @@ FA638D111C39BFCB00B10CC6 /* ru */, 4825CC841C414D57003E37E9 /* it */, 4C840C471D773E5D0081F605 /* pl */, + 4C4161041F50333B003BC0AF /* es */, ); name = GeneralSettings.xib; sourceTree = ""; @@ -1916,6 +1944,7 @@ FA638D171C39BFCC00B10CC6 /* ru */, 4825CC8A1C414D57003E37E9 /* it */, 4C840C4D1D773E5E0081F605 /* pl */, + 4C41610C1F50333C003BC0AF /* es */, ); name = PasswordInputView.xib; sourceTree = ""; @@ -1932,6 +1961,7 @@ FA638D191C39BFCC00B10CC6 /* ru */, 4825CC8C1C414D58003E37E9 /* it */, 4C840C4F1D773E5E0081F605 /* pl */, + 4C4161091F50333B003BC0AF /* es */, ); name = InspectorView.xib; sourceTree = ""; @@ -1946,6 +1976,7 @@ BD6C366519484CF40089EB37 /* nl */, FA638D211C39BFCC00B10CC6 /* ru */, 4825CC941C414D58003E37E9 /* it */, + 4C4161151F50333C003BC0AF /* es */, ); name = InfoPlist.strings; sourceTree = ""; @@ -1962,6 +1993,7 @@ FA638D161C39BFCC00B10CC6 /* ru */, 4825CC891C414D57003E37E9 /* it */, 4C840C4C1D773E5E0081F605 /* pl */, + 4C4161121F50333C003BC0AF /* es */, ); name = MainMenu.xib; sourceTree = ""; @@ -1978,6 +2010,7 @@ FA638D101C39BFCB00B10CC6 /* ru */, 4825CC831C414D57003E37E9 /* it */, 4C840C461D773E5D0081F605 /* pl */, + 4C4161111F50333C003BC0AF /* es */, ); name = WelcomeWindow.xib; sourceTree = ""; @@ -1993,6 +2026,7 @@ FA638D1F1C39BFCC00B10CC6 /* ru */, 4825CC921C414D58003E37E9 /* it */, 4C43B02F1E266A3A000CB4D7 /* pl */, + 4C4161131F50333C003BC0AF /* es */, ); name = Localizable.strings; sourceTree = ""; @@ -2008,6 +2042,7 @@ FA638D201C39BFCC00B10CC6 /* ru */, 4825CC931C414D58003E37E9 /* it */, 4C43B0301E266A41000CB4D7 /* pl */, + 4C4161141F50333C003BC0AF /* es */, ); name = Credits.rtf; sourceTree = ""; @@ -2019,6 +2054,7 @@ FA638D1E1C39BFCC00B10CC6 /* ru */, 4825CC911C414D58003E37E9 /* it */, 4C840C541D773E5E0081F605 /* pl */, + 4C4161101F50333C003BC0AF /* es */, ); name = ReferenceBuilderView.xib; sourceTree = ""; @@ -2035,6 +2071,7 @@ FA638D1B1C39BFCC00B10CC6 /* ru */, 4825CC8E1C414D58003E37E9 /* it */, 4C840C511D773E5E0081F605 /* pl */, + 4C41610B1F50333C003BC0AF /* es */, ); name = EntryInspectorView.xib; sourceTree = ""; @@ -2051,6 +2088,7 @@ FA638D1A1C39BFCC00B10CC6 /* ru */, 4825CC8D1C414D58003E37E9 /* it */, 4C840C501D773E5E0081F605 /* pl */, + 4C41610A1F50333B003BC0AF /* es */, ); name = GroupInspectorView.xib; sourceTree = ""; @@ -2067,6 +2105,7 @@ 4825CC851C414D57003E37E9 /* it */, 4C840C481D773E5D0081F605 /* pl */, 60ECAD271F12262400EA9DB3 /* zh-Hans */, + 4C4161051F50333B003BC0AF /* es */, ); name = IntegrationSettings.xib; sourceTree = ""; @@ -2083,6 +2122,7 @@ 4825CC861C414D57003E37E9 /* it */, 4C840C491D773E5D0081F605 /* pl */, 60ECAD251F12253C00EA9DB3 /* zh-Hans */, + 4C4161061F50333B003BC0AF /* es */, ); name = WorkflowSettings.xib; sourceTree = ""; @@ -2099,6 +2139,7 @@ FA638D141C39BFCC00B10CC6 /* ru */, 4825CC871C414D57003E37E9 /* it */, 4C840C4A1D773E5D0081F605 /* pl */, + 4C4161071F50333B003BC0AF /* es */, ); name = UpdateSettings.xib; sourceTree = ""; @@ -2115,6 +2156,7 @@ FA638D1D1C39BFCC00B10CC6 /* ru */, 4825CC901C414D58003E37E9 /* it */, 4C840C531D773E5E0081F605 /* pl */, + 4C41610F1F50333C003BC0AF /* es */, ); name = DatePickingView.xib; sourceTree = ""; @@ -2131,6 +2173,7 @@ FA638D0F1C39BFCB00B10CC6 /* ru */, 4825CC821C414D57003E37E9 /* it */, 4C840C451D773E5D0081F605 /* pl */, + 4C4161031F50333B003BC0AF /* es */, ); name = PasswordEditWindow.xib; sourceTree = ""; @@ -2147,6 +2190,7 @@ FA638D181C39BFCC00B10CC6 /* ru */, 4825CC8B1C414D57003E37E9 /* it */, 4C840C4E1D773E5E0081F605 /* pl */, + 4C41610D1F50333C003BC0AF /* es */, ); name = PasswordCreatorView.xib; sourceTree = ""; @@ -2163,6 +2207,7 @@ FA638D0E1C39BFCB00B10CC6 /* ru */, 4825CC811C414D57003E37E9 /* it */, 4C840C441D773E5D0081F605 /* pl */, + 4C4161021F50333B003BC0AF /* es */, ); name = DatabaseSettingsWindow.xib; sourceTree = ""; diff --git a/MacPass/Base.lproj/GeneralSettings.xib b/MacPass/Base.lproj/GeneralSettings.xib index 187ebbf3..76b59a04 100644 --- a/MacPass/Base.lproj/GeneralSettings.xib +++ b/MacPass/Base.lproj/GeneralSettings.xib @@ -10,6 +10,7 @@ + @@ -168,7 +169,7 @@ - + @@ -182,25 +183,19 @@ - - + + - - + + - - - - - - - + diff --git a/MacPass/MPDocument.m b/MacPass/MPDocument.m index cbe8a511..76934875 100644 --- a/MacPass/MPDocument.m +++ b/MacPass/MPDocument.m @@ -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]; } diff --git a/MacPass/MPGeneralSettingsController.h b/MacPass/MPGeneralSettingsController.h index 8355e88b..1f1de461 100644 --- a/MacPass/MPGeneralSettingsController.h +++ b/MacPass/MPGeneralSettingsController.h @@ -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 diff --git a/MacPass/MPGeneralSettingsController.m b/MacPass/MPGeneralSettingsController.m index 193ee9ff..a0b70192 100644 --- a/MacPass/MPGeneralSettingsController.m +++ b/MacPass/MPGeneralSettingsController.m @@ -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 diff --git a/MacPass/MPSettingsHelper.h b/MacPass/MPSettingsHelper.h index 743ce992..ebd1c39b 100644 --- a/MacPass/MPSettingsHelper.h +++ b/MacPass/MPSettingsHelper.h @@ -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 diff --git a/MacPass/MPSettingsHelper.m b/MacPass/MPSettingsHelper.m index 8f391ee3..491b197f 100644 --- a/MacPass/MPSettingsHelper.m +++ b/MacPass/MPSettingsHelper.m @@ -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 *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]; } diff --git a/MacPass/de.lproj/Localizable.strings b/MacPass/de.lproj/Localizable.strings index 02f10ab1..2c61e5e7 100644 --- a/MacPass/de.lproj/Localizable.strings +++ b/MacPass/de.lproj/Localizable.strings @@ -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"; diff --git a/MacPass/en.lproj/Localizable.strings b/MacPass/en.lproj/Localizable.strings index 9bc189c8..6f0f71ad 100644 --- a/MacPass/en.lproj/Localizable.strings +++ b/MacPass/en.lproj/Localizable.strings @@ -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"; diff --git a/MacPass/sp.lproj/Credits.rtf b/MacPass/es.lproj/Credits.rtf similarity index 100% rename from MacPass/sp.lproj/Credits.rtf rename to MacPass/es.lproj/Credits.rtf diff --git a/MacPass/sp.lproj/DatabaseSettingsWindow.strings b/MacPass/es.lproj/DatabaseSettingsWindow.strings similarity index 100% rename from MacPass/sp.lproj/DatabaseSettingsWindow.strings rename to MacPass/es.lproj/DatabaseSettingsWindow.strings diff --git a/MacPass/sp.lproj/DatePickingView.strings b/MacPass/es.lproj/DatePickingView.strings similarity index 100% rename from MacPass/sp.lproj/DatePickingView.strings rename to MacPass/es.lproj/DatePickingView.strings diff --git a/MacPass/sp.lproj/EntryInspectorView.strings b/MacPass/es.lproj/EntryInspectorView.strings similarity index 100% rename from MacPass/sp.lproj/EntryInspectorView.strings rename to MacPass/es.lproj/EntryInspectorView.strings diff --git a/MacPass/sp.lproj/GeneralSettings.strings b/MacPass/es.lproj/GeneralSettings.strings similarity index 100% rename from MacPass/sp.lproj/GeneralSettings.strings rename to MacPass/es.lproj/GeneralSettings.strings diff --git a/MacPass/sp.lproj/GroupInspectorView.strings b/MacPass/es.lproj/GroupInspectorView.strings similarity index 100% rename from MacPass/sp.lproj/GroupInspectorView.strings rename to MacPass/es.lproj/GroupInspectorView.strings diff --git a/MacPass/sp.lproj/IconSelection.strings b/MacPass/es.lproj/IconSelection.strings similarity index 100% rename from MacPass/sp.lproj/IconSelection.strings rename to MacPass/es.lproj/IconSelection.strings diff --git a/MacPass/sp.lproj/InfoPlist.strings b/MacPass/es.lproj/InfoPlist.strings similarity index 100% rename from MacPass/sp.lproj/InfoPlist.strings rename to MacPass/es.lproj/InfoPlist.strings diff --git a/MacPass/sp.lproj/InspectorView.strings b/MacPass/es.lproj/InspectorView.strings similarity index 100% rename from MacPass/sp.lproj/InspectorView.strings rename to MacPass/es.lproj/InspectorView.strings diff --git a/MacPass/sp.lproj/IntegrationSettings.strings b/MacPass/es.lproj/IntegrationSettings.strings similarity index 100% rename from MacPass/sp.lproj/IntegrationSettings.strings rename to MacPass/es.lproj/IntegrationSettings.strings diff --git a/MacPass/sp.lproj/KPKLocalizable.strings b/MacPass/es.lproj/KPKLocalizable.strings similarity index 100% rename from MacPass/sp.lproj/KPKLocalizable.strings rename to MacPass/es.lproj/KPKLocalizable.strings diff --git a/MacPass/es.lproj/Localizable.strings b/MacPass/es.lproj/Localizable.strings new file mode 100644 index 00000000..f8446bc6 --- /dev/null +++ b/MacPass/es.lproj/Localizable.strings @@ -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."; diff --git a/MacPass/sp.lproj/MainMenu.strings b/MacPass/es.lproj/MainMenu.strings similarity index 100% rename from MacPass/sp.lproj/MainMenu.strings rename to MacPass/es.lproj/MainMenu.strings diff --git a/MacPass/sp.lproj/PasswordCreatorView.strings b/MacPass/es.lproj/PasswordCreatorView.strings similarity index 100% rename from MacPass/sp.lproj/PasswordCreatorView.strings rename to MacPass/es.lproj/PasswordCreatorView.strings diff --git a/MacPass/sp.lproj/PasswordEditWindow.strings b/MacPass/es.lproj/PasswordEditWindow.strings similarity index 100% rename from MacPass/sp.lproj/PasswordEditWindow.strings rename to MacPass/es.lproj/PasswordEditWindow.strings diff --git a/MacPass/sp.lproj/PasswordInputView.strings b/MacPass/es.lproj/PasswordInputView.strings similarity index 100% rename from MacPass/sp.lproj/PasswordInputView.strings rename to MacPass/es.lproj/PasswordInputView.strings diff --git a/MacPass/es.lproj/PluginSettings.strings b/MacPass/es.lproj/PluginSettings.strings new file mode 100644 index 00000000..64b67c39 --- /dev/null +++ b/MacPass/es.lproj/PluginSettings.strings @@ -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"; diff --git a/MacPass/es.lproj/ReferenceBuilderView.strings b/MacPass/es.lproj/ReferenceBuilderView.strings new file mode 100644 index 00000000..ee482019 --- /dev/null +++ b/MacPass/es.lproj/ReferenceBuilderView.strings @@ -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"; diff --git a/MacPass/sp.lproj/UpdateSettings.strings b/MacPass/es.lproj/UpdateSettings.strings similarity index 100% rename from MacPass/sp.lproj/UpdateSettings.strings rename to MacPass/es.lproj/UpdateSettings.strings diff --git a/MacPass/sp.lproj/WelcomeWindow.strings b/MacPass/es.lproj/WelcomeWindow.strings similarity index 100% rename from MacPass/sp.lproj/WelcomeWindow.strings rename to MacPass/es.lproj/WelcomeWindow.strings diff --git a/MacPass/sp.lproj/WorkflowSettings.strings b/MacPass/es.lproj/WorkflowSettings.strings similarity index 100% rename from MacPass/sp.lproj/WorkflowSettings.strings rename to MacPass/es.lproj/WorkflowSettings.strings diff --git a/MacPass/sp.lproj/Localizable.strings b/MacPass/sp.lproj/Localizable.strings deleted file mode 100644 index 4851e90d..00000000 Binary files a/MacPass/sp.lproj/Localizable.strings and /dev/null differ diff --git a/MacPassTests/es.lproj/InfoPlist.strings b/MacPassTests/es.lproj/InfoPlist.strings new file mode 100644 index 00000000..477b28ff --- /dev/null +++ b/MacPassTests/es.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ +