Подтвердить что ты не робот

IPhone: как получить символ местной валюты (т.е. "$" не использовать "AU $" )

Вот код того, как я теперь получаю символ валюты:

NSLocale *lcl = [[[NSLocale alloc] initWithLocaleIdentifier:@"au_AU"] autorelease];
NSNumberFormatter *fmtr = [[[NSNumberFormatter alloc] init] autorelease];
[fmtr setNumberStyle:NSNumberFormatterCurrencyStyle];
[fmtr setLocale:lcl];

NSLog( @"%@", [lcl displayNameForKey:NSLocaleCurrencySymbol value:@"AUD"] );
NSLog( @"%@", [fmtr currencySymbol] );

Оба NSLogs возвращают "AU $". Как я понял из документации Apple по разработке, для каждой валюты есть по крайней мере два символа валюты (эти символы могут быть одинаковыми, хотя) - локальные (например, используются в стране. $Для Австралии) и международные (AU $для Австралии). Итак, вопрос в том, как получить ЛОКАЛЬНЫЙ символ валюты. Любые идеи?

Спасибо заранее.

4b9b3361

Ответ 1

Ваш код должен работать, однако неверный идентификатор локали. Он должен быть "en_AU".

См. "Использование локального объекта" в "Руководстве по интернационализации и локализации" (https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPInternational/InternationalizingLocaleData/InternationalizingLocaleData.html#//apple_ref/doc/uid/10000171i-CH13-SW4)

Ответ 2

NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[currencyFormatter setLocale:[NSLocale currentLocale]];
[currencyFormatter setMaximumFractionDigits:2];
[currencyFormatter setMinimumFractionDigits:2];
[currencyFormatter setAlwaysShowsDecimalSeparator:YES];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];

NSNumber *someAmount = [NSNumber numberWithFloat:5.00];    
NSString *string = [currencyFormatter stringFromNumber:someAmount];

Вы получите $5,00 за США, ¥ 5,00 для Японии, 5,00 евро за Европу и т.д.

Ответ 3

Этот фрагмент возвращает символ валюты ¥ для локали "ja_JP" (может быть любой другой локаль).

NSLocale* japanese_japan = [[[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"] autorelease];
 NSNumberFormatter* fmtr = [[[NSNumberFormatter alloc] init] autorelease];
 [fmtr setNumberStyle:NSNumberFormatterCurrencyStyle];
 [fmtr setLocale:japanese_japan];

 // Local currency symbol (what you're asking for)
 NSString* currencySymbol = [fmtr currencySymbol];
 NSLog( @"%@", currencySymbol ); // Prints '¥'

 // International currency symbol 
 NSString* internationalCurrencySymbol = [fmtr internationalCurrencySymbol];
 NSLog( @"%@", internationalCurrencySymbol ); // Prints 'JPY'

Несчастливо, что для au_AU вы получаете AU $в качестве символа местной валюты вместо $, но это должно быть так, как это должно отображаться в iOS. Однако обратите внимание, что международный символ, напечатанный для au_AU, не AU $, а AUD.

Ответ 4

Он не идеален тем, что он не выходит из системы, но, очевидно, вы можете создать свою собственную внутреннюю таблицу, используя список текущих символов валюты *. Поскольку в этом списке есть символы юникода, для него просто нужно сопоставить список локалей Apple со списком.

Знаете, на всякий случай предоставленные Apple не доступны.

* Примечание: ссылка не предназначена для авторизации, см. комментарии.

Ответ 5

Вы можете, если вам нужно, создать файл .strings, который содержит валюту, и использовать функцию NSLocalizedString для создания локализованной валюты. Что-то вроде этого:

en.lproj
myApp.strings:

"currencySymbol"="$"
"currencyFormat"="$%lf"

au_AU.lproj
myApp.strings:

"currencySymbol"="$"
"currencyFormat"="$%lf"

ja_JP.lproj
myApp.strings:

"currencySymbol"="¥"
"currencyFormat"="¥%lf"

И используйте это вот так:

NSString *money = [NSString stringWithFormat:@"%@%lf", NSLocalizedString:(@"currencySymbol"), myMoney];

Однако это означает, что для каждой поддерживаемой локализации вам нужен файл .strings. Кроме того, это означает, что для некоторых локализаций символа валюты будет недостаточно для отображения надлежащего денежного формата, вам нужно будет использовать что-то вроде этого:

NSString *money = [NSString stringWithFormat:NSLocalizedString(@"CurrencyFormat"), myMoney];

У этого есть некоторые ограничения, но это может сработать для вас.

Ответ 6

Не могли бы вы получить текущую строку и удалить ее из всех символов a-Z? Если результирующая строка имеет длину > 0, вы получите свой символ. В противном случае используйте оригинальную строку.

Он липкий, и я не уверен, что это будет работать для всех валют по всему миру, но это может сработать?