summaryrefslogtreecommitdiff
path: root/platform/darwin/src
diff options
context:
space:
mode:
Diffstat (limited to 'platform/darwin/src')
-rw-r--r--platform/darwin/src/MGLClockDirectionFormatter.h7
-rw-r--r--platform/darwin/src/MGLClockDirectionFormatter.m18
-rw-r--r--platform/darwin/src/MGLCompassDirectionFormatter.m128
-rw-r--r--platform/darwin/src/MGLCoordinateFormatter.h24
-rw-r--r--platform/darwin/src/MGLCoordinateFormatter.m107
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;
}