Search code examples
iosobjective-cradixnslocalizedstring

NSLocalizedString not defaulting to Base language


I have the following problem with a small iOS 7 project on which I'm testing the localisation capabilities.

  • I have a default project, with one VC, in which I have one button in the middle of the scene
  • in my VC I have an IBOutlet to my button called myButton
  • in the viewDidLoad method of the VC I am setting the buttons's title:


    NSString *title = NSLocalizedString(@"MY_BUTTON", @"My comment for my button");
    [self.myButton setTitle:title forState:UIControlStateNormal];

  • I generated the Localizable.strings file end enabled it for localization for the following languages: Base, Dutch
  • the contents of each file are as follows:

/* My comment for my button */ "MY_BUTTON" = "My [VALUE] Button"; where VALUE = Base, Dutch; so the labels should be My Base Button & My Dutch Button

Problem: If I launch my app using the simulator's language as Dutch, the label is (as expected) "My Dutch Button". If I launch it in English, the label is "My Base Button" (kind of ok…)

However, if I launch it with the phone's language set to French, and I previously had it set to Dutch, the label of the button does not default to Base, and instead displays again "My Dutch Button"

Any thoughts on this?

Thanks


Solution

  • the order of default languages is a user setting on OSX and not editable (AFAIK) on iOS
    BUT still adhered to!

    the app is passed the array AppleLanguages (or so..) that specifies the languages to try. The NSLocalizedString macro will try load each language in the array in the order they appear UNTIL it finds a working one and then it uses that

    compare: How to force NSLocalizedString to use a specific language