Display system UI in specified language

We have an App that supports only English-language UI. However, when we run it on a device set to a different Language/Region (e.g. fr-CA), system UIs appear in the device language, not in English. Our preference would be to have all UI displayed "inside" the App appear in English.


There are two system UIs that we're particularly concerned with: the standard alert requesting the user to allow notifications, and MapKit map views. To experiment, I created a single-view project that only does two things: request permission for notifications and show a map view. I've tried the following, none of which appears to have the desired effect:


  • No localizations whatsoever (i.e. default when creating a new Xcode iOS project)
  • Added explicit "English - Development Language" localizaton (i.e. CFBundleLocalizations) and no other localizations
  • Tried setting the "AppleLanguages" in UserDefaults early in the App lifecycle (tried this in the AppDelegate and in a custom main.swift). I realize this is bad/dangerous/grounds-for-app-rejection territory, but just trying to explore all options.


There are a number of posts on the topic of overriding system localization, and these ones in particular suggest that what we're attempting is not supported:

https://forums.developer.apple.com/thread/85549

https://forums.developer.apple.com/message/36704#36704


However, these seem to talk about changing localization on the fly, which is not exactly what we're attempting. We don't want to change on the fly (e.g. in response to a language option inside our app), but rather just have all UIs, whether ours or from the system/frameworks appear only in English.


There's a quote from @Eskimo that stands out for me in the latter post:

If the system puts up a UI component on your behalf (the document picker, or Game Center user interface parts, or whatever) it will do so in the localisation that it thinks that your app is running in.

Is there some way to inform the system that the app is running in a specified localization that we've just overlooked?

Replies

The system has a general goal of avoiding mixed localisation, that is, one part of the app showing up in one language and one part showing up in another. The problem here is the definition of “the app”. Speaking abstractly, ignoring the actual implementation and the possibility of bugs in that implementation, is the notification authorisation dialog being displayed by the app? Or by the system? Because if it’s the former it should be in English and if it’s the latter it should be in Canadian French.

I’m not sure how this policy is being applied on modern versions of iOS. My suggestions:

Share and Enjoy

Quinn “The Eskimo!”
Apple Developer Relations, Developer Technical Support, Core OS/Hardware

let myEmail = "eskimo" + "1" + "@apple.com"