I was able to partially solve this by sending a ui_locales parameter to the authorize endpoint. This gets stored in the session and the login page then has access to it. If the given string is in the selected, supported language file, it will display appropriately.
I got access to the passed locales in the index.xhtml page:
```
<ui:param name="selectedLanguage" value="#{empty sessionAttributes['ui_locales'] ? 'en' : fn:substring(sessionAttributes['ui_locales'],0,2)}"></ui:param>
```
where the _fn_ prefix is set as:
```
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
```
But, this couldn't be modified for postback if the user changes their language while on the login page. So, I did some javascript and HTML tag attribute magic to change language on the fly on the client.