簡體   English   中英

使用與OS /設備中設置的語言不同的語言的iPhone應用程序?

[英]iPhone app using different language than the one set in OS / device?

是否可以讓我的應用程序以與操作系統中設置的語言不同的語言運行? 我想在我的應用程序的設置菜單中進行語言切換,用戶可以選擇德語作為應用程序,而他的系統是用英語運行的。

從我已經閱讀過的內容來看,如果沒有自己的本地化機制,似乎是不可能的......

你怎么看?

Cheerz,pawi

它可以很容易地完成,雖然花了我幾個星期來弄清楚如何;-)

我有一個名為iDEX的iPhone應用程序,這是一本羅馬尼亞語詞典。 在iPad上,羅馬尼亞語不能作為UI語言使用,因此我想讓用戶在應用程序設置中選擇羅馬尼亞語,因為設備設置不包含它。

您需要做的是將應用程序國際化並像往常一樣進行本地化。 然后, 在main方法中 ,將標准NSUserDefaultsAppleLanguages鍵設置為您選擇的語言和國家/地區,如此

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;
}

運行UIApplicationMain() 之前 必須設置AppleLanguages密鑰,因為此時加載了UIKit框架並確定了默認語言。

同樣重要的是您同時指定語言和國家/地區(例如,@“ro_RO”而不僅僅是@“ro”)否則您的應用可能會在設置密鑰時崩潰。

通過執行此操作,對支持本地化的NSBundle所有調用都將查找以編程方式建立的語言,而不是設備上設置的語言。

希望有幫助......

您需要實現自定義資源加載機制來實現這一點。 例如,您將無法再使用NSLocalizedString宏或[NSBundle pathForResource:]。 您將始終必須指定包含本地化的路徑(如de.lproj / MyStrings.strings而不僅僅是MyStrings.strings)。 除非絕對必要,否則我建議不要這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM