iOS应用程序自定义本地化设置

时间:2011-12-05 09:16:25

标签: objective-c localization

我将制作一个多语言的iPad应用程序,我希望用户选择一个首选的语言。所以我的问题是,如何在运行时更改我的应用程序语言?我不想改变iPad语言。

2 个答案:

答案 0 :(得分:3)

Apple指南不推荐

我的解决方案(用户应该手动重新启动应用程序;“动态”处理语言切换“你应该重新加载包括XIB在内的所有资源”):

// 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;
}

答案 1 :(得分:1)

这已被问过几次。对此没有很好的解决方案,这是非常重要的(例如,当您更改语言时,iOS会重新启动)。有些人通过替换NSLocalizedString调用以及更改NIB加载来实现此目的,以便指定要使用的本地化版本。请参阅示例this other SO question