aboutsummaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/DMLocalizedNib.m162
-rw-r--r--Source/DMLocalizedNibBundle.m295
2 files changed, 0 insertions, 457 deletions
diff --git a/Source/DMLocalizedNib.m b/Source/DMLocalizedNib.m
deleted file mode 100644
index 4a03247a..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]) SPClear(deliciousNibNames);
- }
- [self deliciousDealloc];
-}
-
-@end
diff --git a/Source/DMLocalizedNibBundle.m b/Source/DMLocalizedNibBundle.m
deleted file mode 100644
index 5dc94f9f..00000000
--- a/Source/DMLocalizedNibBundle.m
+++ /dev/null
@@ -1,295 +0,0 @@
-// DMLocalizedNibBundle.m
-//
-// Created by William Jon Shipley on 2/13/05.
-// Copyright (c) 2005-2009 Golden % Braeburn, LLC. All rights reserved except as below:
-//
-// This code is provided as-is, with no warranties or anything. You may use it in your projects as you wish,
-// but you must leave this comment block (credits and copyright) intact. That's the only restriction
-// -- Golden % Braeburn otherwise grants you a fully-paid, worldwide, transferrable license to use this
-// code as you see fit, including but not limited to making derivative works.
-
-#import <Cocoa/Cocoa.h>
-#import <objc/runtime.h>
-#import <Availability.h>
-
-@interface NSBundle (DMLocalizedNibBundle)
-#if __MAC_OS_X_VERSION_MAX_ALLOWED >= __MAC_10_8
-- (BOOL)deliciousLocalizingLoadNibNamed:(NSString *)fileName owner:(id)owner topLevelObjects:(NSArray **)topLevelObjects;
-#endif
-+ (BOOL)deliciousLocalizingLoadNibFile:(NSString *)fileName externalNameTable:(NSDictionary *)context withZone:(NSZone *)zone;
-@end
-
-@interface NSBundle (DMLocalizedNibBundle_Private_API)
-+ (void)_localizeStringsInObject:(id)object table:(NSString *)table;
-+ (NSString *)_localizedStringForString:(NSString *)string table:(NSString *)table;
-// localize particular attributes in objects
-+ (void)_localizeTitleOfObject:(id)object table:(NSString *)table;
-+ (void)_localizeAlternateTitleOfObject:(id)object table:(NSString *)table;
-+ (void)_localizeStringValueOfObject:(id)object table:(NSString *)table;
-+ (void)_localizePlaceholderStringOfObject:(id)object table:(NSString *)table;
-+ (void)_localizeToolTipOfObject:(id)object table:(NSString *)table;
-+ (void)_localizeLabelOfObject:(id)object table:(NSString *)table;
-@end
-
-static NSMutableArray *deliciousBindingKeys = nil;
-
-@implementation NSBundle (DMLocalizedNibBundle)
-
-#pragma mark NSObject
-
-+ (void)load
-{
- NSAutoreleasePool *autoreleasePool = [[NSAutoreleasePool alloc] init];
- if (self == [NSBundle class]) {
- Method oldM,newM;
-#if __MAC_OS_X_VERSION_MAX_ALLOWED >= __MAC_10_8
- oldM = class_getInstanceMethod(self, @selector(loadNibNamed:owner:topLevelObjects:));
- newM = class_getInstanceMethod(self, @selector(deliciousLocalizingLoadNibNamed:owner:topLevelObjects:));
- method_exchangeImplementations(oldM, newM);
-#endif
- oldM = class_getClassMethod(self, @selector(loadNibFile:externalNameTable:withZone:));
- newM = class_getClassMethod(self, @selector(deliciousLocalizingLoadNibFile:externalNameTable:withZone:));
- method_exchangeImplementations(oldM, newM);
- deliciousBindingKeys = [[NSMutableArray alloc] initWithObjects:
- NSMultipleValuesPlaceholderBindingOption,
- NSNoSelectionPlaceholderBindingOption,
- NSNotApplicablePlaceholderBindingOption,
- NSNullPlaceholderBindingOption,
- nil];
- }
- [autoreleasePool release];
-}
-
-#pragma mark API
-
-#if __MAC_OS_X_VERSION_MAX_ALLOWED >= __MAC_10_8
-- (BOOL)deliciousLocalizingLoadNibNamed:(NSString *)fileName owner:(id)owner topLevelObjects:(NSArray **)topLevelObjects
-{
- fileName = [self pathForResource:fileName ofType:@"nib"];
- NSString *localizedStringsTableName = [[fileName lastPathComponent] stringByDeletingPathExtension];
- NSString *localizedStringsTablePath = [[NSBundle mainBundle] pathForResource:localizedStringsTableName ofType:@"strings"];
- if (localizedStringsTablePath && ![[[localizedStringsTablePath stringByDeletingLastPathComponent] lastPathComponent] isEqualToString:@"English.lproj"]) {
-
- NSNib *nib = [[NSNib alloc] initWithContentsOfURL:[NSURL fileURLWithPath:fileName]];
- BOOL success = [nib instantiateWithOwner:owner topLevelObjects:topLevelObjects];
- NSMutableArray *topLevelObjectsArray = [NSMutableArray arrayWithArray:*topLevelObjects];
- [[self class] _localizeStringsInObject:topLevelObjectsArray table:localizedStringsTableName];
-
- [nib release];
- return success;
-
- } else {
- return [self deliciousLocalizingLoadNibNamed:localizedStringsTableName owner:owner topLevelObjects:topLevelObjects];
- }
-}
-#endif
-
-+ (BOOL)deliciousLocalizingLoadNibFile:(NSString *)fileName externalNameTable:(NSDictionary *)context withZone:(NSZone *)zone
-{
- NSString *localizedStringsTableName = [[fileName lastPathComponent] stringByDeletingPathExtension];
- NSString *localizedStringsTablePath = [[NSBundle mainBundle] pathForResource:localizedStringsTableName ofType:@"strings"];
- if (localizedStringsTablePath && ![[[localizedStringsTablePath stringByDeletingLastPathComponent] lastPathComponent] isEqualToString:@"English.lproj"]) {
-
- NSNib *nib = [[NSNib alloc] initWithContentsOfURL:[NSURL fileURLWithPath:fileName]];
- NSMutableArray *topLevelObjectsArray = [context objectForKey:NSNibTopLevelObjects];
- if (!topLevelObjectsArray) {
- topLevelObjectsArray = [NSMutableArray array];
- context = [NSMutableDictionary dictionaryWithDictionary:context];
- [(NSMutableDictionary *)context setObject:topLevelObjectsArray forKey:NSNibTopLevelObjects];
- }
- BOOL success = [nib instantiateNibWithExternalNameTable:context];
- [self _localizeStringsInObject:topLevelObjectsArray table:localizedStringsTableName];
-
- [nib release];
- return success;
-
- } else {
- return [self deliciousLocalizingLoadNibFile:fileName externalNameTable:context withZone:zone];
- }
-}
-
-@end
-
-#pragma mark Private API
-
-@implementation NSBundle (DMLocalizedNibBundle_Private_API)
-
-+ (void)_localizeStringsInObject:(id)object table:(NSString *)table
-{
- if ([object isKindOfClass:[NSArray class]]) {
- NSArray *array = object;
-
- for (id nibItem in array)
- [self _localizeStringsInObject:nibItem table:table];
-
- } else if ([object isKindOfClass:[NSCell class]]) {
- NSCell *cell = object;
-
- if ([cell isKindOfClass:[NSActionCell class]]) {
- NSActionCell *actionCell = (NSActionCell *)cell;
-
- if ([actionCell isKindOfClass:[NSButtonCell class]]) {
- NSButtonCell *buttonCell = (NSButtonCell *)actionCell;
- if ([buttonCell imagePosition] != NSImageOnly) {
- [self _localizeTitleOfObject:buttonCell table:table];
- [self _localizeStringValueOfObject:buttonCell table:table];
- [self _localizeAlternateTitleOfObject:buttonCell table:table];
- }
-
- } else if ([actionCell isKindOfClass:[NSTextFieldCell class]]) {
- NSTextFieldCell *textFieldCell = (NSTextFieldCell *)actionCell;
- // Following line is redundant with other code, localizes twice.
- // [self _localizeTitleOfObject:textFieldCell table:table];
- [self _localizeStringValueOfObject:textFieldCell table:table];
- [self _localizePlaceholderStringOfObject:textFieldCell table:table];
-
- } else if ([actionCell type] == NSTextCellType) {
- [self _localizeTitleOfObject:actionCell table:table];
- [self _localizeStringValueOfObject:actionCell table:table];
- }
- }
-
- } else if ([object isKindOfClass:[NSMenu class]]) {
- NSMenu *menu = object;
- [self _localizeTitleOfObject:menu table:table];
-
- [self _localizeStringsInObject:[menu itemArray] table:table];
-
- } else if ([object isKindOfClass:[NSMenuItem class]]) {
- NSMenuItem *menuItem = object;
- [self _localizeTitleOfObject:menuItem table:table];
- [self _localizeToolTipOfObject:menuItem table:table];
-
- [self _localizeStringsInObject:[menuItem submenu] table:table];
-
- } else if ([object isKindOfClass:[NSView class]]) {
- NSView *view = object;
- [self _localizeToolTipOfObject:view table:table];
-
- if ([view isKindOfClass:[NSBox class]]) {
- NSBox *box = (NSBox *)view;
- [self _localizeTitleOfObject:box table:table];
-
- } else if ([view isKindOfClass:[NSControl class]]) {
- NSControl *control = (NSControl *)view;
-
- if ([view isKindOfClass:[NSButton class]]) {
- NSButton *button = (NSButton *)control;
-
- if ([button isKindOfClass:[NSPopUpButton class]]) {
- NSPopUpButton *popUpButton = (NSPopUpButton *)button;
- NSMenu *menu = [popUpButton menu];
-
- [self _localizeStringsInObject:[menu itemArray] table:table];
- } else
- [self _localizeStringsInObject:[button cell] table:table];
-
-
- } else if ([view isKindOfClass:[NSMatrix class]]) {
- NSMatrix *matrix = (NSMatrix *)control;
-
- NSArray *cells = [matrix cells];
- [self _localizeStringsInObject:cells table:table];
-
- for (NSCell *cell in cells) {
-
- NSString *localizedCellToolTip = [self _localizedStringForString:[matrix toolTipForCell:cell] table:table];
- if (localizedCellToolTip)
- [matrix setToolTip:localizedCellToolTip forCell:cell];
- }
-
- } else if ([view isKindOfClass:[NSSegmentedControl class]]) {
- NSSegmentedControl *segmentedControl = (NSSegmentedControl *)control;
-
- NSInteger segmentIndex, segmentCount = [segmentedControl segmentCount];
- for (segmentIndex = 0; segmentIndex < segmentCount; segmentIndex++) {
- NSString *localizedSegmentLabel = [self _localizedStringForString:[segmentedControl labelForSegment:segmentIndex] table:table];
- if (localizedSegmentLabel)
- [segmentedControl setLabel:localizedSegmentLabel forSegment:segmentIndex];
- NSString *localizedSegmentTooltip = [self _localizedStringForString:[[segmentedControl cell] toolTipForSegment:segmentIndex] table:table];
- if (localizedSegmentTooltip)
- [[segmentedControl cell] setToolTip:localizedSegmentTooltip forSegment:segmentIndex];
-
- [self _localizeStringsInObject:[segmentedControl menuForSegment:segmentIndex] table:table];
- }
-
- } else if ([view isKindOfClass:[NSTableView class]]) {
- for (NSTableColumn *column in [(NSTableView*)view tableColumns]) {
- [self _localizeStringValueOfObject:[column headerCell] table:table];
- NSString *localizedHeaderTip = [self _localizedStringForString:[column headerToolTip] table:table];
- if (localizedHeaderTip) [column setHeaderToolTip:localizedHeaderTip];
- }
-
- } else if ([view isKindOfClass:[NSTextField class]]) {
- NSDictionary *vb;
- if ((vb = [view infoForBinding:@"value"])) {
- NSMutableDictionary *lvb = [NSMutableDictionary dictionaryWithDictionary:[vb objectForKey:NSOptionsKey]];
- for (NSString *bindingKey in deliciousBindingKeys) {
- if ([lvb objectForKey:bindingKey] == [NSNull null]) continue;
- NSString *localizedBindingString = [self _localizedStringForString:[lvb objectForKey:bindingKey] table:table];
- if (localizedBindingString)
- [lvb setObject:localizedBindingString forKey:bindingKey];
- }
- [view bind:@"value" toObject:[vb objectForKey:NSObservedObjectKey] withKeyPath:[vb objectForKey:NSObservedKeyPathKey] options:lvb];
- }
- [self _localizeStringsInObject:[control cell] table:table];
-
- } else
- [self _localizeStringsInObject:[control cell] table:table];
-
- } else if ([view isKindOfClass:[NSTabView class]]) {
- NSTabView *tabView = (NSTabView *)view;
- for (NSTabViewItem *tabViewItem in [tabView tabViewItems]) {
- [self _localizeLabelOfObject:tabViewItem table:table];
- if ([tabViewItem respondsToSelector:@selector(toolTip)]) // 10.6+
- [self _localizeToolTipOfObject:tabViewItem table:table];
- [self _localizeStringsInObject:[tabViewItem view] table:table];
- }
-
- }
-
- [self _localizeStringsInObject:[view subviews] table:table];
-
- } else if ([object isKindOfClass:[NSWindow class]]) {
- NSWindow *window = object;
- [self _localizeTitleOfObject:window table:table];
-
- [self _localizeStringsInObject:[window contentView] table:table];
-
- }
-}
-
-+ (NSString *)_localizedStringForString:(NSString *)string table:(NSString *)table
-{
- if (![string length])
- return nil;
-
- static NSString *defaultValue = @"I AM THE DEFAULT VALUE";
- NSString *localizedString = [[NSBundle mainBundle] localizedStringForKey:string value:defaultValue table:table];
- if (localizedString != defaultValue) {
- return localizedString;
- } else {
-#ifdef BETA_BUILD
- NSLog(@" not going to localize string %@", string);
-#endif
- return nil;
- }
-}
-
-
-#define DM_DEFINE_LOCALIZE_BLAH_OF_OBJECT(blahName, capitalizedBlahName) \
-+ (void)_localize ##capitalizedBlahName ##OfObject:(id)object table:(NSString *)table; \
-{ \
- NSString *localizedBlah = [self _localizedStringForString:[object blahName] table:table]; \
- if (localizedBlah) \
- [object set ##capitalizedBlahName:localizedBlah]; \
-}
-
-DM_DEFINE_LOCALIZE_BLAH_OF_OBJECT(title, Title)
-DM_DEFINE_LOCALIZE_BLAH_OF_OBJECT(alternateTitle, AlternateTitle)
-DM_DEFINE_LOCALIZE_BLAH_OF_OBJECT(stringValue, StringValue)
-DM_DEFINE_LOCALIZE_BLAH_OF_OBJECT(placeholderString, PlaceholderString)
-DM_DEFINE_LOCALIZE_BLAH_OF_OBJECT(toolTip, ToolTip)
-DM_DEFINE_LOCALIZE_BLAH_OF_OBJECT(label, Label)
-
-@end