有一些技巧,比如使用 id 创建语言环境,但不是像“en_US”这样的普通语言环境 id,而是传递货币代码“USD”、“EUR”等,它似乎对 eur 和 usd 有效,但我可以检查它但是这个恕我直言,这是错误的方式。
我知道的唯一正确方法是获取所有语言环境,然后循环检查它们的货币代码以与您拥有的货币代码进行比较。这样,当您找到代码时,您将停止循环。
- (NSLocale *) findLocaleByCurrencyCode:(NSString *)_currencyCode
{
NSArray *locales = [NSLocale availableLocaleIdentifiers];
NSLocale *locale = nil;
NSString *localeId;
for (localeId in locales) {
locale = [[[NSLocale alloc] initWithLocaleIdentifier:localeId] autorelease];
NSString *code = [locale objectForKey:NSLocaleCurrencyCode];
if ([code isEqualToString:_currencyCode])
break;
else
locale = nil;
}
/* For some codes that locale cannot be found, init it different way. */
if (locale == nil) {
NSDictionary *components = [NSDictionary dictionaryWithObject:_currencyCode
forKey:NSLocaleCurrencyCode];
localeId = [NSLocale localeIdentifierFromComponents:components];
locale = [[NSLocale alloc] initWithLocaleIdentifier:localeId];
}
return locale;
}