If the user selects a language from the dialog (by clicking 'change'),
then preserve that explicit choice even when clicking on another
location which would reset the language based on the installer-
language.
This allows for installing locale packages. This can be achieved
by adding a entry of the format packagename-${LOCALE} in the
packages configuration module.
locale -a returns the locales using ".utf8" names rather than ".UTF-8".
The case-insensitive match does not help because it is "utf8" rather
than "UTF-8". So we need to match both with and without the dash.
In order to avoid deep copies, Qt containers over which we iterate must be const
The remaining unported cases require qAsConst (Qt 5.7) or std::as_const (C++17)
If /etc/locale.gen (or the configured localeGenPath) does not exist,
assume that all the supported languages are already built into the
locale archive, and retrieve the list from "locale -a".
The list will then contain lines with only the locale rather than
locale + space + encoding, but that should not affect any of the rest of
the code. UTF-8 locales will still contain the string "UTF-8" (as part
of the ".UTF-8" suffix), we will not write a locale.gen file if we don't
have locale-gen, and everything else just strips away the encoding.
Some languages have 3-letter codes. So instead of splitting the output
of QLocale::name, use QLocale::language and the static
QLocale::languageToString.