diff --git a/QuickLocalization.xcodeproj/project.pbxproj b/QuickLocalization.xcodeproj/project.pbxproj index 661f463..9f6c8ea 100644 --- a/QuickLocalization.xcodeproj/project.pbxproj +++ b/QuickLocalization.xcodeproj/project.pbxproj @@ -8,6 +8,7 @@ /* Begin PBXBuildFile section */ 09A343C6174068E600A713EE /* RCXcode.m in Sources */ = {isa = PBXBuildFile; fileRef = 09A343C5174068E200A713EE /* RCXcode.m */; }; + 09EC581817E3B6E1002261C4 /* icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = 09EC581717E3B6E1002261C4 /* icon.icns */; }; 09F65636174041010000486B /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09F65635174041010000486B /* AppKit.framework */; }; 09F65638174041010000486B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09F65637174041010000486B /* Foundation.framework */; }; 09F6563E174041010000486B /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 09F6563C174041010000486B /* InfoPlist.strings */; }; @@ -17,6 +18,7 @@ /* Begin PBXFileReference section */ 09A343C4174068E200A713EE /* RCXcode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCXcode.h; sourceTree = ""; }; 09A343C5174068E200A713EE /* RCXcode.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RCXcode.m; sourceTree = ""; }; + 09EC581717E3B6E1002261C4 /* icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = icon.icns; sourceTree = ""; }; 09F65632174041010000486B /* QuickLocalization.xcplugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = QuickLocalization.xcplugin; sourceTree = BUILT_PRODUCTS_DIR; }; 09F65635174041010000486B /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; 09F65637174041010000486B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -82,6 +84,7 @@ isa = PBXGroup; children = ( 09F6563B174041010000486B /* QuickLocalization-Info.plist */, + 09EC581717E3B6E1002261C4 /* icon.icns */, 09F6563C174041010000486B /* InfoPlist.strings */, 09F65642174041010000486B /* QuickLocalization-Prefix.pch */, ); @@ -140,6 +143,7 @@ buildActionMask = 2147483647; files = ( 09F6563E174041010000486B /* InfoPlist.strings in Resources */, + 09EC581817E3B6E1002261C4 /* icon.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -229,10 +233,11 @@ 09F65646174041010000486B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; COMBINE_HIDPI_IMAGES = YES; DEPLOYMENT_LOCATION = YES; DSTROOT = "$(HOME)"; - GCC_ENABLE_OBJC_GC = required; + GCC_ENABLE_OBJC_GC = unsupported; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "QuickLocalization/QuickLocalization-Prefix.pch"; INFOPLIST_FILE = "QuickLocalization/QuickLocalization-Info.plist"; @@ -246,10 +251,11 @@ 09F65647174041010000486B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; COMBINE_HIDPI_IMAGES = YES; DEPLOYMENT_LOCATION = YES; DSTROOT = "$(HOME)"; - GCC_ENABLE_OBJC_GC = required; + GCC_ENABLE_OBJC_GC = unsupported; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "QuickLocalization/QuickLocalization-Prefix.pch"; INFOPLIST_FILE = "QuickLocalization/QuickLocalization-Info.plist"; diff --git a/QuickLocalization.xcodeproj/project.xcworkspace/xcshareddata/QuickLocalization.xccheckout b/QuickLocalization.xcodeproj/project.xcworkspace/xcshareddata/QuickLocalization.xccheckout new file mode 100644 index 0000000..aa3c89b --- /dev/null +++ b/QuickLocalization.xcodeproj/project.xcworkspace/xcshareddata/QuickLocalization.xccheckout @@ -0,0 +1,41 @@ + + + + + IDESourceControlProjectFavoriteDictionaryKey + + IDESourceControlProjectIdentifier + 1EE47844-8854-4E87-9C9D-9981C6C7EB5C + IDESourceControlProjectName + QuickLocalization + IDESourceControlProjectOriginsDictionary + + B1384B3C-CDED-4974-B523-BFBC8D94735C + ssh://github.com/nanaimostudio/Xcode-Quick-Localization.git + + IDESourceControlProjectPath + QuickLocalization.xcodeproj/project.xcworkspace + IDESourceControlProjectRelativeInstallPathDictionary + + B1384B3C-CDED-4974-B523-BFBC8D94735C + ../.. + + IDESourceControlProjectURL + ssh://github.com/nanaimostudio/Xcode-Quick-Localization.git + IDESourceControlProjectVersion + 110 + IDESourceControlProjectWCCIdentifier + B1384B3C-CDED-4974-B523-BFBC8D94735C + IDESourceControlProjectWCConfigurations + + + IDESourceControlRepositoryExtensionIdentifierKey + public.vcs.git + IDESourceControlWCCIdentifierKey + B1384B3C-CDED-4974-B523-BFBC8D94735C + IDESourceControlWCCName + Xcode-Quick-Localization + + + + diff --git a/QuickLocalization/QuickLocalization-Info.plist b/QuickLocalization/QuickLocalization-Info.plist index baca8d8..d70f3e3 100644 --- a/QuickLocalization/QuickLocalization-Info.plist +++ b/QuickLocalization/QuickLocalization-Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile - + icon.icns CFBundleIdentifier com.nanaimostudio.${PRODUCT_NAME:rfc1034identifier} CFBundleInfoDictionaryVersion @@ -22,11 +22,34 @@ ???? CFBundleVersion 1 + CFPlugInDynamicRegisterFunction + + CFPlugInDynamicRegistration + NO + CFPlugInFactories + + 00000000-0000-0000-0000-000000000000 + MyFactoryFunction + + CFPlugInTypes + + 00000000-0000-0000-0000-000000000000 + + 00000000-0000-0000-0000-000000000000 + + + CFPlugInUnloadFunction + XC4Compatible XCGCReady - + XCPluginHasUI + DVTPlugInCompatibilityUUIDs + + 63FC1C47-140D-42B0-BB4D-A10B2D225574 + 37B30044-3B14-46BA-ABAA-F01000C27B63 + diff --git a/QuickLocalization/QuickLocalization.m b/QuickLocalization/QuickLocalization.m index d9979ea..3326b1d 100644 --- a/QuickLocalization/QuickLocalization.m +++ b/QuickLocalization/QuickLocalization.m @@ -17,10 +17,10 @@ static NSString *localizeRegexs[] = { }; static NSString *stringRegexs = @"@\"[^\"]*\""; @implementation QuickLocalization +static id sharedPlugin = nil; + (void)pluginDidLoad:(NSBundle *)plugin { - static id sharedPlugin = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedPlugin = [[self alloc] init]; @@ -29,26 +29,18 @@ static NSString *stringRegexs = @"@\"[^\"]*\""; - (id)init { if (self = [super init]) { - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(applicationDidFinishLaunching:) - name:NSApplicationDidFinishLaunchingNotification - object:nil]; + NSMenuItem *viewMenuItem = [[NSApp mainMenu] itemWithTitle:@"Edit"]; + if (viewMenuItem) { + [[viewMenuItem submenu] addItem:[NSMenuItem separatorItem]]; + NSMenuItem *sample = [[NSMenuItem alloc] initWithTitle:@"Quick Localization" action:@selector(quickLocalization) keyEquivalent:@"d"]; + [sample setKeyEquivalentModifierMask:NSCommandKeyMask | NSAlternateKeyMask]; + [sample setTarget:self]; + [[viewMenuItem submenu] addItem:sample]; + } } return self; } -- (void)applicationDidFinishLaunching:(NSNotification *)notification { - NSMenuItem *viewMenuItem = [[NSApp mainMenu] itemWithTitle:@"Edit"]; - if (viewMenuItem) { - [[viewMenuItem submenu] addItem:[NSMenuItem separatorItem]]; - NSMenuItem *sample = [[NSMenuItem alloc] initWithTitle:@"Quick Localization" action:@selector(quickLocalization) keyEquivalent:@"c"]; - [sample setKeyEquivalentModifierMask:NSCommandKeyMask | NSShiftKeyMask]; - [sample setTarget:self]; - [[viewMenuItem submenu] addItem:sample]; - [sample release]; - } -} - // Sample Action, for menu item: - (void)quickLocalization { IDESourceCodeDocument *document = [RCXcode currentSourceCodeDocument]; @@ -64,10 +56,10 @@ static NSString *stringRegexs = @"@\"[^\"]*\""; NSRange lineRange = [textView.textStorage.string lineRangeForRange:range]; NSString *line = [textView.textStorage.string substringWithRange:lineRange]; - NSRegularExpression *localizedRex = [[[NSRegularExpression alloc] initWithPattern:localizeRegexs[0] options:NSRegularExpressionCaseInsensitive error:nil] autorelease]; + NSRegularExpression *localizedRex = [[NSRegularExpression alloc] initWithPattern:localizeRegexs[0] options:NSRegularExpressionCaseInsensitive error:nil]; NSArray *localizedMatches = [localizedRex matchesInString:line options:0 range:NSMakeRange(0, [line length])]; - NSRegularExpression *regex = [[[NSRegularExpression alloc] initWithPattern:stringRegexs options:NSRegularExpressionCaseInsensitive error:nil] autorelease]; + NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:stringRegexs options:NSRegularExpressionCaseInsensitive error:nil]; NSArray *matches = [regex matchesInString:line options:0 range:NSMakeRange(0, [line length])]; NSUInteger addedLength = 0; for (int i = 0; i < [matches count]; i++) { @@ -83,7 +75,7 @@ static NSString *stringRegexs = @"@\"[^\"]*\""; addedLength = addedLength + outputString.length - string.length; if ([textView shouldChangeTextInRange:matchedRangeInDocument replacementString:outputString]) { [textView.textStorage replaceCharactersInRange:matchedRangeInDocument - withAttributedString:[[[NSAttributedString alloc] initWithString:outputString] autorelease]]; + withAttributedString:[[NSAttributedString alloc] initWithString:outputString]]; [textView didChangeText]; } @@ -105,9 +97,4 @@ static NSString *stringRegexs = @"@\"[^\"]*\""; return NO; } -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [super dealloc]; -} - @end \ No newline at end of file diff --git a/QuickLocalization/icon.icns b/QuickLocalization/icon.icns new file mode 100644 index 0000000..845fc32 Binary files /dev/null and b/QuickLocalization/icon.icns differ diff --git a/README.md b/README.md index 90d61c7..0da7a0e 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Xcode Plugin to Convert @"content" to NSLocalizedString(@"content", @"content") How To Use ========== -Select any line in xcode, press command + shift + c. String will be converted to localized string. +Select any line in xcode, press option + shift + d. String will be converted to localized string. You can also access it under Edit -> Quick Localization