Stark Wong 的個人開發網站
 


 此頁面:更新於 2016 年 3 月 12 日 14 時 26 分 14 秒,頁面處理需時 0.0029 秒
 網站內容版權所有(C)Stark Wong。頁面(不包括檔案)可自由連結。網站系統版本 1.90-AngularJSBase (2015/9/27)
 
網站地圖

流動巴士版圖更新 + Android 7.0 多語言分析

iOS 與 Android 版本的流動巴士版圖 NG 最近幾天都迎來更新。

首先是 iOS 版本,這次是重大更新,主要是將介面及功能提升至接近 Android 版本,也就是刪除原有主畫面並回到以路線搜尋為主畫面,並將其他功能放在程式的右拉式選單中,同時亦增加附近路線、附近車站及預估離站時間功能。

至於 Android 版本,這次更新是要修正在 Android 7.0 介面無論選擇哪種語言均以英文顯示的問題,關於此問題的資料會在下面詳細說明,希望能幫助有同樣問題的網友。


技術說明:

問題背景:
由於 Android 系統最初的繁體中文語言只有「中文(台灣)」,但其後則續漸出現含有「中文(香港)」語言的機種,以致在資源使用 zh-rTW 這個慣常使用的語言時會在「中文(香港)」下顯示英文介面。於是,當時慣常的做法是將 zh-rTW 改成直接用 zh,令系統在任何中文語言(若程式要支援簡體中文時仍可使用 zh-rCN) 都會使用後備的 zh 資源來顥示,這就能讓「中文(台灣)」與「中文(香港)」語言使用同一套資源,不用分開維護。

問題成因:
Google 在 Android 7.0 首次加入語言順序及相依性的功能,有了這個功能,使用者可以選擇多於一種顯示語言,Android 系統會依照使用者的偏好順序選擇程式用來顯示的語言而不再局限於「國家->語言->預設」的順序。在這種修改下,「中文(香港)」會基於「中文(台灣)」,也就是說當程式沒有手動多語言支援時,只需要有 zh-rTW 的資源時,「中文(香港)」同樣適用。但是,從測試所得,當資源含有 zh 時 (即使同時含 zh-rCN 也一樣) 則無論是哪一種中文語系 (無論是台灣、香港還是中國) 都不會去使用,也就造成在 Android 7.0 下系統把程式當成沒有中文資源而永遠只用英文來顯示,即使系統語言設定裡只加入一項中文語言也一樣。我相信這是一個 bug 而不是內定行為,但礙於這個問題的局限性,我不覺得 Google 會修復這個問題。

解決方法:
要解決這個問題,需要兩個步驟:
1. 將 zh 的資源改回 zh-rTW,以讓 Android 7.0 能再識別中文資源,但這樣會令 Android 6.x 或以下無法識別香港語言
2. 以程式碼檢查 Locale.getDefault() 所得的 Locale 物件,當 language 是 zh 時,若 country 不是 TW 或 CN 時,以 Locale.setDefault() 將程式預設語系設成 Locale.TRADITIONAL_CHINESE,並透過 context.getResources().updateConfiguration() 修改 Configuration 的 locale 為 Locale.TRADITIONAL_CHINESE (Configuration.setLocale() 在 Android 7.0 已被標示過時,但還能使用)。至於 Android 7.0 建議改用的 LocaleList 對於這個問題則似乎沒有任何效果。這樣就能讓 Android 6.x 或以下系統改用 zh-rTW 的資源。


另外還有兩件小事,第一是本站(本人)的 Twitter 已重開,由於最近比較不想在網站貼文,所以比較無關重要或小事應會貼在 Twitter 上,第二時本站 Android 軟件「MagicTV 易錄寶」因某些突發原因被下架且無法修復,所以程式會暫時停止在 Play Store 發佈 (已安裝的使用者則仍可使用),待程式修改妥當後會以新的程式重新上架。


撰寫於:2016/9/18 23:17:51 / 回應已關閉
正在讀取回響內容...
其他內容請回到主頁