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-Xlintdă avertisment de depreciere. FoloseșteLocale.of. - Faci
toUpperCase()fără argument pe identificatori tehnici (nume de câmpuri, comenzi). Pe un calculator setat în turcă „i” devine „İ”; foloseștetoUpperCase(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.