It appears there is no problem as long as you use the following guidelines:
1. Use lower-case locale names for supported-locales, eg. in AppModule:
public static void contributeApplicationDefaults(MappedConfiguration<String, String> configuration)
2. In the page class, get the current locale like this:
private Locale _locale;
instead of like this:
private PersistentLocale _persistentLocaleService;
Locale locale = _persistentLocaleService.get();
When guideline 1 is ignored, then these 4 statements all seem to select the first English supported locale:
When it IS followed, then all is well, although this makes me uneasy because I'm not sure that "en_gb" and "en_us" are actually valid locales.
Guideline 2 returns a _locale that is correctly mixed case, eg. "en_GB" or "en_US", whereas _persistentLocaleService.get() does not - it returns a lower-cased locale, eg. "en_gb" or "en_us" which is useless for formatting things correctly (see original comments in this issue).
These guidelines are OK as a work-around, but my vote is that the handling of supported-locales should be changed. Requiring lower-case is confusing and, I suspect, not even correct.