Harald mentioned he was surprised about the locales we recommend in the
.xsession example, so I’ve re-investigated.
Here is the test program I have used:
#include <stdio.h>
#include <locale.h>
int main() {
/* SUSv2 setlocale(3) says:
* Internationalised programs must call setlocale() to initiate
* a specific language operation. This can be done by calling
* setlocale() as follows: */
setlocale(LC_ALL, "");
printf("LC_NUMERIC is %s\n", setlocale(LC_NUMERIC, NULL));
}
Then, I have unset LANG and LC_*:
midna /tmp $ env | grep LANG
midna /tmp $ env | grep LC
midna /tmp $
Now, observe that LC_ALL overwrites all specific LC variables:
midna /tmp $ LC_ALL=de_DE.UTF-8 LC_NUMERIC=en_DK.UTF-8 ./localetest
LC_NUMERIC is de_DE.UTF-8
However, LANG does not:
midna /tmp $ LANG=de_DE.UTF-8 ./localetest
LC_NUMERIC is de_DE.UTF-8
midna /tmp $ LANG=de_DE.UTF-8 LC_NUMERIC=en_DK.UTF-8 ./localetest
LC_NUMERIC is en_DK.UTF-8
This is consistent with what perldoc perllocale says:
http://perldoc.perl.org/perllocale.html#ENVIRONMENT