diff options
author | Damiano Galassi <[email protected]> | 2018-10-20 13:31:06 +0200 |
---|---|---|
committer | Damiano Galassi <[email protected]> | 2018-10-20 13:31:06 +0200 |
commit | 4854e51a58cad3b6ce06cf02d1bec15a5fc38d34 (patch) | |
tree | 5bf4a11c2f8aa8282c0d9e0e9272cdc7ba49fc22 | |
parent | 70f1438bd17a9eea7e18db17d0bbc5b1ec11ac93 (diff) |
MacGui: load the HandBrakeKit framework localized strings from the framework bundle.
-rw-r--r-- | macosx/HBAudio.m | 3 | ||||
-rw-r--r-- | macosx/HBFilters+UIAdditions.m | 32 | ||||
-rw-r--r-- | macosx/HBFilters.m | 33 | ||||
-rw-r--r-- | macosx/HBJob+UIAdditions.m | 152 | ||||
-rw-r--r-- | macosx/HBJob.m | 5 | ||||
-rw-r--r-- | macosx/HBLocalizationUtilities.h | 15 | ||||
-rw-r--r-- | macosx/HBPicture+UIAdditions.m | 4 | ||||
-rw-r--r-- | macosx/HBPreset.m | 9 | ||||
-rw-r--r-- | macosx/HBRange+UIAdditions.m | 7 | ||||
-rw-r--r-- | macosx/HBStateFormatter+Private.m | 25 | ||||
-rw-r--r-- | macosx/HBSubtitles.m | 5 | ||||
-rw-r--r-- | macosx/HBTitle.m | 13 | ||||
-rw-r--r-- | macosx/HBVideo+UIAdditions.m | 8 | ||||
-rw-r--r-- | macosx/HandBrake.xcodeproj/project.pbxproj | 48 |
14 files changed, 219 insertions, 140 deletions
diff --git a/macosx/HBAudio.m b/macosx/HBAudio.m index 4daf72e36..ad9b4b3b8 100644 --- a/macosx/HBAudio.m +++ b/macosx/HBAudio.m @@ -14,6 +14,7 @@ #import "HBAudioDefaults.h" #import "HBCodingUtilities.h" +#import "HBLocalizationUtilities.h" #import "HBJob+Private.h" #include "hb.h" @@ -44,7 +45,7 @@ NSString *HBAudioEncoderChangedNotification = @"HBAudioEncoderChangedNotificatio // Add the none and foreign track to the source array NSMutableArray *sourceTracks = [job.title.audioTracks mutableCopy]; - NSDictionary *none = @{keyAudioTrackName: NSLocalizedString(@"None", @"HBAudio -> none track name")}; + NSDictionary *none = @{keyAudioTrackName: HBKitLocalizedString(@"None", @"HBAudio -> none track name")}; [sourceTracks insertObject:none atIndex:0]; _sourceTracks = [sourceTracks copy]; } diff --git a/macosx/HBFilters+UIAdditions.m b/macosx/HBFilters+UIAdditions.m index 71ce759f8..814482f8e 100644 --- a/macosx/HBFilters+UIAdditions.m +++ b/macosx/HBFilters+UIAdditions.m @@ -5,6 +5,8 @@ It may be used under the terms of the GNU General Public License. */ #import "HBFilters+UIAdditions.h" +#import "HBLocalizationUtilities.h" + #import "hb.h" /** @@ -21,7 +23,7 @@ static NSArray * filterParamsToNamesArray(hb_filter_param_t * (f)(int), int filt { NSString *name = @(preset->name); if ([name isEqualToString:@"Off"]) { - name = NSLocalizedString(@"Off", @"HBFilters -> off display name"); + name = NSLocalizedStringFromTableInBundle(@"Off", nil, [NSBundle bundleForClass:[HBFilters class]], "HBFilters -> off display name"); } [presets addObject:name]; } @@ -43,7 +45,7 @@ static NSDictionary * filterParamsToNamesDict(hb_filter_param_t * (f)(int), int { NSString *name = @(preset->name); if ([name isEqualToString:@"Off"]) { - name = NSLocalizedString(@"Off", @"HBFilters -> off display name"); + name = NSLocalizedStringFromTableInBundle(@"Off", nil, [NSBundle bundleForClass:[HBFilters class]], "HBFilters -> off display name"); } [presets setObject:@(preset->short_name) forKey:name]; } @@ -264,16 +266,16 @@ static NSDictionary *sharpenTypesDict = nil; { if (!deinterlaceTypesDict) { - deinterlaceTypesDict = @{NSLocalizedString(@"Off", @"HBFilters -> filter display name"): @"off", - NSLocalizedString(@"Yadif", @"HBFilters -> filter display name"): @"deinterlace", - NSLocalizedString(@"Decomb", @"HBFilters -> filter display name"): @"decomb"};; + deinterlaceTypesDict = @{HBKitLocalizedString(@"Off", @"HBFilters -> filter display name"): @"off", + HBKitLocalizedString(@"Yadif", @"HBFilters -> filter display name"): @"deinterlace", + HBKitLocalizedString(@"Decomb", @"HBFilters -> filter display name"): @"decomb"};; } return deinterlaceTypesDict; } - (NSArray *)deinterlaceTypes { - return @[NSLocalizedString(@"Off", @"HBFilters -> filter display name"), NSLocalizedString(@"Yadif", @"HBFilters -> filter display name"), NSLocalizedString(@"Decomb", @"HBFilters -> filter display name")]; + return @[HBKitLocalizedString(@"Off", @"HBFilters -> filter display name"), HBKitLocalizedString(@"Yadif", @"HBFilters -> filter display name"), HBKitLocalizedString(@"Decomb", @"HBFilters -> filter display name")]; } + (NSDictionary *)decombPresetsDict @@ -316,9 +318,9 @@ static NSDictionary *sharpenTypesDict = nil; { if (!denoiseTypesDict) { - denoiseTypesDict = @{NSLocalizedString(@"Off", @"HBFilters -> filter display name"): @"off", - NSLocalizedString(@"NLMeans", @"HBFilters -> filter display name"): @"nlmeans", - NSLocalizedString(@"HQDN3D", @"HBFilters -> filter display name"): @"hqdn3d"};; + denoiseTypesDict = @{HBKitLocalizedString(@"Off", @"HBFilters -> filter display name"): @"off", + HBKitLocalizedString(@"NLMeans", @"HBFilters -> filter display name"): @"nlmeans", + HBKitLocalizedString(@"HQDN3D", @"HBFilters -> filter display name"): @"hqdn3d"};; } return denoiseTypesDict; } @@ -351,9 +353,9 @@ static NSDictionary *sharpenTypesDict = nil; { if (!sharpenTypesDict) { - sharpenTypesDict = @{NSLocalizedString(@"Off", @"HBFilters -> filter display name"): @"off", - NSLocalizedString(@"Unsharp", @"HBFilters -> filter display name"): @"unsharp", - NSLocalizedString(@"Lapsharp", @"HBFilters -> filter display name"): @"lapsharp"};; + sharpenTypesDict = @{HBKitLocalizedString(@"Off", @"HBFilters -> filter display name"): @"off", + HBKitLocalizedString(@"Unsharp", @"HBFilters -> filter display name"): @"unsharp", + HBKitLocalizedString(@"Lapsharp", @"HBFilters -> filter display name"): @"lapsharp"};; } return sharpenTypesDict; } @@ -382,7 +384,7 @@ static NSDictionary *sharpenTypesDict = nil; - (NSArray *)denoiseTypes { - return @[NSLocalizedString(@"Off", @"HBFilters -> filter display name"), NSLocalizedString(@"NLMeans", @"HBFilters -> filter display name"), NSLocalizedString(@"HQDN3D", @"HBFilters -> filter display name")]; + return @[HBKitLocalizedString(@"Off", @"HBFilters -> filter display name"), HBKitLocalizedString(@"NLMeans", @"HBFilters -> filter display name"), HBKitLocalizedString(@"HQDN3D", @"HBFilters -> filter display name")]; } - (NSArray *)denoisePresets @@ -397,7 +399,7 @@ static NSDictionary *sharpenTypesDict = nil; - (NSArray *)sharpenTypes { - return @[NSLocalizedString(@"Off", @"HBFilters -> filter display name"), NSLocalizedString(@"Unsharp", @"HBFilters -> filter display name"), NSLocalizedString(@"Lapsharp", @"HBFilters -> filter display name")]; + return @[HBKitLocalizedString(@"Off", @"HBFilters -> filter display name"), HBKitLocalizedString(@"Unsharp", @"HBFilters -> filter display name"), HBKitLocalizedString(@"Lapsharp", @"HBFilters -> filter display name")]; } - (NSArray *)sharpenPresets @@ -478,7 +480,7 @@ static NSDictionary *sharpenTypesDict = nil; { if (self.deblock == 0) { - return NSLocalizedString(@"Off", @"HBFilters -> filter summary"); + return HBKitLocalizedString(@"Off", @"HBFilters -> filter summary"); } else { diff --git a/macosx/HBFilters.m b/macosx/HBFilters.m index a0f1ae3f1..c6c99d2e5 100644 --- a/macosx/HBFilters.m +++ b/macosx/HBFilters.m @@ -6,6 +6,7 @@ #import "HBFilters.h" #import "HBCodingUtilities.h" +#import "HBLocalizationUtilities.h" #import "NSDictionary+HBAdditions.h" #import "HBMutablePreset.h" @@ -114,9 +115,9 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification"; retval = NO; if (outError) { - NSDictionary *userInfo = @{NSLocalizedDescriptionKey: NSLocalizedString(@"Invalid custom detelecine settings.", + NSDictionary *userInfo = @{NSLocalizedDescriptionKey: HBKitLocalizedString(@"Invalid custom detelecine settings.", @"HBFilters -> invalid detelecine custom string description"), - NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Syntax: skip-left=s:skip-right=s:skip-top=s:skip-bottom=s:strict-breaks=s:plane=p:parity=p:disable=d\n\nDefault: skip-left=1:skip-right=1:skip-top=4:skip-bottom=4:plane=0", @"HBJob -> invalid detelecine custom settings error recovery suggestion")}; + NSLocalizedRecoverySuggestionErrorKey: HBKitLocalizedString(@"Syntax: skip-left=s:skip-right=s:skip-top=s:skip-bottom=s:strict-breaks=s:plane=p:parity=p:disable=d\n\nDefault: skip-left=1:skip-right=1:skip-top=4:skip-bottom=4:plane=0", @"HBJob -> invalid detelecine custom settings error recovery suggestion")}; *outError = [NSError errorWithDomain:@"HBFilterError" code:0 userInfo:userInfo]; } } @@ -179,9 +180,9 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification"; retval = NO; if (outError) { - NSDictionary *userInfo = @{NSLocalizedDescriptionKey: NSLocalizedString(@"Invalid custom comb detect settings.", + NSDictionary *userInfo = @{NSLocalizedDescriptionKey: HBKitLocalizedString(@"Invalid custom comb detect settings.", @"HBFilters -> invalid comb detect custom string description"), - NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Syntax: mode=m:spatial-metric=s:motion-thresh=m:spatial-thresh=s:filter-mode=f:block-thresh=b:block-width=b:block-height=b:disable=d\n\nDefault: mode=3:spatial-metric=2:motion-thresh=1:spatial-thresh=1:filter-mode=2:block-thresh=40:block-width=16:block-height=16", @"HBJob -> invalid comb detect custom settings error recovery suggestion")}; + NSLocalizedRecoverySuggestionErrorKey: HBKitLocalizedString(@"Syntax: mode=m:spatial-metric=s:motion-thresh=m:spatial-thresh=s:filter-mode=f:block-thresh=b:block-width=b:block-height=b:disable=d\n\nDefault: mode=3:spatial-metric=2:motion-thresh=1:spatial-thresh=1:filter-mode=2:block-thresh=40:block-width=16:block-height=16", @"HBJob -> invalid comb detect custom settings error recovery suggestion")}; *outError = [NSError errorWithDomain:@"HBFilterError" code:0 userInfo:userInfo]; } } @@ -288,16 +289,16 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification"; { if (filter_id == HB_FILTER_DEINTERLACE) { - NSDictionary *userInfo = @{NSLocalizedDescriptionKey: NSLocalizedString(@"Invalid Yadif custom settings.", + NSDictionary *userInfo = @{NSLocalizedDescriptionKey: HBKitLocalizedString(@"Invalid Yadif custom settings.", @"HBFilters -> invalid Yadif custom string description"), - NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Yadif syntax: mode=m:parity=p\n\nYadif default: mode=3", @"HBJob -> invalid Yadif custom settings error recovery suggestion")}; + NSLocalizedRecoverySuggestionErrorKey: HBKitLocalizedString(@"Yadif syntax: mode=m:parity=p\n\nYadif default: mode=3", @"HBJob -> invalid Yadif custom settings error recovery suggestion")}; *outError = [NSError errorWithDomain:@"HBFilterError" code:0 userInfo:userInfo]; } else if (filter_id == HB_FILTER_DECOMB) { - NSDictionary *userInfo = @{NSLocalizedDescriptionKey: NSLocalizedString(@"Invalid Decomb custom settings.", + NSDictionary *userInfo = @{NSLocalizedDescriptionKey: HBKitLocalizedString(@"Invalid Decomb custom settings.", @"HBFilters -> invalid Decomb custom string description"), - NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Decomb syntax: mode=m:magnitude-thresh=m:variance-thresh=v:laplacian-thresh=l:dilation-thresh=d:erosion-thresh=e:noise-thresh=n:search-distance=s:postproc=p:parity=p\n\nDecomb default: mode=7", @"HBJob -> invalid Decomb custom settings error recovery suggestion")}; + NSLocalizedRecoverySuggestionErrorKey: HBKitLocalizedString(@"Decomb syntax: mode=m:magnitude-thresh=m:variance-thresh=v:laplacian-thresh=l:dilation-thresh=d:erosion-thresh=e:noise-thresh=n:search-distance=s:postproc=p:parity=p\n\nDecomb default: mode=7", @"HBJob -> invalid Decomb custom settings error recovery suggestion")}; *outError = [NSError errorWithDomain:@"HBFilterError" code:0 userInfo:userInfo]; } } @@ -404,16 +405,16 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification"; { if (filter_id == HB_FILTER_HQDN3D) { - NSDictionary *userInfo = @{NSLocalizedDescriptionKey: NSLocalizedString(@"Invalid custom HQDN3D settings", + NSDictionary *userInfo = @{NSLocalizedDescriptionKey: HBKitLocalizedString(@"Invalid custom HQDN3D settings", @"HBFilters -> invalid denoise custom string description"), - NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"HQDN3D syntax: y-spatial=y:cb-spatial=c:cr-spatial=c:y-temporal=y:cb-temporal=c:cr-temporal=c\n\nDefault settings: y-spatial=3:cb-spatial=2:cr-spatial=2:y-temporal=2:cb-temporal=3:cr-temporal=3", @"HBJob -> invalid name error recovery suggestion")}; + NSLocalizedRecoverySuggestionErrorKey: HBKitLocalizedString(@"HQDN3D syntax: y-spatial=y:cb-spatial=c:cr-spatial=c:y-temporal=y:cb-temporal=c:cr-temporal=c\n\nDefault settings: y-spatial=3:cb-spatial=2:cr-spatial=2:y-temporal=2:cb-temporal=3:cr-temporal=3", @"HBJob -> invalid name error recovery suggestion")}; *outError = [NSError errorWithDomain:@"HBFilterError" code:0 userInfo:userInfo]; } else if (filter_id == HB_FILTER_NLMEANS) { - NSDictionary *userInfo = @{NSLocalizedDescriptionKey: NSLocalizedString(@"Invalid custom NLMeans settings", + NSDictionary *userInfo = @{NSLocalizedDescriptionKey: HBKitLocalizedString(@"Invalid custom NLMeans settings", @"HBFilters -> invalid denoise custom string description"), - NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"NLMeans syntax: y-strength=y:y-origin-tune=y:y-patch-size=y:y-range=y:y-frame-count=y:y-prefilter=y:cb-strength=c:cb-origin-tune=c:cb-patch-size=c:cb-range=c:cb-frame-count=c:cb-prefilter=c:cr-strength=c:cr-origin-tune=c:cr-patch-size=c:cr-range=c:cr-frame-count=c:cr-prefilter=c:threads=t\n\nDefault settings: y-strength=6:y-origin-tune=1:y-patch-size=7:y-range=3:y-frame-count=2:y-prefilter=0:cb-strength=6:cb-origin-tune=1:cb-patch-size=7:cb-range=3:cb-frame-count=2:cb-prefilter=0", @"HBJob -> invalid name error recovery suggestion")}; + NSLocalizedRecoverySuggestionErrorKey: HBKitLocalizedString(@"NLMeans syntax: y-strength=y:y-origin-tune=y:y-patch-size=y:y-range=y:y-frame-count=y:y-prefilter=y:cb-strength=c:cb-origin-tune=c:cb-patch-size=c:cb-range=c:cb-frame-count=c:cb-prefilter=c:cr-strength=c:cr-origin-tune=c:cr-patch-size=c:cr-range=c:cr-frame-count=c:cr-prefilter=c:threads=t\n\nDefault settings: y-strength=6:y-origin-tune=1:y-patch-size=7:y-range=3:y-frame-count=2:y-prefilter=0:cb-strength=6:cb-origin-tune=1:cb-patch-size=7:cb-range=3:cb-frame-count=2:cb-prefilter=0", @"HBJob -> invalid name error recovery suggestion")}; *outError = [NSError errorWithDomain:@"HBFilterError" code:0 userInfo:userInfo]; } } @@ -554,16 +555,16 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification"; { if (filter_id == HB_FILTER_UNSHARP) { - NSDictionary *userInfo = @{NSLocalizedDescriptionKey: NSLocalizedString(@"Invalid unsharp custom settings.", + NSDictionary *userInfo = @{NSLocalizedDescriptionKey: HBKitLocalizedString(@"Invalid unsharp custom settings.", @"HBFilters -> invalid unsharp custom string description"), - NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Unsharp syntax: y-strength=y:y-size=y:cb-strength=c:cb-size=c:cr-strength=c:cr-size=c\n\nUnsharp default: y-strength=0.25:y-size=7:cb-strength=0.25:cb-size=7", @"HBJob -> invalid unsharp custom settings error recovery suggestion")}; + NSLocalizedRecoverySuggestionErrorKey: HBKitLocalizedString(@"Unsharp syntax: y-strength=y:y-size=y:cb-strength=c:cb-size=c:cr-strength=c:cr-size=c\n\nUnsharp default: y-strength=0.25:y-size=7:cb-strength=0.25:cb-size=7", @"HBJob -> invalid unsharp custom settings error recovery suggestion")}; *outError = [NSError errorWithDomain:@"HBFilterError" code:0 userInfo:userInfo]; } else if (filter_id == HB_FILTER_LAPSHARP) { - NSDictionary *userInfo = @{NSLocalizedDescriptionKey: NSLocalizedString(@"Invalid lapsharp custom settings.", + NSDictionary *userInfo = @{NSLocalizedDescriptionKey: HBKitLocalizedString(@"Invalid lapsharp custom settings.", @"HBFilters -> invalid lapsharp custom string description"), - NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Lapsharp syntax: y-strength=y:y-kernel=y:cb-strength=c:cb-kernel=c:cr-strength=c:cr-kernel=c\n\nLapsharp default: y-strength=0.2:y-kernel=isolap:cb-strength=0.2:cb-kernel=isolap", @"HBJob -> invalid lapsharp custom settings error recovery suggestion")}; + NSLocalizedRecoverySuggestionErrorKey: HBKitLocalizedString(@"Lapsharp syntax: y-strength=y:y-kernel=y:cb-strength=c:cb-kernel=c:cr-strength=c:cr-kernel=c\n\nLapsharp default: y-strength=0.2:y-kernel=isolap:cb-strength=0.2:cb-kernel=isolap", @"HBJob -> invalid lapsharp custom settings error recovery suggestion")}; *outError = [NSError errorWithDomain:@"HBFilterError" code:0 userInfo:userInfo]; } } diff --git a/macosx/HBJob+UIAdditions.m b/macosx/HBJob+UIAdditions.m index bc3ab2bd1..f8b273804 100644 --- a/macosx/HBJob+UIAdditions.m +++ b/macosx/HBJob+UIAdditions.m @@ -18,6 +18,8 @@ #import "HBPicture+UIAdditions.h" #import "HBFilters+UIAdditions.h" +#import "HBLocalizationUtilities.h" + #include "hb.h" // Text Styles @@ -70,11 +72,11 @@ static NSDictionary *shortHeightAttr; NSString *title = nil; if (container->format & HB_MUX_MASK_MP4) { - title = NSLocalizedString(@"MP4 File", @"HBJob -> Format display name"); + title = HBKitLocalizedString(@"MP4 File", @"HBJob -> Format display name"); } else if (container->format & HB_MUX_MASK_MKV) { - title = NSLocalizedString(@"MKV File", @"HBJob -> Format display name"); + title = HBKitLocalizedString(@"MKV File", @"HBJob -> Format display name"); } else { @@ -126,45 +128,45 @@ static NSDictionary *shortHeightAttr; if (self.range.type == HBRangeTypeChapters) { startStopString = (self.range.chapterStart == self.range.chapterStop) ? - [NSString stringWithFormat:NSLocalizedString(@"Chapter %d", @"Title description"), self.range.chapterStart + 1] : - [NSString stringWithFormat:NSLocalizedString(@"Chapters %d through %d", @"Title description"), self.range.chapterStart + 1, self.range.chapterStop + 1]; + [NSString stringWithFormat:HBKitLocalizedString(@"Chapter %d", @"Title description"), self.range.chapterStart + 1] : + [NSString stringWithFormat:HBKitLocalizedString(@"Chapters %d through %d", @"Title description"), self.range.chapterStart + 1, self.range.chapterStop + 1]; } else if (self.range.type == HBRangeTypeSeconds) { - startStopString = [NSString stringWithFormat:NSLocalizedString(@"Seconds %d through %d", @"Title description"), self.range.secondsStart, self.range.secondsStop]; + startStopString = [NSString stringWithFormat:HBKitLocalizedString(@"Seconds %d through %d", @"Title description"), self.range.secondsStart, self.range.secondsStop]; } else if (self.range.type == HBRangeTypeFrames) { - startStopString = [NSString stringWithFormat:NSLocalizedString(@"Frames %d through %d", @"Title description"), self.range.frameStart, self.range.frameStop]; + startStopString = [NSString stringWithFormat:HBKitLocalizedString(@"Frames %d through %d", @"Title description"), self.range.frameStart, self.range.frameStop]; } NSMutableString *passesString = [NSMutableString string]; // check to see if our first subtitle track is Foreign Language Search, in which case there is an in depth scan if (self.subtitles.tracks.firstObject.sourceTrackIdx == 1) { - [passesString appendString:NSLocalizedString(@"1 Foreign Language Search Pass - ", @"Title description")]; + [passesString appendString:HBKitLocalizedString(@"1 Foreign Language Search Pass - ", @"Title description")]; } if (self.video.qualityType != 1 && self.video.twoPass == YES) { if (self.video.turboTwoPass == YES) { - [passesString appendString:NSLocalizedString(@"2 Video Passes First Turbo", @"Title description")]; + [passesString appendString:HBKitLocalizedString(@"2 Video Passes First Turbo", @"Title description")]; } else { - [passesString appendString:NSLocalizedString(@"2 Video Passes", @"Title description")]; + [passesString appendString:HBKitLocalizedString(@"2 Video Passes", @"Title description")]; } } if (passesString.length) { - [attrString appendString:[NSString stringWithFormat:NSLocalizedString(@" (Title %d, %@, %@) ▸ %@\n", @"Title description"), + [attrString appendString:[NSString stringWithFormat:HBKitLocalizedString(@" (Title %d, %@, %@) ▸ %@\n", @"Title description"), self.titleIdx, startStopString, passesString, self.outputFileName] withAttributes:detailAttr]; } else { - [attrString appendString:[NSString stringWithFormat:NSLocalizedString(@" (Title %d, %@) ▸ %@\n", @"Title description"), + [attrString appendString:[NSString stringWithFormat:HBKitLocalizedString(@" (Title %d, %@) ▸ %@\n", @"Title description"), self.titleIdx, startStopString, self.outputFileName] withAttributes:detailAttr]; } @@ -177,7 +179,7 @@ static NSDictionary *shortHeightAttr; NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] init]; [attrString appendString:@"\t" withAttributes:detailAttr]; - [attrString appendString:NSLocalizedString(@"Preset:", @"Preset description") withAttributes:detailBoldAttr]; + [attrString appendString:HBKitLocalizedString(@"Preset:", @"Preset description") withAttributes:detailBoldAttr]; [attrString appendString:@" \t" withAttributes:detailAttr]; [attrString appendString:self.presetName withAttributes:detailAttr]; [attrString appendString:@"\n" withAttributes:detailAttr]; @@ -194,22 +196,22 @@ static NSDictionary *shortHeightAttr; if (self.chaptersEnabled) { - [options appendString:NSLocalizedString(@", Chapter Markers", @"Format description")]; + [options appendString:HBKitLocalizedString(@", Chapter Markers", @"Format description")]; } if ((self.container & HB_MUX_MASK_MP4) && self.mp4HttpOptimize) { - [options appendString:NSLocalizedString(@", Web Optimized", @"Format description")]; + [options appendString:HBKitLocalizedString(@", Web Optimized", @"Format description")]; } if ((self.container & HB_MUX_MASK_MP4) && self.alignAVStart) { - [options appendString:NSLocalizedString(@", Align A/V Start", @"Format description")]; + [options appendString:HBKitLocalizedString(@", Align A/V Start", @"Format description")]; } if ((self.container & HB_MUX_MASK_MP4) && self.mp4iPodCompatible) { - [options appendString:NSLocalizedString(@", iPod 5G Support", @"Format description")]; + [options appendString:HBKitLocalizedString(@", iPod 5G Support", @"Format description")]; } if ([options hasPrefix:@", "]) @@ -218,7 +220,7 @@ static NSDictionary *shortHeightAttr; } [attrString appendString:@"\t" withAttributes:detailAttr]; - [attrString appendString:NSLocalizedString(@"Format:", @"Format description") withAttributes:detailBoldAttr]; + [attrString appendString:HBKitLocalizedString(@"Format:", @"Format description") withAttributes:detailBoldAttr]; [attrString appendString:@" \t" withAttributes:detailAttr]; [attrString appendString:options withAttributes:detailAttr]; [attrString appendString:@"\n" withAttributes:detailAttr]; @@ -231,7 +233,7 @@ static NSDictionary *shortHeightAttr; NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] init]; [attrString appendString:@"\t" withAttributes:detailAttr]; - [attrString appendString:NSLocalizedString(@"Destination:", @"Destination description") withAttributes:detailBoldAttr]; + [attrString appendString:HBKitLocalizedString(@"Destination:", @"Destination description") withAttributes:detailBoldAttr]; [attrString appendString:@" \t" withAttributes:detailAttr]; [attrString appendString:self.completeOutputURL.path withAttributes:detailAttr]; [attrString appendString:@"\n" withAttributes:detailAttr]; @@ -246,10 +248,10 @@ static NSDictionary *shortHeightAttr; NSString *pictureInfo = self.picture.summary; if (self.picture.keepDisplayAspect) { - pictureInfo = [pictureInfo stringByAppendingString:NSLocalizedString(@" Keep Aspect Ratio", @"Dimensions description")]; + pictureInfo = [pictureInfo stringByAppendingString:HBKitLocalizedString(@" Keep Aspect Ratio", @"Dimensions description")]; } [attrString appendString:@"\t" withAttributes:detailAttr]; - [attrString appendString:NSLocalizedString(@"Dimensions:", @"Dimensions description") withAttributes:detailBoldAttr]; + [attrString appendString:HBKitLocalizedString(@"Dimensions:", @"Dimensions description") withAttributes:detailBoldAttr]; [attrString appendString:@" \t" withAttributes:detailAttr]; [attrString appendString:pictureInfo withAttributes:detailAttr]; [attrString appendString:@"\n" withAttributes:detailAttr]; @@ -269,11 +271,11 @@ static NSDictionary *shortHeightAttr; { if ([filters.detelecine isEqualToString:@"custom"]) { - [summary appendFormat:@", %@ (%@)", NSLocalizedString(@"Detelecine", @"Dimensions description"), filters.detelecineCustomString]; + [summary appendFormat:@", %@ (%@)", HBKitLocalizedString(@"Detelecine", @"Dimensions description"), filters.detelecineCustomString]; } else { - [summary appendFormat:@", %@ (%@)", NSLocalizedString(@"Detelecine", @"Dimensions description"), [[[HBFilters detelecinePresetsDict] allKeysForObject:filters.detelecine] firstObject]]; + [summary appendFormat:@", %@ (%@)", HBKitLocalizedString(@"Detelecine", @"Dimensions description"), [[[HBFilters detelecinePresetsDict] allKeysForObject:filters.detelecine] firstObject]]; } } else if (![filters.deinterlace isEqualToString:@"off"]) @@ -301,13 +303,13 @@ static NSDictionary *shortHeightAttr; // Deblock if (filters.deblock > 0) { - [summary appendFormat:@", %@ (%d)", NSLocalizedString(@"Deblock", @"Filters description"), filters.deblock]; + [summary appendFormat:@", %@ (%d)", HBKitLocalizedString(@"Deblock", @"Filters description"), filters.deblock]; } // Denoise if (![filters.denoise isEqualToString:@"off"]) { - [summary appendFormat:@", %@ (%@", NSLocalizedString(@"Denoise", @"Filters description"), [[[HBFilters denoiseTypesDict] allKeysForObject:filters.denoise] firstObject]]; + [summary appendFormat:@", %@ (%@", HBKitLocalizedString(@"Denoise", @"Filters description"), [[[HBFilters denoiseTypesDict] allKeysForObject:filters.denoise] firstObject]]; if (![filters.denoisePreset isEqualToString:@"custom"]) { [summary appendFormat:@", %@", [[[HBFilters denoisePresetDict] allKeysForObject:filters.denoisePreset] firstObject]]; @@ -329,7 +331,7 @@ static NSDictionary *shortHeightAttr; // Sharpen if (![filters.sharpen isEqualToString:@"off"]) { - [summary appendFormat:@", %@ (%@", NSLocalizedString(@"Sharpen", @"Filters description"), [[[HBFilters sharpenTypesDict] allKeysForObject:filters.sharpen] firstObject]]; + [summary appendFormat:@", %@ (%@", HBKitLocalizedString(@"Sharpen", @"Filters description"), [[[HBFilters sharpenTypesDict] allKeysForObject:filters.sharpen] firstObject]]; if (![filters.sharpenPreset isEqualToString:@"custom"]) { [summary appendFormat:@", %@", [[[HBFilters sharpenPresetDict] allKeysForObject:filters.sharpenPreset] firstObject]]; @@ -355,7 +357,7 @@ static NSDictionary *shortHeightAttr; // Grayscale if (filters.grayscale) { - [summary appendFormat:@", %@", NSLocalizedString(@"Grayscale", @"Filters description")]; + [summary appendFormat:@", %@", HBKitLocalizedString(@"Grayscale", @"Filters description")]; } if ([summary hasPrefix:@", "]) @@ -367,7 +369,7 @@ static NSDictionary *shortHeightAttr; if (summary.length) { [attrString appendString:@"\t" withAttributes:detailAttr]; - [attrString appendString:NSLocalizedString(@"Filters:", @"Filters description") withAttributes:detailBoldAttr]; + [attrString appendString:HBKitLocalizedString(@"Filters:", @"Filters description") withAttributes:detailBoldAttr]; [attrString appendString:@" \t" withAttributes:detailAttr]; [attrString appendString:summary withAttributes:detailAttr]; [attrString appendString:@"\n" withAttributes:detailAttr]; @@ -382,21 +384,21 @@ static NSDictionary *shortHeightAttr; NSMutableString *videoInfo = [NSMutableString string]; const char *encoderName = hb_video_encoder_get_name(self.video.encoder); - [videoInfo appendFormat:NSLocalizedString(@"Encoder: %@, ", @"Video description"), - encoderName ? @(encoderName) : NSLocalizedString(@"Unknown", @"Video description")]; + [videoInfo appendFormat:HBKitLocalizedString(@"Encoder: %@, ", @"Video description"), + encoderName ? @(encoderName) : HBKitLocalizedString(@"Unknown", @"Video description")]; - [videoInfo appendString:NSLocalizedString(@"Framerate: ", @"Video description")]; + [videoInfo appendString:HBKitLocalizedString(@"Framerate: ", @"Video description")]; if (self.video.frameRate == 0) { if (self.video.frameRateMode == 0) { // we are using same as source with vfr - [videoInfo appendFormat:NSLocalizedString(@"Same as source (variable)", @"Video description")]; + [videoInfo appendString:HBKitLocalizedString(@"Same as source (variable)", @"Video description")]; } else { - [videoInfo appendFormat:NSLocalizedString(@"Same as source (constant)", @"Video description")]; + [videoInfo appendString:HBKitLocalizedString(@"Same as source (constant)", @"Video description")]; } } else @@ -404,27 +406,27 @@ static NSDictionary *shortHeightAttr; // we have a specified, constant framerate if (self.video.frameRateMode == 0) { - [videoInfo appendFormat:NSLocalizedString(@"Peak %@ (may be lower)", @"Video description"), @(hb_video_framerate_get_name(self.video.frameRate))]; + [videoInfo appendFormat:HBKitLocalizedString(@"Peak %@ (may be lower)", @"Video description"), @(hb_video_framerate_get_name(self.video.frameRate))]; } else { - [videoInfo appendFormat:NSLocalizedString(@"Peak %@ (constant frame rate)", @"Video description"), @(hb_video_framerate_get_name(self.video.frameRate))]; + [videoInfo appendFormat:HBKitLocalizedString(@"Peak %@ (constant frame rate)", @"Video description"), @(hb_video_framerate_get_name(self.video.frameRate))]; } } if (self.video.qualityType == 0) // ABR { [videoInfo appendFormat:@", "]; - [videoInfo appendFormat:NSLocalizedString(@"Bitrate: %d kbps", @"Video description"), self.video.avgBitrate]; + [videoInfo appendFormat:HBKitLocalizedString(@"Bitrate: %d kbps", @"Video description"), self.video.avgBitrate]; } else // CRF { [videoInfo appendFormat:@", "]; - [videoInfo appendFormat:NSLocalizedString(@"Constant Quality: %.2f %s", @"Video description"), self.video.quality, hb_video_quality_get_name(self.video.encoder)]; + [videoInfo appendFormat:HBKitLocalizedString(@"Constant Quality: %.2f %s", @"Video description"), self.video.quality, hb_video_quality_get_name(self.video.encoder)]; } [attrString appendString:@"\t" withAttributes:detailAttr]; - [attrString appendString:NSLocalizedString(@"Video:", @"Video description") withAttributes:detailBoldAttr]; + [attrString appendString:HBKitLocalizedString(@"Video:", @"Video description") withAttributes:detailBoldAttr]; [attrString appendString:@" \t" withAttributes:detailAttr]; [attrString appendString:videoInfo withAttributes:detailAttr]; [attrString appendString:@"\n" withAttributes:detailAttr]; @@ -442,18 +444,18 @@ static NSDictionary *shortHeightAttr; } else { - [encoderPresetInfo appendString:NSLocalizedString(@"default settings", @"Video description")]; + [encoderPresetInfo appendString:HBKitLocalizedString(@"default settings", @"Video description")]; } } else { // we are using the x264 system - [encoderPresetInfo appendFormat:NSLocalizedString(@"Preset: %@", @"Video description"), self.video.preset]; + [encoderPresetInfo appendFormat:HBKitLocalizedString(@"Preset: %@", @"Video description"), self.video.preset]; if (self.video.tune.length || self.video.fastDecode) { [encoderPresetInfo appendString:@", "]; - [encoderPresetInfo appendString:NSLocalizedString(@"Tune: ", @"Video description")]; + [encoderPresetInfo appendString:HBKitLocalizedString(@"Tune: ", @"Video description")]; if (self.video.tune.length) { @@ -461,27 +463,27 @@ static NSDictionary *shortHeightAttr; } if (self.video.fastDecode) { - [encoderPresetInfo appendString:NSLocalizedString(@" - fastdecode", @"Video description")]; + [encoderPresetInfo appendString:HBKitLocalizedString(@" - fastdecode", @"Video description")]; } } if (self.video.videoOptionExtra.length) { [encoderPresetInfo appendString:@", "]; - [encoderPresetInfo appendFormat:NSLocalizedString(@"Options: %@", @"Video description"), self.video.videoOptionExtra]; + [encoderPresetInfo appendFormat:HBKitLocalizedString(@"Options: %@", @"Video description"), self.video.videoOptionExtra]; } if (self.video.profile.length) { [encoderPresetInfo appendString:@", "]; - [encoderPresetInfo appendFormat:NSLocalizedString(@"Profile: %@", @"Video description"), self.video.profile]; + [encoderPresetInfo appendFormat:HBKitLocalizedString(@"Profile: %@", @"Video description"), self.video.profile]; } if (self.video.level.length) { [encoderPresetInfo appendString:@", "]; - [encoderPresetInfo appendFormat:NSLocalizedString(@"Level: %@", @"Video description"), self.video.level]; + [encoderPresetInfo appendFormat:HBKitLocalizedString(@"Level: %@", @"Video description"), self.video.level]; } } [attrString appendString:@"\t" withAttributes:detailAttr]; - [attrString appendString:NSLocalizedString(@"Video Options:", @"Video description") withAttributes:detailBoldAttr]; + [attrString appendString:HBKitLocalizedString(@"Video Options:", @"Video description") withAttributes:detailBoldAttr]; [attrString appendString:@" \t" withAttributes:detailAttr]; [attrString appendString:encoderPresetInfo withAttributes:detailAttr]; [attrString appendString:@"\n" withAttributes:detailAttr]; @@ -496,11 +498,11 @@ static NSDictionary *shortHeightAttr; } else { - lavcInfo = NSLocalizedString(@"default settings", @"Video description"); + lavcInfo = HBKitLocalizedString(@"default settings", @"Video description"); } [attrString appendString:@"\t" withAttributes:detailBoldAttr]; - [attrString appendString:NSLocalizedString(@"Video Options:", @"Video description") withAttributes:detailAttr]; + [attrString appendString:HBKitLocalizedString(@"Video Options:", @"Video description") withAttributes:detailAttr]; [attrString appendString:@" \t" withAttributes:detailAttr]; [attrString appendString:lavcInfo withAttributes:detailAttr]; [attrString appendString:@"\n" withAttributes:detailAttr]; @@ -515,21 +517,21 @@ static NSDictionary *shortHeightAttr; BOOL secondLine = NO; [attrString appendString:@"\t" withAttributes: detailBoldAttr]; - [attrString appendString:NSLocalizedString(@"Audio:", @"Audio description") withAttributes: detailBoldAttr]; + [attrString appendString:HBKitLocalizedString(@"Audio:", @"Audio description") withAttributes: detailBoldAttr]; [attrString appendString:@" " withAttributes: detailBoldAttr]; for (HBAudioTrack *audioTrack in self.audio.tracks) { if (audioTrack.isEnabled) { - NSMutableString *detailString = [NSMutableString stringWithFormat:NSLocalizedString(@"%@ ▸ Encoder: %@", @"Audio description"), + NSMutableString *detailString = [NSMutableString stringWithFormat:HBKitLocalizedString(@"%@ ▸ Encoder: %@", @"Audio description"), self.audio.sourceTracks[audioTrack.sourceTrackIdx][keyAudioTrackName], @(hb_audio_encoder_get_name(audioTrack.encoder))]; if ((audioTrack.encoder & HB_ACODEC_PASS_FLAG) == 0) { [detailString appendString:@", "]; - [detailString appendFormat:NSLocalizedString(@"Mixdown: %@, Samplerate: %@, Bitrate: %d kbps", @"Audio description"), + [detailString appendFormat:HBKitLocalizedString(@"Mixdown: %@, Samplerate: %@, Bitrate: %d kbps", @"Audio description"), @(hb_mixdown_get_name(audioTrack.mixdown)), audioTrack.sampleRate ? [NSString stringWithFormat:@"%@ khz", @(hb_audio_samplerate_get_name(audioTrack.sampleRate))] : @"Auto", audioTrack.bitRate]; @@ -537,13 +539,13 @@ static NSDictionary *shortHeightAttr; if (0.0 < audioTrack.drc) { [detailString appendString:@", "]; - [detailString appendFormat:NSLocalizedString(@"DRC: %.2f", @"Audio description"), audioTrack.drc]; + [detailString appendFormat:HBKitLocalizedString(@"DRC: %.2f", @"Audio description"), audioTrack.drc]; } if (0.0 != audioTrack.gain) { [detailString appendString:@", "]; - [detailString appendFormat:NSLocalizedString(@"Gain: %.2f", @"Audio description"), audioTrack.gain]; + [detailString appendFormat:HBKitLocalizedString(@"Gain: %.2f", @"Audio description"), audioTrack.gain]; } } @@ -570,7 +572,7 @@ static NSDictionary *shortHeightAttr; BOOL secondLine = NO; [attrString appendString:@"\t" withAttributes: detailBoldAttr]; - [attrString appendString:NSLocalizedString(@"Subtitles:", @"Subtitles description") withAttributes: detailBoldAttr]; + [attrString appendString:HBKitLocalizedString(@"Subtitles:", @"Subtitles description") withAttributes: detailBoldAttr]; [attrString appendString:@" " withAttributes: detailBoldAttr]; for (HBSubtitlesTrack *track in self.subtitles.tracks) @@ -586,17 +588,17 @@ static NSDictionary *shortHeightAttr; if (track.forcedOnly) { [detailString appendString:@", "]; - [detailString appendString:NSLocalizedString(@"Forced Only", @"Subtitles description")]; + [detailString appendString:HBKitLocalizedString(@"Forced Only", @"Subtitles description")]; } if (track.burnedIn) { [detailString appendString:@", "]; - [detailString appendString:NSLocalizedString(@"Burned In", @"Subtitles description")]; + [detailString appendString:HBKitLocalizedString(@"Burned In", @"Subtitles description")]; } if (track.def) { [detailString appendString:@", "]; - [detailString appendString:NSLocalizedString(@"Default", @"Subtitles description")]; + [detailString appendString:HBKitLocalizedString(@"Default", @"Subtitles description")]; } [attrString appendString:@"\t" withAttributes: detailAttr]; @@ -652,7 +654,7 @@ static NSDictionary *shortHeightAttr; NSMutableString *info = [NSMutableString string]; const char *encoderName = hb_video_encoder_get_name(self.video.encoder); - [info appendString:encoderName ? @(encoderName) : NSLocalizedString(@"Unknown", @"HBJob -> video short description encoder name")]; + [info appendString:encoderName ? @(encoderName) : HBKitLocalizedString(@"Unknown", @"HBJob -> video short description encoder name")]; [info appendString:@", "]; @@ -661,11 +663,11 @@ static NSDictionary *shortHeightAttr; if (self.video.frameRateMode == 0) { // we are using same as source with vfr - [info appendFormat:NSLocalizedString(@"VFR", @"HBJob -> video short description framerate")]; + [info appendString:HBKitLocalizedString(@"VFR", @"HBJob -> video short description framerate")]; } else { - [info appendFormat:NSLocalizedString(@"CRF", @"HBJob -> video short description framerate")]; + [info appendString:HBKitLocalizedString(@"CRF", @"HBJob -> video short description framerate")]; } } else @@ -728,11 +730,11 @@ static NSDictionary *shortHeightAttr; NSUInteger count = self.audio.tracks.count - 3; if (count == 1) { - [info appendString:NSLocalizedString(@"+ 1 additional audio track", @"HBJob -> audio short description")]; + [info appendString:HBKitLocalizedString(@"+ 1 additional audio track", @"HBJob -> audio short description")]; } else { - [info appendFormat:NSLocalizedString(@"+ %lu additional audio tracks", @"HBJob -> audio short description"), (unsigned long)count]; + [info appendFormat:HBKitLocalizedString(@"+ %lu additional audio tracks", @"HBJob -> audio short description"), (unsigned long)count]; } } @@ -759,7 +761,7 @@ static NSDictionary *shortHeightAttr; if (track.burnedIn) { - [info appendString:NSLocalizedString(@", Burned", @"HBJob -> subtitles short description")]; + [info appendString:HBKitLocalizedString(@", Burned", @"HBJob -> subtitles short description")]; } [info appendString:@"\n"]; @@ -776,11 +778,11 @@ static NSDictionary *shortHeightAttr; NSUInteger count = self.subtitles.tracks.count - 3; if (count == 1) { - [info appendString:NSLocalizedString(@"+ 1 additional subtitles track", @"HBJob -> subtitles short description")]; + [info appendString:HBKitLocalizedString(@"+ 1 additional subtitles track", @"HBJob -> subtitles short description")]; } else { - [info appendFormat:NSLocalizedString(@"+ %lu additional subtitles tracks", @"HBJob -> subtitles short description"), (unsigned long)count]; + [info appendFormat:HBKitLocalizedString(@"+ %lu additional subtitles tracks", @"HBJob -> subtitles short description"), (unsigned long)count]; } } @@ -815,7 +817,7 @@ static NSDictionary *shortHeightAttr; if (self.chaptersEnabled && self.chapterTitles.count > 1) { [info appendString:@"\n"]; - [info appendString:NSLocalizedString(@"Chapter Markers", @"HBJob -> chapters short description")]; + [info appendString:HBKitLocalizedString(@"Chapter Markers", @"HBJob -> chapters short description")]; } return info; @@ -829,14 +831,14 @@ static NSDictionary *shortHeightAttr; // Detelecine if (![filters.detelecine isEqualToString:@"off"]) { - [summary appendString:NSLocalizedString(@"Detelecine", @"HBJob -> filters short description")]; + [summary appendString:HBKitLocalizedString(@"Detelecine", @"HBJob -> filters short description")]; [summary appendString:@", "]; } // Comb detect if (![filters.combDetection isEqualToString:@"off"]) { - [summary appendString:NSLocalizedString(@"Comb Detect", @"HBJob -> filters short description")]; + [summary appendString:HBKitLocalizedString(@"Comb Detect", @"HBJob -> filters short description")]; [summary appendString:@", "]; } @@ -855,7 +857,7 @@ static NSDictionary *shortHeightAttr; // Deblock if (filters.deblock > 0) { - [summary appendString:NSLocalizedString(@"Deblock", @"HBJob -> filters short description")]; + [summary appendString:HBKitLocalizedString(@"Deblock", @"HBJob -> filters short description")]; [summary appendString:@", "]; } @@ -884,14 +886,14 @@ static NSDictionary *shortHeightAttr; // Grayscale if (filters.grayscale) { - [summary appendString:NSLocalizedString(@"Grayscale", @"HBJob -> filters short description")]; + [summary appendString:HBKitLocalizedString(@"Grayscale", @"HBJob -> filters short description")]; [summary appendString:@", "]; } // Rotation if (filters.rotate || filters.flip) { - [summary appendString:NSLocalizedString(@"Rotation", @"HBJob -> filters short description")]; + [summary appendString:HBKitLocalizedString(@"Rotation", @"HBJob -> filters short description")]; [summary appendString:@", "]; } @@ -902,7 +904,7 @@ static NSDictionary *shortHeightAttr; if (summary.length == 0) { - [summary appendString:NSLocalizedString(@"None", @"HBJob -> filters short description")]; + [summary appendString:HBKitLocalizedString(@"None", @"HBJob -> filters short description")]; } return summary; @@ -922,11 +924,11 @@ static NSDictionary *shortHeightAttr; int container = [value intValue]; if (container & HB_MUX_MASK_MP4) { - return NSLocalizedString(@"MP4 File", @"HBJob -> Format display name"); + return HBKitLocalizedString(@"MP4 File", @"HBJob -> Format display name"); } else if (container & HB_MUX_MASK_MKV) { - return NSLocalizedString(@"MKV File", @"HBJob -> Format display name"); + return HBKitLocalizedString(@"MKV File", @"HBJob -> Format display name"); } else { @@ -949,11 +951,11 @@ static NSDictionary *shortHeightAttr; - (id)reverseTransformedValue:(id)value { - if ([value isEqualToString:NSLocalizedString(@"MP4 File", @"HBJob -> Format display name")]) + if ([value isEqualToString:HBKitLocalizedString(@"MP4 File", @"HBJob -> Format display name")]) { return @(HB_MUX_AV_MP4); } - else if ([value isEqualToString:NSLocalizedString(@"MKV File", @"HBJob -> Format display name")]) + else if ([value isEqualToString:HBKitLocalizedString(@"MKV File", @"HBJob -> Format display name")]) { return @(HB_MUX_AV_MKV); } diff --git a/macosx/HBJob.m b/macosx/HBJob.m index ccebe8a0c..beb7e5875 100644 --- a/macosx/HBJob.m +++ b/macosx/HBJob.m @@ -13,6 +13,7 @@ #import "HBMutablePreset.h" #import "HBCodingUtilities.h" +#import "HBLocalizationUtilities.h" #import "HBUtilities.h" #import "HBSecurityAccessToken.h" @@ -178,8 +179,8 @@ NSString *HBChaptersChangedNotification = @"HBChaptersChangedNotification"; { if (outError) { - *outError = [NSError errorWithDomain:@"HBError" code:0 userInfo:@{NSLocalizedDescriptionKey: NSLocalizedString(@"Invalid name", @"HBJob -> invalid name error description"), - NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"The file name can't contain the / character.", @"HBJob -> invalid name error recovery suggestion")}]; + *outError = [NSError errorWithDomain:@"HBError" code:0 userInfo:@{NSLocalizedDescriptionKey: HBKitLocalizedString(@"Invalid name", @"HBJob -> invalid name error description"), + NSLocalizedRecoverySuggestionErrorKey: HBKitLocalizedString(@"The file name can't contain the / character.", @"HBJob -> invalid name error recovery suggestion")}]; } return NO; } diff --git a/macosx/HBLocalizationUtilities.h b/macosx/HBLocalizationUtilities.h new file mode 100644 index 000000000..6db55dca2 --- /dev/null +++ b/macosx/HBLocalizationUtilities.h @@ -0,0 +1,15 @@ +// +// HBLocalizationUtilities.h +// HandBrakeKit +// +// Created by Damiano Galassi on 20/10/2018. +// + +#ifndef HBLocalizationUtilities_h +#define HBLocalizationUtilities_h + +#define HBKitLocalizedString(key, comment) \ +[[NSBundle bundleForClass:self.class] localizedStringForKey:(key) value:@"" table:nil] + + +#endif /* HBLocalizationUtilities_h */ diff --git a/macosx/HBPicture+UIAdditions.m b/macosx/HBPicture+UIAdditions.m index 39b0d378d..23d3e8b0f 100644 --- a/macosx/HBPicture+UIAdditions.m +++ b/macosx/HBPicture+UIAdditions.m @@ -6,6 +6,8 @@ #import "HBPicture+UIAdditions.h" #import "HBTitle.h" +#import "HBLocalizationUtilities.h" + #include "hb.h" @implementation HBPicture (UIAdditions) @@ -91,7 +93,7 @@ - (NSString *)shortInfo { - return [NSString stringWithFormat:NSLocalizedString(@"%dx%d Storage, %dx%d Display", @"HBPicture -> short info"), self.width, self.height, self.displayWidth, self.height]; + return [NSString stringWithFormat:HBKitLocalizedString(@"%dx%d Storage, %dx%d Display", @"HBPicture -> short info"), self.width, self.height, self.displayWidth, self.height]; } + (NSSet<NSString *> *)keyPathsForValuesAffectingSummary diff --git a/macosx/HBPreset.m b/macosx/HBPreset.m index 4d3c2f095..98d424253 100644 --- a/macosx/HBPreset.m +++ b/macosx/HBPreset.m @@ -10,6 +10,7 @@ #include "preset.h" #import "NSJSONSerialization+HBAdditions.h" +#import "HBLocalizationUtilities.h" @interface HBPreset () @@ -197,9 +198,9 @@ - (NSError *)invalidPresetErrorForUrl:(NSURL *)url { - NSString *description = [NSString stringWithFormat:NSLocalizedString(@"The preset \"%@\" could not be imported.", @"Preset -> import error description"), + NSString *description = [NSString stringWithFormat:HBKitLocalizedString(@"The preset \"%@\" could not be imported.", @"Preset -> import error description"), url.lastPathComponent]; - NSString *reason = NSLocalizedString(@"The selected preset is invalid.", @"Preset -> import error reason"); + NSString *reason = HBKitLocalizedString(@"The selected preset is invalid.", @"Preset -> import error reason"); return [NSError errorWithDomain:@"HBPresetDomain" code:1 userInfo:@{NSLocalizedDescriptionKey: description, NSLocalizedRecoverySuggestionErrorKey: reason}]; @@ -208,9 +209,9 @@ - (NSError *)newerPresetErrorForUrl:(NSURL *)url { - NSString *description = [NSString stringWithFormat:NSLocalizedString(@"The preset \"%@\" could not be imported.", @"Preset -> import error description"), + NSString *description = [NSString stringWithFormat:HBKitLocalizedString(@"The preset \"%@\" could not be imported.", @"Preset -> import error description"), url.lastPathComponent]; - NSString *reason = NSLocalizedString(@"The selected preset was created with a newer version of HandBrake.", @"Preset -> import error reason"); + NSString *reason = HBKitLocalizedString(@"The selected preset was created with a newer version of HandBrake.", @"Preset -> import error reason"); return [NSError errorWithDomain:@"HBPresetDomain" code:2 userInfo:@{NSLocalizedDescriptionKey: description, NSLocalizedRecoverySuggestionErrorKey: reason}]; diff --git a/macosx/HBRange+UIAdditions.m b/macosx/HBRange+UIAdditions.m index 04c7bfdac..f574225a3 100644 --- a/macosx/HBRange+UIAdditions.m +++ b/macosx/HBRange+UIAdditions.m @@ -6,6 +6,7 @@ #import "HBRange+UIAdditions.h" #import "HBTitle.h" +#import "HBLocalizationUtilities.h" @implementation HBRange (UIAdditions) @@ -20,9 +21,9 @@ - (NSArray *)types { - return @[NSLocalizedString(@"Chapters", @"HBRange -> display name"), - NSLocalizedString(@"Seconds", @"HBRange -> display name"), - NSLocalizedString(@"Frames", @"HBRange -> display name")]; + return @[HBKitLocalizedString(@"Chapters", @"HBRange -> display name"), + HBKitLocalizedString(@"Seconds", @"HBRange -> display name"), + HBKitLocalizedString(@"Frames", @"HBRange -> display name")]; } - (BOOL)chaptersSelected diff --git a/macosx/HBStateFormatter+Private.m b/macosx/HBStateFormatter+Private.m index d02484a74..f00b4fb56 100644 --- a/macosx/HBStateFormatter+Private.m +++ b/macosx/HBStateFormatter+Private.m @@ -7,6 +7,7 @@ // #import "HBStateFormatter+Private.h" +#import "HBLocalizationUtilities.h" @implementation HBStateFormatter (Private) @@ -21,12 +22,12 @@ case HB_STATE_SEARCHING: { [string appendFormat: - NSLocalizedString(@"Searching for start point: %.2f %%", @"HBStateFormatter -> search pass display name"), + HBKitLocalizedString(@"Searching for start point: %.2f %%", @"HBStateFormatter -> search pass display name"), 100.0 * p.progress]; if (p.seconds > -1) { - [string appendFormat:NSLocalizedString(@" (ETA %02dh%02dm%02ds)", @"HBStateFormatter -> search time format"), p.hours, p.minutes, p.seconds]; + [string appendFormat:HBKitLocalizedString(@" (ETA %02dh%02dm%02ds)", @"HBStateFormatter -> search time format"), p.hours, p.minutes, p.seconds]; } break; @@ -34,7 +35,7 @@ case HB_STATE_WORKING: { - [string appendFormat:NSLocalizedString(@"Encoding %@ ", @"HBStateFormatter -> work pass display name"), self.title]; + [string appendFormat:HBKitLocalizedString(@"Encoding %@ ", @"HBStateFormatter -> work pass display name"), self.title]; if (self.twoLines) { @@ -46,15 +47,15 @@ if (p.pass_id == HB_PASS_SUBTITLE) { [string appendFormat: - NSLocalizedString(@"Pass %d %@ of %d, %.2f %%", @"HBStateFormatter -> work pass number format"), + HBKitLocalizedString(@"Pass %d %@ of %d, %.2f %%", @"HBStateFormatter -> work pass number format"), p.pass, - NSLocalizedString(@"(subtitle scan)", @"HBStateFormatter -> work pass type format"), + HBKitLocalizedString(@"(subtitle scan)", @"HBStateFormatter -> work pass type format"), p.pass_count, 100.0 * p.progress]; } else { [string appendFormat: - NSLocalizedString(@"Pass %d of %d, %.2f %%", @"HBStateFormatter -> work pass number format"), + HBKitLocalizedString(@"Pass %d of %d, %.2f %%", @"HBStateFormatter -> work pass number format"), p.pass, p.pass_count, 100.0 * p.progress]; } } @@ -64,13 +65,13 @@ if (p.rate_cur > 0.0) { [string appendFormat: - NSLocalizedString(@" (%.2f fps, avg %.2f fps, ETA %02dh%02dm%02ds)", @"HBStateFormatter -> work time format"), + HBKitLocalizedString(@" (%.2f fps, avg %.2f fps, ETA %02dh%02dm%02ds)", @"HBStateFormatter -> work time format"), p.rate_cur, p.rate_avg, p.hours, p.minutes, p.seconds]; } else { [string appendFormat: - NSLocalizedString(@" (ETA %02dh%02dm%02ds)", @"HBStateFormatter -> work time format"), + HBKitLocalizedString(@" (ETA %02dh%02dm%02ds)", @"HBStateFormatter -> work time format"), p.hours, p.minutes, p.seconds]; } } @@ -81,13 +82,13 @@ case HB_STATE_MUXING: { - [string appendString:NSLocalizedString(@"Muxing…", @"HBStateFormatter -> pass display name")]; + [string appendString:HBKitLocalizedString(@"Muxing…", @"HBStateFormatter -> pass display name")]; break; } case HB_STATE_PAUSED: { - [string appendString:NSLocalizedString(@"Paused", @"HBStateFormatter -> pass display name")]; + [string appendString:HBKitLocalizedString(@"Paused", @"HBStateFormatter -> pass display name")]; break; } @@ -97,14 +98,14 @@ if (p.preview_cur) { [string appendFormat: - NSLocalizedString(@"Scanning title %d of %d, preview %d…", @"HBStateFormatter -> scan pass format"), + HBKitLocalizedString(@"Scanning title %d of %d, preview %d…", @"HBStateFormatter -> scan pass format"), p.title_cur, p.title_count, p.preview_cur]; } else { [string appendFormat: - NSLocalizedString(@"Scanning title %d of %d…", @"HBStateFormatter -> scan pass format"), + HBKitLocalizedString(@"Scanning title %d of %d…", @"HBStateFormatter -> scan pass format"), p.title_cur, p.title_count]; } #undef p diff --git a/macosx/HBSubtitles.m b/macosx/HBSubtitles.m index 39f9d20b8..3193045b7 100644 --- a/macosx/HBSubtitles.m +++ b/macosx/HBSubtitles.m @@ -13,6 +13,7 @@ #import "HBJob+HBJobConversion.h" #import "HBTitle.h" #import "HBCodingUtilities.h" +#import "HBLocalizationUtilities.h" #import "HBUtilities.h" #import "HBJob+Private.h" #import "HBSecurityAccessToken.h" @@ -63,10 +64,10 @@ extern NSString *keySubTrackSrtFileURLBookmark; int foreignAudioType = VOBSUB; // now set the name of the Foreign Audio Search track - NSMutableString *foreignAudioSearchTrackName = [NSLocalizedString(@"Foreign Audio Search", "HBSubtitles -> search pass name") mutableCopy]; + NSMutableString *foreignAudioSearchTrackName = [HBKitLocalizedString(@"Foreign Audio Search", "HBSubtitles -> search pass name") mutableCopy]; // Add the none and foreign track to the source array - NSDictionary *none = @{ keySubTrackName: NSLocalizedString(@"None", @"HBSubtitles -> none track name")}; + NSDictionary *none = @{ keySubTrackName: HBKitLocalizedString(@"None", @"HBSubtitles -> none track name")}; [sourceTracks insertObject:none atIndex:0]; NSDictionary *foreign = @{ keySubTrackName: [foreignAudioSearchTrackName copy], diff --git a/macosx/HBTitle.m b/macosx/HBTitle.m index 078257833..7a34612eb 100644 --- a/macosx/HBTitle.m +++ b/macosx/HBTitle.m @@ -9,6 +9,7 @@ #import "HBChapter.h" #import "HBPreset.h" #import "NSDictionary+HBAdditions.h" +#import "HBLocalizationUtilities.h" #include "lang.h" @@ -149,18 +150,18 @@ extern NSString *keySubTrackType; [format appendString:@", "]; - [format appendFormat:NSLocalizedString(@"%.6g FPS", @"Title short description -> video format"), _hb_title->vrate.num / (double)_hb_title->vrate.den]; + [format appendFormat:HBKitLocalizedString(@"%.6g FPS", @"Title short description -> video format"), _hb_title->vrate.num / (double)_hb_title->vrate.den]; hb_list_t *audioList = _hb_title->list_audio; int audioCount = hb_list_count(audioList); if (audioCount > 1) { - [format appendFormat:NSLocalizedString(@", %d audio tracks", @"Title short description -> audio format"), audioCount]; + [format appendFormat:HBKitLocalizedString(@", %d audio tracks", @"Title short description -> audio format"), audioCount]; } else if (audioCount == 1) { - [format appendFormat:NSLocalizedString(@", 1 audio track", @"Title short description -> audio format")]; + [format appendString:HBKitLocalizedString(@", 1 audio track", @"Title short description -> audio format")]; } hb_list_t *subList = _hb_title->list_subtitle; @@ -168,11 +169,11 @@ extern NSString *keySubTrackType; if (subCount > 1) { - [format appendFormat:NSLocalizedString(@", %d subtitles tracks", @"Title short description -> subtitles format"), subCount]; + [format appendFormat:HBKitLocalizedString(@", %d subtitles tracks", @"Title short description -> subtitles format"), subCount]; } else if (subCount == 1) { - [format appendFormat:NSLocalizedString(@", 1 subtitles track", @"Title short description -> subtitles format")]; + [format appendString:HBKitLocalizedString(@", 1 subtitles track", @"Title short description -> subtitles format")]; } return format; @@ -322,7 +323,7 @@ extern NSString *keySubTrackType; } else { - title = [NSString stringWithFormat:NSLocalizedString(@"Chapter %d", "Title -> chapter name"), i + 1]; + title = [NSString stringWithFormat:HBKitLocalizedString(@"Chapter %d", "Title -> chapter name"), i + 1]; } [chapters addObject:[[HBChapter alloc] initWithTitle:title diff --git a/macosx/HBVideo+UIAdditions.m b/macosx/HBVideo+UIAdditions.m index b16572990..f330e3526 100644 --- a/macosx/HBVideo+UIAdditions.m +++ b/macosx/HBVideo+UIAdditions.m @@ -6,6 +6,8 @@ #import "HBVideo+UIAdditions.h" #import "HBJob+Private.h" +#import "HBLocalizationUtilities.h" + #include "hb.h" @implementation HBVideo (UIAdditions) @@ -43,7 +45,7 @@ { NSMutableArray *framerates = [NSMutableArray array]; - [framerates addObject:NSLocalizedString(@"Same as source", @"HBVideo -> frame rates display name")]; + [framerates addObject:HBKitLocalizedString(@"Same as source", @"HBVideo -> frame rates display name")]; for (const hb_rate_t *video_framerate = hb_video_framerate_get_next(NULL); video_framerate != NULL; @@ -265,7 +267,7 @@ } else { - return NSLocalizedString(@"Same as source", @"HBVideo -> frame rates display name"); + return HBKitLocalizedString(@"Same as source", @"HBVideo -> frame rates display name"); } } @@ -276,7 +278,7 @@ - (id)reverseTransformedValue:(id)value { - if ([value isEqualTo:NSLocalizedString(@"Same as source", @"HBVideo -> frame rates display name")]) + if ([value isEqualTo:HBKitLocalizedString(@"Same as source", @"HBVideo -> frame rates display name")]) { return @0; } diff --git a/macosx/HandBrake.xcodeproj/project.pbxproj b/macosx/HandBrake.xcodeproj/project.pbxproj index 858951e7c..0de1deade 100644 --- a/macosx/HandBrake.xcodeproj/project.pbxproj +++ b/macosx/HandBrake.xcodeproj/project.pbxproj @@ -250,6 +250,9 @@ A9ABD1A71E2A0F7500EC8B65 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9ABD1A51E2A0F0700EC8B65 /* CoreText.framework */; }; A9ABD1A91E2A0F8200EC8B65 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9ABD1A81E2A0F8200EC8B65 /* CoreGraphics.framework */; }; A9ABD1AA1E2A0F8F00EC8B65 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9ABD1A81E2A0F8200EC8B65 /* CoreGraphics.framework */; }; + A9B6B9EE217B38D200B957AE /* HBLocalizationUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = A9B6B9ED217B38D200B957AE /* HBLocalizationUtilities.h */; }; + A9B6B9F1217B408E00B957AE /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = A9B6B9EF217B408E00B957AE /* InfoPlist.strings */; }; + A9B6B9F4217B408E00B957AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = A9B6B9F2217B408E00B957AE /* Localizable.strings */; }; A9BC24C91A69293E007DC41A /* HBAttributedStringAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A9BC24C81A69293E007DC41A /* HBAttributedStringAdditions.m */; }; A9CE0A921F57EC3400724577 /* HBImageUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A9CE0A911F57EC3400724577 /* HBImageUtilities.m */; }; A9CF25F71990D6820023F727 /* HBPresetsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A9CF25F61990D6820023F727 /* HBPresetsViewController.m */; }; @@ -605,6 +608,9 @@ A9ABD1A51E2A0F0700EC8B65 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; A9ABD1A81E2A0F8200EC8B65 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; A9B34D74197696FE00871B7D /* DiskArbitration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiskArbitration.framework; path = System/Library/Frameworks/DiskArbitration.framework; sourceTree = SDKROOT; }; + A9B6B9ED217B38D200B957AE /* HBLocalizationUtilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HBLocalizationUtilities.h; sourceTree = "<group>"; }; + A9B6B9F0217B408E00B957AE /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = "<group>"; }; + A9B6B9F3217B408E00B957AE /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; }; A9BC24C71A69293E007DC41A /* HBAttributedStringAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBAttributedStringAdditions.h; sourceTree = "<group>"; }; A9BC24C81A69293E007DC41A /* HBAttributedStringAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBAttributedStringAdditions.m; sourceTree = "<group>"; }; A9C183931A716B8F00C897C2 /* HBTitleSelectionController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBTitleSelectionController.h; sourceTree = "<group>"; }; @@ -1034,6 +1040,7 @@ A9CE0A931F57EC4600724577 /* HBImageUtilities.h */, A9CE0A911F57EC3400724577 /* HBImageUtilities.m */, A9160A331AE7A165009A7818 /* HBCodingUtilities.h */, + A9B6B9ED217B38D200B957AE /* HBLocalizationUtilities.h */, A997D8EB1A4ABB0900E19B6F /* HBPresetCoding.h */, A975C08C1AE8C5270061870D /* HBStateFormatter.h */, A975C08D1AE8C5270061870D /* HBStateFormatter.m */, @@ -1142,6 +1149,8 @@ A9AA44791970664A00D7DEFC /* HBUtilities.m */, A9736F041C7DA5FE008F1D18 /* HandBrakeKit.h */, A9736F061C7DA5FE008F1D18 /* Info.plist */, + A9B6B9F2217B408E00B957AE /* Localizable.strings */, + A9B6B9EF217B408E00B957AE /* InfoPlist.strings */, ); path = HandBrakeKit; sourceTree = "<group>"; @@ -1384,6 +1393,7 @@ A98B8E241C7DD2A200B810C9 /* HBPresetCoding.h in Headers */, A9294CC91DC4BBF7004D3415 /* HBJob+Private.h in Headers */, A91CE2FE1C7DB99D0068F46F /* HBTreeNode.h in Headers */, + A9B6B9EE217B38D200B957AE /* HBLocalizationUtilities.h in Headers */, A91D54871E378ABD006D0997 /* HBSecurityAccessToken.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1592,6 +1602,8 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + A9B6B9F1217B408E00B957AE /* InfoPlist.strings in Resources */, + A9B6B9F4217B408E00B957AE /* Localizable.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2044,6 +2056,22 @@ name = HBPreviewViewController.xib; sourceTree = "<group>"; }; + A9B6B9EF217B408E00B957AE /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + A9B6B9F0217B408E00B957AE /* de */, + ); + name = InfoPlist.strings; + sourceTree = "<group>"; + }; + A9B6B9F2217B408E00B957AE /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + A9B6B9F3217B408E00B957AE /* de */, + ); + name = Localizable.strings; + sourceTree = "<group>"; + }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ @@ -2103,6 +2131,11 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_VARIABLE = YES; + LOCALIZED_STRING_MACRO_NAMES = ( + NSLocalizedString, + CFLocalizedString, + HBKitLocalizedString, + ); MACOSX_DEPLOYMENT_TARGET = 10.10; OTHER_LDFLAGS = ( "-filelist", @@ -2167,6 +2200,11 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_VARIABLE = YES; + LOCALIZED_STRING_MACRO_NAMES = ( + NSLocalizedString, + CFLocalizedString, + HBKitLocalizedString, + ); MACOSX_DEPLOYMENT_TARGET = 10.10; OTHER_LDFLAGS = ( "-filelist", @@ -2615,6 +2653,11 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_VARIABLE = YES; + LOCALIZED_STRING_MACRO_NAMES = ( + NSLocalizedString, + CFLocalizedString, + HBKitLocalizedString, + ); MACOSX_DEPLOYMENT_TARGET = 10.10; OTHER_LDFLAGS = ( "-filelist", @@ -2861,6 +2904,11 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_VARIABLE = YES; + LOCALIZED_STRING_MACRO_NAMES = ( + NSLocalizedString, + CFLocalizedString, + HBKitLocalizedString, + ); MACOSX_DEPLOYMENT_TARGET = 10.10; OTHER_LDFLAGS = ( "-filelist", |