如何在iOS中本地化数字?

时间:2015-07-29 16:14:11

标签: ios nslocalizedstring

我做了以下本地化字符串。我在.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公里的东西?

2 个答案:

答案 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”之间进行转换。