【问题标题】:Change default locale of iOS app更改 iOS 应用的默认语言环境
【发布时间】:2014-07-09 18:24:46
【问题描述】:
我正在用瑞典语创建一个应用程序,无论设备语言环境是什么,它都应该只以瑞典语运行。我想知道如何将我的应用程序的默认语言环境设置为瑞典语,即sv_SE。当我创建 NSNumberFormatter 时,我希望它默认本地化为 sv_SE
在项目信息设置中“本地化”仅包含瑞典语。
NSNumberFormatter *nf = [NSNumberFormatter alloc] init];
NSLog(@"Locale: %@", nf.locale.localeIdentifier);
//Returns Locale: en_US
我是否缺少这样的整体设置,还是必须手动将所有对象本地化为瑞典语?
【问题讨论】:
标签:
ios
objective-c
localization
nsnumberformatter
【解决方案1】:
iOS 应用运行时内部没有任何自动功能可以使其在您想要的语言环境中运行。是的,您需要将要显示的所有资源、文本和消息本地化到 sv_SE。
您可以通过收听 NSCurrentLocaleDidChangeNotification 通知让您的应用了解用户何时更改区域设置(例如,通过进入 iphone 设置)。
完成后,如果您还需要其他语言,则可以使用NSLocalizedString 函数在每次需要显示翻译时调用所需的语言环境。这将根据用户在语言设置下设置的区域显示翻译值。
NSLocale documentation 提供进一步的见解。
【解决方案2】:
由于格式化程序可能是一种昂贵的资源,因此缓存它们的创建通常是个好主意。如果您打算这样做,您可以轻松地创建一个简单的类别,为您提供格式化程序配置您需要的方式并缓存 - 例如,如果我需要以特定方式格式化的货币,我会考虑以下
- (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;
}