NSLocale preferredLanguages objectAtIndex:0 always

2019-01-23 02:15发布

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?

2条回答
孤傲高冷的网名
2楼-- · 2019-01-23 02:54

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

查看更多
forever°为你锁心
3楼-- · 2019-01-23 03:04

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.

查看更多
登录 后发表回答