In the JSF app I'm working on we use message bundles and locales extensivelly. Nearly all labels are defined in a set of *.properties file, there is one file for each language, etc. This works great, whenever the user changes its language preferences on the browser and refreshes the page, those labels change accordingly.
The only labels that do not change are the 'native' JSF validation messages. Those messages are always on the language defined in the JVM during server startup (we use JBoss 7.1 and eap 6.3). So, for example, if in the startup script the this is defined: -Duser.language=en the validation messages will always be in English.
example: Validation Error: Value is required.
If, however we change the property to -Duser.language=pt the validation messages will come up in portuguese.
example: Erro de validação: Valor é necessário.
All the other labels do not have that behavior, so they do change according to the browser's language preference.
We did not specify custom validation messages anywhere.
In faces-config.xml we have the following:
<locale-config>
<default-locale>pt</default-locale>
<supported-locale>pt</supported-locale>
<supported-locale>en</supported-locale>
</locale-config>