简单地说,我有一个正整数[9,393,3,993],我想将它本地化为某种语言[9,939].
如果我使用NSNumberFormatter,它将根据用户的语言环境本地化数字.但是,我想覆盖它并选择任何语言环境来将数字转换为.
我尝试了以下,没有奏效:
// user locale is @"en" NSNumberFormatter* formatter = [NSNumberFormatter new]; [formatter setNumberStyle:NSNumberFormatterNoStyle]; [formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"ar"]]; [formatter setMinimumIntegerDigits:padding]; return [formatter stringFromNumber:@(num)];
返回的字符串是英文的.
请注意,我有一个非常类似的NSDateFormatter代码片段,但它按预期工作. NSDateFormatter对象遵循set语言环境.
解决方法
我似乎遇到了一个非常特殊的情况,应用程序的区域设置会吓坏.
我正在使用以下内容更改应用程序的默认语言环境:
[[NSUserDefaults standardUserDefaults] setObject:@[@"ar"] forKey:@"AppleLanguages"];
然后,我试图获取首选语言并使用以下方法从中创建语言环境对象:
NSString* langPrefix = [NSLocale preferredLanguages][0];
最后,从返回的对象创建一个新的NSLocale对象.在测试代码时,我会在应用程序中更改语言,然后通过Xcode关闭应用程序.我假设NSUserDefaults不会同步,但即使我调用了同步方法,它仍然会搞砸.
最重要的是,测试本地化应该通过部署应用程序来完成,并且在设备与Xcode断开连接后,应用程序将正确运行所有生命周期阶段.