Tôi đã tìm ra. Điều này xảy ra bởi vì trước đây tôi đã gọi Locale.setDefault() và chuyển cho nó một Locale mà tôi đã tạo ra bằng cách truyền đi sai tên toàn bộ ngôn ngữ (tôi lấy ngôn ngữ từ một thiết lập ưu tiên và tôi đã nhầm nhãn của mục nhập thay vào đó của giá trị).
Đó là, tôi đã làm:
String lang= //... here I assigned "English" while I thought
// I was assigning it "en"
Locale locale=new Locale(lang);
Locale.setDefault(locale); // (*)
// and later
Locale.getLocale().getLanguage(); //returns "english"
Vì vậy, khi tôi truy vấn cho miền địa phương mặc định, nó thực sự là miền địa phương tôi đã tạo ra mà mã ngôn ngữ tôi đã sai lầm thiết lập để "tiếng anh".
Có một vài điều buồn cười, mặc dù:
- Dòng (*) thực sự hoạt động và thực sự không thay đổi vị trí để tiếng Anh (hoặc tiếng Tây Ban Nha khi tôi sử dụng "Tây Ban Nha"), có nghĩa là, setDefault() dường như chấp nhận một miền địa phương "không đúng định dạng" và thậm chí hiểu được nó. Nhưng nó không khắc phục được.
- Lưu ý tôi đã sử dụng chữ hoa tiếng Anh khi đặt sai vị trí, nhưng cuối cùng nó trả về "tiếng Anh" tất cả chữ thường.
@trante thậm chí không từ xa – matteo