From 85a3c3bcc64e3996f1aef730762eb056a10c1625 Mon Sep 17 00:00:00 2001 From: GRMrGecko Date: Wed, 2 Feb 2011 14:58:24 -0600 Subject: [PATCH] Fixed issue for people who's language is not english, made it localizable, added metadata support so you can filter by metadata, fixed menu bar tooltip, cleaned up strings, and fixed issue where closing the preferences pane or window for events would crash if it's still playing a sound. --- Classes/CocoaShare/MGMAddons.h | 2 +- Classes/CocoaShare/MGMAddons.m | 2 +- Classes/CocoaShare/MGMAutoUpdateField.h | 2 +- Classes/CocoaShare/MGMAutoUpdateField.m | 2 +- Classes/CocoaShare/MGMController.h | 1 + Classes/CocoaShare/MGMController.m | 103 ++- Classes/CocoaShare/MGMFileManager.h | 2 +- Classes/CocoaShare/MGMFileManager.m | 2 +- Classes/CocoaShare/MGMLocalized.h | 16 + Classes/CocoaShare/MGMLocalized.m | 29 + Classes/CocoaShare/MGMMenuItem.h | 2 +- Classes/CocoaShare/MGMMenuItem.m | 2 +- Classes/CocoaShare/MGMPlugInProtocol.h | 2 +- Classes/CocoaShare/MGMWebDav/MGMWebDav.h | 2 +- Classes/CocoaShare/MGMWebDav/MGMWebDav.m | 2 +- .../CocoaShare/MGMWebDav/MGMWebDavAddons.h | 2 +- .../CocoaShare/MGMWebDav/MGMWebDavAddons.m | 2 +- .../CocoaShare/MGMWebDav/MGMWebDavDelete.h | 2 +- .../CocoaShare/MGMWebDav/MGMWebDavDelete.m | 5 +- Classes/CocoaShare/MGMWebDav/MGMWebDavGet.h | 2 +- Classes/CocoaShare/MGMWebDav/MGMWebDavGet.m | 5 +- Classes/CocoaShare/MGMWebDav/MGMWebDavMkCol.h | 2 +- Classes/CocoaShare/MGMWebDav/MGMWebDavMkCol.m | 5 +- .../CocoaShare/MGMWebDav/MGMWebDavOptions.h | 2 +- .../CocoaShare/MGMWebDav/MGMWebDavOptions.m | 5 +- .../CocoaShare/MGMWebDav/MGMWebDavPropFind.h | 2 +- .../CocoaShare/MGMWebDav/MGMWebDavPropFind.m | 5 +- Classes/CocoaShare/MGMWebDav/MGMWebDavPut.h | 2 +- Classes/CocoaShare/MGMWebDav/MGMWebDavPut.m | 5 +- .../CocoaShare/Preferences/MGMAccountPane.h | 2 +- .../CocoaShare/Preferences/MGMAccountPane.m | 6 +- .../Preferences/MGMAutoUploadPane.h | 2 +- .../Preferences/MGMAutoUploadPane.m | 27 +- .../CocoaShare/Preferences/MGMEventsPane.h | 4 +- .../CocoaShare/Preferences/MGMEventsPane.m | 24 +- .../CocoaShare/Preferences/MGMGeneralPane.h | 2 +- .../CocoaShare/Preferences/MGMGeneralPane.m | 4 +- Classes/CocoaShare/main.m | 2 +- Classes/Dropbox/MGMDropboxPlugIn.h | 2 +- Classes/Dropbox/MGMDropboxPlugIn.m | 26 +- Classes/FTP/MGMFTPPlugIn.m | 48 +- Classes/HTTP/MGMHTTPPlugIn.h | 2 +- Classes/HTTP/MGMHTTPPlugIn.m | 26 +- Classes/MobileMe/MGMMobileMePlugIn.h | 2 +- Classes/MobileMe/MGMMobileMePlugIn.m | 24 +- Classes/SFTP/MGMSFTPPlugIn.h | 2 +- Classes/SFTP/MGMSFTPPlugIn.m | 42 +- Classes/WebDav/MGMWebDavPlugIn.h | 2 +- Classes/WebDav/MGMWebDavPlugIn.m | 24 +- Classes/twitpic/MGMTwitpicPlugIn.h | 2 +- Classes/twitpic/MGMTwitpicPlugIn.m | 10 +- Classes/twitpic/MGMTwitpicPostWindow.h | 2 +- Classes/twitpic/MGMTwitpicPostWindow.m | 2 +- CocoaShare.xcodeproj/project.pbxproj | 146 ++- .../TinyGrab.bundle/Contents/MacOS/TinyGrab | Bin 93008 -> 93016 bytes .../English.lproj/TinyGrabAccountPane.nib | Bin 0 -> 7271 bytes .../English.lproj/Localizable.strings | 198 ++++ .../CocoaShare/English.lproj/MainMenu.xib | 869 +----------------- .../English.lproj/AutoUploadPane.xib | 39 +- .../DropboxAccountPane.xib | 0 .../{ => English.lproj}/FTPAccountPane.xib | 0 .../{ => English.lproj}/HTTPAccountPane.xib | 0 .../MobileMeAccountPane.xib | 0 .../{ => English.lproj}/SFTPAccountPane.xib | 0 .../{ => English.lproj}/WebDavAccountPane.xib | 0 .../twitpicAccountPane.xib | 0 .../{ => English.lproj}/twitpicPostWindow.xib | 0 67 files changed, 656 insertions(+), 1102 deletions(-) create mode 100644 Classes/CocoaShare/MGMLocalized.h create mode 100644 Classes/CocoaShare/MGMLocalized.m create mode 100644 PlugIns/TinyGrab.bundle/Contents/Resources/English.lproj/TinyGrabAccountPane.nib create mode 100644 Resources/CocoaShare/English.lproj/Localizable.strings rename Resources/Dropbox/{ => English.lproj}/DropboxAccountPane.xib (100%) rename Resources/FTP/{ => English.lproj}/FTPAccountPane.xib (100%) rename Resources/HTTP/{ => English.lproj}/HTTPAccountPane.xib (100%) rename Resources/MobileMe/{ => English.lproj}/MobileMeAccountPane.xib (100%) rename Resources/SFTP/{ => English.lproj}/SFTPAccountPane.xib (100%) rename Resources/WebDav/{ => English.lproj}/WebDavAccountPane.xib (100%) rename Resources/twitpic/{ => English.lproj}/twitpicAccountPane.xib (100%) rename Resources/twitpic/{ => English.lproj}/twitpicPostWindow.xib (100%) diff --git a/Classes/CocoaShare/MGMAddons.h b/Classes/CocoaShare/MGMAddons.h index 755f2e4..ae22427 100644 --- a/Classes/CocoaShare/MGMAddons.h +++ b/Classes/CocoaShare/MGMAddons.h @@ -2,7 +2,7 @@ // MGMAddons.h // CocoaShare // -// Created by James on 1/22/11. +// Created by Mr. Gecko on 1/22/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/MGMAddons.m b/Classes/CocoaShare/MGMAddons.m index 6cb49b5..a66d608 100644 --- a/Classes/CocoaShare/MGMAddons.m +++ b/Classes/CocoaShare/MGMAddons.m @@ -2,7 +2,7 @@ // MGMAddons.m // CocoaShare // -// Created by James on 1/22/11. +// Created by Mr. Gecko on 1/22/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/MGMAutoUpdateField.h b/Classes/CocoaShare/MGMAutoUpdateField.h index 4448ed2..5410173 100644 --- a/Classes/CocoaShare/MGMAutoUpdateField.h +++ b/Classes/CocoaShare/MGMAutoUpdateField.h @@ -2,7 +2,7 @@ // MGMAutoUpdateField.h // CocoaShare // -// Created by James on 1/17/11. +// Created by Mr. Gecko on 1/17/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/MGMAutoUpdateField.m b/Classes/CocoaShare/MGMAutoUpdateField.m index 4aa6729..4a39995 100644 --- a/Classes/CocoaShare/MGMAutoUpdateField.m +++ b/Classes/CocoaShare/MGMAutoUpdateField.m @@ -2,7 +2,7 @@ // MGMAutoUpdateField.m // CocoaShare // -// Created by James on 1/17/11. +// Created by Mr. Gecko on 1/17/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/MGMController.h b/Classes/CocoaShare/MGMController.h index 7c09515..cfa4d56 100644 --- a/Classes/CocoaShare/MGMController.h +++ b/Classes/CocoaShare/MGMController.h @@ -8,6 +8,7 @@ #import #import "MGMPlugInProtocol.h" +#import "MGMLocalized.h" extern NSString * const MGMDisplay; extern NSString * const MGMStartup; diff --git a/Classes/CocoaShare/MGMController.m b/Classes/CocoaShare/MGMController.m index dcd3db8..f7e1346 100644 --- a/Classes/CocoaShare/MGMController.m +++ b/Classes/CocoaShare/MGMController.m @@ -92,10 +92,10 @@ static MGMController *MGMSharedController; [defaults setInteger:[defaults integerForKey:MGMLaunchCount]+1 forKey:MGMLaunchCount]; if ([defaults integerForKey:MGMLaunchCount]==5) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Donations"]; - [alert setInformativeText:@"Thank you for using CocoaShare. CocoaShare is donation supported software. If you like using it, please consider giving a donation to help with development."]; - [alert addButtonWithTitle:@"Yes"]; - [alert addButtonWithTitle:@"No"]; + [alert setMessageText:[@"Donations" localized]]; + [alert setInformativeText:[@"Thank you for using CocoaShare. CocoaShare is donation supported software. If you like using it, please consider giving a donation to help with development." localized]]; + [alert addButtonWithTitle:[@"Yes" localized]]; + [alert addButtonWithTitle:[@"No" localized]]; int result = [alert runModal]; if (result==1000) [self donate:self]; @@ -267,9 +267,9 @@ static MGMController *MGMSharedController; [menuItem setDelegate:self]; [menuItem setImage:[NSImage imageNamed:@"menuicon"]]; [menuItem setAlternateImage:[NSImage imageNamed:@"menuiconselected"]]; + [menuItem setToolTip:@"CocoaShare"]; statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain]; [statusItem setView:menuItem]; - [statusItem setToolTip:@"CocoaShare"]; } } - (void)removeMenu { @@ -294,10 +294,10 @@ static MGMController *MGMSharedController; if (isHidden) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Restart Required"]; - [alert setInformativeText:@"Inorder to hide the dock, you must restart CocoaShare. Do you want to restart CocoaShare now?"]; - [alert addButtonWithTitle:@"Yes"]; - [alert addButtonWithTitle:@"No"]; + [alert setMessageText:[@"Restart Required" localized]]; + [alert setInformativeText:[@"Inorder to hide the dock, you must restart CocoaShare. Do you want to restart CocoaShare now?" localized]]; + [alert addButtonWithTitle:[@"Yes" localized]]; + [alert addButtonWithTitle:[@"No" localized]]; int result = [alert runModal]; if (result==1000) { //Took from Sparkle. @@ -309,8 +309,8 @@ static MGMController *MGMSharedController; } } else { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Unable to change dock"]; - [alert setInformativeText:[NSString stringWithFormat:@"CocoaShare is unable to %@ the dock due to permissions. To fix this issue, right click on CocoaShare and choose Get Info to make CocoaShare writable.", (isHidden ? @"hide" : @"unhide")]]; + [alert setMessageText:[@"Unable to change dock" localized]]; + [alert setInformativeText:[NSString stringWithFormat:[@"CocoaShare is unable to %@ the dock due to permissions. To fix this issue, right click on CocoaShare and choose Get Info to make CocoaShare writable." localized], (isHidden ? [@"hide" localized] : [@"unhide" localized])]]; [alert runModal]; } if (!isHidden) { @@ -337,8 +337,8 @@ static MGMController *MGMSharedController; if ([manager fileExistsAtPath:[files objectAtIndex:i] isDirectory:&directory]) { if (directory) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Upload Error"]; - [alert setInformativeText:@"Uploading of directories is impossible."]; + [alert setMessageText:[@"Upload Error" localized]]; + [alert setInformativeText:[@"Uploading of directories is impossible." localized]]; [alert runModal]; continue; } @@ -365,7 +365,7 @@ static MGMController *MGMSharedController; NSDictionary *historyItem = [history objectAtIndex:i]; NSMenuItem *item = [[NSMenuItem new] autorelease]; NSDateFormatter *formatter = [[NSDateFormatter new] autorelease]; - [formatter setDateFormat:@"MMMM d, yyyy h:mm:ss a"]; + [formatter setDateFormat:[@"MMMM d, yyyy h:mm:ss a" localized]]; NSString *date = [formatter stringFromDate:[historyItem objectForKey:MGMHDate]]; if (date!=nil) [item setTitle:date]; @@ -378,7 +378,7 @@ static MGMController *MGMSharedController; } } else { NSMenuItem *item = [[NSMenuItem new] autorelease]; - [item setTitle:@"No Upload History"]; + [item setTitle:[@"No Upload History" localized]]; [item setEnabled:NO]; [mainMenu insertItem:item atIndex:splitterIndex]; } @@ -408,8 +408,8 @@ static MGMController *MGMSharedController; [panel setCanChooseDirectories:NO]; [panel setResolvesAliases:YES]; [panel setAllowsMultipleSelection:YES]; - [panel setTitle:@"Choose File(s)"]; - [panel setPrompt:@"Choose"]; + [panel setTitle:[@"Choose File(s)" localized]]; + [panel setPrompt:[@"Choose" localized]]; [self becomeFront:nil]; int returnCode = [panel runModal]; if (returnCode==NSOKButton) { @@ -433,7 +433,7 @@ static MGMController *MGMSharedController; - (IBAction)disableFilters:(id)sender { filtersEnabled = !filtersEnabled; - [disableFilters setTitle:(filtersEnabled ? @"Disable Auto Upload" : @"Enable Auto Upload")]; + [disableFilters setTitle:(filtersEnabled ? [@"Disable Auto Upload" localized] : [@"Enable Auto Upload" localized])]; } - (IBAction)about:(id)sender { [about show]; @@ -492,16 +492,45 @@ static MGMController *MGMSharedController; - (void)subscribedPathChanged:(NSString *)thePath { if (filtersEnabled) { NSFileManager *manager = [NSFileManager defaultManager]; + NSDate *dateLimit = [NSDate dateWithTimeIntervalSinceNow:-2]; NSArray *filtersFound = [self filtersForPath:thePath]; NSArray *files = [manager contentsOfDirectoryAtPath:thePath]; for (int i=0; i<[files count]; i++) { NSString *file = [files objectAtIndex:i]; NSString *fullPath = [thePath stringByAppendingPathComponent:file]; + NSDictionary *attributes = [manager attributesOfItemAtPath:fullPath]; + if ([[attributes objectForKey:NSFileCreationDate] earlierDate:dateLimit]!=dateLimit) + continue; BOOL directory = NO; if ([manager fileExistsAtPath:fullPath isDirectory:&directory] && !directory) { for (int f=0; f<[filtersFound count]; f++) { - if ([file isMatchedByRegex:[[filtersFound objectAtIndex:f] objectForKey:MGMFFilter]]) - [self addPathToUploads:fullPath isAutomatic:YES]; + NSString *filter = [[filtersFound objectAtIndex:f] objectForKey:MGMFFilter]; + if ([filter hasPrefix:@"MD:"]) { + if ([filter hasPrefix:@"MD: "]) + filter = [filter substringFromIndex:4]; + else + filter = [filter substringFromIndex:3]; + + MDItemRef metadata = MDItemCreate(kCFAllocatorDefault, (CFStringRef)fullPath); + if (metadata!=NULL) { + NSArray *items = (NSArray *)MDItemCopyAttributeNames(metadata); + for (int m=0; m<[items count]; m++) { + id item = (id)MDItemCopyAttribute(metadata, (CFStringRef)[items objectAtIndex:m]); + if ([[items objectAtIndex:m] isMatchedByRegex:filter]) + [self addPathToUploads:fullPath isAutomatic:YES]; + else if ([item isKindOfClass:[NSString class]] && [item isMatchedByRegex:filter]) + [self addPathToUploads:fullPath isAutomatic:YES]; + CFRelease((CFTypeRef)item); + } + CFRelease((CFArrayRef)items); + CFRelease(metadata); + } else { + NSLog(@"Unable to get metadata of %@", fullPath); + } + } else { + if ([file isMatchedByRegex:filter]) + [self addPathToUploads:fullPath isAutomatic:YES]; + } } } } @@ -571,20 +600,20 @@ static MGMController *MGMSharedController; NSString *description = nil; NSString *notificationName = nil; if (theEvent==MGMEUploading) { - title = @"Uploading File"; - description = [NSString stringWithFormat:@"Uploading %@", [[thePath lastPathComponent] stringByDeletingPathExtension]]; + title = [@"Uploading File" localized]; + description = [NSString stringWithFormat:[@"Uploading %@" localized], [[thePath lastPathComponent] stringByDeletingPathExtension]]; notificationName = @"UploadingFile"; } else if (theEvent==MGMEUploadingAutomatic) { - title = @"Automatically Uploading File"; - description = [NSString stringWithFormat:@"Uploading %@", [[thePath lastPathComponent] stringByDeletingPathExtension]]; + title = [@"Automatically Uploading File" localized]; + description = [NSString stringWithFormat:[@"Uploading %@" localized], [[thePath lastPathComponent] stringByDeletingPathExtension]]; notificationName = @"UploadingFileAutomatically"; } else if (theEvent==MGMEUploaded) { - title = @"Uploaded File"; - description = [NSString stringWithFormat:@"Uploaded %@ to %@", [[thePath lastPathComponent] stringByDeletingPathExtension], theURL]; + title = [@"Uploaded File" localized]; + description = [NSString stringWithFormat:[@"Uploaded %@ to %@" localized], [[thePath lastPathComponent] stringByDeletingPathExtension], theURL]; notificationName = @"UploadedFile"; } else if (theEvent==MGMEUploadedAutomatic) { - title = @"Automatically Uploaded File"; - description = [NSString stringWithFormat:@"Uploaded %@ to %@", [[thePath lastPathComponent] stringByDeletingPathExtension], theURL]; + title = [@"Automatically Uploaded File" localized]; + description = [NSString stringWithFormat:[@"Uploaded %@ to %@" localized], [[thePath lastPathComponent] stringByDeletingPathExtension], theURL]; notificationName = @"UploadedFileAutomatically"; } [GrowlApplicationBridge notifyWithTitle:title description:description notificationName:notificationName iconData:[[[NSApplication sharedApplication] applicationIconImage] TIFFRepresentation] priority:0 isSticky:NO clickContext:nil]; @@ -610,8 +639,8 @@ static MGMController *MGMSharedController; if ([currentPlugIn respondsToSelector:@selector(allowedExtensions)]) { if (![[currentPlugIn allowedExtensions] containsObject:[[thePath pathExtension] lowercaseString]]) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Upload Error"]; - [alert setInformativeText:@"The current PlugIn does not support this file format."]; + [alert setMessageText:[@"Upload Error" localized]]; + [alert setInformativeText:[@"The current PlugIn does not support this file format." localized]]; [alert runModal]; return; } @@ -625,15 +654,15 @@ static MGMController *MGMSharedController; if ([uploads count]>0) { if (currentPlugIn==nil) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Upload Error"]; - [alert setInformativeText:@"No PlugIns found. You must have at least 1 PlugIn to upload a file."]; + [alert setMessageText:[@"Upload Error" localized]]; + [alert setInformativeText:[@"No PlugIns found. You must have at least 1 PlugIn to upload a file." localized]]; [alert runModal]; [uploads removeAllObjects]; return; } else if (![currentPlugIn respondsToSelector:@selector(sendFileAtPath:withName:)]) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Upload Error"]; - [alert setInformativeText:@"The current PlugIn doesn't support uploading."]; + [alert setMessageText:[@"Upload Error" localized]]; + [alert setInformativeText:[@"The current PlugIn doesn't support uploading." localized]]; [alert runModal]; [uploads removeAllObjects]; return; @@ -661,11 +690,11 @@ static MGMController *MGMSharedController; NSDictionary *upload = [self uploadForPath:thePath]; if (upload!=nil) { if ([[NSUserDefaults standardUserDefaults] boolForKey:MGMGrowlErrors]) { - [GrowlApplicationBridge notifyWithTitle:@"Unable to upload" description:[NSString stringWithFormat:@"%@: %@", [[upload objectForKey:MGMUPath] lastPathComponent], [theError localizedDescription]] notificationName:@"UploadError" iconData:[[[NSApplication sharedApplication] applicationIconImage] TIFFRepresentation] priority:1 isSticky:NO clickContext:nil]; + [GrowlApplicationBridge notifyWithTitle:[@"Unable to upload" localized] description:[NSString stringWithFormat:@"%@: %@", [[upload objectForKey:MGMUPath] lastPathComponent], [theError localizedDescription]] notificationName:@"UploadError" iconData:[[[NSApplication sharedApplication] applicationIconImage] TIFFRepresentation] priority:1 isSticky:NO clickContext:nil]; } else { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Upload Error"]; - [alert setInformativeText:[NSString stringWithFormat:@"Unable to upload %@: %@", [[upload objectForKey:MGMUPath] lastPathComponent], [theError localizedDescription]]]; + [alert setMessageText:[@"Upload Error" localized]]; + [alert setInformativeText:[NSString stringWithFormat:[@"Unable to upload %@: %@" localized], [[upload objectForKey:MGMUPath] lastPathComponent], [theError localizedDescription]]]; [alert runModal]; } [uploads removeObject:upload]; diff --git a/Classes/CocoaShare/MGMFileManager.h b/Classes/CocoaShare/MGMFileManager.h index d6751c8..4799608 100644 --- a/Classes/CocoaShare/MGMFileManager.h +++ b/Classes/CocoaShare/MGMFileManager.h @@ -2,7 +2,7 @@ // MGMFileManager.h // CocoaShare // -// Created by James on 1/22/11. +// Created by Mr. Gecko on 1/22/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/MGMFileManager.m b/Classes/CocoaShare/MGMFileManager.m index 3b78efc..6493eac 100644 --- a/Classes/CocoaShare/MGMFileManager.m +++ b/Classes/CocoaShare/MGMFileManager.m @@ -3,7 +3,7 @@ // MGMFileManager.m // CocoaShare // -// Created by James on 1/22/11. +// Created by Mr. Gecko on 1/22/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/MGMLocalized.h b/Classes/CocoaShare/MGMLocalized.h new file mode 100644 index 0000000..0d79de1 --- /dev/null +++ b/Classes/CocoaShare/MGMLocalized.h @@ -0,0 +1,16 @@ +// +// MGMLocalized.h +// CocoaShare +// +// Created by Mr. Gecko on 2/2/11. +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// + +#import + +@interface NSString (MGMLocalized) +- (NSString *)localized; +- (NSString *)localizedInTable:(NSString *)theTable; +- (NSString *)localizedFor:(id)sender; +- (NSString *)localizedFor:(id)sender inTable:(NSString *)theTable; +@end \ No newline at end of file diff --git a/Classes/CocoaShare/MGMLocalized.m b/Classes/CocoaShare/MGMLocalized.m new file mode 100644 index 0000000..3a1d6a2 --- /dev/null +++ b/Classes/CocoaShare/MGMLocalized.m @@ -0,0 +1,29 @@ +// +// MGMLocalized.m +// CocoaShare +// +// Created by Mr. Gecko on 2/2/11. +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// + +#import "MGMLocalized.h" + +@implementation NSString (MGMLocalized) +- (NSString *)localized { + return [self localizedFor:nil inTable:nil]; +} +- (NSString *)localizedInTable:(NSString *)theTable { + return [self localizedFor:nil inTable:theTable]; +} +- (NSString *)localizedFor:(id)sender { + return [self localizedFor:sender inTable:nil]; +} +- (NSString *)localizedFor:(id)sender inTable:(NSString *)theTable { + NSString *localized = nil; + if (sender!=nil) + localized = [[NSBundle bundleForClass:[sender class]] localizedStringForKey:self value:@"" table:theTable]; + if ([localized isEqual:@""] || localized==nil) + localized = [[NSBundle mainBundle] localizedStringForKey:self value:@"" table:theTable]; + return localized; +} +@end \ No newline at end of file diff --git a/Classes/CocoaShare/MGMMenuItem.h b/Classes/CocoaShare/MGMMenuItem.h index 62ce234..c309c2e 100644 --- a/Classes/CocoaShare/MGMMenuItem.h +++ b/Classes/CocoaShare/MGMMenuItem.h @@ -2,7 +2,7 @@ // MGMMenuItem.h // CocoaShare // -// Created by James on 1/16/11. +// Created by Mr. Gecko on 1/16/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/MGMMenuItem.m b/Classes/CocoaShare/MGMMenuItem.m index ddcf111..d01ad57 100644 --- a/Classes/CocoaShare/MGMMenuItem.m +++ b/Classes/CocoaShare/MGMMenuItem.m @@ -2,7 +2,7 @@ // MGMMenuItem.m // CocoaShare // -// Created by James on 1/16/11. +// Created by Mr. Gecko on 1/16/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/MGMPlugInProtocol.h b/Classes/CocoaShare/MGMPlugInProtocol.h index 7d0d2af..8cfa7f6 100644 --- a/Classes/CocoaShare/MGMPlugInProtocol.h +++ b/Classes/CocoaShare/MGMPlugInProtocol.h @@ -2,7 +2,7 @@ // MGMPlugInProtocol.h // CocoaShare // -// Created by James on 1/18/11. +// Created by Mr. Gecko on 1/18/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/MGMWebDav/MGMWebDav.h b/Classes/CocoaShare/MGMWebDav/MGMWebDav.h index f47cc8a..f206df6 100644 --- a/Classes/CocoaShare/MGMWebDav/MGMWebDav.h +++ b/Classes/CocoaShare/MGMWebDav/MGMWebDav.h @@ -2,7 +2,7 @@ // MGMWebDav.h // CocoaShare // -// Created by James on 1/28/11. +// Created by Mr. Gecko on 1/28/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/MGMWebDav/MGMWebDav.m b/Classes/CocoaShare/MGMWebDav/MGMWebDav.m index b3d4489..d5ec4cd 100644 --- a/Classes/CocoaShare/MGMWebDav/MGMWebDav.m +++ b/Classes/CocoaShare/MGMWebDav/MGMWebDav.m @@ -2,7 +2,7 @@ // MGMWebDav.m // CocoaShare // -// Created by James on 1/28/11. +// Created by Mr. Gecko on 1/28/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/MGMWebDav/MGMWebDavAddons.h b/Classes/CocoaShare/MGMWebDav/MGMWebDavAddons.h index 224d82c..8dde128 100644 --- a/Classes/CocoaShare/MGMWebDav/MGMWebDavAddons.h +++ b/Classes/CocoaShare/MGMWebDav/MGMWebDavAddons.h @@ -2,7 +2,7 @@ // MGMWebDavAddons.h // CocoaShare // -// Created by James on 1/28/11. +// Created by Mr. Gecko on 1/28/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/MGMWebDav/MGMWebDavAddons.m b/Classes/CocoaShare/MGMWebDav/MGMWebDavAddons.m index 5242ba8..71337a2 100644 --- a/Classes/CocoaShare/MGMWebDav/MGMWebDavAddons.m +++ b/Classes/CocoaShare/MGMWebDav/MGMWebDavAddons.m @@ -2,7 +2,7 @@ // MGMWebDavAddons.m // CocoaShare // -// Created by James on 1/28/11. +// Created by Mr. Gecko on 1/28/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/MGMWebDav/MGMWebDavDelete.h b/Classes/CocoaShare/MGMWebDav/MGMWebDavDelete.h index 524bc70..9ff10e8 100644 --- a/Classes/CocoaShare/MGMWebDav/MGMWebDavDelete.h +++ b/Classes/CocoaShare/MGMWebDav/MGMWebDavDelete.h @@ -2,7 +2,7 @@ // MGMWebDavDelete.h // CocoaShare // -// Created by James on 1/29/11. +// Created by Mr. Gecko on 1/29/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/MGMWebDav/MGMWebDavDelete.m b/Classes/CocoaShare/MGMWebDav/MGMWebDavDelete.m index ada1d7a..987656d 100644 --- a/Classes/CocoaShare/MGMWebDav/MGMWebDavDelete.m +++ b/Classes/CocoaShare/MGMWebDav/MGMWebDavDelete.m @@ -2,12 +2,13 @@ // MGMWebDavDelete.m // CocoaShare // -// Created by James on 1/29/11. +// Created by Mr. Gecko on 1/29/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // #import "MGMWebDavDelete.h" #import "MGMWebDav.h" +#import "MGMLocalized.h" NSString * const MGMWebDavMDELETE = @"DELETE"; @@ -74,7 +75,7 @@ NSString * const MGMWebDavMDELETE = @"DELETE"; if ([response statusCode]==204) { if ([[self delegate] respondsToSelector:@selector(webDav:deleted:)]) [[self delegate] webDav:webDav deleted:self]; } else { - NSString *description = [NSString stringWithFormat:@"The response was returned as %@ and not %@.", [NSHTTPURLResponse localizedStringForStatusCode:[response statusCode]], [NSHTTPURLResponse localizedStringForStatusCode:204]]; + NSString *description = [NSString stringWithFormat:[@"The response was returned as %@ and not %@." localized], [NSHTTPURLResponse localizedStringForStatusCode:[response statusCode]], [NSHTTPURLResponse localizedStringForStatusCode:204]]; NSError *error = [NSError errorWithDomain:MGMWebDavErrorDomain code:[response statusCode] userInfo:[NSDictionary dictionaryWithObject:description forKey:NSLocalizedDescriptionKey]]; if ([[self delegate] respondsToSelector:@selector(webDav:error:deleting:)]) [[self delegate] webDav:webDav error:error deleting:self]; } diff --git a/Classes/CocoaShare/MGMWebDav/MGMWebDavGet.h b/Classes/CocoaShare/MGMWebDav/MGMWebDavGet.h index df57ad2..1c12936 100644 --- a/Classes/CocoaShare/MGMWebDav/MGMWebDavGet.h +++ b/Classes/CocoaShare/MGMWebDav/MGMWebDavGet.h @@ -2,7 +2,7 @@ // MGMWebDavGet.h // CocoaShare // -// Created by James on 1/29/11. +// Created by Mr. Gecko on 1/29/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/MGMWebDav/MGMWebDavGet.m b/Classes/CocoaShare/MGMWebDav/MGMWebDavGet.m index f5caacf..d282cdc 100644 --- a/Classes/CocoaShare/MGMWebDav/MGMWebDavGet.m +++ b/Classes/CocoaShare/MGMWebDav/MGMWebDavGet.m @@ -2,12 +2,13 @@ // MGMWebDavGet.m // CocoaShare // -// Created by James on 1/29/11. +// Created by Mr. Gecko on 1/29/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // #import "MGMWebDavGet.h" #import "MGMWebDav.h" +#import "MGMLocalized.h" NSString * const MGMWebDavMGET = @"GET"; @@ -94,7 +95,7 @@ NSString * const MGMWebDavMGET = @"GET"; [fileHandle closeFile]; [fileHandle release]; fileHandle = nil; - NSString *description = [NSString stringWithFormat:@"The response was returned as %@ and not %@.", [NSHTTPURLResponse localizedStringForStatusCode:[response statusCode]], [NSHTTPURLResponse localizedStringForStatusCode:200]]; + NSString *description = [NSString stringWithFormat:[@"The response was returned as %@ and not %@." localized], [NSHTTPURLResponse localizedStringForStatusCode:[response statusCode]], [NSHTTPURLResponse localizedStringForStatusCode:200]]; NSError *error = [NSError errorWithDomain:MGMWebDavErrorDomain code:[response statusCode] userInfo:[NSDictionary dictionaryWithObject:description forKey:NSLocalizedDescriptionKey]]; if ([[self delegate] respondsToSelector:@selector(webDav:error:getting:)]) [[self delegate] webDav:webDav error:error getting:self]; [webDav cancelHandler:self]; diff --git a/Classes/CocoaShare/MGMWebDav/MGMWebDavMkCol.h b/Classes/CocoaShare/MGMWebDav/MGMWebDavMkCol.h index 0d8feff..153bd7e 100644 --- a/Classes/CocoaShare/MGMWebDav/MGMWebDavMkCol.h +++ b/Classes/CocoaShare/MGMWebDav/MGMWebDavMkCol.h @@ -2,7 +2,7 @@ // MGMWebDavMkCol.h // CocoaShare // -// Created by James on 1/29/11. +// Created by Mr. Gecko on 1/29/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/MGMWebDav/MGMWebDavMkCol.m b/Classes/CocoaShare/MGMWebDav/MGMWebDavMkCol.m index a9b849c..2971202 100644 --- a/Classes/CocoaShare/MGMWebDav/MGMWebDavMkCol.m +++ b/Classes/CocoaShare/MGMWebDav/MGMWebDavMkCol.m @@ -2,12 +2,13 @@ // MGMWebDavMkCol.m // CocoaShare // -// Created by James on 1/29/11. +// Created by Mr. Gecko on 1/29/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // #import "MGMWebDavMkCol.h" #import "MGMWebDav.h" +#import "MGMLocalized.h" NSString * const MGMWebDavMMKCOL = @"MKCOL"; @@ -74,7 +75,7 @@ NSString * const MGMWebDavMMKCOL = @"MKCOL"; if ([response statusCode]==201) { if ([[self delegate] respondsToSelector:@selector(webDav:mkCol:)]) [[self delegate] webDav:webDav mkCol:self]; } else { - NSString *description = [NSString stringWithFormat:@"The response was returned as %@ and not %@.", [NSHTTPURLResponse localizedStringForStatusCode:[response statusCode]], [NSHTTPURLResponse localizedStringForStatusCode:201]]; + NSString *description = [NSString stringWithFormat:[@"The response was returned as %@ and not %@." localized], [NSHTTPURLResponse localizedStringForStatusCode:[response statusCode]], [NSHTTPURLResponse localizedStringForStatusCode:201]]; NSError *error = [NSError errorWithDomain:MGMWebDavErrorDomain code:[response statusCode] userInfo:[NSDictionary dictionaryWithObject:description forKey:NSLocalizedDescriptionKey]]; if ([[self delegate] respondsToSelector:@selector(webDav:error:mkCol:)]) [[self delegate] webDav:webDav error:error mkCol:self]; } diff --git a/Classes/CocoaShare/MGMWebDav/MGMWebDavOptions.h b/Classes/CocoaShare/MGMWebDav/MGMWebDavOptions.h index 9a563d1..e9d9217 100644 --- a/Classes/CocoaShare/MGMWebDav/MGMWebDavOptions.h +++ b/Classes/CocoaShare/MGMWebDav/MGMWebDavOptions.h @@ -2,7 +2,7 @@ // MGMWebDavOptions.h // CocoaShare // -// Created by James on 1/28/11. +// Created by Mr. Gecko on 1/28/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/MGMWebDav/MGMWebDavOptions.m b/Classes/CocoaShare/MGMWebDav/MGMWebDavOptions.m index f53e28f..e5087ec 100644 --- a/Classes/CocoaShare/MGMWebDav/MGMWebDavOptions.m +++ b/Classes/CocoaShare/MGMWebDav/MGMWebDavOptions.m @@ -2,12 +2,13 @@ // MGMWebDavOptions.m // CocoaShare // -// Created by James on 1/28/11. +// Created by Mr. Gecko on 1/28/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // #import "MGMWebDavOptions.h" #import "MGMWebDav.h" +#import "MGMLocalized.h" NSString * const MGMWebDavMOPTIONS = @"OPTIONS"; @@ -74,7 +75,7 @@ NSString * const MGMWebDavMOPTIONS = @"OPTIONS"; if ([[theResponse allHeaderFields] objectForKey:@"Dav"]!=nil) { if ([[self delegate] respondsToSelector:@selector(webDav:receivedOptions:)]) [[self delegate] webDav:webDav receivedOptions:self]; } else { - NSError *error = [NSError errorWithDomain:MGMWebDavErrorDomain code:1 userInfo:[NSDictionary dictionaryWithObject:@"The HTTP server does not have WebDav enabled in this directory." forKey:NSLocalizedDescriptionKey]]; + NSError *error = [NSError errorWithDomain:MGMWebDavErrorDomain code:1 userInfo:[NSDictionary dictionaryWithObject:[@"The HTTP server does not have WebDav enabled in this directory." localized] forKey:NSLocalizedDescriptionKey]]; if ([[self delegate] respondsToSelector:@selector(webDav:error:recevingOptions:)]) [[self delegate] webDav:webDav error:error recevingOptions:self]; } } diff --git a/Classes/CocoaShare/MGMWebDav/MGMWebDavPropFind.h b/Classes/CocoaShare/MGMWebDav/MGMWebDavPropFind.h index cb3944c..026c84c 100644 --- a/Classes/CocoaShare/MGMWebDav/MGMWebDavPropFind.h +++ b/Classes/CocoaShare/MGMWebDav/MGMWebDavPropFind.h @@ -2,7 +2,7 @@ // MGMWebDavPropFind.h // CocoaShare // -// Created by James on 1/28/11. +// Created by Mr. Gecko on 1/28/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/MGMWebDav/MGMWebDavPropFind.m b/Classes/CocoaShare/MGMWebDav/MGMWebDavPropFind.m index 84faea7..56d1718 100644 --- a/Classes/CocoaShare/MGMWebDav/MGMWebDavPropFind.m +++ b/Classes/CocoaShare/MGMWebDav/MGMWebDavPropFind.m @@ -2,12 +2,13 @@ // MGMWebDavPropFind.m // CocoaShare // -// Created by James on 1/28/11. +// Created by Mr. Gecko on 1/28/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // #import "MGMWebDavPropFind.h" #import "MGMWebDav.h" +#import "MGMLocalized.h" NSString * const MGMWebDavMPROPFIND = @"PROPFIND"; @@ -141,7 +142,7 @@ NSString * const MGMWebDavPRFile = @"file"; - (void)didReceiveResponse:(NSHTTPURLResponse *)theResponse { response = [theResponse retain]; if ([response statusCode]!=207) { - NSString *description = [NSString stringWithFormat:@"The response was returned as %@ and not %@.", [NSHTTPURLResponse localizedStringForStatusCode:[response statusCode]], [NSHTTPURLResponse localizedStringForStatusCode:207]]; + NSString *description = [NSString stringWithFormat:[@"The response was returned as %@ and not %@." localized], [NSHTTPURLResponse localizedStringForStatusCode:[response statusCode]], [NSHTTPURLResponse localizedStringForStatusCode:207]]; NSError *error = [NSError errorWithDomain:MGMWebDavErrorDomain code:[response statusCode] userInfo:[NSDictionary dictionaryWithObject:description forKey:NSLocalizedDescriptionKey]]; if ([[self delegate] respondsToSelector:@selector(webDav:error:recevingProperties:)]) [[self delegate] webDav:webDav error:error recevingProperties:self]; [webDav cancelHandler:self]; diff --git a/Classes/CocoaShare/MGMWebDav/MGMWebDavPut.h b/Classes/CocoaShare/MGMWebDav/MGMWebDavPut.h index 6041958..69d2da4 100644 --- a/Classes/CocoaShare/MGMWebDav/MGMWebDavPut.h +++ b/Classes/CocoaShare/MGMWebDav/MGMWebDavPut.h @@ -2,7 +2,7 @@ // MGMWebDavPut.h // CocoaShare // -// Created by James on 1/29/11. +// Created by Mr. Gecko on 1/29/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/MGMWebDav/MGMWebDavPut.m b/Classes/CocoaShare/MGMWebDav/MGMWebDavPut.m index 3abc0eb..0e8079a 100644 --- a/Classes/CocoaShare/MGMWebDav/MGMWebDavPut.m +++ b/Classes/CocoaShare/MGMWebDav/MGMWebDavPut.m @@ -2,12 +2,13 @@ // MGMWebDavPut.m // CocoaShare // -// Created by James on 1/29/11. +// Created by Mr. Gecko on 1/29/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // #import "MGMWebDavPut.h" #import "MGMWebDav.h" +#import "MGMLocalized.h" NSString * const MGMWebDavMPUT = @"PUT"; @@ -87,7 +88,7 @@ NSString * const MGMWebDavMPUT = @"PUT"; if ([response statusCode]==201 || [response statusCode]==204) { if ([[self delegate] respondsToSelector:@selector(webDav:successfullyPut:)]) [[self delegate] webDav:webDav successfullyPut:self]; } else { - NSString *description = [NSString stringWithFormat:@"The response was returned as %@ and not %@.", [NSHTTPURLResponse localizedStringForStatusCode:[response statusCode]], [NSHTTPURLResponse localizedStringForStatusCode:201]]; + NSString *description = [NSString stringWithFormat:[@"The response was returned as %@ and not %@." localized], [NSHTTPURLResponse localizedStringForStatusCode:[response statusCode]], [NSHTTPURLResponse localizedStringForStatusCode:201]]; NSError *error = [NSError errorWithDomain:MGMWebDavErrorDomain code:[response statusCode] userInfo:[NSDictionary dictionaryWithObject:description forKey:NSLocalizedDescriptionKey]]; if ([[self delegate] respondsToSelector:@selector(webDav:error:putting:)]) [[self delegate] webDav:webDav error:error putting:self]; } diff --git a/Classes/CocoaShare/Preferences/MGMAccountPane.h b/Classes/CocoaShare/Preferences/MGMAccountPane.h index 092c439..64b4ce1 100644 --- a/Classes/CocoaShare/Preferences/MGMAccountPane.h +++ b/Classes/CocoaShare/Preferences/MGMAccountPane.h @@ -2,7 +2,7 @@ // MGMAccountPane.h // CocoaShare // -// Created by James on 1/15/11. +// Created by Mr. Gecko on 1/15/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/Preferences/MGMAccountPane.m b/Classes/CocoaShare/Preferences/MGMAccountPane.m index 58332db..0777ba3 100644 --- a/Classes/CocoaShare/Preferences/MGMAccountPane.m +++ b/Classes/CocoaShare/Preferences/MGMAccountPane.m @@ -2,7 +2,7 @@ // MGMAccountPane.m // CocoaShare // -// Created by James on 1/15/11. +// Created by Mr. Gecko on 1/15/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // @@ -19,7 +19,7 @@ NSArray *accountPlugIns = [controller accountPlugIns]; for (int i=0; i<[accountPlugIns count]; i++) { id plugIn = [accountPlugIns objectAtIndex:i]; - NSString *name = ([plugIn respondsToSelector:@selector(plugInName)] ? [plugIn plugInName] : @"Unkown name"); + NSString *name = ([plugIn respondsToSelector:@selector(plugInName)] ? [plugIn plugInName] : [@"Unkown name" localized]); [typePopUp addItemWithTitle:name]; } [typePopUp selectItemAtIndex:[controller currentPlugInIndex]]; @@ -43,7 +43,7 @@ [theItem setImage:[NSImage imageNamed:@"Account"]]; } + (NSString *)title { - return @"Account"; + return [@"Account" localized]; } - (NSView *)preferencesView { return view; diff --git a/Classes/CocoaShare/Preferences/MGMAutoUploadPane.h b/Classes/CocoaShare/Preferences/MGMAutoUploadPane.h index cc4788c..2299a25 100644 --- a/Classes/CocoaShare/Preferences/MGMAutoUploadPane.h +++ b/Classes/CocoaShare/Preferences/MGMAutoUploadPane.h @@ -2,7 +2,7 @@ // MGMAutoUploadPane.h // CocoaShare // -// Created by James on 1/15/11. +// Created by Mr. Gecko on 1/15/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/Preferences/MGMAutoUploadPane.m b/Classes/CocoaShare/Preferences/MGMAutoUploadPane.m index 10c6778..6557a33 100644 --- a/Classes/CocoaShare/Preferences/MGMAutoUploadPane.m +++ b/Classes/CocoaShare/Preferences/MGMAutoUploadPane.m @@ -2,13 +2,14 @@ // MGMAutoUploadPane.m // CocoaShare // -// Created by James on 1/15/11. +// Created by Mr. Gecko on 1/15/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // #import "MGMAutoUploadPane.h" #import "MGMController.h" #import "RegexKitLite.h" +#import @implementation MGMAutoUploadPane - (id)initWithPreferences:(MGMPreferences *)thePreferences { @@ -34,7 +35,7 @@ [theItem setImage:[NSImage imageNamed:@"AutoUpload"]]; } + (NSString *)title { - return @"Auto Upload"; + return [@"Auto Upload" localized]; } - (NSView *)preferencesView { return view; @@ -86,7 +87,12 @@ [NSThread detachNewThreadSelector:@selector(saveFilters) toTarget:controller withObject:nil]; } - (IBAction)addScreenshotFilter:(id)sender { - [[controller filters] addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"~/Desktop", MGMFPath, @"(?i)Screen shot .+ at .+\\.(?:bmp|gif|jpg|pdf|pict|png|sgi|tga|tif|tiff)\\z|Picture [0-9]+\\.(?:bmp|gif|jpg|pdf|pict|png|sgi|tga|tif|tiff)\\z", MGMFFilter, nil]]; + NSString *filter = nil; + if ([[MGMSystemInfo info] isAfterLeopard]) + filter = @"MD:(?i)isScreenCapture\\z"; + else + filter = [@"(?i)Picture [0-9]+\\.(?:bmp|gif|jpg|pdf|pict|png|sgi|tga|tif|tiff)\\z" localized]; + [[controller filters] addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"~/Desktop", MGMFPath, filter, MGMFFilter, nil]]; [filtersTable reloadData]; int index = [[controller filters] count]-1; [filtersTable selectRowIndexes:[NSIndexSet indexSetWithIndex:index] byExtendingSelection:NO]; @@ -107,8 +113,8 @@ [panel setCanChooseDirectories:YES]; [panel setResolvesAliases:YES]; [panel setAllowsMultipleSelection:NO]; - [panel setTitle:@"Choose Folder"]; - [panel setPrompt:@"Choose"]; + [panel setTitle:[@"Choose Folder" localized]]; + [panel setPrompt:[@"Choose" localized]]; int returnCode = [panel runModal]; if (returnCode==NSOKButton) { NSString *path = [[[panel URLs] objectAtIndex:0] path]; @@ -139,7 +145,14 @@ [self test:self]; } - (IBAction)test:(id)sender { - BOOL result = [[testField stringValue] isMatchedByRegex:[filterField stringValue]]; - [testStatusField setStringValue:(result ? @"Match" : @"No Match")]; + NSString *filter = [filterField stringValue]; + if ([filter hasPrefix:@"MD:"]) { + if ([filter hasPrefix:@"MD: "]) + filter = [filter substringFromIndex:4]; + else + filter = [filter substringFromIndex:3]; + } + BOOL result = [[testField stringValue] isMatchedByRegex:filter]; + [testStatusField setStringValue:(result ? [@"Match" localized] : [@"No Match" localized])]; } @end \ No newline at end of file diff --git a/Classes/CocoaShare/Preferences/MGMEventsPane.h b/Classes/CocoaShare/Preferences/MGMEventsPane.h index ff22225..148032b 100644 --- a/Classes/CocoaShare/Preferences/MGMEventsPane.h +++ b/Classes/CocoaShare/Preferences/MGMEventsPane.h @@ -2,7 +2,7 @@ // MGMEventsPane.h // CocoaShare // -// Created by James on 1/15/11. +// Created by Mr. Gecko on 1/15/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // @@ -17,6 +17,8 @@ IBOutlet NSButton *moveToChooseButton; IBOutlet NSMatrix *deleteMatrix; IBOutlet NSButton *growlButton; + + NSSound *sound; } - (id)initWithPreferences:(MGMPreferences *)thePreferences; + (void)setUpToolbarItem:(NSToolbarItem *)theItem; diff --git a/Classes/CocoaShare/Preferences/MGMEventsPane.m b/Classes/CocoaShare/Preferences/MGMEventsPane.m index f4110eb..a91d671 100644 --- a/Classes/CocoaShare/Preferences/MGMEventsPane.m +++ b/Classes/CocoaShare/Preferences/MGMEventsPane.m @@ -2,7 +2,7 @@ // MGMEventsPane.m // CocoaShare // -// Created by James on 1/15/11. +// Created by Mr. Gecko on 1/15/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // @@ -19,7 +19,7 @@ NSArray *sounds = [[self sounds] retain]; NSMenu *soundsMenu = [[NSMenu new] autorelease]; NSMenuItem *noneMenu = [[NSMenuItem new] autorelease]; - [noneMenu setTitle:@"No Sound"]; + [noneMenu setTitle:[@"No Sound" localized]]; [soundsMenu addItem:noneMenu]; [soundsMenu addItem:[NSMenuItem separatorItem]]; int selectedPath = -1; @@ -45,6 +45,8 @@ } - (void)dealloc { [view release]; + [sound stop]; + [sound release]; [super dealloc]; } + (void)setUpToolbarItem:(NSToolbarItem *)theItem { @@ -53,7 +55,7 @@ [theItem setImage:[NSImage imageNamed:@"Events"]]; } + (NSString *)title { - return @"Events"; + return [@"Events" localized]; } - (NSView *)preferencesView { return view; @@ -111,15 +113,21 @@ } - (IBAction)soundChange:(id)sender { if ([[soundPopUp selectedItem] representedObject]!=nil) { - NSSound *sound = [[NSSound alloc] initWithContentsOfFile:[[soundPopUp selectedItem] representedObject] byReference:YES]; + if (sound!=nil) { + [sound stop]; + [sound release]; + } + sound = [[NSSound alloc] initWithContentsOfFile:[[soundPopUp selectedItem] representedObject] byReference:YES]; [sound setDelegate:self]; [sound play]; [preferences setObject:[[soundPopUp selectedItem] representedObject] forKey:[NSString stringWithFormat:MGMESound, [eventPopUp indexOfSelectedItem]]]; } } -- (void)sound:(NSSound *)sound didFinishPlaying:(BOOL)finishedPlaying { - if (finishedPlaying) +- (void)sound:(NSSound *)theSound didFinishPlaying:(BOOL)finishedPlaying { + if (finishedPlaying) { [sound release]; + sound = nil; + } } - (IBAction)moveChange:(id)sender { @@ -131,8 +139,8 @@ [panel setCanChooseDirectories:YES]; [panel setResolvesAliases:YES]; [panel setAllowsMultipleSelection:NO]; - [panel setTitle:@"Choose Folder"]; - [panel setPrompt:@"Choose"]; + [panel setTitle:[@"Choose Folder" localized]]; + [panel setPrompt:[@"Choose" localized]]; int returnCode = [panel runModal]; if (returnCode==NSOKButton) { NSString *path = [[[panel URLs] objectAtIndex:0] path]; diff --git a/Classes/CocoaShare/Preferences/MGMGeneralPane.h b/Classes/CocoaShare/Preferences/MGMGeneralPane.h index 6d48deb..08dbfbc 100644 --- a/Classes/CocoaShare/Preferences/MGMGeneralPane.h +++ b/Classes/CocoaShare/Preferences/MGMGeneralPane.h @@ -2,7 +2,7 @@ // MGMGeneralPane.h // CocoaShare // -// Created by James on 1/15/11. +// Created by Mr. Gecko on 1/15/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/CocoaShare/Preferences/MGMGeneralPane.m b/Classes/CocoaShare/Preferences/MGMGeneralPane.m index adc517a..8dd16cf 100644 --- a/Classes/CocoaShare/Preferences/MGMGeneralPane.m +++ b/Classes/CocoaShare/Preferences/MGMGeneralPane.m @@ -2,7 +2,7 @@ // MGMGeneralPane.m // CocoaShare // -// Created by James on 1/15/11. +// Created by Mr. Gecko on 1/15/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // @@ -35,7 +35,7 @@ [theItem setImage:[NSImage imageNamed:@"General"]]; } + (NSString *)title { - return @"General"; + return [@"General" localized]; } - (NSView *)preferencesView { return view; diff --git a/Classes/CocoaShare/main.m b/Classes/CocoaShare/main.m index 1da81f3..b69f326 100644 --- a/Classes/CocoaShare/main.m +++ b/Classes/CocoaShare/main.m @@ -2,7 +2,7 @@ // main.m // CocoaShare // -// Created by James on 1/15/11. +// Created by Mr. Gecko on 1/15/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/Dropbox/MGMDropboxPlugIn.h b/Classes/Dropbox/MGMDropboxPlugIn.h index 90ba7f9..5f38789 100644 --- a/Classes/Dropbox/MGMDropboxPlugIn.h +++ b/Classes/Dropbox/MGMDropboxPlugIn.h @@ -2,7 +2,7 @@ // MGMDropboxPlugIn.h // CocoaShare // -// Created by James on 1/19/11. +// Created by Mr. Gecko on 1/19/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/Dropbox/MGMDropboxPlugIn.m b/Classes/Dropbox/MGMDropboxPlugIn.m index fd67eaa..9b510b1 100644 --- a/Classes/Dropbox/MGMDropboxPlugIn.m +++ b/Classes/Dropbox/MGMDropboxPlugIn.m @@ -2,7 +2,7 @@ // MGMDropboxPlugIn.m // CocoaShare // -// Created by James on 1/19/11. +// Created by Mr. Gecko on 1/19/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // @@ -103,24 +103,24 @@ NSString * const MGMDropboxFContents = @"contents"; [emailField setEnabled:NO]; [passwordField setEnabled:NO]; [loginButton setEnabled:NO]; - [loginButton setTitle:@"Logging In"]; + [loginButton setTitle:[@"Logging In" localizedFor:self]]; } - (void)unlockLogin { [emailField setEnabled:YES]; [passwordField setEnabled:YES]; [loginButton setEnabled:YES]; - [loginButton setTitle:@"Login"]; + [loginButton setTitle:[@"Login" localizedFor:self]]; } - (IBAction)login:(id)sender { if ([[emailField stringValue] isEqual:@""]) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Email Required"]; - [alert setInformativeText:@"Please enter your email."]; + [alert setMessageText:[@"Email Required" localizedFor:self]]; + [alert setInformativeText:[@"Please enter your email." localizedFor:self]]; [alert runModal]; } else if ([[passwordField stringValue] isEqual:@""]) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Password Required"]; - [alert setInformativeText:@"Please enter you password."]; + [alert setMessageText:[@"Password Required" localizedFor:self]]; + [alert setInformativeText:[@"Please enter your password." localizedFor:self]]; [alert runModal]; } else { userLoggingIn = YES; @@ -134,7 +134,7 @@ NSString * const MGMDropboxFContents = @"contents"; - (void)restClient:(DBRestClient *)client loginFailedWithError:(NSError *)error { NSLog(@"Dropbox Error: %@", error); NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Account Error"]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; [alert setInformativeText:[error localizedDescription]]; [alert runModal]; [self unlockLogin]; @@ -147,8 +147,8 @@ NSString * const MGMDropboxFContents = @"contents"; loadingPublic = YES; [dropbox loadMetadata:MGMDropboxPublic]; NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Login Successful"]; - [alert setInformativeText:@"You have sucessfully logged into your account."]; + [alert setMessageText:[@"Login Successful" localizedFor:self]]; + [alert setInformativeText:[@"You have sucessfully logged into your account." localizedFor:self]]; [alert runModal]; [self unlockLogin]; } @@ -216,15 +216,15 @@ NSString * const MGMDropboxFContents = @"contents"; } - (void)restClient:(DBRestClient *)client loadAccountInfoFailedWithError:(NSError *)error { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Account Error"]; - [alert setInformativeText:@"Unable to get your account ID."]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; + [alert setInformativeText:[@"Unable to get your account ID." localizedFor:self]]; [alert runModal]; } - (void)sendFileAtPath:(NSString *)thePath withName:(NSString *)theName { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if ([defaults objectForKey:MGMDropboxEmail]==nil) { - NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:5 userInfo:[NSDictionary dictionaryWithObject:@"Account is not logged in." forKey:NSLocalizedDescriptionKey]]; + NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:5 userInfo:[NSDictionary dictionaryWithObject:[@"Account is not logged in." localizedFor:self] forKey:NSLocalizedDescriptionKey]]; [[MGMController sharedController] upload:thePath receivedError:error]; return; } diff --git a/Classes/FTP/MGMFTPPlugIn.m b/Classes/FTP/MGMFTPPlugIn.m index ef0c524..f32785d 100644 --- a/Classes/FTP/MGMFTPPlugIn.m +++ b/Classes/FTP/MGMFTPPlugIn.m @@ -2,7 +2,7 @@ // MGMFTPPlugIn.m // CocoaShare // -// Created by James on 1/25/11. +// Created by Mr. Gecko on 1/25/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // @@ -89,7 +89,7 @@ NSString * const MGMFTPURL = @"MGMFTPURL"; [pathField setEnabled:NO]; [urlField setEnabled:NO]; [loginButton setEnabled:NO]; - [loginButton setTitle:@"Logging In"]; + [loginButton setTitle:[@"Logging In" localizedFor:self]]; } - (void)unlockLogin { [hostField setEnabled:YES]; @@ -98,28 +98,28 @@ NSString * const MGMFTPURL = @"MGMFTPURL"; [pathField setEnabled:YES]; [urlField setEnabled:YES]; [loginButton setEnabled:YES]; - [loginButton setTitle:@"Login"]; + [loginButton setTitle:[@"Login" localizedFor:self]]; } - (IBAction)login:(id)sender { if ([[hostField stringValue] isEqual:@""]) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Host Required"]; - [alert setInformativeText:@"Please enter your ftp host."]; + [alert setMessageText:[@"Host Required" localizedFor:self]]; + [alert setInformativeText:[@"Please enter your host." localizedFor:self]]; [alert runModal]; } else if ([[userField stringValue] isEqual:@""]) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"UserName Required"]; - [alert setInformativeText:@"Please enter your ftp username."]; + [alert setMessageText:[@"UserName Required" localizedFor:self]]; + [alert setInformativeText:[@"Please enter your username." localizedFor:self]]; [alert runModal]; } else if ([[passwordField stringValue] isEqual:@""]) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Password Required"]; - [alert setInformativeText:@"Please enter your ftp password."]; + [alert setMessageText:[@"Password Required" localizedFor:self]]; + [alert setInformativeText:[@"Please enter your password." localizedFor:self]]; [alert runModal]; } else if ([[urlField stringValue] isEqual:@""]) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"URL Required"]; - [alert setInformativeText:@"Please enter the URL to where the files will be uploaded."]; + [alert setMessageText:[@"URL Required" localizedFor:self]]; + [alert setInformativeText:[@"Please enter the URL to where the files will be uploaded." localizedFor:self]]; [alert runModal]; } else { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; @@ -161,8 +161,8 @@ NSString * const MGMFTPURL = @"MGMFTPURL"; if (![loginButton isEnabled]) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Account Error"]; - [alert setInformativeText:@"Incorrect login info."]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; + [alert setInformativeText:[@"Incorrect login info." localizedFor:self]]; [alert runModal]; [self unlockLogin]; } @@ -177,15 +177,15 @@ NSString * const MGMFTPURL = @"MGMFTPURL"; if (response==250) { [self unlockLogin]; NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Login Successful"]; - [alert setInformativeText:@"You have sucessfully logged into your account."]; + [alert setMessageText:[@"Login Successful" localizedFor:self]]; + [alert setInformativeText:[@"You have sucessfully logged into your account." localizedFor:self]]; [alert runModal]; [[FTPInputPipe fileHandleForWriting] writeData:[@"bye\n" dataUsingEncoding:NSUTF8StringEncoding]]; } else if (response==550) { [self unlockLogin]; NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Account Error"]; - [alert setInformativeText:@"You have sucessfully logged into your account, but the path you have entered does not exist."]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; + [alert setInformativeText:[@"You have sucessfully logged into your account, but the path you have entered does not exist." localizedFor:self]]; [alert runModal]; [[FTPInputPipe fileHandleForWriting] writeData:[@"bye\n" dataUsingEncoding:NSUTF8StringEncoding]]; } else if (response==230) { @@ -193,8 +193,8 @@ NSString * const MGMFTPURL = @"MGMFTPURL"; if ([[defaults objectForKey:MGMFTPPath] isEqual:@""]) { [self unlockLogin]; NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Login Successful"]; - [alert setInformativeText:@"You have sucessfully logged into your account."]; + [alert setMessageText:[@"Login Successful" localizedFor:self]]; + [alert setInformativeText:[@"You have sucessfully logged into your account." localizedFor:self]]; [alert runModal]; [[FTPInputPipe fileHandleForWriting] writeData:[@"bye\n" dataUsingEncoding:NSUTF8StringEncoding]]; } else { @@ -203,13 +203,13 @@ NSString * const MGMFTPURL = @"MGMFTPURL"; } else if (response==530) { NSAlert *alert = [[NSAlert new] autorelease]; [self unlockLogin]; - [alert setMessageText:@"Account Error"]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; [alert setInformativeText:message]; [alert runModal]; } else if ([message rangeOfString:@"Can't connect or login to host"].location!=NSNotFound && ![loginButton isEnabled]) { [self unlockLogin]; NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Account Error"]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; [alert setInformativeText:message]; [alert runModal]; } @@ -229,7 +229,7 @@ NSString * const MGMFTPURL = @"MGMFTPURL"; - (void)sendFileAtPath:(NSString *)thePath withName:(NSString *)theName { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if ([defaults objectForKey:MGMFTPHost]==nil || [defaults objectForKey:MGMFTPUser]==nil || [defaults objectForKey:MGMFTPURL]==nil) { - NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:5 userInfo:[NSDictionary dictionaryWithObject:@"Account is not logged in." forKey:NSLocalizedDescriptionKey]]; + NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:5 userInfo:[NSDictionary dictionaryWithObject:[@"Account is not logged in." localizedFor:self] forKey:NSLocalizedDescriptionKey]]; [[MGMController sharedController] upload:thePath receivedError:error]; return; } @@ -268,7 +268,7 @@ NSString * const MGMFTPURL = @"MGMFTPURL"; FTPInputPipe = nil; if (theNotification!=nil) { - NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:1 userInfo:[NSDictionary dictionaryWithObject:@"Incorrect login info" forKey:NSLocalizedDescriptionKey]]; + NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:1 userInfo:[NSDictionary dictionaryWithObject:[@"Incorrect login info." localizedFor:self] forKey:NSLocalizedDescriptionKey]]; NSString *finishPath = [[filePath retain] autorelease]; [filePath release]; filePath = nil; @@ -304,7 +304,7 @@ NSString * const MGMFTPURL = @"MGMFTPURL"; } else if (response==550) { [[FTPInputPipe fileHandleForWriting] writeData:[@"bye\n" dataUsingEncoding:NSUTF8StringEncoding]]; [self uploadExit:nil]; - NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:1 userInfo:[NSDictionary dictionaryWithObject:@"The path to upload files to does not exist." forKey:NSLocalizedDescriptionKey]]; + NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:1 userInfo:[NSDictionary dictionaryWithObject:[@"The path to upload files to does not exist." localizedFor:self] forKey:NSLocalizedDescriptionKey]]; NSString *finishPath = [[filePath retain] autorelease]; [filePath release]; filePath = nil; diff --git a/Classes/HTTP/MGMHTTPPlugIn.h b/Classes/HTTP/MGMHTTPPlugIn.h index 4b187bf..c91814c 100644 --- a/Classes/HTTP/MGMHTTPPlugIn.h +++ b/Classes/HTTP/MGMHTTPPlugIn.h @@ -2,7 +2,7 @@ // MGMHTTPPlugIn.h // CocoaShare // -// Created by James on 1/18/11. +// Created by Mr. Gecko on 1/18/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/HTTP/MGMHTTPPlugIn.m b/Classes/HTTP/MGMHTTPPlugIn.m index 50953a8..2f97c92 100644 --- a/Classes/HTTP/MGMHTTPPlugIn.m +++ b/Classes/HTTP/MGMHTTPPlugIn.m @@ -2,7 +2,7 @@ // MGMHTTPPlugIn.m // CocoaShare // -// Created by James on 1/18/11. +// Created by Mr. Gecko on 1/18/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // @@ -92,7 +92,7 @@ const BOOL MGMHTTPResponseInvisible = YES; - (void)check:(NSDictionary *)theData didFailWithError:(NSError *)theError { NSLog(@"HTTP Error: %@", theError); NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Account Error"]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; [alert setInformativeText:[theError localizedDescription]]; [alert runModal]; [self unlockLogin]; @@ -106,8 +106,8 @@ const BOOL MGMHTTPResponseInvisible = YES; if ([[response objectForKey:MGMHTTPRSuccessful] boolValue]) { if ([[response objectForKey:MGMHTTPRLoggedIn] boolValue] && !userLoggingIn) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Login Successful"]; - [alert setInformativeText:@"You have sucessfully logged into your account."]; + [alert setMessageText:[@"Login Successful" localizedFor:self]]; + [alert setInformativeText:[@"You have sucessfully logged into your account." localizedFor:self]]; [alert runModal]; [self unlockLogin]; } else if (![[response objectForKey:MGMHTTPRLoggedIn] boolValue]) { @@ -121,7 +121,7 @@ const BOOL MGMHTTPResponseInvisible = YES; return; } NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Account Error"]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; [alert setInformativeText:[response objectForKey:MGMHTTPRError]]; [alert runModal]; [self unlockLogin]; @@ -131,8 +131,8 @@ const BOOL MGMHTTPResponseInvisible = YES; } } else { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Unable to check http login detials"]; - [alert setInformativeText:[NSString stringWithFormat:@"The URL %@ may not be a CocoaShare compatible URL.", [[NSUserDefaults standardUserDefaults] objectForKey:MGMHTTPURL]]]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; + [alert setInformativeText:[NSString stringWithFormat:[@"The URL %@ may not be a CocoaShare compatible URL." localizedFor:self], [[NSUserDefaults standardUserDefaults] objectForKey:MGMHTTPURL]]]; [alert runModal]; [self unlockLogin]; } @@ -143,21 +143,21 @@ const BOOL MGMHTTPResponseInvisible = YES; [userField setEnabled:NO]; [passwordField setEnabled:NO]; [loginButton setEnabled:NO]; - [loginButton setTitle:@"Logging In"]; + [loginButton setTitle:[@"Logging In" localizedFor:self]]; } - (void)unlockLogin { [urlField setEnabled:YES]; [userField setEnabled:YES]; [passwordField setEnabled:YES]; [loginButton setEnabled:YES]; - [loginButton setTitle:@"Login"]; + [loginButton setTitle:[@"Login" localizedFor:self]]; } - (IBAction)login:(id)sender { userLoggingIn = NO; if ([[urlField stringValue] isEqual:@""]) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"URL Required"]; - [alert setInformativeText:@"Please enter the URL for the HTTP account."]; + [alert setMessageText:[@"URL Required" localizedFor:self]]; + [alert setInformativeText:[@"Please enter the URL for the HTTP account." localizedFor:self]]; [alert runModal]; } else { [[MGMController sharedController] setPassword:[passwordField stringValue]]; @@ -172,7 +172,7 @@ const BOOL MGMHTTPResponseInvisible = YES; - (void)sendFileAtPath:(NSString *)thePath withName:(NSString *)theName { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if ([defaults objectForKey:MGMHTTPURL]==nil) { - NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:5 userInfo:[NSDictionary dictionaryWithObject:@"Account is not logged in." forKey:NSLocalizedDescriptionKey]]; + NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:5 userInfo:[NSDictionary dictionaryWithObject:[@"Account is not logged in." localizedFor:self] forKey:NSLocalizedDescriptionKey]]; [[MGMController sharedController] upload:thePath receivedError:error]; return; } @@ -216,7 +216,7 @@ const BOOL MGMHTTPResponseInvisible = YES; [[MGMController sharedController] upload:[theData objectForKey:MGMConnectionObject] receivedError:error]; } } else { - NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:1 userInfo:[NSDictionary dictionaryWithObject:@"HTTP Server response is not a CocoaShare compatible response." forKey:NSLocalizedDescriptionKey]]; + NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:1 userInfo:[NSDictionary dictionaryWithObject:[@"HTTP Server response is not a CocoaShare compatible response." localizedFor:self] forKey:NSLocalizedDescriptionKey]]; [[MGMController sharedController] upload:[theData objectForKey:MGMConnectionObject] receivedError:error]; } } diff --git a/Classes/MobileMe/MGMMobileMePlugIn.h b/Classes/MobileMe/MGMMobileMePlugIn.h index 99b96bc..c3f59b6 100644 --- a/Classes/MobileMe/MGMMobileMePlugIn.h +++ b/Classes/MobileMe/MGMMobileMePlugIn.h @@ -2,7 +2,7 @@ // MGMMobileMePlugIn.h // CocoaShare // -// Created by James on 1/29/11. +// Created by Mr. Gecko on 1/29/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/MobileMe/MGMMobileMePlugIn.m b/Classes/MobileMe/MGMMobileMePlugIn.m index 8266254..2a5caa9 100644 --- a/Classes/MobileMe/MGMMobileMePlugIn.m +++ b/Classes/MobileMe/MGMMobileMePlugIn.m @@ -2,7 +2,7 @@ // MGMMobileMePlugIn.m // CocoaShare // -// Created by James on 1/29/11. +// Created by Mr. Gecko on 1/29/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // @@ -87,13 +87,13 @@ NSString * const MGMMobileMeFContents = @"contents"; [userField setEnabled:NO]; [passwordField setEnabled:NO]; [loginButton setEnabled:NO]; - [loginButton setTitle:@"Logging In"]; + [loginButton setTitle:[@"Logging In" localizedFor:self]]; } - (void)unlockLogin { [userField setEnabled:YES]; [passwordField setEnabled:YES]; [loginButton setEnabled:YES]; - [loginButton setTitle:@"Login"]; + [loginButton setTitle:[@"Login" localizedFor:self]]; } - (void)login { NSString *user = [[NSUserDefaults standardUserDefaults] objectForKey:MGMMobileMeUser]; @@ -108,8 +108,8 @@ NSString * const MGMMobileMeFContents = @"contents"; - (IBAction)login:(id)sender { if ([userField isEqual:@""]) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"UserName Required"]; - [alert setInformativeText:@"Please enter your MobileMe UserName."]; + [alert setMessageText:[@"UserName Required" localizedFor:self]]; + [alert setInformativeText:[@"Please enter your username." localizedFor:self]]; [alert runModal]; } else { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; @@ -129,7 +129,7 @@ NSString * const MGMMobileMeFContents = @"contents"; - (void)webDav:(MGMWebDav *)theSender error:(NSError *)theError recevingOptions:(MGMWebDavOptions *)theOptions { NSLog(@"MobileMe Error: %@", theError); NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Account Error"]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; [alert setInformativeText:[theError localizedDescription]]; [alert runModal]; [self unlockLogin]; @@ -143,7 +143,7 @@ NSString * const MGMMobileMeFContents = @"contents"; - (void)webDav:(MGMWebDav *)theSender error:(NSError *)theError recevingProperties:(MGMWebDavPropFind *)thePropFind { NSLog(@"MobileMe Error: %@", theError); NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Account Error"]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; [alert setInformativeText:[theError localizedDescription]]; [alert runModal]; [self unlockLogin]; @@ -190,8 +190,8 @@ NSString * const MGMMobileMeFContents = @"contents"; [propFind setDepth:1]; [webDav addHandler:propFind]; NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Login Successful"]; - [alert setInformativeText:@"You have sucessfully logged into your account."]; + [alert setMessageText:[@"Login Successful" localizedFor:self]]; + [alert setInformativeText:[@"You have sucessfully logged into your account." localizedFor:self]]; [alert runModal]; [self unlockLogin]; } @@ -199,8 +199,8 @@ NSString * const MGMMobileMeFContents = @"contents"; } } NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Account Error"]; - [alert setInformativeText:@"The URL you have entered does not appear to be a directory."]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; + [alert setInformativeText:[@"The URL you have entered does not appear to be a directory." localizedFor:self]]; [alert runModal]; [self unlockLogin]; } @@ -233,7 +233,7 @@ NSString * const MGMMobileMeFContents = @"contents"; - (void)sendFileAtPath:(NSString *)thePath withName:(NSString *)theName { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if ([defaults objectForKey:MGMMobileMeUser]==nil) { - NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:5 userInfo:[NSDictionary dictionaryWithObject:@"Account is not logged in." forKey:NSLocalizedDescriptionKey]]; + NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:5 userInfo:[NSDictionary dictionaryWithObject:[@"Account is not logged in." localizedFor:self] forKey:NSLocalizedDescriptionKey]]; [[MGMController sharedController] upload:thePath receivedError:error]; return; } diff --git a/Classes/SFTP/MGMSFTPPlugIn.h b/Classes/SFTP/MGMSFTPPlugIn.h index 7c53555..881693a 100644 --- a/Classes/SFTP/MGMSFTPPlugIn.h +++ b/Classes/SFTP/MGMSFTPPlugIn.h @@ -2,7 +2,7 @@ // MGMSFTPPlugIn.h // CocoaShare // -// Created by James on 1/26/11. +// Created by Mr. Gecko on 1/26/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/SFTP/MGMSFTPPlugIn.m b/Classes/SFTP/MGMSFTPPlugIn.m index 1abffed..654139d 100644 --- a/Classes/SFTP/MGMSFTPPlugIn.m +++ b/Classes/SFTP/MGMSFTPPlugIn.m @@ -2,7 +2,7 @@ // MGMSFTPPlugIn.m // CocoaShare // -// Created by James on 1/26/11. +// Created by Mr. Gecko on 1/26/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // @@ -89,7 +89,7 @@ NSString * const MGMSFTPURL = @"MGMSFTPURL"; [pathField setEnabled:NO]; [urlField setEnabled:NO]; [loginButton setEnabled:NO]; - [loginButton setTitle:@"Logging In"]; + [loginButton setTitle:[@"Logging In" localizedFor:self]]; } - (void)unlockLogin { [hostField setEnabled:YES]; @@ -98,23 +98,23 @@ NSString * const MGMSFTPURL = @"MGMSFTPURL"; [pathField setEnabled:YES]; [urlField setEnabled:YES]; [loginButton setEnabled:YES]; - [loginButton setTitle:@"Login"]; + [loginButton setTitle:[@"Login" localizedFor:self]]; } - (IBAction)login:(id)sender { if ([[hostField stringValue] isEqual:@""]) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Host Required"]; - [alert setInformativeText:@"Please enter your sftp host."]; + [alert setMessageText:[@"Host Required" localizedFor:self]]; + [alert setInformativeText:[@"Please enter your sftp host." localizedFor:self]]; [alert runModal]; } else if ([[userField stringValue] isEqual:@""]) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"UserName Required"]; - [alert setInformativeText:@"Please enter your sftp username."]; + [alert setMessageText:[@"UserName Required" localizedFor:self]]; + [alert setInformativeText:[@"Please enter your sftp username." localizedFor:self]]; [alert runModal]; } else if ([[urlField stringValue] isEqual:@""]) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"URL Required"]; - [alert setInformativeText:@"Please enter the URL to where the files will be uploaded."]; + [alert setMessageText:[@"URL Required" localizedFor:self]]; + [alert setInformativeText:[@"Please enter the URL to where the files will be uploaded." localizedFor:self]]; [alert runModal]; } else { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; @@ -160,8 +160,8 @@ NSString * const MGMSFTPURL = @"MGMSFTPURL"; if (![loginButton isEnabled]) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Account Error"]; - [alert setInformativeText:@"Incorrect login info."]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; + [alert setInformativeText:[@"Incorrect login info." localizedFor:self]]; [alert runModal]; [self unlockLogin]; } @@ -172,8 +172,8 @@ NSString * const MGMSFTPURL = @"MGMSFTPURL"; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if ([[defaults objectForKey:MGMSFTPPath] isEqual:@""]) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Login Successful"]; - [alert setInformativeText:@"You have sucessfully logged into your account."]; + [alert setMessageText:[@"Login Successful" localizedFor:self]]; + [alert setInformativeText:[@"You have sucessfully logged into your account." localizedFor:self]]; [alert runModal]; [self unlockLogin]; } else { @@ -184,27 +184,27 @@ NSString * const MGMSFTPURL = @"MGMSFTPURL"; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if ([[defaults objectForKey:MGMSFTPPath] hasPrefix:theString]) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Login Successful"]; - [alert setInformativeText:@"You have sucessfully logged into your account."]; + [alert setMessageText:[@"Login Successful" localizedFor:self]]; + [alert setInformativeText:[@"You have sucessfully logged into your account." localizedFor:self]]; [alert runModal]; [self unlockLogin]; } else { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Account Error"]; - [alert setInformativeText:@"You have sucessfully logged into your account, but the path you have entered does not exist."]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; + [alert setInformativeText:[@"You have sucessfully logged into your account, but the path you have entered does not exist." localizedFor:self]]; [alert runModal]; [self unlockLogin]; } [[SFTPInputPipe fileHandleForWriting] writeData:[@"exit\n" dataUsingEncoding:NSUTF8StringEncoding]]; } else if ([theString rangeOfString:@"Permission denied"].location!=NSNotFound) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Account Error"]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; [alert setInformativeText:theString]; [alert runModal]; [self unlockLogin]; } else if ([theString rangeOfString:@"Could not resolve"].location!=NSNotFound) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Account Error"]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; [alert setInformativeText:theString]; [alert runModal]; [self unlockLogin]; @@ -224,7 +224,7 @@ NSString * const MGMSFTPURL = @"MGMSFTPURL"; - (void)sendFileAtPath:(NSString *)thePath withName:(NSString *)theName { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if ([defaults objectForKey:MGMSFTPHost]==nil || [defaults objectForKey:MGMSFTPUser]==nil || [defaults objectForKey:MGMSFTPURL]==nil) { - NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:5 userInfo:[NSDictionary dictionaryWithObject:@"Account is not logged in." forKey:NSLocalizedDescriptionKey]]; + NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:5 userInfo:[NSDictionary dictionaryWithObject:[@"Account is not logged in." localizedFor:self] forKey:NSLocalizedDescriptionKey]]; [[MGMController sharedController] upload:thePath receivedError:error]; return; } @@ -268,7 +268,7 @@ NSString * const MGMSFTPURL = @"MGMSFTPURL"; SFTPInputPipe = nil; if (theNotification!=nil) { - NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:1 userInfo:[NSDictionary dictionaryWithObject:@"Incorrect login info" forKey:NSLocalizedDescriptionKey]]; + NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:1 userInfo:[NSDictionary dictionaryWithObject:[@"Incorrect login info" localizedFor:self] forKey:NSLocalizedDescriptionKey]]; NSString *finishPath = [[filePath retain] autorelease]; [filePath release]; filePath = nil; diff --git a/Classes/WebDav/MGMWebDavPlugIn.h b/Classes/WebDav/MGMWebDavPlugIn.h index d2c2a9a..a66aa34 100644 --- a/Classes/WebDav/MGMWebDavPlugIn.h +++ b/Classes/WebDav/MGMWebDavPlugIn.h @@ -2,7 +2,7 @@ // MGMWebDavPlugIn.h // CocoaShare // -// Created by James on 1/28/11. +// Created by Mr. Gecko on 1/28/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/WebDav/MGMWebDavPlugIn.m b/Classes/WebDav/MGMWebDavPlugIn.m index 8b86cb9..a5e6730 100644 --- a/Classes/WebDav/MGMWebDavPlugIn.m +++ b/Classes/WebDav/MGMWebDavPlugIn.m @@ -2,7 +2,7 @@ // MGMWebDavPlugIn.m // CocoaShare // -// Created by James on 1/28/11. +// Created by Mr. Gecko on 1/28/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // @@ -76,14 +76,14 @@ NSString * const MGMWebDavUser = @"MGMWebDavUser"; [userField setEnabled:NO]; [passwordField setEnabled:NO]; [loginButton setEnabled:NO]; - [loginButton setTitle:@"Logging In"]; + [loginButton setTitle:[@"Logging In" localizedFor:self]]; } - (void)unlockLogin { [urlField setEnabled:YES]; [userField setEnabled:YES]; [passwordField setEnabled:YES]; [loginButton setEnabled:YES]; - [loginButton setTitle:@"Login"]; + [loginButton setTitle:[@"Login" localizedFor:self]]; } - (void)login { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; @@ -100,8 +100,8 @@ NSString * const MGMWebDavUser = @"MGMWebDavUser"; - (IBAction)login:(id)sender { if ([urlField isEqual:@""]) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"URL Required"]; - [alert setInformativeText:@"Please enter the WebDav URL."]; + [alert setMessageText:[@"URL Required" localizedFor:self]]; + [alert setInformativeText:[@"Please enter the WebDav URL." localizedFor:self]]; [alert runModal]; } else { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; @@ -117,7 +117,7 @@ NSString * const MGMWebDavUser = @"MGMWebDavUser"; - (void)webDav:(MGMWebDav *)theSender error:(NSError *)theError recevingOptions:(MGMWebDavOptions *)theOptions { NSLog(@"WebDav Error: %@", theError); NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Account Error"]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; [alert setInformativeText:[theError localizedDescription]]; [alert runModal]; [self unlockLogin]; @@ -130,7 +130,7 @@ NSString * const MGMWebDavUser = @"MGMWebDavUser"; - (void)webDav:(MGMWebDav *)theSender error:(NSError *)theError recevingProperties:(MGMWebDavPropFind *)thePropFind { NSLog(@"WebDav Error: %@", theError); NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Account Error"]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; [alert setInformativeText:[theError localizedDescription]]; [alert runModal]; [self unlockLogin]; @@ -141,8 +141,8 @@ NSString * const MGMWebDavUser = @"MGMWebDavUser"; if ([[[contents objectAtIndex:0] objectForKey:MGMWebDavPResourceType] isEqual:MGMWebDavPRCollection]) { if (!userLoggingIn) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Login Successful"]; - [alert setInformativeText:@"You have sucessfully logged into your account."]; + [alert setMessageText:[@"Login Successful" localizedFor:self]]; + [alert setInformativeText:[@"You have sucessfully logged into your account." localizedFor:self]]; [alert runModal]; [self unlockLogin]; } @@ -150,8 +150,8 @@ NSString * const MGMWebDavUser = @"MGMWebDavUser"; } } NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"Account Error"]; - [alert setInformativeText:@"The URL you have entered does not appear to be a directory."]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; + [alert setInformativeText:[@"The URL you have entered does not appear to be a directory." localizedFor:self]]; [alert runModal]; [self unlockLogin]; } @@ -159,7 +159,7 @@ NSString * const MGMWebDavUser = @"MGMWebDavUser"; - (void)sendFileAtPath:(NSString *)thePath withName:(NSString *)theName { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if ([defaults objectForKey:MGMWebDavURL]==nil) { - NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:5 userInfo:[NSDictionary dictionaryWithObject:@"Account is not logged in." forKey:NSLocalizedDescriptionKey]]; + NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:5 userInfo:[NSDictionary dictionaryWithObject:[@"Account is not logged in." localizedFor:self] forKey:NSLocalizedDescriptionKey]]; [[MGMController sharedController] upload:thePath receivedError:error]; return; } diff --git a/Classes/twitpic/MGMTwitpicPlugIn.h b/Classes/twitpic/MGMTwitpicPlugIn.h index dfaf166..0b6e1f2 100644 --- a/Classes/twitpic/MGMTwitpicPlugIn.h +++ b/Classes/twitpic/MGMTwitpicPlugIn.h @@ -2,7 +2,7 @@ // MGMTwitpicPlugIn.h // CocoaShare // -// Created by James on 1/29/11. +// Created by Mr. Gecko on 1/29/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/twitpic/MGMTwitpicPlugIn.m b/Classes/twitpic/MGMTwitpicPlugIn.m index 5422c4f..ab2c3ab 100644 --- a/Classes/twitpic/MGMTwitpicPlugIn.m +++ b/Classes/twitpic/MGMTwitpicPlugIn.m @@ -2,7 +2,7 @@ // MGMTwitpicPlugIn.m // CocoaShare // -// Created by James on 1/29/11. +// Created by Mr. Gecko on 1/29/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // @@ -76,8 +76,8 @@ const BOOL MGMTwitpicResponseInvisible = YES; - (IBAction)save:(id)sender { if ([userField isEqual:@""]) { NSAlert *alert = [[NSAlert new] autorelease]; - [alert setMessageText:@"UserName Required"]; - [alert setInformativeText:@"Please enter your Twitter UserName."]; + [alert setMessageText:[@"UserName Required" localizedFor:self]]; + [alert setInformativeText:[@"Please enter your Twitter UserName." localizedFor:self]]; [alert runModal]; } else { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; @@ -119,7 +119,7 @@ const BOOL MGMTwitpicResponseInvisible = YES; - (void)sendFile:(NSString *)thePath withName:(NSString *)theName post:(BOOL)shouldPost message:(NSString *)theMessage { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if ([defaults objectForKey:MGMTwitpicUser]==nil) { - NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:5 userInfo:[NSDictionary dictionaryWithObject:@"Account is not logged in." forKey:NSLocalizedDescriptionKey]]; + NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:5 userInfo:[NSDictionary dictionaryWithObject:[@"Account is not logged in." localizedFor:self] forKey:NSLocalizedDescriptionKey]]; [[MGMController sharedController] upload:thePath receivedError:error]; return; } @@ -210,7 +210,7 @@ const BOOL MGMTwitpicResponseInvisible = YES; filePath = nil; [fileName release]; fileName = nil; - error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:3 userInfo:[NSDictionary dictionaryWithObject:@"Unknown response" forKey:NSLocalizedDescriptionKey]]; + error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:3 userInfo:[NSDictionary dictionaryWithObject:[@"Unknown response." localizedFor:self] forKey:NSLocalizedDescriptionKey]]; [[MGMController sharedController] upload:uploadedPath receivedError:error]; } @end \ No newline at end of file diff --git a/Classes/twitpic/MGMTwitpicPostWindow.h b/Classes/twitpic/MGMTwitpicPostWindow.h index ab2fea8..0f7e5e3 100644 --- a/Classes/twitpic/MGMTwitpicPostWindow.h +++ b/Classes/twitpic/MGMTwitpicPostWindow.h @@ -2,7 +2,7 @@ // MGMTwitpicPostWindow.h // CocoaShare // -// Created by James on 1/29/11. +// Created by Mr. Gecko on 1/29/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/Classes/twitpic/MGMTwitpicPostWindow.m b/Classes/twitpic/MGMTwitpicPostWindow.m index 74256c7..7ca8e3d 100644 --- a/Classes/twitpic/MGMTwitpicPostWindow.m +++ b/Classes/twitpic/MGMTwitpicPostWindow.m @@ -2,7 +2,7 @@ // MGMTwitpicPostWindow.m // CocoaShare // -// Created by James on 1/29/11. +// Created by Mr. Gecko on 1/29/11. // Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ // diff --git a/CocoaShare.xcodeproj/project.pbxproj b/CocoaShare.xcodeproj/project.pbxproj index 2e422a8..24c55ac 100644 --- a/CocoaShare.xcodeproj/project.pbxproj +++ b/CocoaShare.xcodeproj/project.pbxproj @@ -7,10 +7,8 @@ objects = { /* Begin PBXBuildFile section */ - 2A044B7A12E68D3100E0B624 /* HTTPAccountPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A044B7912E68D3100E0B624 /* HTTPAccountPane.xib */; }; 2A044C4E12E7612500E0B624 /* Dropbox.bundle in PlugIns */ = {isa = PBXBuildFile; fileRef = 2A044C4012E760DD00E0B624 /* Dropbox.bundle */; }; 2A044CE712E768D500E0B624 /* MGMDropboxPlugIn.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A044C7212E7621B00E0B624 /* MGMDropboxPlugIn.m */; }; - 2A044CE812E7698300E0B624 /* DropboxAccountPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A044C7812E762D100E0B624 /* DropboxAccountPane.xib */; }; 2A044D8F12E92DA800E0B624 /* MGMUsers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AEAB3F112E2A57400552BAA /* MGMUsers.framework */; }; 2A0501D512F49A7B000F74EA /* MGMWebDav.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0501C612F49A7B000F74EA /* MGMWebDav.m */; }; 2A0501D612F49A7B000F74EA /* MGMWebDavAddons.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0501C812F49A7B000F74EA /* MGMWebDavAddons.m */; }; @@ -22,13 +20,10 @@ 2A0501DC12F49A7B000F74EA /* MGMWebDavPut.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0501D412F49A7B000F74EA /* MGMWebDavPut.m */; }; 2A0501F812F49D4E000F74EA /* MobileMe.bundle in PlugIns */ = {isa = PBXBuildFile; fileRef = 2A0501F112F49D08000F74EA /* MobileMe.bundle */; }; 2A05023112F49F74000F74EA /* MGMMobileMePlugIn.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A05023012F49F74000F74EA /* MGMMobileMePlugIn.m */; }; - 2A05023312F49F86000F74EA /* MobileMeAccountPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A05023212F49F86000F74EA /* MobileMeAccountPane.xib */; }; 2A0503CC12F4D464000F74EA /* twitpic.bundle in PlugIns */ = {isa = PBXBuildFile; fileRef = 2A0503C312F4D43B000F74EA /* twitpic.bundle */; }; - 2A05041B12F4DDF0000F74EA /* twitpicAccountPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A0503D512F4D4D5000F74EA /* twitpicAccountPane.xib */; }; 2A05041C12F4DDFC000F74EA /* MGMTwitpicPlugIn.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0503DA12F4D5E6000F74EA /* MGMTwitpicPlugIn.m */; }; 2A05042D12F4DE17000F74EA /* MGMUsers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AEAB3F112E2A57400552BAA /* MGMUsers.framework */; }; 2A0504B912F4E65C000F74EA /* MGMTwitpicPostWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0504B812F4E65C000F74EA /* MGMTwitpicPostWindow.m */; }; - 2A0504DA12F4EA04000F74EA /* twitpicPostWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A0504D912F4EA04000F74EA /* twitpicPostWindow.xib */; }; 2A0504F312F4F024000F74EA /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A0504F212F4F024000F74EA /* QuartzCore.framework */; }; 2A280C8512EB50FB00435C36 /* Growl Registration Ticket.growlRegDict in Resources */ = {isa = PBXBuildFile; fileRef = 2A280C8412EB50FB00435C36 /* Growl Registration Ticket.growlRegDict */; }; 2A280EBF12EB7A5E00435C36 /* DBAccountInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A280E6A12EB7A5D00435C36 /* DBAccountInfo.m */; }; @@ -72,22 +67,29 @@ 2A28154412ECE26600435C36 /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A28153D12ECE24300435C36 /* libcrypto.dylib */; }; 2A2F97A212F05C720069B37E /* FTP.bundle in PlugIns */ = {isa = PBXBuildFile; fileRef = 2A0C8C9412EF844F00A75AB7 /* FTP.bundle */; }; 2A2F995412F094F10069B37E /* SFTP.bundle in PlugIns */ = {isa = PBXBuildFile; fileRef = 2A2F994512F094710069B37E /* SFTP.bundle */; }; - 2A2F996A12F0957E0069B37E /* SFTPAccountPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A2F996912F0957E0069B37E /* SFTPAccountPane.xib */; }; 2A2F996E12F095DA0069B37E /* MGMSFTPPlugIn.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2F996D12F095DA0069B37E /* MGMSFTPPlugIn.m */; }; 2A48832E12E52E84001618B5 /* RegexKitLite.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A48832D12E52E84001618B5 /* RegexKitLite.m */; }; 2A48833512E52EAA001618B5 /* libicucore.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A48833412E52EAA001618B5 /* libicucore.dylib */; }; 2A48835612E53232001618B5 /* MGMAutoUpdateField.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A48835512E53232001618B5 /* MGMAutoUpdateField.m */; }; 2A48849612E678C3001618B5 /* MGMHTTPPlugIn.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A48849512E678C3001618B5 /* MGMHTTPPlugIn.m */; }; 2A48849B12E679DC001618B5 /* HTTP.bundle in PlugIns */ = {isa = PBXBuildFile; fileRef = 2A48847612E6768D001618B5 /* HTTP.bundle */; }; + 2A4FA5C912F9EDE0009F5B3A /* MGMLocalized.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A4FA5C812F9EDE0009F5B3A /* MGMLocalized.m */; }; + 2A4FA61112F9F8DE009F5B3A /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 2A4FA61012F9F8DE009F5B3A /* Localizable.strings */; }; + 2A4FA61312F9F8E4009F5B3A /* HTTPAccountPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A4FA61212F9F8E4009F5B3A /* HTTPAccountPane.xib */; }; + 2A4FA61512F9F8E9009F5B3A /* DropboxAccountPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A4FA61412F9F8E9009F5B3A /* DropboxAccountPane.xib */; }; + 2A4FA61712F9F8F0009F5B3A /* FTPAccountPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A4FA61612F9F8F0009F5B3A /* FTPAccountPane.xib */; }; + 2A4FA61912F9F8F5009F5B3A /* SFTPAccountPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A4FA61812F9F8F5009F5B3A /* SFTPAccountPane.xib */; }; + 2A4FA61B12F9F8FA009F5B3A /* WebDavAccountPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A4FA61A12F9F8FA009F5B3A /* WebDavAccountPane.xib */; }; + 2A4FA61D12F9F900009F5B3A /* MobileMeAccountPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A4FA61C12F9F900009F5B3A /* MobileMeAccountPane.xib */; }; + 2A4FA61F12F9F905009F5B3A /* twitpicAccountPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A4FA61E12F9F905009F5B3A /* twitpicAccountPane.xib */; }; + 2A4FA62112F9F90A009F5B3A /* twitpicPostWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A4FA62012F9F90A009F5B3A /* twitpicPostWindow.xib */; }; 2A52DDC512E3AC17000FC8CD /* CocoaShare.icns in Resources */ = {isa = PBXBuildFile; fileRef = 2A52DDC412E3AC16000FC8CD /* CocoaShare.icns */; }; 2A52DDC912E3AC26000FC8CD /* menuicon.png in Resources */ = {isa = PBXBuildFile; fileRef = 2A52DDC612E3AC26000FC8CD /* menuicon.png */; }; 2A52DDCA12E3AC26000FC8CD /* menuicondrag.png in Resources */ = {isa = PBXBuildFile; fileRef = 2A52DDC712E3AC26000FC8CD /* menuicondrag.png */; }; 2A52DDCB12E3AC26000FC8CD /* menuiconupload.png in Resources */ = {isa = PBXBuildFile; fileRef = 2A52DDC812E3AC26000FC8CD /* menuiconupload.png */; }; 2A52DF5812E3D041000FC8CD /* menuiconselected.png in Resources */ = {isa = PBXBuildFile; fileRef = 2A52DF5712E3D041000FC8CD /* menuiconselected.png */; }; 2A52DF7312E3D436000FC8CD /* MGMMenuItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A52DF7212E3D436000FC8CD /* MGMMenuItem.m */; }; - 2A55259A12F05B9700F97FE6 /* FTPAccountPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A0C8CB012EF853400A75AB7 /* FTPAccountPane.xib */; }; 2A55259D12F05BA700F97FE6 /* MGMFTPPlugIn.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C8CB412EF854D00A75AB7 /* MGMFTPPlugIn.m */; }; - 2A5C1B0412F2FB3F005153FA /* WebDavAccountPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A5C1B0312F2FB3F005153FA /* WebDavAccountPane.xib */; }; 2A5C1B0812F2FB5D005153FA /* MGMWebDavPlugIn.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A5C1B0712F2FB5D005153FA /* MGMWebDavPlugIn.m */; }; 2A5C1B4912F32EE3005153FA /* WebDav.bundle in PlugIns */ = {isa = PBXBuildFile; fileRef = 2A5C1AF312F2FA6F005153FA /* WebDav.bundle */; }; 2AEAB3F312E2A57400552BAA /* GeckoReporter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AEAB3EF12E2A57400552BAA /* GeckoReporter.framework */; }; @@ -211,14 +213,14 @@ 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; - 2A044B7912E68D3100E0B624 /* HTTPAccountPane.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HTTPAccountPane.xib; sourceTree = ""; }; + 2A044B7912E68D3100E0B624 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/HTTPAccountPane.xib; sourceTree = ""; }; 2A044B8A12E68E9E00E0B624 /* MGMPlugInProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMPlugInProtocol.h; sourceTree = ""; }; 2A044C4012E760DD00E0B624 /* Dropbox.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Dropbox.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 2A044C5B12E7614C00E0B624 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 2A044C6F12E761F300E0B624 /* prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = prefix.pch; path = Classes/Dropbox/prefix.pch; sourceTree = ""; }; 2A044C7112E7621B00E0B624 /* MGMDropboxPlugIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMDropboxPlugIn.h; sourceTree = ""; }; 2A044C7212E7621B00E0B624 /* MGMDropboxPlugIn.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMDropboxPlugIn.m; sourceTree = ""; }; - 2A044C7812E762D100E0B624 /* DropboxAccountPane.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DropboxAccountPane.xib; sourceTree = ""; }; + 2A044C7812E762D100E0B624 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/DropboxAccountPane.xib; sourceTree = ""; }; 2A0501C512F49A7B000F74EA /* MGMWebDav.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMWebDav.h; sourceTree = ""; }; 2A0501C612F49A7B000F74EA /* MGMWebDav.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMWebDav.m; sourceTree = ""; }; 2A0501C712F49A7B000F74EA /* MGMWebDavAddons.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMWebDavAddons.h; sourceTree = ""; }; @@ -240,21 +242,21 @@ 2A05020412F49DF0000F74EA /* prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = prefix.pch; path = Classes/MobileMe/prefix.pch; sourceTree = ""; }; 2A05022F12F49F74000F74EA /* MGMMobileMePlugIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMMobileMePlugIn.h; sourceTree = ""; }; 2A05023012F49F74000F74EA /* MGMMobileMePlugIn.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMMobileMePlugIn.m; sourceTree = ""; }; - 2A05023212F49F86000F74EA /* MobileMeAccountPane.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MobileMeAccountPane.xib; sourceTree = ""; }; + 2A05023212F49F86000F74EA /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MobileMeAccountPane.xib; sourceTree = ""; }; 2A0503C312F4D43B000F74EA /* twitpic.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = twitpic.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 2A0503D012F4D49E000F74EA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 2A0503D212F4D4AA000F74EA /* prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = prefix.pch; path = Classes/twitpic/prefix.pch; sourceTree = ""; }; - 2A0503D512F4D4D5000F74EA /* twitpicAccountPane.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = twitpicAccountPane.xib; sourceTree = ""; }; + 2A0503D512F4D4D5000F74EA /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/twitpicAccountPane.xib; sourceTree = ""; }; 2A0503D912F4D5E6000F74EA /* MGMTwitpicPlugIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMTwitpicPlugIn.h; sourceTree = ""; }; 2A0503DA12F4D5E6000F74EA /* MGMTwitpicPlugIn.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMTwitpicPlugIn.m; sourceTree = ""; }; 2A0504B712F4E65C000F74EA /* MGMTwitpicPostWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMTwitpicPostWindow.h; sourceTree = ""; }; 2A0504B812F4E65C000F74EA /* MGMTwitpicPostWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMTwitpicPostWindow.m; sourceTree = ""; }; - 2A0504D912F4EA04000F74EA /* twitpicPostWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = twitpicPostWindow.xib; sourceTree = ""; }; + 2A0504D912F4EA04000F74EA /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/twitpicPostWindow.xib; sourceTree = ""; }; 2A0504F212F4F024000F74EA /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; 2A0C8C9412EF844F00A75AB7 /* FTP.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FTP.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 2A0C8CAB12EF84FE00A75AB7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 2A0C8CAD12EF850900A75AB7 /* prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = prefix.pch; path = Classes/FTP/prefix.pch; sourceTree = ""; }; - 2A0C8CB012EF853400A75AB7 /* FTPAccountPane.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FTPAccountPane.xib; sourceTree = ""; }; + 2A0C8CB012EF853400A75AB7 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/FTPAccountPane.xib; sourceTree = ""; }; 2A0C8CB312EF854D00A75AB7 /* MGMFTPPlugIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMFTPPlugIn.h; sourceTree = ""; }; 2A0C8CB412EF854D00A75AB7 /* MGMFTPPlugIn.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMFTPPlugIn.m; sourceTree = ""; wrapsLines = 1; }; 2A280C8412EB50FB00435C36 /* Growl Registration Ticket.growlRegDict */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "Growl Registration Ticket.growlRegDict"; sourceTree = ""; }; @@ -337,7 +339,7 @@ 2A2F994512F094710069B37E /* SFTP.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SFTP.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 2A2F996112F095320069B37E /* prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = prefix.pch; path = Classes/SFTP/prefix.pch; sourceTree = ""; }; 2A2F996712F0955B0069B37E /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2A2F996912F0957E0069B37E /* SFTPAccountPane.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SFTPAccountPane.xib; sourceTree = ""; }; + 2A2F996912F0957E0069B37E /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/SFTPAccountPane.xib; sourceTree = ""; }; 2A2F996C12F095DA0069B37E /* MGMSFTPPlugIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMSFTPPlugIn.h; sourceTree = ""; }; 2A2F996D12F095DA0069B37E /* MGMSFTPPlugIn.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMSFTPPlugIn.m; sourceTree = ""; wrapsLines = 1; }; 2A48832C12E52E84001618B5 /* RegexKitLite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegexKitLite.h; sourceTree = ""; }; @@ -350,6 +352,9 @@ 2A48849312E67874001618B5 /* prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = prefix.pch; path = Classes/HTTP/prefix.pch; sourceTree = ""; }; 2A48849412E678C3001618B5 /* MGMHTTPPlugIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMHTTPPlugIn.h; sourceTree = ""; }; 2A48849512E678C3001618B5 /* MGMHTTPPlugIn.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMHTTPPlugIn.m; sourceTree = ""; }; + 2A4FA57A12F9DA71009F5B3A /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/Localizable.strings; sourceTree = ""; }; + 2A4FA5C712F9EDE0009F5B3A /* MGMLocalized.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMLocalized.h; sourceTree = ""; }; + 2A4FA5C812F9EDE0009F5B3A /* MGMLocalized.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMLocalized.m; sourceTree = ""; }; 2A52DDC412E3AC16000FC8CD /* CocoaShare.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = CocoaShare.icns; sourceTree = SOURCE_ROOT; }; 2A52DDC612E3AC26000FC8CD /* menuicon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = menuicon.png; sourceTree = ""; }; 2A52DDC712E3AC26000FC8CD /* menuicondrag.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = menuicondrag.png; sourceTree = ""; }; @@ -360,7 +365,7 @@ 2A5C1AF312F2FA6F005153FA /* WebDav.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WebDav.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 2A5C1AFE12F2FAF3005153FA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 2A5C1B0012F2FB04005153FA /* prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = prefix.pch; path = Classes/WebDav/prefix.pch; sourceTree = ""; }; - 2A5C1B0312F2FB3F005153FA /* WebDavAccountPane.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WebDavAccountPane.xib; sourceTree = ""; }; + 2A5C1B0312F2FB3F005153FA /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/WebDavAccountPane.xib; sourceTree = ""; }; 2A5C1B0612F2FB5D005153FA /* MGMWebDavPlugIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMWebDavPlugIn.h; sourceTree = ""; }; 2A5C1B0712F2FB5D005153FA /* MGMWebDavPlugIn.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMWebDavPlugIn.m; sourceTree = ""; }; 2AEAB3EF12E2A57400552BAA /* GeckoReporter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GeckoReporter.framework; path = Frameworks/GeckoReporter.framework; sourceTree = ""; }; @@ -549,7 +554,7 @@ isa = PBXGroup; children = ( 2A044C5B12E7614C00E0B624 /* Info.plist */, - 2A044C7812E762D100E0B624 /* DropboxAccountPane.xib */, + 2A4FA61412F9F8E9009F5B3A /* DropboxAccountPane.xib */, ); path = Dropbox; sourceTree = ""; @@ -599,7 +604,7 @@ isa = PBXGroup; children = ( 2A05020212F49DDD000F74EA /* Info.plist */, - 2A05023212F49F86000F74EA /* MobileMeAccountPane.xib */, + 2A4FA61C12F9F900009F5B3A /* MobileMeAccountPane.xib */, ); path = MobileMe; sourceTree = ""; @@ -625,8 +630,8 @@ isa = PBXGroup; children = ( 2A0503D012F4D49E000F74EA /* Info.plist */, - 2A0503D512F4D4D5000F74EA /* twitpicAccountPane.xib */, - 2A0504D912F4EA04000F74EA /* twitpicPostWindow.xib */, + 2A4FA61E12F9F905009F5B3A /* twitpicAccountPane.xib */, + 2A4FA62012F9F90A009F5B3A /* twitpicPostWindow.xib */, ); path = twitpic; sourceTree = ""; @@ -654,7 +659,7 @@ isa = PBXGroup; children = ( 2A0C8CAB12EF84FE00A75AB7 /* Info.plist */, - 2A0C8CB012EF853400A75AB7 /* FTPAccountPane.xib */, + 2A4FA61612F9F8F0009F5B3A /* FTPAccountPane.xib */, ); path = FTP; sourceTree = ""; @@ -802,7 +807,7 @@ isa = PBXGroup; children = ( 2A2F996712F0955B0069B37E /* Info.plist */, - 2A2F996912F0957E0069B37E /* SFTPAccountPane.xib */, + 2A4FA61812F9F8F5009F5B3A /* SFTPAccountPane.xib */, ); path = SFTP; sourceTree = ""; @@ -838,7 +843,7 @@ isa = PBXGroup; children = ( 2A48848A12E67747001618B5 /* Info.plist */, - 2A044B7912E68D3100E0B624 /* HTTPAccountPane.xib */, + 2A4FA61212F9F8E4009F5B3A /* HTTPAccountPane.xib */, ); path = HTTP; sourceTree = ""; @@ -864,7 +869,7 @@ isa = PBXGroup; children = ( 2A5C1AFE12F2FAF3005153FA /* Info.plist */, - 2A5C1B0312F2FB3F005153FA /* WebDavAccountPane.xib */, + 2A4FA61A12F9F8FA009F5B3A /* WebDavAccountPane.xib */, ); path = WebDav; sourceTree = ""; @@ -918,6 +923,8 @@ 2A52DF7212E3D436000FC8CD /* MGMMenuItem.m */, 2A48835412E53232001618B5 /* MGMAutoUpdateField.h */, 2A48835512E53232001618B5 /* MGMAutoUpdateField.m */, + 2A4FA5C712F9EDE0009F5B3A /* MGMLocalized.h */, + 2A4FA5C812F9EDE0009F5B3A /* MGMLocalized.m */, 2AEAB46312E2ACF400552BAA /* Preferences */, 2A48832B12E52E84001618B5 /* RegexKit */, 2A0501C412F49A7B000F74EA /* MGMWebDav */, @@ -971,6 +978,7 @@ 2A52DDC712E3AC26000FC8CD /* menuicondrag.png */, 2A52DF5712E3D041000FC8CD /* menuiconselected.png */, 2A52DDC812E3AC26000FC8CD /* menuiconupload.png */, + 2A4FA61012F9F8DE009F5B3A /* Localizable.strings */, 2AEAB48812E2ADDF00552BAA /* Preferences */, ); path = CocoaShare; @@ -1184,7 +1192,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2A044CE812E7698300E0B624 /* DropboxAccountPane.xib in Resources */, + 2A4FA61512F9F8E9009F5B3A /* DropboxAccountPane.xib in Resources */, 2A280EE912EB7A5E00435C36 /* db_logo.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1193,7 +1201,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2A05023312F49F86000F74EA /* MobileMeAccountPane.xib in Resources */, + 2A4FA61D12F9F900009F5B3A /* MobileMeAccountPane.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1201,8 +1209,8 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2A05041B12F4DDF0000F74EA /* twitpicAccountPane.xib in Resources */, - 2A0504DA12F4EA04000F74EA /* twitpicPostWindow.xib in Resources */, + 2A4FA61F12F9F905009F5B3A /* twitpicAccountPane.xib in Resources */, + 2A4FA62112F9F90A009F5B3A /* twitpicPostWindow.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1210,7 +1218,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2A55259A12F05B9700F97FE6 /* FTPAccountPane.xib in Resources */, + 2A4FA61712F9F8F0009F5B3A /* FTPAccountPane.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1218,7 +1226,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2A2F996A12F0957E0069B37E /* SFTPAccountPane.xib in Resources */, + 2A4FA61912F9F8F5009F5B3A /* SFTPAccountPane.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1226,7 +1234,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2A044B7A12E68D3100E0B624 /* HTTPAccountPane.xib in Resources */, + 2A4FA61312F9F8E4009F5B3A /* HTTPAccountPane.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1234,7 +1242,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2A5C1B0412F2FB3F005153FA /* WebDavAccountPane.xib in Resources */, + 2A4FA61B12F9F8FA009F5B3A /* WebDavAccountPane.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1261,6 +1269,7 @@ 2A280C8512EB50FB00435C36 /* Growl Registration Ticket.growlRegDict in Resources */, 2AEF115912F527B900F495BE /* About.rtf in Resources */, 2AEF118612F52A7D00F495BE /* CocoaShareIcon.png in Resources */, + 2A4FA61112F9F8DE009F5B3A /* Localizable.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1379,6 +1388,7 @@ 2A0501DA12F49A7B000F74EA /* MGMWebDavOptions.m in Sources */, 2A0501DB12F49A7B000F74EA /* MGMWebDavPropFind.m in Sources */, 2A0501DC12F49A7B000F74EA /* MGMWebDavPut.m in Sources */, + 2A4FA5C912F9EDE0009F5B3A /* MGMLocalized.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1423,6 +1433,78 @@ /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ + 2A4FA61012F9F8DE009F5B3A /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + 2A4FA57A12F9DA71009F5B3A /* English */, + ); + name = Localizable.strings; + sourceTree = ""; + }; + 2A4FA61212F9F8E4009F5B3A /* HTTPAccountPane.xib */ = { + isa = PBXVariantGroup; + children = ( + 2A044B7912E68D3100E0B624 /* English */, + ); + name = HTTPAccountPane.xib; + sourceTree = ""; + }; + 2A4FA61412F9F8E9009F5B3A /* DropboxAccountPane.xib */ = { + isa = PBXVariantGroup; + children = ( + 2A044C7812E762D100E0B624 /* English */, + ); + name = DropboxAccountPane.xib; + sourceTree = ""; + }; + 2A4FA61612F9F8F0009F5B3A /* FTPAccountPane.xib */ = { + isa = PBXVariantGroup; + children = ( + 2A0C8CB012EF853400A75AB7 /* English */, + ); + name = FTPAccountPane.xib; + sourceTree = ""; + }; + 2A4FA61812F9F8F5009F5B3A /* SFTPAccountPane.xib */ = { + isa = PBXVariantGroup; + children = ( + 2A2F996912F0957E0069B37E /* English */, + ); + name = SFTPAccountPane.xib; + sourceTree = ""; + }; + 2A4FA61A12F9F8FA009F5B3A /* WebDavAccountPane.xib */ = { + isa = PBXVariantGroup; + children = ( + 2A5C1B0312F2FB3F005153FA /* English */, + ); + name = WebDavAccountPane.xib; + sourceTree = ""; + }; + 2A4FA61C12F9F900009F5B3A /* MobileMeAccountPane.xib */ = { + isa = PBXVariantGroup; + children = ( + 2A05023212F49F86000F74EA /* English */, + ); + name = MobileMeAccountPane.xib; + sourceTree = ""; + }; + 2A4FA61E12F9F905009F5B3A /* twitpicAccountPane.xib */ = { + isa = PBXVariantGroup; + children = ( + 2A0503D512F4D4D5000F74EA /* English */, + ); + name = twitpicAccountPane.xib; + sourceTree = ""; + }; + 2A4FA62012F9F90A009F5B3A /* twitpicPostWindow.xib */ = { + isa = PBXVariantGroup; + children = ( + 2A0504D912F4EA04000F74EA /* English */, + ); + name = twitpicPostWindow.xib; + sourceTree = ""; + }; 2AEAB48312E2ADDF00552BAA /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( diff --git a/PlugIns/TinyGrab.bundle/Contents/MacOS/TinyGrab b/PlugIns/TinyGrab.bundle/Contents/MacOS/TinyGrab index 436eed27aa20a0287825c1e5d625b6cfc65874f7..91bcb38f9cd25709adf7603f716d7485d23d37d6 100755 GIT binary patch literal 93016 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 S;xRj5v!k?o+qMg~tp5*N+Lycl diff --git a/PlugIns/TinyGrab.bundle/Contents/Resources/English.lproj/TinyGrabAccountPane.nib b/PlugIns/TinyGrab.bundle/Contents/Resources/English.lproj/TinyGrabAccountPane.nib new file mode 100644 index 0000000000000000000000000000000000000000..f56436d178ac157dcde5e63bc066dca52d610994 GIT binary patch literal 7271 zcmai2349aP)<5@VvQLtkNoLptq7*HwZK*&3kuDU9rPQ{RQVJzahY|=$Nzy`D^dc_L z9R)>POIZW~6%jXlDlQ19sB9|w#0A9dQ{<`7pC1q3nVED!P}5(NnYqi^{^x(r+?x7u zD4s}5I|u|Qn1BN_*yv&UepyN)T3?Y8t(m0;6Y+|aMl}`>MI)0_0Hx@Za=LCfewT23d? z3Oboq(kZlxPNmamHJwfaw1x(0Emi3ZT1RKn5Dn8Py#pSgkJBgUR{A8}MxUbF>C^NX z`Ye5pK2LYh7wA7>1$~jeL|>*m=_~YA`Wk(m?xJtd-Eea}Pw>Nqa1r!^6zB~X!zGXkeV{M&gZ?l8 z22Lp|Eegz0<5#LpalFot;my2gY<9KKrKmJJ7*yl&P)#TtN;FLf)yB&M;RZE+?pSU# z5sq1DxF|p#h5)cDWUByITdFyK5TbU2ZrKj~n_|;utEa4OAJIt@?I4k1g7?@|2*qTvs}| zk+FnDn3-*0>)9L@Wi|$k3f-B7&0^QH8`(eDBWxqPVL$pf4bmY4{iZM09LYFlsuslY zW5$<-B28mrftuoQLtQ~+KU@ZbVF(PZFhr{HO5-Aei&|hPWKF|e8sdrQ9K*hfRzuMV z1v$CVU^LJcoc%BYWnT^>(c)y*#haPckTD9f*FZMpKo&Y-d_y9D&MQ?D6N^gm+gOoBM& zY=$l<4eAi$A(#cTA&ibGZK%<2{n??@rswRXt*3z)3?Zr1?I)u_tCI~X6hzm{MxQF zn8Z3U4|6kzopts8j-M5C&tyx&C=QAb!nLpz6}=9wha2EV_y;;mGZ%j}Orj5G=o|JL z)fe;+6PPG+zN*58V5l~LD8)b+=(z=MZGl@M3zuq{c?fQYJ75{yiM!tg%V7oF4fkM_ zTFupeH5r<&nhQ$n13^_wORNInXq}!CGV=)*=4DEGX;VC*&Z!o>33OAt(fY~*a32cl z2KU1Qx`;_LLkTq}9Rw3o4BZ}v<`!s%tXBCQm1}`DhH|V6>#WI|tcf^l;|+3M) zTBNn`YP_Y+!@)M3SE_RYp|C#B*ykB|b`3lW&uP+q7^zUrgoZ>|MWvHuij05{+iu(Q zaR^n~&23DcWhsAE1oZLkJ<4fE+~L;Cv%A?81ZJxRpx zg*V|XjKkZA`+bP~cM$jQ!45b82jLJLhWFtE%!4Dk$B;uu&us`b2EvGLR5zy~k%&fg ztYuUSQc-EK8Vf~hL%{;Xe+;J~GCIuB_h_Axr-lPf2o3am7$+misI6(kdLi;JVm*Z= zLKhwSH(WdFca|dTmN;?-m|Lq3#MT!wQ$fun2TD0~W^={#r%{p+}X0ms(C zvDUa^(in@TAdEv1(asT_ zc78q&@%*Y&&k5Y`zi}lVp>fo>(2&M3m5AfltkwQBKi&ngU5}H3TiQ$p&21Hru&juh_!`S^}NfD#R5&n zQ#*03BM#V1oP^gPj5?L7!G@Unw`ufebB%pHL|jjV_5{;e@((+o@7dIPtmN3b)aohL z7AfK*vL2}nHvCT_MY_Rs(j96@Pd!qDlGP;>^<21cC??2|p?a=l48pV-vUu?a9qNN# z9mqwb7c`OH#0QH>D(S-pvn&k5Wh{erl{hgOg-H`5vm?=Ykq)#)`jY`k+8WA+XtY%o zGzg?4bCC>SI_nhOeL4= zzHzb|%{K;4vSIv2l0$OQbE7fuPe2JNAmi9bR)qGHAnBxHr7vfdY}$usS9&s@6lv9- zT!sEDC1qqHDTnFEfmq|}%20Y7OX29+klvE$uFgkS0~^oAuq*6_@X0W8J*gy9NEMk% zrjcqkie|0f=T1o1Cyb5+1NHHSFp^TOzc?CClm=s=`h>qRePG79 zYq}={ z>1BBwyOI^)(tT)Fb*(YsYI4mQat&d60n~T+ zW1S?|lBMg&(pEl280gcqvUr{jk=%%u-UP3cTXbMdNEWPOER72nrf0U+t1N8M{<>T( zz(ibz;Ju41CoAAExreNT1!NUAP9Am@EBeb4Qczas-F1+(Zqr!_FsuD~jKS;eNk9i#x|zerw6%Absx+(G{2;v|WlSBKY7hh3<{Ze52dNgb-%b;!_(^6zxm zN5-KJ?~(mU9i}3ebkL!EwALsMGjMi@99}~XYt;wgn|zzmi%{jlL4yzs>4S$ZHfDZE zj;tj|jHXQMM)h|o4Q*wO_|;Yq-~{;uIj;m+tQI-XF(rZoiG7SVvwc!;a*P~@9gMOW ztd8|8*L#4ZN?((2){t+=x5=Vsv}jt>*Vd{1Y2((Ld{2&(T--K<+ZJJV#gd4_S8aTa zNT3LOwIlx~rpE;z(rzy7LIOTT#*yEUODt>nP?hC!yM<~2&7-4fJ{?2H(gHe;UP%k- zcv?g!&|-QOEn)R+E{m}^ORxsk$mX&6tcfjP3)v#Jm|e}TVT>(d*RrMTI<0H!RGL6v z1^rr0^{2L_N*`?LiW}lH{YI1MPi>_U9PlQeY3%4v)mzj)mHK+U6yr*xwK4Y8pZT@9 zNGoRvGjgKOlnxQYw9^??pYKm?C2$nlsa-&FP^T3f>2l6UvMIqa`7D90&#SbOdP&?r zVO~Uyp*?3AYS>fNzUhGUYN1>EZBlwiPkH_@S}k<`!xMjM(pZ#smP)NgC};V!&Dm3o zl=o|y+~ynYrh{(`9L^%9=2lG3>2O`Ip{IKipW~nq&qz8XAD)(!7&s-{F$r4}Fdt7( z3h*4IJrRR=dSX8-9WOz=8n~^%v}{eu9(c|&0#96$sj1<2nXUo7lio#_(-rh?dJkPm z@1?8gee{0%0DX`?L?5QjbTw_EYv@|Kj;^PV&<%7WeUxsZo9PyI6T6w+!fs`^vD?`l zY#F7<6#0> zPd1bPP!sjgewfyi@qo2~E~Pi4yB@(K)mQ00`Vsw^o;JBnf=M#@Op2+qsjKM%QxB8h zbdf2=bg?Pb)YsJCG|-f0$}kN#jWHFNt~6DfW}4=j7MYfqmYG(WHk-DaUN-GCy=r>P zbinkf=}XfO9B`E5I16Xv930QNIf0Y7UR*kt#pQ5$Ts}9J8^_ggP2Ba|ZQM$(nR|rW z$Zg`baF20YxozBbZXfp{cbq%Hea(H#eb1fbPMMwNG;^N0*j#B=&2jUM=H=#QbBlSc zdA)gq`BC#G^A_{d<{jo2%x{|ynm;lhGyk9Y2lJ2SpDe`Uuy`zrrJrSxj3LeYo4{pI?)=ihOG_OMb_ok7V9?acIz|N=d3%dA6SoAKem2iJ!<{jdd&Kz z^>c+H|=lR z-?6`I-*124{;~bI{VV%7_U|0BqlcrHqn{(wafM@&qt-FovD9&^W0hlzW2fUC$ES|Z z9mgDBI=*t6omQva>2&f=k5hDdo&B7J&LU^Av&32EEO%Bor#fq#vz*sBmpGR?uXo<) zT;W{peB8O!xy!lRx!3uYbD#4w=eN$&&NDpll;?OC@8>V#Q}~PdRK73YpC8Dl@fmz3 zKbcqgdOpS{_(pynzkpxFU(GXq34b%cl3&H&&p*gN%&+Fx@ay=U{D=I{F2yy@Rp(-^ z)vk@Mt*#ebueo-)cDwet-gLd|I^_D?^`qU&neGOo?kq_dVceq#>}>0mJbjv71D)4LZ&c8$P$JNr9whz6y^&Hghj&D0u!zm zZWito?h{rEPY64N*Mzr)Bf?SPq;N|3N%%$hRpdlj>?C#(yNTV!6mfu&2Lu5N{Nhi95u9iZ6*f#aG4G#W%z~;+x{z;ydDd;sNoH_`dj|_>uT8@u>Kj_=R{} z{9ZgMo{~VaOPSJOX{a$P{sZLrU z-6P#A-6uUDJtQ?tEz(+Py|h7kRN5>(COsiNDLo}UEj=qeFTEhWD7`H0k$#bWm41^> zOJ}^`rC!c!@!Gr&FYk4G1+V1wc@=MGZ&&XH-X31R_ag5I??mrxZ=?4P?|Sc(-o4&q zKJaz+_4W<-jrGm&&G#+$ZS=k3+voez_k-`G@09QVeW!hAWUHJf=gVW|adM$tBp1si za+zE%SICuel{`(JF4xGl@(g*VJWCGC5xHKD$qBhpo-Z$u7s*%4Ouk9pCGVE^%5Ta0 z4J|=%De8)I%^ildL1C&dZbY+lonKDGlQidy+D_1CEl>+5T mrA(QqOj4#R0VSw}mAML2uGf#3fod YES - - + YES @@ -246,15 +245,6 @@ - - - Paste and Match Style - V - 1572864 - 2147483647 - - - Delete @@ -273,305 +263,6 @@ - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Find - - 1048576 - 2147483647 - - - submenuAction: - - Find - - YES - - - Find… - f - 1048576 - 2147483647 - - - 1 - - - - Find Next - g - 1048576 - 2147483647 - - - 2 - - - - Find Previous - G - 1179648 - 2147483647 - - - 3 - - - - Use Selection for Find - e - 1048576 - 2147483647 - - - 7 - - - - Jump to Selection - j - 1048576 - 2147483647 - - - - - - - - - Spelling and Grammar - - 1048576 - 2147483647 - - - submenuAction: - - Spelling and Grammar - - YES - - - Show Spelling and Grammar - : - 1048576 - 2147483647 - - - - - - Check Document Now - ; - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Check Spelling While Typing - - 1048576 - 2147483647 - - - - - - Check Grammar With Spelling - - 1048576 - 2147483647 - - - - - - Correct Spelling Automatically - - 2147483647 - - - - - - - - - Substitutions - - 1048576 - 2147483647 - - - submenuAction: - - Substitutions - - YES - - - Show Substitutions - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Smart Copy/Paste - f - 1048576 - 2147483647 - - - 1 - - - - Smart Quotes - g - 1048576 - 2147483647 - - - 2 - - - - Smart Dashes - - 2147483647 - - - - - - Smart Links - G - 1179648 - 2147483647 - - - 3 - - - - Text Replacement - - 2147483647 - - - - - - - - - Transformations - - 2147483647 - - - submenuAction: - - Transformations - - YES - - - Make Upper Case - - 2147483647 - - - - - - Make Lower Case - - 2147483647 - - - - - - Capitalize - - 2147483647 - - - - - - - - - Speech - - 1048576 - 2147483647 - - - submenuAction: - - Speech - - YES - - - Start Speaking - - 1048576 - 2147483647 - - - - - - Stop Speaking - - 1048576 - 2147483647 - - - - - - @@ -829,14 +520,6 @@ 39 - - - toggleContinuousSpellChecking: - - - - 222 - undo: @@ -853,14 +536,6 @@ 224 - - - checkSpelling: - - - - 225 - paste: @@ -869,14 +544,6 @@ 226 - - - stopSpeaking: - - - - 227 - cut: @@ -885,14 +552,6 @@ 228 - - - showGuessPanel: - - - - 230 - redo: @@ -909,14 +568,6 @@ 232 - - - startSpeaking: - - - - 233 - delete: @@ -933,142 +584,6 @@ 240 - - - performFindPanelAction: - - - - 241 - - - - centerSelectionInVisibleArea: - - - - 245 - - - - toggleGrammarChecking: - - - - 347 - - - - toggleSmartInsertDelete: - - - - 355 - - - - toggleAutomaticQuoteSubstitution: - - - - 356 - - - - toggleAutomaticLinkDetection: - - - - 357 - - - - toggleAutomaticSpellingCorrection: - - - - 456 - - - - orderFrontSubstitutionsPanel: - - - - 458 - - - - toggleAutomaticDashSubstitution: - - - - 461 - - - - toggleAutomaticTextReplacement: - - - - 463 - - - - uppercaseWord: - - - - 464 - - - - capitalizeWord: - - - - 467 - - - - lowercaseWord: - - - - 468 - - - - pasteAsPlainText: - - - - 486 - - - - performFindPanelAction: - - - - 487 - - - - performFindPanelAction: - - - - 488 - - - - performFindPanelAction: - - - - 489 - delegate @@ -1314,18 +829,11 @@ - - - - - - - @@ -1344,11 +852,6 @@ - - 214 - - - 199 @@ -1374,91 +877,6 @@ - - 218 - - - YES - - - - - - 216 - - - YES - - - - - - 200 - - - YES - - - - - - - - - - - 219 - - - - - 201 - - - - - 204 - - - - - 220 - - - YES - - - - - - - - - - 213 - - - - - 210 - - - - - 221 - - - - - 208 - - - - - 209 - - - 57 @@ -1501,154 +919,11 @@ - - 211 - - - YES - - - - - - 212 - - - YES - - - - - - - 195 - - - - - 196 - - - - - 346 - - - - - 348 - - - YES - - - - - - 349 - - - YES - - - - - - - - - - - - 350 - - - - - 351 - - - - - 354 - - - 420 - - 450 - - - YES - - - - - - 451 - - - YES - - - - - - - - 452 - - - - - 453 - - - - - 454 - - - - - 457 - - - - - 459 - - - - - 460 - - - - - 462 - - - - - 465 - - - - - 466 - - - - - 485 - - - 490 @@ -1905,28 +1180,16 @@ 149.ImportedFromIB2 19.IBPluginDependency 19.ImportedFromIB2 - 195.IBPluginDependency - 195.ImportedFromIB2 - 196.IBPluginDependency - 196.ImportedFromIB2 197.IBPluginDependency 197.ImportedFromIB2 198.IBPluginDependency 198.ImportedFromIB2 199.IBPluginDependency 199.ImportedFromIB2 - 200.IBEditorWindowLastContentRect - 200.IBPluginDependency - 200.ImportedFromIB2 - 200.editorWindowContentRectSynchronizationRect - 201.IBPluginDependency - 201.ImportedFromIB2 202.IBPluginDependency 202.ImportedFromIB2 203.IBPluginDependency 203.ImportedFromIB2 - 204.IBPluginDependency - 204.ImportedFromIB2 205.IBEditorWindowLastContentRect 205.IBPluginDependency 205.ImportedFromIB2 @@ -1935,37 +1198,10 @@ 206.ImportedFromIB2 207.IBPluginDependency 207.ImportedFromIB2 - 208.IBPluginDependency - 208.ImportedFromIB2 - 209.IBPluginDependency - 209.ImportedFromIB2 - 210.IBPluginDependency - 210.ImportedFromIB2 - 211.IBPluginDependency - 211.ImportedFromIB2 - 212.IBPluginDependency - 212.ImportedFromIB2 - 212.editorWindowContentRectSynchronizationRect - 213.IBPluginDependency - 213.ImportedFromIB2 - 214.IBPluginDependency - 214.ImportedFromIB2 215.IBPluginDependency 215.ImportedFromIB2 - 216.IBPluginDependency - 216.ImportedFromIB2 217.IBPluginDependency 217.ImportedFromIB2 - 218.IBPluginDependency - 218.ImportedFromIB2 - 219.IBPluginDependency - 219.ImportedFromIB2 - 220.IBEditorWindowLastContentRect - 220.IBPluginDependency - 220.ImportedFromIB2 - 220.editorWindowContentRectSynchronizationRect - 221.IBPluginDependency - 221.ImportedFromIB2 23.IBPluginDependency 23.ImportedFromIB2 236.IBPluginDependency @@ -1981,33 +1217,6 @@ 29.ImportedFromIB2 29.WindowOrigin 29.editorWindowContentRectSynchronizationRect - 346.IBPluginDependency - 346.ImportedFromIB2 - 348.IBPluginDependency - 348.ImportedFromIB2 - 349.IBEditorWindowLastContentRect - 349.IBPluginDependency - 349.ImportedFromIB2 - 349.editorWindowContentRectSynchronizationRect - 350.IBPluginDependency - 350.ImportedFromIB2 - 351.IBPluginDependency - 351.ImportedFromIB2 - 354.IBPluginDependency - 354.ImportedFromIB2 - 450.IBPluginDependency - 451.IBEditorWindowLastContentRect - 451.IBPluginDependency - 452.IBPluginDependency - 453.IBPluginDependency - 454.IBPluginDependency - 457.IBPluginDependency - 459.IBPluginDependency - 460.IBPluginDependency - 462.IBPluginDependency - 465.IBPluginDependency - 466.IBPluginDependency - 485.IBPluginDependency 490.IBPluginDependency 491.IBEditorWindowLastContentRect 491.IBPluginDependency @@ -2080,19 +1289,7 @@ com.apple.InterfaceBuilder.CocoaPlugin - {{753, 187}, {275, 113}} - com.apple.InterfaceBuilder.CocoaPlugin - - {{608, 612}, {275, 83}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{264, 347}, {254, 283}} + {{364, 477}, {151, 153}} com.apple.InterfaceBuilder.CocoaPlugin {{187, 434}, {243, 243}} @@ -2110,33 +1307,6 @@ com.apple.InterfaceBuilder.CocoaPlugin - {{608, 612}, {167, 43}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{753, 217}, {238, 103}} - com.apple.InterfaceBuilder.CocoaPlugin - - {{608, 612}, {241, 103}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - {{408, 537}, {194, 93}} com.apple.InterfaceBuilder.CocoaPlugin @@ -2147,33 +1317,6 @@ {74, 862} {{6, 978}, {478, 20}} com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{746, 287}, {220, 133}} - com.apple.InterfaceBuilder.CocoaPlugin - - {{608, 612}, {215, 63}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - {{753, 197}, {170, 63}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin {{322, 587}, {178, 43}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -2847,14 +1990,6 @@ AppKit.framework/Headers/NSText.h - - NSTextView - NSText - - IBFrameworkSource - AppKit.framework/Headers/NSTextView.h - - NSView diff --git a/Resources/CocoaShare/Preferences/English.lproj/AutoUploadPane.xib b/Resources/CocoaShare/Preferences/English.lproj/AutoUploadPane.xib index 7c2e757..7a6ae09 100644 --- a/Resources/CocoaShare/Preferences/English.lproj/AutoUploadPane.xib +++ b/Resources/CocoaShare/Preferences/English.lproj/AutoUploadPane.xib @@ -1,7 +1,7 @@ - 1060 + 1050 10J567 823 1038.35 @@ -1323,6 +1323,20 @@ Classes/CocoaShare/Preferences/MGMAutoUploadPane.h + + NSObject + + IBProjectSource + Classes/Dropbox/DropboxSDK/JSON/NSObject+SBJSON.h + + + + NSObject + + IBProjectSource + Classes/Dropbox/DropboxSDK/JSON/SBJsonWriter.h + + YES @@ -1692,6 +1706,27 @@ Growl.framework/Headers/GrowlApplicationBridge.h + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CIImageProvider.h + + NSObject @@ -1803,7 +1838,7 @@ IBCocoaFramework com.apple.InterfaceBuilder.CocoaPlugin.macosx - + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 diff --git a/Resources/Dropbox/DropboxAccountPane.xib b/Resources/Dropbox/English.lproj/DropboxAccountPane.xib similarity index 100% rename from Resources/Dropbox/DropboxAccountPane.xib rename to Resources/Dropbox/English.lproj/DropboxAccountPane.xib diff --git a/Resources/FTP/FTPAccountPane.xib b/Resources/FTP/English.lproj/FTPAccountPane.xib similarity index 100% rename from Resources/FTP/FTPAccountPane.xib rename to Resources/FTP/English.lproj/FTPAccountPane.xib diff --git a/Resources/HTTP/HTTPAccountPane.xib b/Resources/HTTP/English.lproj/HTTPAccountPane.xib similarity index 100% rename from Resources/HTTP/HTTPAccountPane.xib rename to Resources/HTTP/English.lproj/HTTPAccountPane.xib diff --git a/Resources/MobileMe/MobileMeAccountPane.xib b/Resources/MobileMe/English.lproj/MobileMeAccountPane.xib similarity index 100% rename from Resources/MobileMe/MobileMeAccountPane.xib rename to Resources/MobileMe/English.lproj/MobileMeAccountPane.xib diff --git a/Resources/SFTP/SFTPAccountPane.xib b/Resources/SFTP/English.lproj/SFTPAccountPane.xib similarity index 100% rename from Resources/SFTP/SFTPAccountPane.xib rename to Resources/SFTP/English.lproj/SFTPAccountPane.xib diff --git a/Resources/WebDav/WebDavAccountPane.xib b/Resources/WebDav/English.lproj/WebDavAccountPane.xib similarity index 100% rename from Resources/WebDav/WebDavAccountPane.xib rename to Resources/WebDav/English.lproj/WebDavAccountPane.xib diff --git a/Resources/twitpic/twitpicAccountPane.xib b/Resources/twitpic/English.lproj/twitpicAccountPane.xib similarity index 100% rename from Resources/twitpic/twitpicAccountPane.xib rename to Resources/twitpic/English.lproj/twitpicAccountPane.xib diff --git a/Resources/twitpic/twitpicPostWindow.xib b/Resources/twitpic/English.lproj/twitpicPostWindow.xib similarity index 100% rename from Resources/twitpic/twitpicPostWindow.xib rename to Resources/twitpic/English.lproj/twitpicPostWindow.xib