Ce face Locale.getDefault
Locale.getDefault() returnează limba folosită de toate metodele care nu primesc un Locale explicit: String.format, printf, NumberFormat.getInstance(), Scanner.nextDouble. La pornire, Java o ia din setările sistemului de operare, deci poate fi diferită de la un calculator la altul.
Locale.setDefault(locale) o schimbă pentru tot programul. Există două categorii: Locale.Category.FORMAT (numere, date) și DISPLAY (numele limbilor și țărilor). Poți seta și din linia de comandă: java -Duser.language=ro -Duser.country=RO Main.
Parametri
| Parametru | Descriere |
|---|---|
categorie |
Opțional: Locale.Category.FORMAT sau Locale.Category.DISPLAY. |
locale |
Pentru setDefault: noua limbă implicită. |
Ce returnează
Un obiect Locale.
Exemple
Exemplul 1: Schimbarea limbii implicite
La început afișăm doar dacă există o limbă implicită (valoarea diferă de la un calculator la altul). După setDefault, String.format fără Locale folosește regulile românești.
import java.util.Locale;
public class Main {
public static void main(String[] args) {
System.out.println("Există o limbă implicită: " + (Locale.getDefault() != null));
Locale.setDefault(Locale.of("ro", "RO"));
System.out.println("Acum: " + Locale.getDefault());
System.out.println(String.format("%,.2f", 9876.5));
Locale.setDefault(Locale.US);
System.out.println("Acum: " + Locale.getDefault());
System.out.println(String.format("%,.2f", 9876.5));
}
}
Rezultat
Există o limbă implicită: true
Acum: ro_RO
9.876,50
Acum: en_US
9,876.50
Exemplul 2: Categorii separate pentru format și afișare
import java.text.NumberFormat;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
Locale.setDefault(Locale.Category.FORMAT, Locale.GERMANY);
Locale.setDefault(Locale.Category.DISPLAY, Locale.of("ro", "RO"));
System.out.println("Format: " + Locale.getDefault(Locale.Category.FORMAT));
System.out.println("Afișare: " + Locale.getDefault(Locale.Category.DISPLAY));
System.out.println(NumberFormat.getInstance().format(1500.25));
System.out.println(Locale.GERMANY.getDisplayCountry());
}
}
Rezultat
Format: de_DE
Afișare: ro_RO
1.500,25
Germania
Greșeli frecvente
- Scrii fișiere (CSV, JSON) cu
String.format("%.2f", x)și le citești pe alt calculator: unde limba implicită e româna, apare virgula zecimală. Pentru date tehnice foloseșteLocale.ROOT. - Apelezi
setDefaultîntr-o aplicație cu mai mulți utilizatori: schimbi limba pentru toți. DăLocale-ul fiecărei operații.
Comenzi înrudite
Locale: Reprezintă o limbă și o țară (ro-RO, en-US); spune cum se formatează numere, bani, date și cum se compară textele.NumberFormat: Formatează numere după regulile unei limbi (1.234,5 în română, 1,234.5 în engleză); getInstance îl creează, format îl aplică.PrintStream.printf: Afișează text formatat după un șablon cu %s, %d, %.2f, %n: numere cu zecimale fixe, coloane aliniate.Scanner.nextInt: Citește următorul număr întreg (nextInt) sau zecimal (nextDouble); dă eroare dacă textul nu este un număr.