2011-12-05 55 views
1

我打算製作一個多語言的iPad應用程序,我希望用戶選擇一個首選的語言。所以我的問題是,如何在運行時更改我的應用程序語言?我不想改變iPad語言。iOS應用程序自定義本地化設置

回答

1

這已被問了幾次。對此,沒有很好的解決方案,這不是微不足道的(例如,注意iOS更改語言時會重啓)。有些人通過替換NSLocalizedString調用以及更改NIB加載來實現此目的,以便指定要使用的本地化版本。例如參見this other SO question

+0

感謝您的答覆。 – Krrish

3

這是不推薦由蘋果指引。

我的解決方案(用戶需要手動重新啓動應用程序,來處理語言切換「對飛」,你應該重新加載所有資源,包括XIBs)是:

// Use "nil" to fallback to system settings 
void loadCustomLocalization(NSString * locCode) { 
    NSString * appleLanguages = @"AppleLanguages"; 
    if (locCode) { 
    [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:locCode] forKey:appleLanguages]; 
    } else { 
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:appleLanguages]; 
    } 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

void loadLocalization() { 
    const int result = [[[NSUserDefaults standardUserDefaults] stringForKey:@"language"] intValue]; 
    NSString * language = 0; 
    switch (result) { 
    case 1: language = @"ru"; break; 
    case 2: language = @"en"; break; 
    } 
    loadCustomLocalization(language); 
} 

int main(int argc, char *argv[]) { 
    loadLocalization(); 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
}