2012-04-28 70 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

相关问题