Locale.getDefault în Java

Returnează limba implicită a programului, luată din setările sistemului; setDefault o schimbă pentru tot programul.

Sintaxă
static Locale getDefault()
static Locale getDefault(Locale.Category categorie)
static void setDefault(Locale locale)

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ște Locale.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.