Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Localizing Numbers in iOS

Simply, I have a positive integer [9, 393, 3, 993], and I would like to localize it to a certain language [٩, ٣٩٣ ,٣ ,٩٣٩].

If I use NSNumberFormatter, it will localize the number according to the user's locale. However, I want to override that and choose any locale to translate the number to.

I tried the following, did not work:

// user locale is @"en"
NSNumberFormatter* formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterNoStyle];
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"ar"]];


[formatter setMinimumIntegerDigits:padding];
return [formatter stringFromNumber:@(num)];

The returned string is in English.


Please note that I have a very similar code snippet for NSDateFormatter, but it works as expected. The NSDateFormatter object respects the set locale.

like image 301
Mazyod Avatar asked Dec 06 '12 18:12

Mazyod


1 Answers

It seems I came across a very special case where the locale of the app would just freak out.

I am changing the default locale of the app by using something like this:

[[NSUserDefaults standardUserDefaults] setObject:@[@"ar"] forKey:@"AppleLanguages"];

Then, I was trying to get the preferred language and create a locale object from it using:

NSString* langPrefix = [NSLocale preferredLanguages][0];

Finally, create a new NSLocale object from the returned object. When testing the code, I would change the language from within the app, then close the app through Xcode. I am assuming that the NSUserDefaults would not synchronize, but even if I called the synchronize method, it would still screw up.

Bottom line is, testing localization should be done by deploying the app, and after the device has been disconnected from Xcode, so the app would run through all the life-cycle stages properly.

like image 197
Mazyod Avatar answered Sep 28 '22 19:09

Mazyod