2011-06-30 10 views
11

Znalazłem przy użyciu względnych interfejsów API android.text.format.DateUtils, które zwracają wartości takie jak "wczoraj" lub "2 godziny temu" - ale moja aplikacja nie obsługuje wszystkich języków, które obsługuje Android. Domyślam się więc angielskiego, ale dla każdego języka, którego nie obsługuję, w ustawieniach urządzenia wyświetla się względny ciąg znaków.Wymuś system Android DateUtils.getRelativeDateTimeString(), aby zignorować ustawienia regionalne urządzenia?

Na przykład, jak:

Last attempt: hace 11 minutos.

Chciałbym, aby domyślne wywołanie API do angielskiego dla wszelkich języków nie popieram. Jednak nie widzę nigdzie, aby ustawić Locale dla wywołania API - mam nadzieję, że po prostu gdzieś tego brakuje.

Czy istnieje sposób ustawienia ustawień regionalnych tylko dla wywołania interfejsu API, ignorując ustawienia urządzenia?

Odpowiedz

6

Zgodnie z kodem źródłowym klasy DateUtils używa zarówno metody Resource.getSystem() i Locale.getDefault() do formatowania daty i czasu. Możesz zmienić domyślną metodę Locale przy użyciu metody Locale.setDefault(), ale nie sądzę, że jest możliwa zmiana wartości zwracanej przez metodę Resource.getSystem(). Możesz spróbować zmienić domyślne ustawienia regionalne na Locale.US, ale wydaje mi się, że wyniki będą jeszcze gorsze w tym przypadku.

+0

Dzięki @Pixie dla patrząc na niego. Wyciągnąłem źródło i trochę pogrzebałem i musiałem się z tym zgodzić. – Eric

+0

Nie ma za co! – Michael

+1

Czy ktoś znalazł rozwiązanie tego problemu? –

10

to pracuje dla mnie do Androida 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

To działało, dziękuję! – aluxian

+0

Działa dla Androida 4.1.2 – Atetc

+0

Działa dla Androida 5.0 –

Powiązane problemy