我做了以下本地化字符串。我在.strings文件中写了以下内容:
"Hello"="Hello";
和法语,.strings文件:
"Hello"="bonjour";
我将标签更改为:
self.myLabel.text = NSLocalizedString(@"Hello", nil);
我在这里取得了成功。我有两个案例:
考虑数字2.5,在英语系统中它是2.5
,在法语系统中它是2,5
。
我如何本地化数字?
编辑:我使用了属性NSLocale,但我无法将结果数字格式化为字符串。
这是我转换成字符串后得到的结果:
NSString *localizedDecimalString = [NSString localizedStringWithFormat:@"%f",distance];
result is 7 324,253011 //which is ok
我想在最后添加km,所以我尝试将其转换回double:
double newlyChangedNumber = [localizedDecimalString doubleValue];
result is 7.0 //I should get 7324253011 here
如何获得7 324,25公里的东西?
答案 0 :(得分:4)
您可以使用区域设置“翻译”数字。
例如,为了显示你要做的浮动:
NSString *localizedString = [NSString localizedStringWithFormat:@"%3.2f", myNumber];
此方法将使用系统的区域设置([NSLocale currentLocale]
的结果)。要使用自定义区域设置,请使用initWithFormat:locale:
或initWithFormat:locale:arguments:
方法。
有关详细信息,请阅读Formatting Data Using the Locale Settings。
更新(适应问题的更新)
在最后添加km
,只需编辑格式字符串,如下所示:
NSString *localizedDecimalString = [NSString localizedStringWithFormat:@"%f km",distance];
顺便说一下,[localizedDecimalString doubleValue];
没有用,因为它期望一个点(.
)小数点分隔符和一个昏迷千位分隔符(,
)。因此,它只是转换,直到它达到意想不到的字符,在这种情况下是空格。因此,从7 324,253011
开始,它只转换了7
。它可以使用英文版(7,324.253011
)。要将本地化数字的字符串转换回double / float,您必须使用NSNumberFormatter
。
答案 1 :(得分:1)
NSNumberFormatter
处理此问题。只需适当设置the locale
property。
另请参阅开源FormatterKit,例如,可以在“1st,2nd,3rd”和“1ère,2ème,3ème”之间进行转换。