I added a FOOBAR variable to both ~/.pam_environment and /etc/default/locale, with different values in each file, and after logging in the value is the one from ~/.pam_environment. So I don't think gdm sources /etc/default/locale after ~/.pam_environment. However variables LANG, LANGUAGE and LC_* appear to be overridden by the values in /etc/default/locale, and set_up_session_language() in daemon/gdm-session.c (https://git.gnome.org/browse/gdm/tree/daemon/gdm-session.c#n2488) looks suspicious in that regard.
I added a FOOBAR variable to both ~/.pam_environment and /etc/default/ locale, with different values in each file, and after logging in the value is the one from ~/.pam_environment. So I don't think gdm sources /etc/default/locale after ~/.pam_environment. However variables LANG, LANGUAGE and LC_* appear to be overridden by the values in /etc/default/ locale, and set_up_ session_ language( ) in daemon/ gdm-session. c (https:/ /git.gnome. org/browse/ gdm/tree/ daemon/ gdm-session. c#n2488) looks suspicious in that regard.