числовые значения в NSString отображаются в неправильном языковом стандарте

Я анализирую NSString из JSON, а затем значение отображается в UILable, значение содержит такие числа, как @"12", @"13"

Теперь, когда я делаю это:

self.lable.text =  @"12";

метка отображает значение арабскими цифрами ( ١٢ )

Я попытался проанализировать ответ JSON как NSNumber, а затем использовать NSNumberFormatter, чтобы принудительно использовать локаль «en_US» в приведенном ниже сегменте кода, но это не сработало.

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US"]];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setMaximumFractionDigits:0];
[numberFormatter setMinimumFractionDigits:0];
NSString *formattedNumberString = [numberFormatter stringFromNumber:number];
self.lable.text = formattedNumberString;

Язык моего приложения — «Английский — язык разработки», который указан на вкладке информации в разделе проекта.

Для региона устройства, на котором запущено приложение, установлено значение «США», а для языка установлено значение «Английский».

Я попытался запустить [NSLocale currentLocale] для двойной проверки, но получил "en_US"

Я застрял с этой проблемой, любые указатели и помощь приветствуются.


person ahmad    schedule 30.12.2014    source источник
comment
"12" не является значением NSString для 12. @"12" является значением NSString для 12. "12" является строковым значением char* для 12, которое обычно вызывает сбой при назначении свойству text, но иногда может приводить к нормальной, но фиктивной операции. .   -  person Hot Licks    schedule 13.02.2015


Ответы (1)


Это странно. Я бы не навязывал локальный, а устанавливал его в локальные настройки устройства, и вы могли бы установить формат строки следующим образом:

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
numberFormatter.locale = [NSLocale currentLocale];
numberFormatter.numberStyle = NSNumberFormatterDecimalStyle;
numberFormatter.maximumFractionDigits = 0;
self.label.text = [NSString StringWithFormat:@"%@", [numberFormatter stringForObjectValue:number]];

другое предложение — всегда использовать localizedStringFromNumber для обеспечения правильного локального поведения строки:

NSString *formattedNumberString = [numberFormatter localizedStringFromNumber:number];

Я надеюсь, что это помогает.

person JFS    schedule 12.02.2015