1.- Does anyone know why this behavior follows language?
One of the first aspects that change in the application in accordance with its language version is the language. Think of Switzerland, where they have both French and German as official languages. Using a country in this scenario is pointless because besides the currency there is another aspect (for example, the displayed messages to take into account)
The same goes for a number of countries (Canada is another thing that comes to my mind).
The country has the opportunity to specialize in this language.
Since there is no “Italian English”, en_IT does not make much sense. Therefore, "English" is required, and therefore the returned instance is an instance with "en" in English.
2.- More importantly, can anyone suggest detailed information on how to change the default behavior in Java to follow the language instead?
Do you mean that the country is right?
The answer lies in the method: NumberFormat.getAvailableLocales () , which in turn leads you to: NumberFormatProvider , which is an abstract class that you can extend to return the correct NumberFormat for "en_IT" (which will pretty much return it_IT)
How to install this new class is beyond my knowledge, but I think you will have to hack it somewhere in the jre directory.
EDIT
As I suspect, the class should be installed in the jre/ext folder and that it is.
Elsewhere, there is a project that did something similar to supporting "gl_ES" (Galician)
Here are the installation instructions and what it is:
http://www.javagalician.org/install.html
So basically, if you want to provide a bunch of instances for Italy (or even better than one), you just need to create one instance of NumberFormatProvider and give it answers to all available languages.