先上修改方法: frameworks / base/core/java/com/android/internal/app/LocaleStore.java
for (LocaleInfo li : sLocaleCache.values()) {
//li.setTranslated(localizedLocales.contains(li.getLangScriptKey()));
if (isSuggestedLocalesForCustom(li)) {
li.setTranslated(true);
li.mSuggestionFlags |= LocaleInfo.SUGGESTION_TYPE_SIM;
} else {
li.setTranslated(localizedLocales.contains(li.getLangScriptKey()));
}
}
addSuggestedLocalesForRegion(Locale.getDefault());
sFullyInitialized = true;
}
private static boolean isSuggestedLocalesForCustom(LocaleInfo li) {
String suggestLocalStr = android.os.SystemProperties.get("persist.language.suggest");
if(android.text.TextUtils.isEmpty(suggestLocalStr)){
return false;
}
Locale locale = li.getLocale();
String langOrContry = android.text.TextUtils.isEmpty(locale.getScript())
? (locale.getLanguage() + "-" + locale.getCountry())
: (locale.getLanguage() + "-" + locale.getScript() + "-" + locale.getCountry());
String[] suggestLocalArg = suggestLocalStr.split(",");
for(String suggestLocal : suggestLocalArg){
if("".equals(suggestLocal.trim())){
continue;
}
if(suggestLocal.equals(langOrContry)){
return true;
}
}
return false;
}
1、LocaleStore.java 中有一个 isSuggested() 方法,如果返回为 true,则显示在建议语言中,否则显示在所有语言中。
/* package */ boolean isSuggested() {
if (!mIsTranslated) { // Never suggest an untranslated locale
return false;
}
return mSuggestionFlags != SUGGESTION_TYPE_NONE;
}
可以看出设置成建议语言需要满足两个条件:
1、mIsTranslated = true,这个可以通过 setTranslated() 方法实现
2、mSuggestionFlags != SUGGESTION_TYPE_NONE; 为true
2、frameworks/base/core/res/res/values/locale_config.xml 中表示支持的语言。
"persist.language.suggest"的值可用此文件中的添加,并用 "," 隔开,例如:ru-RU,lt-LT