I am attempting to override the user registration from at user/register to allow users to select their own language upon login.
Based on this helpful answer, I came up with this override:
function hook_form_user_register_form_alter(&$form, &$form_state, $form_id) {
$form['locale']['language'] = array(
'#type' => (count($names) <= 5 ? 'radios' : 'select'),
'#title' => t('Language'),
'#default_value' => $user_preferred_language->language,
'#options' => $names,
'#description' => $mode ? t("This account's default language for e-mails, and preferred language for site presentation.") : t("This account's default language for e-mails."),
);
However, it doesn't work because of the following code in locale.module:
$form['locale'] = array(
'#type' => 'fieldset',
'#title' => t('Language settings'),
'#weight' => 1,
'#access' => ($form['#user_category'] == 'account' || ($form['#user_category'] == 'register' && user_access('administer users'))),
);
Simply deleting && user_access('administer users')
from locale.module and clearing the cache makes it work, but if I do that I'm hacking core.
How can I remove the bit about && user_access('administer users')
without hacking core?