2013-03-13 41 views
5

我有興趣讓我的用戶選擇我的應用出現在他們的語言/區域設置。我已經想出瞭如何加載正確的包,選擇正確的字符串文件等。但是,我仍然看到一些系統項目無法控制。例如,開關控制。iOS:有什麼辦法可以僞造用戶的語言環境?

有沒有什麼辦法讓我告訴系統這個應用程序現在應該以特定的語言而不是用戶當前的系統設置?

+1

Whoa-whoo。 'method_setImplementation(class_getInstanceMethod([NSLocale class],@selector(currentLocale)),(IMP)spoofedImpl);'? – 2013-03-13 21:18:50

+2

任何方式來做到這一點,而不會攪拌? – Mike 2013-03-13 21:27:37

+0

您是否嘗試過爲NSLocale創建一個類別以返回您爲類方法選擇的語言環境? – 2013-03-13 21:52:32

回答

5

的至少哈克的方式是經由NSUserDefaults:區域設置由AppleLocale(區域ID作爲字符串)確定,並且該語言是由第一匹配在AppleLanguages(語言ID的陣列)來確定;您的應用只能爲您的應用覆蓋這些默認值。要檢查它是否被你的應用覆蓋,你可以使用類似[defaults persistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]] objectForKey:@"AppleLocale"]的東西。要刪除覆蓋,請使用-removeObjectForKey:

無論您如何操作,在更改語言時可能必須使用relaunch the app; OS X和iOS應用程序根本不是爲了在運行時更改語言而設計的(在OS X上,只有新推出的應用程序纔會看到語言更改;在iOS上,系統會殺死所有應用程序以更改語言)。

我增加了這個功能,使開關語言更易於開發/測試;我不知道這是否會失敗的App Store審查過程。

+0

謝謝@tc。這聽起來像這可能是遠離的東西,但我很欣賞詳細的選項。 – Mike 2013-03-20 15:26:28

相關問題