今天在解決用戶反饋的問題的時候,遇到一個很奇怪的問題,就是國外用戶在使用我們APP的時候,選擇的語言并不在我們的國際化范圍內(我們只國際化了中文和英語),按照預期,我們APP應該顯示英文,但是,它居然堂而皇之的全部顯示成了中文!!!
本著開發的第一反應,我覺得肯定是售后反饋的有問題,我用手機試驗了一下,把語言設置成日文,完美顯示出了英文,因此讓我更加覺得反饋有問題;
由于這個項目是之前離職的同事做的,因此,為了讓我確定, 我重新看了一遍他的代碼。
我發現了前同事給我留下的幾個坑:
-
在info.plist文件內,設置應用的原始語系地區時,Localization native development region原來被設置為了China,這會使該應用默認顯示中文,正是這個原因導致出現了以上現象,為了能默認顯示英文,此處需要設置成en,如下圖所示;
應用原始語系地區.png - 只將字符串進行了國際化,應用內的storyboard都沒有;
- 沒有在info.plist文件內添加Localized resources can be mixed并將其值設置為YES,否則的話,應用內調用系統相冊的話,會顯示英文,不會隨國際化語言變化;
由于客戶沒有詳細的反饋細節,因此將以上未完成的內容挨個搞完;
在所有一切都按照預期的進行完之后,我將手機默認語言設置成日文,地區設置成日本后,大跌眼鏡的事情出現了,APP居然顯示出中文!?。∵@,太奇怪了,我的信心一下灰飛煙滅了。。。難道哪里又出問題了???
正沒有頭緒的時候,設置應用的語言與地區的首選語言順序突然驚醒了我,出現剛才的情況應該跟這個順序有關,雖然已經將語言和地區設置成了日語和日本,但是, 語言的優先順序內還是有簡體中文,因此在無法匹配默認語言的情況下,手機選擇了默認的第二個語言。將此處的簡體中文和英語全部刪除,同樣使用剛才的測試方法,應用語言不出預料的顯示出了英文;
設置語言和地區.PNG
因此可以得出iphone的語言設置優先級:
- 首先,得看應用內國際化的語言,如果用戶手機的當前使用語言與APP的國際化語言有任一匹配的,那肯定顯示手機對應的語言;
- 如果當前使用語言都無法匹配,則看當前用戶手機設置應用的語言與地區的首選語言順序的其他幾個,按順序匹配如果有對應的,則顯示匹配的那個語言;因為iphone認為,既然在你的語言列表內有該語言,說明你能看懂該語言;
因此這個跟APP本身的默認語言設置沒有關系,這跟蘋果自己的系統語音設置有關,進系統設置-》通用-》語言與地區,看到首選語言項,如果英文在前就顯示英文,中文在前就顯示中文,有匹配的就顯示匹配的。 - 當前用戶的語言列表內的所有語言都無法與國際化語言匹配,則要看當前應用設置的Localization native development region是哪里,一般如果設置為China則默認就是中文,en就是英文;
參考文章
Core Foundation Keys