我有一个支持3种不同语言的iOS 5应用程序。本地化故事板会创建每种语言的副本,并且每个语言都必须翻译。
语言选择取决于系统设置,因此如果我的iPhone将“英语”作为系统语言,我的应用程序中选择的故事板将是英语。如果我改为加泰罗尼亚语,我的应用程序将显示加泰罗尼亚语单词。
我认为这种方法有几个缺点:
无法将应用翻译为Apple不支持的语言。这对于moniroty语言可能很重要(加泰罗尼亚语直到iOS 5才得到支持)。
如果用户希望我的应用程序使用加泰罗尼亚语,但系统的其余部分是英文的?
所以我的问题是如何在app启动时选择故事板语言?有可能吗?它也适用于使用NSLocalizedString本地化的字符串?
此致 JoanBa
答案 0 :(得分:0)
您似乎可以将故事板拆分为本地化版本,就像localized.strings一样,如何做到这一点?
This question之前已经得到了回答,尽管我没有尝试过经验。
答案 1 :(得分: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