Hola,
Básicamente el problema es la precedencia de los operadores,
if (día > calendario.getMaximum(GregorianCalendar.DAY_OF_MON TH)
|| día < 1 && mes < 1 || mes > 12) {
La precedencia de los operadores en java es primero el and y despues el or. Suponiendo que la fecha es 31/Nov, primero se evalúa:
dia < 1 && mes < 1 y devuelve falso.
Seguidamente se evalúa:
dia > cale.. || (expresion anterior) y devuelve true.
Por último se evalúa:
(expresion anterior) || mes > 12 y devuelve false.
Me imagino que querías hacer lo siguiente, (aunque no estoy seguro), posiblemente tengas que agregar o cambiar los paréntesis donde corresponde:
Código Java:
Ver original || día < 1) && (mes < 1 || mes > 12)) {
Al agregar los paréntesis se cambia la jerarquía de los operadores.
Otra cosa es que no necesitas traducir los días y los meses, Java esta hecho para que funcione en cualquier lenguaje solamente tienes que configurar correctamente el sistema operativo o usar java.util.Locale y java.text.DateFormatSymbols, o algún Formatter.
Saludos,