diff options
Diffstat (limited to 'platform/darwin/src')
-rw-r--r-- | platform/darwin/src/MGLClockDirectionFormatter.h | 7 | ||||
-rw-r--r-- | platform/darwin/src/MGLClockDirectionFormatter.m | 18 | ||||
-rw-r--r-- | platform/darwin/src/MGLCompassDirectionFormatter.m | 128 | ||||
-rw-r--r-- | platform/darwin/src/MGLCoordinateFormatter.h | 24 | ||||
-rw-r--r-- | platform/darwin/src/MGLCoordinateFormatter.m | 107 |
5 files changed, 178 insertions, 106 deletions
diff --git a/platform/darwin/src/MGLClockDirectionFormatter.h b/platform/darwin/src/MGLClockDirectionFormatter.h index e748a15847..e467b20e06 100644 --- a/platform/darwin/src/MGLClockDirectionFormatter.h +++ b/platform/darwin/src/MGLClockDirectionFormatter.h @@ -26,13 +26,6 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic) NSFormattingUnitStyle unitStyle; /** - The locale of the receiver. - - The locale determines the output language and numeral system of the output. - */ -@property (copy) NSLocale *locale; - -/** Returns a clock position string for the provided value. @param direction The heading, measured in degrees, where 0° means “straight diff --git a/platform/darwin/src/MGLClockDirectionFormatter.m b/platform/darwin/src/MGLClockDirectionFormatter.m index 8047b41b35..51a37d3674 100644 --- a/platform/darwin/src/MGLClockDirectionFormatter.m +++ b/platform/darwin/src/MGLClockDirectionFormatter.m @@ -13,41 +13,31 @@ if (self = [super init]) { _unitStyle = NSFormattingUnitStyleMedium; _numberFormatter = [[NSNumberFormatter alloc] init]; + _numberFormatter.numberStyle = NSNumberFormatterDecimalStyle; } return self; } -- (NSLocale *)locale { - return _numberFormatter.locale; -} - -- (void)setLocale:(NSLocale *)locale { - _numberFormatter.locale = locale; -} - - (NSString *)stringFromDirection:(CLLocationDirection)direction { NSInteger hour = round(-wrap(-direction, -360, 0) / 360 * 12); NSString *format; - NSNumberFormatterStyle style = NSNumberFormatterDecimalStyle; switch (self.unitStyle) { case NSFormattingUnitStyleShort: - format = NSLocalizedString(@"%@:00", @"Clock position format, short style"); + format = NSLocalizedStringFromTable(@"%@:00", @"Foundation", @"Clock position format, short style"); break; case NSFormattingUnitStyleMedium: - format = NSLocalizedString(@"%@ o’clock", @"Clock position format, medium style"); + format = NSLocalizedStringFromTable(@"%@ o’clock", @"Foundation", @"Clock position format, medium style"); break; case NSFormattingUnitStyleLong: - format = NSLocalizedString(@"%@ o’clock", @"Clock position format, long style"); - style = NSNumberFormatterSpellOutStyle; + format = NSLocalizedStringFromTable(@"%@ o’clock", @"Foundation", @"Clock position format, long style"); break; default: break; } - _numberFormatter.numberStyle = style; return [NSString stringWithFormat:format, [_numberFormatter stringFromNumber:@(hour)]]; } diff --git a/platform/darwin/src/MGLCompassDirectionFormatter.m b/platform/darwin/src/MGLCompassDirectionFormatter.m index f719745ce6..c5dd9b4899 100644 --- a/platform/darwin/src/MGLCompassDirectionFormatter.m +++ b/platform/darwin/src/MGLCompassDirectionFormatter.m @@ -20,79 +20,79 @@ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ shortStrings = @[ - NSLocalizedString(@"N", @"North, short"), - NSLocalizedString(@"N×E", @"North by east, short"), - NSLocalizedString(@"NNE", @"North-northeast, short"), - NSLocalizedString(@"NE×N", @"Northeast by north, short"), - NSLocalizedString(@"NE", @"Northeast, short"), - NSLocalizedString(@"NE×E", @"Northeast by east, short"), - NSLocalizedString(@"ENE", @"East-northeast, short"), - NSLocalizedString(@"E×N", @"East by north, short"), + NSLocalizedStringFromTable(@"N", @"Foundation", @"North, short"), + NSLocalizedStringFromTable(@"N×E", @"Foundation", @"North by east, short"), + NSLocalizedStringFromTable(@"NNE", @"Foundation", @"North-northeast, short"), + NSLocalizedStringFromTable(@"NE×N", @"Foundation", @"Northeast by north, short"), + NSLocalizedStringFromTable(@"NE", @"Foundation", @"Northeast, short"), + NSLocalizedStringFromTable(@"NE×E", @"Foundation", @"Northeast by east, short"), + NSLocalizedStringFromTable(@"ENE", @"Foundation", @"East-northeast, short"), + NSLocalizedStringFromTable(@"E×N", @"Foundation", @"East by north, short"), - NSLocalizedString(@"E", @"East, short"), - NSLocalizedString(@"E×S", @"East by south, short"), - NSLocalizedString(@"ESE", @"East-southeast, short"), - NSLocalizedString(@"SE×E", @"Southeast by east, short"), - NSLocalizedString(@"SE", @"Southeast, short"), - NSLocalizedString(@"SE×S", @"Southeast by south, short"), - NSLocalizedString(@"SSE", @"South-southeast, short"), - NSLocalizedString(@"S×E", @"South by east, short"), + NSLocalizedStringFromTable(@"E", @"Foundation", @"East, short"), + NSLocalizedStringFromTable(@"E×S", @"Foundation", @"East by south, short"), + NSLocalizedStringFromTable(@"ESE", @"Foundation", @"East-southeast, short"), + NSLocalizedStringFromTable(@"SE×E", @"Foundation", @"Southeast by east, short"), + NSLocalizedStringFromTable(@"SE", @"Foundation", @"Southeast, short"), + NSLocalizedStringFromTable(@"SE×S", @"Foundation", @"Southeast by south, short"), + NSLocalizedStringFromTable(@"SSE", @"Foundation", @"South-southeast, short"), + NSLocalizedStringFromTable(@"S×E", @"Foundation", @"South by east, short"), - NSLocalizedString(@"S", @"South, short"), - NSLocalizedString(@"S×W", @"South by west, short"), - NSLocalizedString(@"SSW", @"South-southwest, short"), - NSLocalizedString(@"SW×S", @"Southwest by south, short"), - NSLocalizedString(@"SW", @"Southwest, short"), - NSLocalizedString(@"SW×W", @"Southwest by west, short"), - NSLocalizedString(@"WSW", @"West-southwest, short"), - NSLocalizedString(@"W×S", @"West by south, short"), + NSLocalizedStringFromTable(@"S", @"Foundation", @"South, short"), + NSLocalizedStringFromTable(@"S×W", @"Foundation", @"South by west, short"), + NSLocalizedStringFromTable(@"SSW", @"Foundation", @"South-southwest, short"), + NSLocalizedStringFromTable(@"SW×S", @"Foundation", @"Southwest by south, short"), + NSLocalizedStringFromTable(@"SW", @"Foundation", @"Southwest, short"), + NSLocalizedStringFromTable(@"SW×W", @"Foundation", @"Southwest by west, short"), + NSLocalizedStringFromTable(@"WSW", @"Foundation", @"West-southwest, short"), + NSLocalizedStringFromTable(@"W×S", @"Foundation", @"West by south, short"), - NSLocalizedString(@"W", @"West, short"), - NSLocalizedString(@"W×N", @"West by north, short"), - NSLocalizedString(@"WNW", @"West-northwest, short"), - NSLocalizedString(@"NW×W", @"Northwest by west, short"), - NSLocalizedString(@"NW", @"Northwest, short"), - NSLocalizedString(@"NW×N", @"Northwest by north, short"), - NSLocalizedString(@"NNW", @"North-northwest, short"), - NSLocalizedString(@"N×W", @"North by west, short"), + NSLocalizedStringFromTable(@"W", @"Foundation", @"West, short"), + NSLocalizedStringFromTable(@"W×N", @"Foundation", @"West by north, short"), + NSLocalizedStringFromTable(@"WNW", @"Foundation", @"West-northwest, short"), + NSLocalizedStringFromTable(@"NW×W", @"Foundation", @"Northwest by west, short"), + NSLocalizedStringFromTable(@"NW", @"Foundation", @"Northwest, short"), + NSLocalizedStringFromTable(@"NW×N", @"Foundation", @"Northwest by north, short"), + NSLocalizedStringFromTable(@"NNW", @"Foundation", @"North-northwest, short"), + NSLocalizedStringFromTable(@"N×W", @"Foundation", @"North by west, short"), ]; longStrings = @[ - NSLocalizedString(@"north", @"North, long"), - NSLocalizedString(@"north by east", @"North by east, long"), - NSLocalizedString(@"north-northeast", @"North-northeast, long"), - NSLocalizedString(@"northeast by north", @"Northeast by north, long"), - NSLocalizedString(@"northeast", @"Northeast, long"), - NSLocalizedString(@"northeast by east", @"Northeast by east, long"), - NSLocalizedString(@"east-northeast", @"East-northeast, long"), - NSLocalizedString(@"east by north", @"East by north, long"), + NSLocalizedStringFromTable(@"north", @"Foundation", @"North, long"), + NSLocalizedStringFromTable(@"north by east", @"Foundation", @"North by east, long"), + NSLocalizedStringFromTable(@"north-northeast", @"Foundation", @"North-northeast, long"), + NSLocalizedStringFromTable(@"northeast by north", @"Foundation", @"Northeast by north, long"), + NSLocalizedStringFromTable(@"northeast", @"Foundation", @"Northeast, long"), + NSLocalizedStringFromTable(@"northeast by east", @"Foundation", @"Northeast by east, long"), + NSLocalizedStringFromTable(@"east-northeast", @"Foundation", @"East-northeast, long"), + NSLocalizedStringFromTable(@"east by north", @"Foundation", @"East by north, long"), - NSLocalizedString(@"east", @"East, long"), - NSLocalizedString(@"east by south", @"East by south, long"), - NSLocalizedString(@"east-southeast", @"East-southeast, long"), - NSLocalizedString(@"southeast by east", @"Southeast by east, long"), - NSLocalizedString(@"southeast", @"Southeast, long"), - NSLocalizedString(@"southeast by south", @"Southeast by south, long"), - NSLocalizedString(@"south-southeast", @"South-southeast, long"), - NSLocalizedString(@"south by east", @"South by east, long"), + NSLocalizedStringFromTable(@"east", @"Foundation", @"East, long"), + NSLocalizedStringFromTable(@"east by south", @"Foundation", @"East by south, long"), + NSLocalizedStringFromTable(@"east-southeast", @"Foundation", @"East-southeast, long"), + NSLocalizedStringFromTable(@"southeast by east", @"Foundation", @"Southeast by east, long"), + NSLocalizedStringFromTable(@"southeast", @"Foundation", @"Southeast, long"), + NSLocalizedStringFromTable(@"southeast by south", @"Foundation", @"Southeast by south, long"), + NSLocalizedStringFromTable(@"south-southeast", @"Foundation", @"South-southeast, long"), + NSLocalizedStringFromTable(@"south by east", @"Foundation", @"South by east, long"), - NSLocalizedString(@"south", @"South, long"), - NSLocalizedString(@"south by west", @"South by west, long"), - NSLocalizedString(@"south-southwest", @"South-southwest, long"), - NSLocalizedString(@"southwest by south", @"Southwest by south, long"), - NSLocalizedString(@"southwest", @"Southwest, long"), - NSLocalizedString(@"southwest by west", @"Southwest by west, long"), - NSLocalizedString(@"west-southwest", @"West-southwest, long"), - NSLocalizedString(@"west by south", @"West by south, long"), + NSLocalizedStringFromTable(@"south", @"Foundation", @"South, long"), + NSLocalizedStringFromTable(@"south by west", @"Foundation", @"South by west, long"), + NSLocalizedStringFromTable(@"south-southwest", @"Foundation", @"South-southwest, long"), + NSLocalizedStringFromTable(@"southwest by south", @"Foundation", @"Southwest by south, long"), + NSLocalizedStringFromTable(@"southwest", @"Foundation", @"Southwest, long"), + NSLocalizedStringFromTable(@"southwest by west", @"Foundation", @"Southwest by west, long"), + NSLocalizedStringFromTable(@"west-southwest", @"Foundation", @"West-southwest, long"), + NSLocalizedStringFromTable(@"west by south", @"Foundation", @"West by south, long"), - NSLocalizedString(@"west", @"West, long"), - NSLocalizedString(@"west by north", @"West by north, long"), - NSLocalizedString(@"west-northwest", @"West-northwest, long"), - NSLocalizedString(@"northwest by west", @"Northwest by west, long"), - NSLocalizedString(@"northwest", @"Northwest, long"), - NSLocalizedString(@"northwest by north", @"Northwest by north, long"), - NSLocalizedString(@"north-northwest", @"North-northwest, long"), - NSLocalizedString(@"north by west", @"North by west, long"), + NSLocalizedStringFromTable(@"west", @"Foundation", @"West, long"), + NSLocalizedStringFromTable(@"west by north", @"Foundation", @"West by north, long"), + NSLocalizedStringFromTable(@"west-northwest", @"Foundation", @"West-northwest, long"), + NSLocalizedStringFromTable(@"northwest by west", @"Foundation", @"Northwest by west, long"), + NSLocalizedStringFromTable(@"northwest", @"Foundation", @"Northwest, long"), + NSLocalizedStringFromTable(@"northwest by north", @"Foundation", @"Northwest by north, long"), + NSLocalizedStringFromTable(@"north-northwest", @"Foundation", @"North-northwest, long"), + NSLocalizedStringFromTable(@"north by west", @"Foundation", @"North by west, long"), ]; NSAssert(shortStrings.count == longStrings.count, @"Long and short compass direction string arrays must have the same size."); diff --git a/platform/darwin/src/MGLCoordinateFormatter.h b/platform/darwin/src/MGLCoordinateFormatter.h index 885471c36e..3759576d2a 100644 --- a/platform/darwin/src/MGLCoordinateFormatter.h +++ b/platform/darwin/src/MGLCoordinateFormatter.h @@ -13,6 +13,30 @@ NS_ASSUME_NONNULL_BEGIN @interface MGLCoordinateFormatter : NSFormatter /** + Determines whether the output may contain minutes of arc when nonzero. + + The default value of this property is `YES`, causing the receiver to include + minutes of arc in its output. If `allowsSeconds` is `YES`, this property is + ignored and the output always includes minutes of arc. + */ +@property (nonatomic) BOOL allowsMinutes; + +/** + Determines whether the output may contain seconds of arc when nonzero. + + The default value of this property is `YES`, causing the receiver to include + seconds of arc in its output. + */ +@property (nonatomic) BOOL allowsSeconds; + +/** + The unit style used by this formatter. + + The default value of this property is `NSFormattingUnitStyleMedium`. + */ +@property (nonatomic) NSFormattingUnitStyle unitStyle; + +/** Returns a coordinate string for the provided value. @param coordinate The coordinate’s value. diff --git a/platform/darwin/src/MGLCoordinateFormatter.m b/platform/darwin/src/MGLCoordinateFormatter.m index 4ef5409380..043c14b1ff 100644 --- a/platform/darwin/src/MGLCoordinateFormatter.m +++ b/platform/darwin/src/MGLCoordinateFormatter.m @@ -3,43 +3,108 @@ #import "NSBundle+MGLAdditions.h" #import "NSValue+MGLAdditions.h" -@implementation MGLCoordinateFormatter { - NSNumberFormatter *_numberFormatter; -} +@implementation MGLCoordinateFormatter - (instancetype)init { if (self = [super init]) { - _numberFormatter = [[NSNumberFormatter alloc] init]; - _numberFormatter.numberStyle = NSNumberFormatterDecimalStyle; - _numberFormatter.maximumFractionDigits = 0; + _allowsMinutes = YES; + _allowsSeconds = YES; + _unitStyle = NSFormattingUnitStyleMedium; } return self; } - (NSString *)stringFromCoordinate:(CLLocationCoordinate2D)coordinate { - return [NSString stringWithFormat:NSLocalizedString(@"%@, %@", @"Latitude, longitude format"), - [self stringFromLocationDegrees:coordinate.latitude - positiveFormat:NSLocalizedString(@"%@N", @"North latitude format") - negativeFormat:NSLocalizedString(@"%@S", @"South latitude format")], - [self stringFromLocationDegrees:coordinate.longitude - positiveFormat:NSLocalizedString(@"%@E", @"East longitude format") - negativeFormat:NSLocalizedString(@"%@W", @"West longitude format")]]; + NSString *positiveLatitudeFormat; + NSString *negativeLatitudeFormat; + NSString *positiveLongitudeFormat; + NSString *negativeLongitudeFormat; + NSString *stringFormat; + switch (self.unitStyle) { + case NSFormattingUnitStyleShort: + positiveLatitudeFormat = NSLocalizedStringFromTable(@"%@N", @"Foundation", @"North latitude format, short"); + negativeLatitudeFormat = NSLocalizedStringFromTable(@"%@S", @"Foundation", @"South latitude format, short"); + positiveLongitudeFormat = NSLocalizedStringFromTable(@"%@E", @"Foundation", @"East longitude format, short"); + negativeLongitudeFormat = NSLocalizedStringFromTable(@"%@W", @"Foundation", @"West longitude format, short"); + stringFormat = NSLocalizedStringFromTable(@"%@, %@", @"Foundation", @"Latitude-longitude format, short"); + break; + + case NSFormattingUnitStyleMedium: + positiveLatitudeFormat = NSLocalizedStringFromTable(@"%@ north", @"Foundation", @"North latitude format, medium"); + negativeLatitudeFormat = NSLocalizedStringFromTable(@"%@ south", @"Foundation", @"South latitude format, medium"); + positiveLongitudeFormat = NSLocalizedStringFromTable(@"%@ east", @"Foundation", @"East longitude format, medium"); + negativeLongitudeFormat = NSLocalizedStringFromTable(@"%@ west", @"Foundation", @"West longitude format, medium"); + stringFormat = NSLocalizedStringFromTable(@"%@, %@", @"Foundation", @"Latitude-longitude format, medium"); + break; + + case NSFormattingUnitStyleLong: + positiveLatitudeFormat = NSLocalizedStringFromTable(@"%@ north", @"Foundation", @"North latitude format, long"); + negativeLatitudeFormat = NSLocalizedStringFromTable(@"%@ south", @"Foundation", @"South latitude format, long"); + positiveLongitudeFormat = NSLocalizedStringFromTable(@"%@ east", @"Foundation", @"East longitude format, long"); + negativeLongitudeFormat = NSLocalizedStringFromTable(@"%@ west", @"Foundation", @"West longitude format, long"); + stringFormat = NSLocalizedStringFromTable(@"%@ by %@", @"Foundation", @"Latitude-longitude format, long"); + break; + } + NSString *latitudeString = [self stringFromLocationDegrees:coordinate.latitude + positiveFormat:positiveLatitudeFormat + negativeFormat:negativeLatitudeFormat]; + NSString *longitudeString = [self stringFromLocationDegrees:coordinate.longitude + positiveFormat:positiveLongitudeFormat + negativeFormat:negativeLongitudeFormat]; + return [NSString stringWithFormat:stringFormat, latitudeString, longitudeString]; } - (NSString *)stringFromLocationDegrees:(CLLocationDegrees)degrees positiveFormat:(NSString *)positiveFormat negativeFormat:(NSString *)negativeFormat { CLLocationDegrees minutes = (fabs(degrees) - floor(fabs(degrees))) * 60; CLLocationDegrees seconds = (minutes - floor(minutes)) * 60; - NSMutableString *string = [NSMutableString stringWithFormat:NSLocalizedString(@"%@°", @"Degrees of arc format"), - [_numberFormatter stringFromNumber:@(floor(fabs(degrees)))]]; - if (trunc(minutes) > 0 || trunc(seconds) > 0) { - [string appendFormat:NSLocalizedString(@"%@′", @"Arcminutes format"), - [_numberFormatter stringFromNumber:@(floor(minutes))]]; + NSString *degreesFormat; + NSString *minutesFormat; + NSString *secondsFormat; + NSString *degreesMinutesFormat; + NSString *degreesMinutesSecondsFormat; + switch (self.unitStyle) { + case NSFormattingUnitStyleShort: + degreesFormat = NSLocalizedStringFromTable(@"%d°", @"Foundation", @"Degrees format, short"); + minutesFormat = NSLocalizedStringFromTable(@"%d′", @"Foundation", @"Minutes format, short"); + secondsFormat = NSLocalizedStringFromTable(@"%d″", @"Foundation", @"Seconds format, short"); + degreesMinutesFormat = NSLocalizedStringFromTable(@"%@%@", @"Foundation", @"Degrees-minutes format, short"); + degreesMinutesSecondsFormat = NSLocalizedStringFromTable(@"%@%@%@", @"Foundation", @"Degrees-minutes-seconds format, short"); + break; + + case NSFormattingUnitStyleMedium: + degreesFormat = NSLocalizedStringFromTable(@"%d°", @"Foundation", @"Degrees format, medium"); + minutesFormat = NSLocalizedStringFromTable(@"%d′", @"Foundation", @"Minutes format, medium"); + secondsFormat = NSLocalizedStringFromTable(@"%d″", @"Foundation", @"Seconds format, medium"); + degreesMinutesFormat = NSLocalizedStringFromTable(@"%@%@", @"Foundation", @"Degrees-minutes format, medium"); + degreesMinutesSecondsFormat = NSLocalizedStringFromTable(@"%@%@%@", @"Foundation", @"Degrees-minutes-seconds format, medium"); + break; + + case NSFormattingUnitStyleLong: + degreesFormat = NSLocalizedStringFromTable(@"%d degree(s)", @"Foundation", @"Degrees format, long"); + minutesFormat = NSLocalizedStringFromTable(@"%d minute(s)", @"Foundation", @"Minutes format, long"); + secondsFormat = NSLocalizedStringFromTable(@"%d second(s)", @"Foundation", @"Seconds format, long"); + degreesMinutesFormat = NSLocalizedStringFromTable(@"%@ and %@", @"Foundation", @"Degrees-minutes format, long"); + degreesMinutesSecondsFormat = NSLocalizedStringFromTable(@"%@, %@, and %@", @"Foundation", @"Degrees-minutes-seconds format, long"); + break; } - if (trunc(seconds) > 0) { - [string appendFormat:NSLocalizedString(@"%@″", @"Arcseconds format"), - [_numberFormatter stringFromNumber:@(seconds)]]; + + NSString *degreesString = [NSString stringWithFormat:degreesFormat, (int)floor(fabs(degrees))]; + + NSString *string; + if (trunc(seconds) > 0 && self.allowsSeconds) { + NSString *minutesString = [NSString stringWithFormat:minutesFormat, (int)floor(minutes)]; + NSString *secondsString = [NSString stringWithFormat:secondsFormat, (int)round(seconds)]; + string = [NSString stringWithFormat:degreesMinutesSecondsFormat, + degreesString, minutesString, secondsString]; + } else if (trunc(minutes) > 0 && self.allowsMinutes) { + NSString *minutesString = [NSString stringWithFormat:minutesFormat, (int)round(minutes)]; + string = [NSString stringWithFormat:degreesMinutesFormat, + degreesString, minutesString]; + } else { + string = [NSString stringWithFormat:degreesFormat, (int)round(fabs(degrees))]; } + if (degrees == 0) { return string; } |