客製化語言與時區問題
客製化語言與時區問題
正常改預設語言路徑:
L之前:
修改預設語言
operator_SFR_MEO/mediatek/config/up40_h405f_meo/ProjectConfig.mk
MTK_PRODUCT_LOCALES=en_US pt_PT fr_FR es_ES iw_IL
修改預設時區:
/media/Disk2/projects/kk/operator_SFR_MEO/mediatek/config/up40_h405f_meo/system.prop
persist.sys.timezone=Europe/London
L及以後:
72l/ALPS.L1.MP6.V1_SR6572_WET_L/sagereal/mk/UP19_H3504_LP/full_sr6572_wet_l.mk
set locales & aapt config.
PRODUCT_LOCALES :=fr_FR en_US ar_EG
修改預設時區:
72l/ALPS.L1.MP6.V1_SR6572_WET_L/sagereal/mk/UP19_H3504_LP/ProjectConfig.mk
config_timezone = Europe/Brussels
因為整合在clone_integration.sh指令碼中定義:
if [ $config_timezone ]; then
config_timezone_change=echo $config_timezone | sed 's/\//\\\\\//g'
sed -i "/persist.sys.timezone/s/=.*/= base_project/system.prop
echo "config_timezone= base_project/system.prop
fi
客戶的需求是當插入MEO卡的時候顯示葡萄牙語,當插入odo卡的時候顯示西班牙語,插入其他卡或者不插卡的時候顯示英語.
/media/Disk2/projects/kk/operator_SFR_MEO/frameworks/opt/telephony/src/java/com/android/internal/telephony/MccTable.java
static class MccEntry implements Comparable
{
int mMcc;
String mIso;
int mSmallestDigitsMnc;
String mLanguage;
MccEntry(int mnc, String iso, int smallestDigitsMCC) {
this(mnc, iso, smallestDigitsMCC, null);
}
MccEntry(int mnc, String iso, int smallestDigitsMCC, String language) {
mMcc = mnc;
mIso = iso;
mSmallestDigitsMnc = smallestDigitsMCC;
mLanguage = language;
}
我直接在這個類裡面修改了
static {
sTable = new ArrayList(240);
/*
* The table below is built from two resources:
*
* 1) ITU "Mobile Network Code (MNC) for the international
* identification plan for mobile terminals and mobile users"
* which is available as an annex to the ITU operational bulletin
* available here: http://www.itu.int/itu-t/bulletin/annex.html
*
* 2) The ISO 3166 country codes list, available here:
* http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/index.html
*
* This table has not been verified.
*
*/
sTable.add(new MccEntry(202,"gr",2)); //Greece
sTable.add(new MccEntry(204,"nl",2,"nl")); //Netherlands (Kingdom of the)
sTable.add(new MccEntry(206,"be",2)); //Belgium
//gaoyaning
sTable.add(new MccEntry(208,"fr",2,"en")); //France
修改之前
sTable.add(new MccEntry(370,"do",2)); //Dominican Republic
錯誤修改
//gaoyaning
sTable.add(new MccEntry(370,"es",2,"es")); //Dominican Republic
正確修改:
sTable.add(new MccEntry(370,"do",2,"es")); //Dominican Republic
修改的時候沒有注意第二個引數代表的意思,直接將第二個引數改為es,以為第二個引數也是表示語言,所以直接修改,修改完之後驗證語言ok,所以就直接提交了.
由於沒有國外的網路,所以無法驗證時區是否ok,軟體發給客戶之後,客戶反饋時區顯示有問題.從log中看出來時區變為GMT+2,最後發現是修改了iso這個引數導致時區發生變化.
普及一下:ISO 國際標準化組織(International Organization for Standardization,ISO)簡稱ISO,是一個全球性的非政府組織,是國際標準化領域中一個十分重要的組織。。ISO一來源於希臘語“ISOS”,即“EQUAL”——平等之意。ISO國際標準組織成立於1946年,中國是ISO的正式成員,代表中國參加ISO的國家機構是中國國家技術監督局(CSBTS)
其宗旨是:在世界範圍內促進標準化工作的發展,以利於國際物資交流和互助,並擴大知識、科學、技術和經濟方面的合作。其主要任務是:制定國際標準,協調世界範圍內的標準化工作,與其他國際性組織合作研究有關標準化問題。
frameworks/opt/telephony/src/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
private String[][] mTimeZoneIdOfCapitalCity = {{"au", "Australia/Sydney"},
{"br", "America/Sao_Paulo"},
{"ca", "America/Toronto"},
{"cl", "America/Santiago"},
{"es", "Europe/Madrid"},
{"fm", "Pacific/Ponape"},
{"gl", "America/Godthab"},
{"id", "Asia/Jakarta"},
{"kz", "Asia/Almaty"},
{"mn", "Asia/Ulaanbaatar"},
{"mx", "America/Mexico_City"},
{"pf", "Pacific/Tahiti"},
{"pt", "Europe/Lisbon"},
{"ru", "Europe/Moscow"},
{"us", "America/New_York"}
};
private TimeZone getTimeZonesWithCapitalCity(String iso) {
TimeZone tz = null;
//[ALPS01666276]-Start: don't udpate with capital city when we has received nitz before
if ((mZoneOffset == 0) && (mZoneDst == false)) {
for (int i = 0; i < mTimeZoneIdOfCapitalCity.length; i++) {
if (iso.equals(mTimeZoneIdOfCapitalCity[i][0])) {
tz = TimeZone.getTimeZone(mTimeZoneIdOfCapitalCity[i][1]);
log("uses TimeZone of Capital City:" + mTimeZoneIdOfCapitalCity[i][1]);
break;
}
}
} else {
log("don't udpate with capital city, cause we have received nitz");
}
//[ALPS01666276]-End
return tz;
}
由於第二個引數改成了es,所以時區匹配到了Europe/Madrid
<!-- SPAIN, 1:00 -->
<timezone code="es">Europe/Madrid</timezone>
frameworks/base/core/res/res/xml/time_zones_by_country.xml
然而客戶需要的時區是GMT-4即對應的時區應該是:
America/Santo_Domingo
如何避免:
修改時不要我以為,應該仔細分析一下程式碼,弄懂必要的引數代表什麼.
修改到跟國外網路有關的問題時,可以用國內的卡驗證一下,比如聯通,移動.
以後iso還是不要亂動,容易出錯.當然最重要的是多分析一下.