diff options
Diffstat (limited to 'Source/DMLocalizedNib.m')
-rw-r--r-- | Source/DMLocalizedNib.m | 162 |
1 files changed, 0 insertions, 162 deletions
diff --git a/Source/DMLocalizedNib.m b/Source/DMLocalizedNib.m deleted file mode 100644 index 56f6a810..00000000 --- a/Source/DMLocalizedNib.m +++ /dev/null @@ -1,162 +0,0 @@ -// -// DMLocalizedNib.h -// sequel-pro -// -// Created by Rowan Beentje on July 4, 2010. -// Copyright (c) 2010 Rowan Beentje. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person -// obtaining a copy of this software and associated documentation -// files (the "Software"), to deal in the Software without -// restriction, including without limitation the rights to use, -// copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following -// conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -// OTHER DEALINGS IN THE SOFTWARE. -// -// More info at <https://github.com/sequelpro/sequelpro> - -#import <Cocoa/Cocoa.h> -#import <objc/runtime.h> - -@interface NSNib (DMLocalizedNib) -- (id)deliciousInitWithNibNamed:(NSString *)nibName bundle:(NSBundle *)bundle; -- (id)deliciousInitWithContentsOfURL:(NSURL *)nibFileURL; -- (BOOL)deliciousInstantiateNibWithOwner:(id)owner topLevelObjects:(NSArray **)topLevelObjects; -- (void)setDeliciousNibName:(NSString *)nibName; -- (NSString *)deliciousNibName; -- (void)deliciousDealloc; -@end - -// Private methods from DMLocalizedNib used here -@interface NSBundle () -+ (void)_localizeStringsInObject:(id)object table:(NSString *)table; -@end - -static NSMutableDictionary *deliciousNibNames = nil; - -@implementation NSNib (DMLocalizedNib) - -#pragma mark NSObject - -/** - * On NSNib class load, swizzle in our overrides of the basic methods. - */ -+ (void)load; -{ - NSAutoreleasePool *autoreleasePool = [[NSAutoreleasePool alloc] init]; - if (self == [NSNib class]) { - method_exchangeImplementations(class_getInstanceMethod(self, @selector(initWithNibNamed:bundle:)), class_getInstanceMethod(self, @selector(deliciousInitWithNibNamed:bundle:))); - method_exchangeImplementations(class_getInstanceMethod(self, @selector(initWithContentsOfURL:)), class_getInstanceMethod(self, @selector(deliciousInitWithContentsOfURL:))); - method_exchangeImplementations(class_getInstanceMethod(self, @selector(instantiateNibWithOwner:topLevelObjects:)), class_getInstanceMethod(self, @selector(deliciousInstantiateNibWithOwner:topLevelObjects:))); - method_exchangeImplementations(class_getInstanceMethod(self, @selector(dealloc)), class_getInstanceMethod(self, @selector(deliciousDealloc))); - } - [autoreleasePool release]; -} - - -#pragma mark API - -/** - * An init method swizzled with the original method, storing the base - * name passed into the init method for later reuse. - */ -- (id)deliciousInitWithNibNamed:(NSString *)nibName bundle:(NSBundle *)bundle -{ - - // Instantiate the nib using the original (swizzled) call - id nib = [self deliciousInitWithNibNamed:nibName bundle:bundle]; - if (nib) { - [self setDeliciousNibName:nibName]; - } - - return nib; -} - -/** - * An init method swizzled with the original method, extracting and - * storing the base name of the nib for later reuse. - */ -- (id)deliciousInitWithContentsOfURL:(NSURL *)nibFileURL -{ - - // Instantiate the nib using the original (swizzled) call - id nib = [self deliciousInitWithContentsOfURL:nibFileURL]; - if (nib) { - - // Extract the filename from the URL - NSArray *urlParts = [[nibFileURL path] componentsSeparatedByString:@"/"]; - NSString *nibName = [urlParts lastObject]; - [self setDeliciousNibName:nibName]; - } - - return nib; -} - -/** - * An instatiation method swizzled with the original method. Instantiates - * as before, and then if it can find a .strings file in a preferred language - * to localize the instantiated objects with, does so. - */ -- (BOOL)deliciousInstantiateNibWithOwner:(id)owner topLevelObjects:(NSArray **)topLevelObjects -{ - if ([self deliciousInstantiateNibWithOwner:owner topLevelObjects:topLevelObjects]) { - - // Look for a localised strings table file based on the original nib name, - // translating only if one was found and it wasn't English - NSString *localizedStringsTablePath = [[NSBundle mainBundle] pathForResource:[self deliciousNibName] ofType:@"strings"]; - if (localizedStringsTablePath && ![[[localizedStringsTablePath stringByDeletingLastPathComponent] lastPathComponent] isEqualToString:@"English.lproj"]) { - [NSBundle _localizeStringsInObject:*topLevelObjects table:[self deliciousNibName]]; - } - - return YES; - } - - return NO; -} - -/** - * Store the nib name that was used when setting up the nib, which will - * also be used to look up the .strings file name - */ -- (void)setDeliciousNibName:(NSString *)nibName -{ - if (!deliciousNibNames) { - deliciousNibNames = [[NSMutableDictionary alloc] init]; - } - [deliciousNibNames setObject:nibName forKey:[NSValue valueWithPointer:self]]; -} - -/** - * Retrieve the nib name to look up the matching .strings file name - */ -- (NSString *)deliciousNibName -{ - return [deliciousNibNames objectForKey:[NSValue valueWithPointer:self]]; -} - -/** - * Swizzled deallocate to release custom stores. - */ -- (void)deliciousDealloc -{ - if (deliciousNibNames) { - [deliciousNibNames removeObjectForKey:[NSValue valueWithPointer:self]]; - if (![deliciousNibNames count]) [deliciousNibNames release], deliciousNibNames = nil; - } - [self deliciousDealloc]; -} - -@end |