Locale în Java

Formatarea numerelor și limba (Locale) Java 1.1 (Locale.of: Java 19)

Reprezintă o limbă și o țară (ro-RO, en-US); spune cum se formatează numere, bani, date și cum se compară textele.

Sintaxă
import java.util.Locale;

static Locale of(String limba)
static Locale of(String limba, String tara)
static Locale forLanguageTag(String eticheta)

Ce face Locale

Un Locale este o pereche limbă + țară, de exemplu română din România (ro_RO) sau engleză din SUA (en_US). Nu face nimic singur, dar îl dai claselor care depind de limbă: NumberFormat, DateTimeFormatter, String.format, printf, toUpperCase, Scanner.

Din Java 19 se creează cu Locale.of("ro", "RO"); constructorul vechi new Locale(...) este depreciat. Locale.forLanguageTag("ro-RO") citește eticheta standard folosită pe web. Pentru limbile mari există constante: Locale.US, Locale.UK, Locale.GERMANY, Locale.ROOT (neutru).

Cu getDisplayName, getDisplayLanguage și getDisplayCountry afli numele limbii și al țării, chiar scrise în altă limbă.

Parametri

Parametru Descriere
limba Codul limbii, cu litere mici: "ro", "en", "de".
tara Opțional: codul țării, cu litere mari: "RO", "MD", "US".

Ce returnează

Un obiect Locale.

Exemple

Exemplul 1: Informații despre un Locale

import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Locale ro = Locale.of("ro", "RO");
        Locale md = Locale.forLanguageTag("ro-MD");

        System.out.println(ro + " | " + ro.toLanguageTag());
        System.out.println(ro.getDisplayName(ro));
        System.out.println(md.getDisplayName(ro));
        System.out.println(ro.getDisplayName(Locale.US));
        System.out.println("Limba: " + ro.getLanguage() + ", țara: " + ro.getCountry());
    }
}

Rezultat

ro_RO | ro-RO
română (România)
română (Republica Moldova)
Romanian (Romania)
Limba: ro, țara: RO

Exemplul 2: Același cod, rezultate diferite după Locale

Numerele și numele lunii se schimbă după limbă. Litera „i” devine „İ” (cu punct) în turcă la scrierea cu majuscule.

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        LocalDate data = LocalDate.of(2026, 12, 1);
        for (Locale l : new Locale[]{Locale.of("ro", "RO"), Locale.US, Locale.GERMANY}) {
            String luna = data.format(DateTimeFormatter.ofPattern("d MMMM yyyy", l));
            System.out.println(String.format(l, "%-6s %,.2f  %s", l, 1234.5, luna));
        }
        System.out.println("iași".toUpperCase(Locale.of("tr")) + " / " + "iași".toUpperCase(Locale.ROOT));
    }
}

Rezultat

ro_RO  1.234,50  1 decembrie 2026
en_US  1,234.50  1 December 2026
de_DE  1.234,50  1 Dezember 2026
İAȘİ / IAȘI

Greșeli frecvente

  • Scrii new Locale("ro", "RO"): pe Java 19+ compilarea cu -Xlint dă avertisment de depreciere. Folosește Locale.of.
  • Faci toUpperCase() fără argument pe identificatori tehnici (nume de câmpuri, comenzi). Pe un calculator setat în turcă „i” devine „İ”; folosește toUpperCase(Locale.ROOT).

Comenzi înrudite

  • Locale.getDefault: Returnează limba implicită a programului, luată din setările sistemului; setDefault o schimbă pentru tot programul.
  • NumberFormat: Formatează numere după regulile unei limbi (1.234,5 în română, 1,234.5 în engleză); getInstance îl creează, format îl aplică.
  • DateTimeFormatter: Descrie cum se scrie sau se citește o dată ca text; ofPattern(„dd.MM.yyyy”) creează un format din litere.
  • PrintStream.printf: Afișează text formatat după un șablon cu %s, %d, %.2f, %n: numere cu zecimale fixe, coloane aliniate.