2011-06-30 6 views
11

"Dün" veya "2 saat önce" gibi değerleri döndüren android.text.format.DateUtils göreli API'leri çok güzel buldum - ancak uygulamam her Android dilini desteklemiyor. Yani, ben varsayılan İngilizce'ye, ama desteklemediğim her dil için, göreceli dize cihazın ayarında gösterir. gibi ÖrneğinAndroid yerel aygıtlar öğesinin yerini almamak için DateUtils.getRelativeDateTimeString() öğesini zorla?

:

Last attempt: hace 11 minutos.

ben desteklemeyen tüm diller için İngilizce API çağrısı varsayılan yapmak istiyorum. Ancak, API çağrısı için Locale'i ayarlamak için herhangi bir yer görmüyorum - umarım sadece bir yerde onu özlüyorum.

Aygıt ayarını göz ardı ederek Yerel Ayarı yalnızca API çağrısı için ayarlamanın bir yolu var mı?

cevap

6

DateUtils sınıfının kaynak koduna göre, tarih ve saati biçimlendirmek için hem Resource.getSystem() hem de Locale.getDefault() yöntemini kullanır. Varsayılan Locale'u Locale.setDefault() yöntemini kullanarak değiştirebilirsiniz, ancak Resource.getSystem() yönteminin dönüş değerini değiştirmenin mümkün olduğunu düşünmüyorum. Varsayılan yerel ayarı Locale.US olarak değiştirmeyi deneyebilirsiniz, ancak bu durumda sonuçların daha da kötü olacağı görülüyor.

+0

sayesinde @Pixie için benim için çalışıyor. Kaynağını aşağı çektim ve biraz kendimden geçtim ve aynı fikirde olmalıyım. – Eric

+0

Rica ederim! – Michael

+1

Bu sorunun çözümü için herhangi bir çözüm buldunuz mu? –

10

Bu onun içine bakarak için 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

Bu işe yaradı, teşekkürler! – aluxian

+0

Android için çalıştı 4.1.2 – Atetc

+0

Android için çalışıyor 5.0 –