package org.wikipedia.language;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
public final class LanguageUtil {
private static final String HONG_KONG_COUNTRY_CODE = "HK";
private static final String MACAU_COUNTRY_CODE = "MO";
private static final List<String> TRADITIONAL_CHINESE_COUNTRY_CODES = Arrays.asList(
Locale.TAIWAN.getCountry(), HONG_KONG_COUNTRY_CODE, MACAU_COUNTRY_CODE);
/**
* Takes a ISO language code (as returned by Android) and returns a wiki code, as used by wikipedia.
*
* @param code Language code (as returned by Android)
* @return Wiki code, as used by wikipedia.
*/
public static String languageCodeToWikiLanguageCode(String code) {
// Convert deprecated language codes to modern ones.
// See https://developer.android.com/reference/java/util/Locale.html
switch (code) {
case "iw":
return "he"; // Hebrew
case "in":
return "id"; // Indonesian
case "ji":
return "yi"; // Yiddish
case "zh":
return chineseLanguageCodeToWikiLanguageCode();
default:
return code;
}
}
@NonNull private static String chineseLanguageCodeToWikiLanguageCode() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
String script = Locale.getDefault().getScript();
switch (script) {
case "Hans": return AppLanguageLookUpTable.SIMPLIFIED_CHINESE_LANGUAGE_CODE;
case "Hant": return AppLanguageLookUpTable.TRADITIONAL_CHINESE_LANGUAGE_CODE;
default: break;
}
}
// Guess based on country. If the guess is incorrect, the user must explicitly choose the
// dialect in the app settings.
return isTraditionalChinesePredominantInCountry(Locale.getDefault().getCountry())
? AppLanguageLookUpTable.TRADITIONAL_CHINESE_LANGUAGE_CODE
: AppLanguageLookUpTable.SIMPLIFIED_CHINESE_LANGUAGE_CODE;
}
private static boolean isTraditionalChinesePredominantInCountry(@Nullable String country) {
return TRADITIONAL_CHINESE_COUNTRY_CODES.contains(country);
}
private LanguageUtil() { }
}