a7aa980e58
- Fixes #7619
53 lines
1.4 KiB
Java
53 lines
1.4 KiB
Java
package org.thoughtcrime.securesms.util.dynamiclanguage;
|
|
|
|
import android.content.res.Configuration;
|
|
import android.content.res.Resources;
|
|
import android.support.annotation.Nullable;
|
|
import android.support.v4.os.ConfigurationCompat;
|
|
|
|
import org.thoughtcrime.securesms.BuildConfig;
|
|
|
|
import java.util.Arrays;
|
|
import java.util.Locale;
|
|
|
|
final class LocaleParser {
|
|
|
|
private LocaleParser() {
|
|
}
|
|
|
|
/**
|
|
* Given a language, gets the best choice from the apps list of supported languages and the
|
|
* Systems set of languages.
|
|
*/
|
|
static Locale findBestMatchingLocaleForLanguage(@Nullable String language) {
|
|
final Locale locale = LanguageString.parseLocale(language);
|
|
if (appSupportsTheExactLocale(locale)) {
|
|
return locale;
|
|
} else {
|
|
return findBestSystemLocale();
|
|
}
|
|
}
|
|
|
|
private static boolean appSupportsTheExactLocale(@Nullable Locale locale) {
|
|
if (locale == null) {
|
|
return false;
|
|
}
|
|
return Arrays.asList(BuildConfig.LANGUAGES).contains(locale.toString());
|
|
}
|
|
|
|
/**
|
|
* Get the first preferred language the app supports.
|
|
*/
|
|
private static Locale findBestSystemLocale() {
|
|
final Configuration config = Resources.getSystem().getConfiguration();
|
|
|
|
final Locale firstMatch = ConfigurationCompat.getLocales(config)
|
|
.getFirstMatch(BuildConfig.LANGUAGES);
|
|
|
|
if (firstMatch != null) {
|
|
return firstMatch;
|
|
}
|
|
|
|
return Locale.ENGLISH;
|
|
}
|
|
}
|