更改iOS应用的默认语言环境

时间:2014-07-09 18:24:46

标签: ios objective-c localization nsnumberformatter

我正在用瑞典语创建一个应用程序,无论设备语言环境是什么,它都只能以瑞典语运行。我想知道如何将我的应用程序的默认语言环境设置为瑞典语,即sv_SE。当我创建NSNumberFormatter时,我希望默认情况下将其本地化为sv_SE

在项目信息设置"本地化"只包含瑞典语。

NSNumberFormatter *nf = [NSNumberFormatter alloc] init];
NSLog(@"Locale: %@", nf.locale.localeIdentifier);

//Returns Locale: en_US

我是否缺少这样的整体设置,还是我必须手动将所有对象本地化为瑞典语?

2 个答案:

答案 0 :(得分:1)

iOS应用运行时内部没有任何自动功能可以使其在您想要的语言环境中运行。是的,您需要将要显示的每个资源,文本和消息本地化为sv_SE。

您可以通过收听 NSCurrentLocaleDidChangeNotification 通知,让您的应用了解用户何时更改区域设置(例如,通过进入iphone设置)。

完成后,如果您还需要其他语言,则每次需要显示翻译时,都可以使用NSLocalizedString函数调用所需的区域设置。这将根据用户在语言设置下设置的区域设置显示翻译的值。

NSLocale documentation提供了进一步的见解。

答案 1 :(得分:0)

由于格式化程序可能是一种昂贵的资源,因此缓存其创建通常是一个好主意。如果您打算这样做,您可以轻松地创建一个简单的类别,为您提供以您需要的方式配置并缓存的格式化程序 - 例如,如果我需要以特定方式格式化的货币,我会考虑以下内容

- (NSNumberFormatter *)tla_currencyFormatter;
{
  static NSString *TLACurrencyFormatterKey = @"TLACurrencyFormatterKey";

  NSMutableDictionary *threadDictionary = [[NSThread currentThread] threadDictionary];

  NSNumberFormatter *formatter = threadDictionary[TLACurrencyFormatterKey];

  if (!formatter) {
    formatter = [[NSNumberFormatter alloc] init];
    // configure formatter
    threadDictionary[TLACurrencyFormatterKey] = formatter;
  }

  return formatter;
}