Thomas Clayson
Thomas Clayson

Reputation: 29925

Localized date not translating the days

Here is how I am localising days:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

NSString *dayFormat = [NSDateFormatter dateFormatFromTemplate:@"EEEE" options:0 locale:[NSLocale currentLocale]];

[dateFormatter setDateFormat:dayFormat];
[dateFormatter setLocale:[NSLocale currentLocale]];

NSString *day = [dateFormatter stringFromDate:date];

And yet it seems to be returning English days of the week (Monday, Tuesday etc) rather than the device language (which has been set to German in the simulator).

Any idea where I'm going wrong?

Update after doing some research on device I've realised that its actually the region setting, not the language setting which changes the date language. Odd, but I guess its done for a reason.

Thanks

Upvotes: 1

Views: 184

Answers (2)

rdurand
rdurand

Reputation: 7410

I've had the same issue. It wouldn't work on the simulator, but it would on a device. Can you try it ? I did not however solve it, I did not even look more into it as it was working perfectly on the device, which is truly the main target of your app.


Edit:

This comes from Apple's doc:

currentLocale

Returns the logical locale for the current user.

+ (id)currentLocale

Return Value

The logical locale for the current user. The locale is formed from the settings for the current user’s chosen system locale overlaid with any custom settings the user has specified in System Preferences.

Discussion

Settings you get from this locale do not change as a user’s Preferences are changed so that your operations are consistent. Typically you perform some operations on the returned object and then allow it to be disposed of. Moreover, since the returned object may be cached, you do not need to hold on to it indefinitely. Contrast with autoupdatingCurrentLocale.

Maybe you can try using:

preferredLanguages

Returns the user's language preference order as an array of strings.

+ (NSArray *)preferredLanguages

Return Value

The user's language preference order as an array of NSString objects, each of which is a canonicalized IETF BCP 47 language identifier.

Upvotes: 0

Thomas Clayson
Thomas Clayson

Reputation: 29925

The language of the date is set by the region not the language. This has to be a bug. If I'm in Germany, but an English speaker I don't want to have my dates in German, surely?

Anyway, this is why. You have to change language and region.

Upvotes: 1

Related Questions