NSLocale preferredLanguages objectAtIndex:0 always return "en"
Asked Answered
P

2

24

Simulator's language already changed to Japanese, why [[NSLocale preferredLanguages] objectAtIndex:0] always return "en"?

Neither preferred language nor region is related to "en", where does "en" come from?

Here is screenshot

Tried to get [[NSLocale preferredLanguages] objectAtIndex:2], then crash shows *** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFArray objectAtIndex:]: index (2) beyond bounds (1)

Does it means there is no any languages are set in simulator? So weird!

This never happened before upgrading to Xcode 6.1 with iOS8.1/7.1.

Meanwhile, tried same thing on my iPhone 5, console output correct thing.

Why so weird? Does anybody have such problems?

Updates: 1

  • Delete Xcode as well as simulators, and reinstall it by downloading from Mac Store.
  • Create a new simple project, change simlulator's language
  • Still get always "en".

Oh! What's wrong....


Updates: 2

  • Today, reinstalled brand new Yosemite by reformatting HD
  • Download Xcode 6.1
  • Start a new simple default project
  • Put these codes
  • Change / Add language of simulator, Japanese, Dutch, English,
  • Run
  • Oh, God! Got only "en" again, Japanese and English not found!

Why still only one "en" could be found? Where are Japanese and English?

What happened to simulators?

Is there anything I missed?

Privett answered 26/10, 2014 at 10:42 Comment(6)
Try setting your preferred languages for OS X (not in settings in the simulator?)Cardoza
Does preferred language for OS X impact that of iPhone simulator? I don't think so. Anyway, tried but not work.Privett
[[NSLocale preferredLanguages] objectAtIndex:0] is working fine for me on iPhone6 & iPhone6 plus both simulators.Sliest
@Sliest What's version of Xcode you're using?Privett
@Sliest 6.0.1 or 6.1?Privett
Ver 6.0.1 but i don't think version will matter for this.Sliest
U
29

This is a bug. It was driving me crazy. Apple already knows it.

See this answers:

iOS8.1 Simulator always uses US keyboard layout despite german hardware keyboard

and this:

iOS 8.1 Simulator Localization broken (NSLocalizedString)

(In the answer there is a temporary fix changing the schema)

Best, gigi

Upanchor answered 29/10, 2014 at 22:5 Comment(4)
Exactly. After spending my whole day on installing/uninstalling/reinstall Xcode 5.1.1, 6.0.1, eventually found out NSLocale not work correctly was because of Xcode 6.1.Privett
Yep, unfortunately we have to wait Apple, or use the schema fix.Upanchor
PS: you should close the question:) @s1uUpanchor
@s1u you have to accept the best answer clicking on the check on left. This way people will immediately know what to read to have a solution or best explanation to the issue. Furthermore the question will not appear in unswared question. This will keep stackoverflow tidy and efficientUpanchor
B
1

My iOS simulator suddenly started reporting "en" rather than "en-US", so it seems this issue is still active.

Reproduced in:

  • Xcode 8.2.1, iOS 10
  • Xcode 9.4.1, iOS 11

I went into the language settings and English and United States were selected. I selected Canada and French, and got "fr-CA". I then switched it back and started getting "en-US" again. I've been unable to reproduce the "en" issue since.

So it appears we cannot pass the values of [NSLocale preferredLanguages] on assuming they will be Language-Region pairs.

Bluetongue answered 3/5, 2017 at 16:16 Comment(1)
Take a look at Settings --> General --> Language & Region --> iPhone Language, in an iOS Simulator. You will find that the Simulator is by default set to "English", not to "English (US)". That is the reason why [NSLocale preferredLanguages] reports "en" as the system language. The strangest thing is that plain "English" (without a country) seems not to be available on real devices, just on the Simulator.Drool

© 2022 - 2024 — McMap. All rights reserved.