С помощта на DecimalFormatSymbols
можете да поискате характеристики, базирани на локал, като десетичен разделител или разделител на хиляди.
Докато го поискате за обичайни езикови тагове (напр. de-AT
, en-US
), той работи според очакванията. Но ако смесите комбинации език-държава, това се държи странно. По-специално, нека да разгледаме разделителя на хилядите. (за английски е ,
, за немски е .
)
System.out.println("en-US: " + DecimalFormatSymbols.getInstance(Locale.US).getGroupingSeparator());
System.out.println("de-DE: " + DecimalFormatSymbols.getInstance(Locale.GERMANY).getGroupingSeparator());
System.out.println("de-US: " + DecimalFormatSymbols.getInstance(new Locale.Builder().setLanguage("de").setRegion("US").build()).getGroupingSeparator());
System.out.println("de: "+DecimalFormatSymbols.getInstance(new Locale.Builder().setLanguage("de").build()).getGroupingSeparator());
System.out.println("DE: " + DecimalFormatSymbols.getInstance(new Locale.Builder().setRegion("DE").build()).getGroupingSeparator());
System.out.println("ru-RU: " + DecimalFormatSymbols.getInstance(new Locale.Builder().setLanguage("ru").setRegion("RU").build()).getGroupingSeparator());
System.out.println("RU: " + DecimalFormatSymbols.getInstance(new Locale.Builder().setRegion("RU").build()).getGroupingSeparator());
Резултатът е:
en-US: ,
de-DE: .
de-US: .
de: .
DE: ,
ru-RU: 0x160
RU: ,
За de-US
посочва точка като разделител, който представлява разделителя на немски, но не и за САЩ. Сякаш взема предвид само езиковия таг.
Ако създам локал, който има само информация за държава (липсващ език), изглежда, че винаги се връща английският разделителен формат.
Как мога да се справя правилно с това? Искам формата за най-конкретната информация в локала. За de
искам немския. За de-US
искам английския формат.