私は Java のMessageFormatユーティリティについてもっと理解しようとしています。私たちのコードベースや他の場所の例では、 と の両方{0}
が{0,number,integer}
数値に使用されていますが、どちらが望ましいかはわかりません。
違いを印刷する簡単なテスト:
import java.text.MessageFormat;
import java.text.NumberFormat;
import java.util.Locale;
public class MessageFormatTest
{
public static void main(String[] args){
MessageFormat simpleChoiceTest = new MessageFormat("{0}");
MessageFormat explicitChoiceTest = new MessageFormat("{0,number,integer}");
int[] set = new int[]{0,1,4,5,6,10,10000,24345};
Locale[] locs = new Locale[]{Locale.US,Locale.UK,Locale.FRANCE,Locale.GERMANY};
for(Locale loc : locs){
simpleChoiceTest.setLocale(loc);
explicitChoiceTest.setLocale(loc);
for(int i : set){
String simple = simpleChoiceTest.format(new Object[]{i});
String explicit = explicitChoiceTest.format(new Object[]{i});
if(!simple.equals(explicit)){
System.out.println(loc+" - "+i+":\t"+simple+
"\t"+NumberFormat.getInstance(loc).format(i));
System.out.println(loc+" - "+i+":\t"+explicit+
"\t"+NumberFormat.getIntegerInstance(loc).format(i));
}
}
}
}
}
出力:
fr_FR - 10000: 10 000 10 000
fr_FR - 10000: 10,000 10 000
fr_FR - 24345: 24 345 24 345
fr_FR - 24345: 24,345 24 345
de_DE - 10000: 10.000 10.000
de_DE - 10000: 10,000 10.000
de_DE - 24345: 24.345 24.345
de_DE - 24345: 24,345 24.345
{0}
これは私を驚かせました。どちらかといえば、 が数値に対して何もせず、{0,number,integer}
適切にローカライズすることを期待していたからです。代わりに、両方ともローカライズされますが、明示的な形式は常に en_US ローカライズを使用しているようです。
リンクされたドキュメントによると、明示的な形式が使用{0}
されている間、取得されます。しかし、それらを直接呼び出すと (出力の最後の列)、両方とも同じように見え、両方とも正しくローカライズされます。NumberFormat.getInstance(getLocale())
NumberFormat.getIntegerInstance(getLocale())
ここで何が欠けていますか?