2011-06-30 17 views
11

Tôi đã tìm thấy bằng cách sử dụng các API tương đối android.text.format.DateUtils trả về các giá trị như "hôm qua" hoặc "2 giờ trước" rất hay - nhưng ứng dụng của tôi không hỗ trợ mọi ngôn ngữ mà Android thực hiện. Vì vậy, tôi mặc định tiếng Anh, nhưng đối với mọi ngôn ngữ tôi không hỗ trợ, chuỗi tương đối hiển thị trong cài đặt của thiết bị.Lực lượng Android DateUtils.getRelativeDateTimeString() để bỏ qua ngôn ngữ thiết bị?

Ví dụ, như:

Last attempt: hace 11 minutos.

Tôi muốn làm mặc định cuộc gọi API để tiếng Anh đối với bất kỳ ngôn ngữ tôi không hỗ trợ. Tuy nhiên, tôi không thấy bất cứ nơi nào để thiết lập Locale cho các cuộc gọi API - Tôi hy vọng tôi chỉ thiếu nó ở đâu đó.

Có cách nào để đặt Ngôn ngữ chỉ cho cuộc gọi API, bỏ qua cài đặt thiết bị không?

Trả lời

6

Theo mã nguồn của lớp DateUtils, nó sử dụng cả phương thức Resource.getSystem()Locale.getDefault() để định dạng ngày và giờ. Bạn có thể thay đổi mặc định Locale bằng phương pháp Locale.setDefault() nhưng tôi không nghĩ rằng có thể thay đổi giá trị trả lại của phương thức Resource.getSystem(). Bạn có thể thử thay đổi ngôn ngữ mặc định thành Locale.US nhưng có vẻ như với tôi rằng kết quả sẽ tồi tệ hơn trong trường hợp này.

+0

Cảm ơn @Pixie cho nhìn vào nó. Tôi kéo xuống nguồn và chọc một chút và phải đồng ý. – Eric

+0

Bạn được chào đón! – Michael

+1

Có ai tìm ra giải pháp cho vấn đề này không? –

10

này đang làm việc cho tôi lên đến Android 7

void forceLocale(Locale locale) { 
    Configuration conf = getBaseContext().getResources().getConfiguration(); 
    updateConfiguration(conf, locale); 
    getBaseContext().getResources().updateConfiguration(conf, getResources().getDisplayMetrics()); 

    Configuration systemConf = Resources.getSystem().getConfiguration(); 
    updateConfiguration(systemConf, locale); 
    Resources.getSystem().updateConfiguration(conf, getResources().getDisplayMetrics()); 

    Locale.setDefault(locale); 
    } 

    void updateConfiguration(Configuration conf, Locale locale) { 
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){ 
     conf.setLocale(locale); 
    }else { 
     //noinspection deprecation 
     conf.locale = locale; 
    } 
    } 
+0

Điều này làm việc, cảm ơn bạn! – aluxian

+0

Đã hoạt động cho Android 4.1.2 – Atetc

+0

Đã hoạt động với Android 5.0 –

Các vấn đề liên quan