You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

94 lines
3.5 KiB

package com.henninghall.date_picker;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Locale;
public class LocaleUtils {
public static String getDay(String locale) {
return getFormat(locale, Formats.Format.MMMEd);
}
public static String getYear(String locale) {
return getFormat(locale, Formats.Format.y);
}
public static String getDate(String locale) {
return getFormat(locale, Formats.Format.d);
}
private static String getFormat(String languageTag, Formats.Format format) {
try {
return Formats.get(languageTag, format);
} catch (Formats.FormatNotFoundException e) {
try {
String firstPartOfLanguageTag = languageTag.substring(0, languageTag.indexOf("_"));
return Formats.get(firstPartOfLanguageTag, format);
} catch (Formats.FormatNotFoundException ex) {
return Formats.defaultFormat.get(format);
}
}
}
public static String getDatePattern(Locale locale) {
DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, locale);
return ((SimpleDateFormat) df).toLocalizedPattern()
.replaceAll(",", "")
.replaceAll("([a-zA-Z]+)", " $1")
.trim();
}
static String getDateTimePattern(Locale locale) {
DateFormat format = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, locale);
return ((SimpleDateFormat) format).toLocalizedPattern().replace(",", "");
}
public static Locale getLocale(String languageTag) {
Locale locale;
try {
locale = org.apache.commons.lang3.LocaleUtils.toLocale(languageTag);
} catch (Exception e) {
// Some locales can only be interpreted from country string (for instance zh_Hans_CN )
String firstPartOfLanguageTag = languageTag.substring(0, languageTag.indexOf("_"));
locale = org.apache.commons.lang3.LocaleUtils.toLocale(firstPartOfLanguageTag);
}
return locale;
}
public static boolean localeUsesAmPm(Locale locale){
DateFormat df = DateFormat.getTimeInstance(DateFormat.FULL, locale);
return df instanceof SimpleDateFormat && ((SimpleDateFormat) df).toPattern().contains("a");
}
public static String getLocaleStringResource(Locale requestedLocale, int resourceId, Context context) {
String result;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { // use latest api
Configuration config = new Configuration(context.getResources().getConfiguration());
config.setLocale(requestedLocale);
result = context.createConfigurationContext(config).getText(resourceId).toString();
}
else { // support older android versions
Resources resources = context.getResources();
Configuration conf = resources.getConfiguration();
Locale savedLocale = conf.locale;
conf.locale = requestedLocale;
resources.updateConfiguration(conf, null);
// retrieve resources from desired locale
result = resources.getString(resourceId);
// restore original locale
conf.locale = savedLocale;
resources.updateConfiguration(conf, null);
}
return result;
}
}