如何本地化 iOS 中的数字?

How to localise the numbers in iOS?

我按照以下步骤对字符串进行了本地化。我在 .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 公里这样的东西?

您可以 "translate" 使用区域设置的号码。

例如,要显示一个浮点数,您可以这样做:

NSString *localizedString = [NSString localizedStringWithFormat:@"%3.2f", myNumber];

此方法将使用系统的语言环境([NSLocale currentLocale] 的结果)。要使用自定义语言环境,请使用 initWithFormat:locale:initWithFormat:locale:arguments: 方法。

有关详细信息,请阅读 Formatting Data Using the Locale Settings

UPDATE(适应问题的更新)

要在末尾添加 km,只需像这样编辑格式字符串:

NSString *localizedDecimalString = [NSString localizedStringWithFormat:@"%f km",distance];

顺便说一下,[localizedDecimalString doubleValue]; 不起作用,因为它需要一个点 (.) 小数分隔符和一个逗号千位分隔符 (,)。因此,它只是进行转换,直到遇到意外字符,在本例中为 space。所以,从 7 324,253011 它只转换了 7。它适用于英文版 (7,324.253011)。要将本地化数字的字符串转换回 double/float,您必须使用 NSNumberFormatter.

NSNumberFormatter 处理这个。适当设置 the locale property 即可。

另请参阅开源 FormatterKit,例如,它可以在“1st、2nd、3rd”和“1ère、2ème、3ème”之间进行转换。