2012-04-28 54 views
0

我有一個支持3種不同語言的iOS 5應用程序。本地化故事板會爲每種語言創建一個副本,並且每個語言都必須翻譯。如何以編程方式選擇故事板?

語言選擇取決於系統設置,所以如果我的iPhone具有「英語」作爲系統語言,我應用程序中選擇的故事板將是英文版。如果我更改爲加泰羅尼亞語,我的應用程序將顯示加泰羅尼亞文字。

這種方法有幾個缺點在我看來:

  • 應用程序不能被翻譯成不受蘋果支持的語言。這可能對moniroty語言很重要(在iOS 5之前,加泰羅尼亞還沒有被支持)。

  • 如果用戶想讓我的應用程序加泰羅尼亞語,但系統的其他部分在英語?

所以我的問題是如何在應用程序啓動時選擇故事板語言?它有可能嗎?此外,它將用於本地化使用NSLocalizedString的字符串?

問候, JoanBa

回答

0

好像你可以在故事板分成本地化版本就像localized.strings至於怎麼做呢?

This question已經回答過,雖然我還沒有嘗試過經驗。

0

讀雅各答案和測試一點點之後,這是爲我工作的代碼:

int main(int argc, char *argv[]) 
{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    // Reset system defaults to get the complete language list. 
    [defaults removeObjectForKey:@"AppleLanguages"]; 
    // Default language choosen by user. 
    NSString *defLanguage = [defaults objectForKey:@"Language"]; 
    NSArray *sysLangugages = [defaults arrayForKey:@"AppleLanguages"]; 
    // System default language: first element of array. 
    NSString *sysLanguage = [sysLangugages objectAtIndex:0]; 
    NSArray *array = [NSArray arrayWithObjects:defLanguage, sysLanguage, nil]; 
    [defaults setObject:array forKey:@"AppleLanguages"]; 

    @autoreleasepool { 
     return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
    } 
} 

只需重新啓動更改默認語言後的應用程序,所有的本地化資源被改變:字符串和故事板。

也試過這個代碼AppDelegate.m,在方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

,但它不工作。只有在main.m工作正常。我不知道爲什麼。

請注意,通過此代碼,您可以擁有iOS不支持的語言的應用程序。

問候,

JoanBa

+0

也許是因爲它加載由達到didFinishLaunching點的信息。 很高興能幫到你! – 2012-04-30 14:59:28

相關問題