There was a significant (backward-incompatible!) change in the way month names are localized in Java 7 and Java 8.
This relates to the new java.time API (Tutorial) introduced by Java 8. The API (quite reasonably) distinguishes two different forms of a month name, as defined by java.time.format.TextStyle
enum:
- Standalone, which represents the month name as it is. It corresponds to the "nominative" in many languages.
- Standard, which is typically used inside complete date representations. This corresponds to the "genitive".
The default variant for date formatter is "standard", which also seems reasonable, as formatters are typically used to produce complete dates. Unfortunately, this lead to a change in behavior (at least for some languages) between Java 7 (which used to produce standalone names) and Java 8 (which produces a "standard" name).
It is possible to explicitely ask for the standalone/nominative form by using the above-mentioned TextStyle
enumeration. Unfortunately, this makes your code dependent on Java 8 or higher.
Quick demo:
import java.time.Month;
import java.time.format.TextStyle;
import java.util.Locale;
for (TextStyle ts : TextStyle.values()) {
System.out.print(ts + ": ");
System.out.print(Month.OCTOBER.getDisplayName(ts, Locale.ENGLISH ) + " / "); // English
System.out.print(Month.OCTOBER.getDisplayName(ts, Locale.forLanguageTag("cs")) + " / "); // Czech
System.out.print(Month.OCTOBER.getDisplayName(ts, Locale.forLanguageTag("ru")) + " / "); // Russian
System.out.println(Month.OCTOBER.getDisplayName(ts, Locale.forLanguageTag("pl"))); // Polish
}
Which prints:
FULL: October / října / октября / października
FULL_STANDALONE: 10 / říjen / Октябрь / październik
SHORT: Oct / Říj / окт / paź
SHORT_STANDALONE: 10 / X / Окт. / paź
NARROW: O / ř / О / p
NARROW_STANDALONE: 10 / ř / О / p
I do not know of any easy way to get the standalone form that would be working under both Java 7 and Java 8. At least not in pure Java - of course, there are some complicated and more fragile ways, like trying to detect Java version or using some third-party library.