是否有可能使我的應用程序以不同於OS中設置的語言運行的語言運行?我想在我的應用程序設置菜單中設置語言切換,用戶可以在其中進行切換。選擇德語爲應用程序,而他的系統是用英語運行。iPhone應用程序使用不同於OS /設備中設置的語言的語言?
從我已經閱讀過了,現在看來,這是不可能的,而不必我自己的本地化機制...
你覺得呢?
Cheerz,pawi
是否有可能使我的應用程序以不同於OS中設置的語言運行的語言運行?我想在我的應用程序設置菜單中設置語言切換,用戶可以在其中進行切換。選擇德語爲應用程序,而他的系統是用英語運行。iPhone應用程序使用不同於OS /設備中設置的語言的語言?
從我已經閱讀過了,現在看來,這是不可能的,而不必我自己的本地化機制...
你覺得呢?
Cheerz,pawi
您需要實現您的自定義資源加載機制來實現這一點。例如,你將不再能夠使用NSLocalizedString宏或[NSBundle pathForResource:]。您將始終必須指定包含本地化的路徑(如de.lproj/MyStrings.strings而不僅僅是MyStrings.strings)。除非絕對必要,否則我會建議不要這樣做。
雖然我花了幾個星期的工作如何我;-)
有一個叫做IDEX一個iPhone應用程序是一個羅馬尼亞字典就可以輕鬆完成。在iPad上,羅馬尼亞語不能用作UI語言,所以我想讓用戶選擇在應用程序設置中選擇羅馬尼亞語,因爲設備設置不包括它。
你需要做的是國際化應用程序並像往常一樣本地化。然後,在main方法,設置標準NSUserDefaults
到您所選擇的語言和國家的AppleLanguages
關鍵,像這樣
int main(int argc, char *argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[NSArray arrayWithObject:@"ro_RO"] forKey:@"AppleLanguages"];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool drain];
return retVal;
}
這是勢在必行您設置前AppleLanguages
關鍵您運行的是UIApplicationMain()
,因爲此時已加載UIKit框架並確定了默認語言。
指定語言和國家(例如@「ro_RO」而不僅僅是「ro」)同樣重要,否則在設置密鑰時,您的應用程序可能會崩潰。
通過這樣做,支持本地化的所有對NSBundle
的調用都將查找您編程建立的語言,而不是設備上設置的語言。
希望可以幫助...
從我所見過的Apple文檔中,只提到了此AppleLanguages鍵值的檢索。您是否遇到過將應用程序提交到App Store的困難? – 2012-01-11 16:30:16
我在App Store上有一個應用程序,它完全使用此代碼。這是大約一年前的最後一次更新,沒有問題... – fedmest 2013-06-21 14:05:32