iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 11
0
Mobile Development

打造一個厲害的普通 Android App - 使用者體驗優化系列 第 11

使用 res 的正確姿勢 (2):多語系

  • 分享至 

  • xImage
  •  

嗨大家今天過得好嗎?一個好的 Android App 除了功能很重要之外,另外很重要的就是服務的用戶很多,例如除了服務中文地區的用戶之外我們還可以提供英語系的語言以接觸到更多用戶。這代表小至 Toast 裡的訊息,大至首頁裡的標題,只要提供幾種語系的選擇,就代表要提供幾種語系的設定。

前置作業

如果專案一開始只使用中文,而在專案中處處充滿簡單又暴力的 hard core,沒有把字串的資源整合到 res/values/strings.xml 的檔案中,現在就是還債的時候了。因為多語系的設定就是透過 res\ 底下不同語系的資料夾各存放一份 strings.xml ( 例如 res/values-fr/strings.xmlres/values-ja/strings.xml ),每個 strings.xml 檔案都會設定相同 string id 但對應到不同字串的值,但這麼多份的 strings.xml 檔案,系統怎麼知道預設要開啟哪個語系呢?通常會把預設的語系整合在 res/values/strings.xml 的檔案,系統在拿取字串資源時會先去當前設定的語系找對應的 string id,如果當前的語系沒有的話再到預設的語系底下獲取,因此預設語系的 strings.xml 應該是整合所有字串資源最完整的一份檔案,才不會有中文有顯示文字但因為泰文沒有設定對應的 string id 就無法顯示的狀況,假如有設定預設語系為英文的話至少還能顯示英文才不會有缺字的情況。

語系在 res 資料夾下的優先順序是很前面的 ( 僅次於 Mobile Country Code and Mobile Network Code ),也就是裝置同時符合語系的設定和特殊小螢幕尺寸的資源時,會優先載入語系的資源。

命名原則

好不容易把所有字串資源集合到 res/values/strings.xml 後,你可能面臨命名的問題因為類似又在不同頁面使用的字串真的很多,那 string id 要怎麼命名才是好讀的呢?可以把握下列幾個原則:

  • 字串的功能?
  • 何時以及在哪個頁面呈現?
  • 在頁面的標題、按鈕還是列表出現 ( 按鈕的字串通常不能太長 )

如何測試

Android Studio 提供 pseudolocales 的方法可以測試多語系的設定是否成功,在 build.gradle 加上 pseudoLocalesEnabled true ,重新 build app 後再到手機的語言設定把要測試的語言設為系統預設語言,就可以查看 App 內的語系是否正常使用。但有助於定位 localization 潛在的問題,例如阿拉伯語的文字書寫順序是由右至左 ( RTL ),但 App 內的 strings.xml 並不是由右至左書寫;日文、韓文等部分語言的動詞是在字尾,但原先的版面並沒有考慮到等。

專案中有支援 RTL 語言需要注意在 View 的屬性上盡量不用 right 和 left,改用 start 和 end,因為不管 RTL 還是 LTR 的語言,用 start 和 end 就能自動判斷是從左邊還是右邊開始。

在 Localization 的過程中除了一開始在整理字串資源很麻煩外,另外也很難的是設計問題,在中文可以用一兩個字帶過的意思,在英文的長度卻可能是兩三倍,兩個不同長度的字串要塞進一樣的按鈕本身就是一件不可能的任務。設計地比較全面的 App 大多是列表為主就沒有語系長度不一的問題,按鈕只有少數幾顆是文字,大部分會使用具有辨識度的 icon,如果在專案初期就能有共識少用複雜的畫面,多用列表讓內容更加完整呈現,也許多語系的問題也不是個問題了!喜歡今天分享的內容的邦友請繼續關注「打造一個厲害的普通 Android App - 使用者體驗優化」的主題,我們明天見。


上一篇
使用 res 的正確姿勢 (1):簡介
下一篇
使用 res 的正確姿勢 (3):番外篇
系列文
打造一個厲害的普通 Android App - 使用者體驗優化16
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言