In the Universal user preferences, the shown available languages for your current application are determined by the total amount of application languages that the logged in user has access to (including any other available applications).
This causes the following problem:
If user X has access to an English and a Spanish application, in both applications they will have the opportunity to switch language. Even when the English application only has English available from the model, and the Spanish application only has Spanish available from the model.
This causes the issue that user X can open the English application, and is allowed to switch to Spanish from their user preferences, without the presence of Spanish translation objects.
This effect escalates when a user has access to IAM (for example as group administrator), which is available in 7 different languages.
This results in the the following available languages in either the English-only or Spanish-only application.

Desired solution:
Add gui_appl_id to the view that is used for retrieving the list of languages. Allow only the languages that are available for your current application.