以下為記錄 trace android如何設定 language的過程,在此紀錄
1.android/build/target/product/languages_full.mk
PRODUCT_LOCALES := $(OEM_PRODUCT_LOCALES) (改預設語言)
2.android/build/core/Makefile
PRODUCT_DEFAULT_LANGUAGE="$(call default-locale-language,$(PRODUCT_LOCALES))"
PRODUCT_DEFAULT_REGION="$(call default-locale-region,$(PRODUCT_LOCALES))"
# Whether there is default locale set in PRODUCT_PROPERTY_OVERRIDES
product_property_override_locale_language := $(strip \
$(patsubst ro.product.locale.language=%,%,\
$(filter ro.product.locale.language=%,$(PRODUCT_PROPERTY_OVERRIDES))))
product_property_overrides_locale_region := $(strip \
$(patsubst ro.product.locale.region=%,%,\
$(filter ro.product.locale.region=%,$(PRODUCT_PROPERTY_OVERRIDES))))
3.android/build/tools/buildinfo.sh
if [ -n "$PRODUCT_DEFAULT_LANGUAGE" ] ; then
echo "ro.product.locale.language=$PRODUCT_DEFAULT_LANGUAGE"
fi
if [ -n "$PRODUCT_DEFAULT_REGION" ] ; then
echo "ro.product.locale.region=$PRODUCT_DEFAULT_REGION"
fi
4. android/framework/base/core/jni/AndroidRuntime.cpp
/*
* Read the persistent locale.
*/
static void readLocale(char* language, char* region)
{
char propLang[PROPERTY_VALUE_MAX], propRegn[PROPERTY_VALUE_MAX];
property_get("persist.sys.language", propLang, "");
property_get("persist.sys.country", propRegn, "");
if (*propLang == 0 && *propRegn == 0) {
/* Set to ro properties, default is en_US */
property_get("ro.product.locale.language", propLang, "en");
property_get("ro.product.locale.region", propRegn, "US");
}
strncat(language, propLang, 2);
strncat(region, propRegn, 2);
//LOGD("language=%s region=%s\n", language, region);
}
5. 在device下的 data/property下有prop文件:persist.sys.timezone
persist.sys.language (可以改預設語言)
persist.sys.country (可以改預設地區)
persist.sys.localevar
6. 當使用者有自行手動更換過語言時,就會在device下產生出 /data/property底下的文件
所以一旦/data/property底下語言設定沒產生出,Android將會跑去抓 ro.product.locale.language
來判斷目前所設定之語言
沒有留言:
張貼留言