2011-05-06 83 views
5

我試圖更改應用程序語言,但是當我關閉一個應用程序並再次運行它時,我在main.h語言chages中運行此代碼。這有可能在不重新啓動的情況下更改語言?僅在iPhone上重新啓動後才能更改語言

int main(int argc, char *argv[]) { 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    NSArray *languages = [NSArray arrayWithObject:@"en_GB"]; 
    [[NSUserDefaults standardUserDefaults] setObject:languages forKey:@"AppleLanguages"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
} 
+0

請查看我在下面的帖子回答:http://stackoverflow.com/a/20257557/306764 – 2014-04-21 16:21:51

回答

3

更新回答「如何改變語言的應用程序內」

NSLocalizedString()(及其變型)訪問NSUserDefaults的了「AppleLanguages」鍵,以確定哪些用戶對首選語言設置。這將返回一組語言代碼,第一個是用戶爲其電話設置的語言代碼,如果資源不適用於首選語言,則會使用後續語言代碼作爲後備代碼。

如果您希望通過使用setObject:forKey:方法來設置您自己的語言列表,您可以重寫自己的應用程序的全局設置。這將優先於全局設置的值,並返回到您的應用程序中執行本地化的任何代碼。代碼如下:

[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"de", @"en", @"fr", nil] forKey:@"AppleLanguages"]; 

注意:爲了安全起見,請確保使用適當的預定義語言名稱。

下面是代碼片段,但您必須在項目中包含所有本地化文件。

@implementation LocalizeLanguage 

static NSBundle *bundle = nil; 

+(void)initialize { 
    NSUserDefaults* defs = [NSUserDefaults standardUserDefaults]; 
    NSArray* languages = [defs objectForKey:@"AppleLanguages"]; 
    NSString *current = [[languages objectAtIndex:0] retain]; 
    [self setLocalizeLanguage:current]; 
} 

/* 
    [LocalizeLanguage setLocalizeLanguage:@"en"]; 
    [LocalizeLanguage setLocalizeLanguage:@"fr"]; 
*/ 

+(void)setLocalizeLanguage:(NSString *)lang { 
    NSLog(@"preferredLang: %@", lang); 
    NSString *path = [[ NSBundle mainBundle ] pathForResource:lang ofType:@"lproj" ]; 
    bundle = [[NSBundle bundleWithPath:path] retain]; 
} 

+(NSString *)get:(NSString *)key alter:(NSString *)alternate { 
    return [bundle localizedStringForKey:key value:alternate table:nil]; 
} 

@end 
+3

好了,但我已經這樣做了:),一切工作perfectlly罰款。我想添加一個在應用程序Settings.app中更改語言的可能性,所以當前的iPhone語言是英語時。但用戶爲我的應用程序設置了法語我的Settings.app我必須強制我的應用程序以法語本地化。我試圖用我之前編寫的代碼來做到這一點,它的工作原理,但我需要重新啓動應用程序後,這是我試圖解決的問題。 – pawelini1 2011-05-06 14:10:27

+0

我已經更新了答案 - 但沒有必要去做你想做的事情。 iOS支持操作系統內置的本地化 - 您只需提供適當的語言文件,用戶就可以選擇他想要的語言。但無論如何,這將爲你工作 - 祝你好運! :) – Deminem 2011-05-06 19:29:33

+1

我得到了完全相同的問題! – 2012-03-15 19:33:29