Вы должны прибегнуть к стилю C
, так как это то, что требуется CGContextShowTextAtPoint()
. Чтобы правильно обрабатывать языковой стандарт (символ валюты меняется в зависимости от языкового стандарта), вы должны использовать setlocale()
, затем форматировать строку, используя strfmon()
, и, наконец, передать строку, созданную с помощью strfmon(
), в CGContextShowTextAtPoint()
.
Документация доступна из терминала следующим образом:
man 3 setlocale
man 3 strfmon
РЕДАКТИРОВАТЬ / ОБНОВИТЬ: Для вашей информации, strfmon()
внутренне использует struct lconv
. Структуру можно получить с помощью функции localeconv()
. См. man 3 localeconv
для подробного описания полей, доступных в структуре.
например, попробуйте следующую простую программу на C, устанавливающую различные локали
#include <stdio.h>
#include <locale.h>
#include <monetary.h>
int main(void)
{
char buf[BUFSIZ];
double val = 1234.567;
/* use your current locale */
setlocale(LC_ALL, "");
/* uncomment the next line and try this to use italian locale */
/* setlocale(LC_ALL, "it_IT"); */
strfmon(buf, sizeof buf, "You owe me %n (%i)\n", val, val);
fputs(buf, stdout);
return 0;
}
Следующие использования localeconv()
:
#include <stdio.h>
#include <limits.h>
#include <locale.h>
int main(void)
{
struct lconv l;
int i;
setlocale(LC_ALL, "");
l = *localeconv();
printf("decimal_point = [%s]\n", l.decimal_point);
printf("thousands_sep = [%s]\n", l.thousands_sep);
for (i = 0; l.grouping[i] != 0 && l.grouping[i] != CHAR_MAX; i++)
printf("grouping[%d] = [%d]\n", i, l.grouping[i]);
printf("int_curr_symbol = [%s]\n", l.int_curr_symbol);
printf("currency_symbol = [%s]\n", l.currency_symbol);
printf("mon_decimal_point = [%s]\n", l.mon_decimal_point);
printf("mon_thousands_sep = [%s]\n", l.mon_thousands_sep);
printf("positive_sign = [%s]\n", l.positive_sign);
printf("negative_sign = [%s]\n", l.negative_sign);
}