標籤:blog http io ar os on 檔案 div log
近期伊書突然接到一些外國使用者的投訴,說伊書介面變成了中文,但他們系統語言不是中文,是法文俄文日文等,伊書只支援中文跟英文,在不支援系統所用語言的時候,理應會自動選用英文,不知為什麼會選成了中文,經過艱難困苦的重重排查,終於找到原因,知道了iOS多語言備選的規則。
主要有兩個影響因素,一是CFBundleDevelopmentRegion(Info.plist的一個欄位),二是iOS8新增的系統慣用語言列表:
iOS8 語言與地區
在iOS7及之前版本,系統只能設定一種語言,如果APP不支援系統設定的語言,選用備選語言的規則是:
1.如果APP支援英文,直接選擇英文
2.如果APP不支援英文,隨機挑選一個,不清楚這裡挑選的規則。文檔上說會選用CFBundleDevelopmentRegion設定的語言,但我測試後發現並沒有,系統直接忽略了這個欄位。
舉個例子,APP支援中文跟英文,當系統語言是不是中文或英文時,都會選擇英文。若APP支援中文跟日文,系統語言不是中文或日文,將會隨機挑選一個。
從iOS8開始,系統語言可以設定一個語言列表,會根據這個語言列表的排序選用備選語言,規則就變了:
1.如果APP支援的語言在系統語言列表裡有,優先挑選清單上排序靠前的語言。
2.如果APP支援的語言沒在系統語言列表上,按CFBundleDevelopmentRegion的值選擇,無論APP是否支援英文,英文不再是預設的備選語言。
舉個例子,APP支援中文跟英文,CFBundleDevelopmentRegion的值是中文,當系統語言列表是[日文]或[日文,中文]時,會選擇中文,系統語言列表是[日文,英文]時,會選擇英文。
蘋果在語言方面似乎有不少bug,調試過程中出現不少坑爹的事,例如改變增刪語言檔案一定要clean工程否則不生效,iOS8模擬器不認CFBundleDevelopmentRegion的值,真機才認,再加上一開始不知道iOS8系統語言變成列表這事,把我迷惑得費了大量時間。總而言之,若要國際化,讓APP支援英文,CFBundleDevelopmentRegion填英文,應該萬無一失。
轉載自:http://blog.cnbang.net/tech/2481/
iOS多語言備選機制