Функции локализации C
Стандартная библиотека C (libc) |
---|
Общие темы |
Разные заголовки |
|
В вычислительной технике функции локализации C представляют собой группу функций языка программирования C, реализующих базовые процедуры локализации. [1] [2] Функции используются в многоязычных программах для адаптации к конкретной локали. В частности, можно изменить способ отображения чисел и валюты. Эти настройки влияют на поведение функций ввода/вывода в стандартной библиотеке C. [3]
Обзор функций
[ редактировать ]Функции и типы локализации C определены в локаль.h ( заголовок Clocale в C++). [4] [5]
Функция | Описание |
---|---|
установить локаль | устанавливает и получает текущую локаль C |
локеконв | возвращает числовые и денежные данные форматирования текущей локали |
Критика
[ редактировать ]Стандартные функции локализации C подвергаются критике, поскольку состояние локализации хранится глобально. Это означает, что в данной программе все операции, связанные с локалью, могут одновременно использовать только одну локаль. В результате очень сложно реализовать программы, использующие более одной локали. [6]
Функции изменяют поведение printf/scanf/strtod, которые часто используются для записи сохраненных данных в файл или в другие программы. В результате сохраненный файл в одной локали не будет доступен для чтения в другой локали или вообще не будет доступен для чтения из- за таких предположений, как «числа заканчиваются запятыми». Для решения этих проблем в большинстве крупномасштабных программ в качестве локали устанавливается значение «C» (или другое фиксированное значение).
Пример
[ редактировать ]#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main(void)
{
/* Locale is set to "C" before this. This call sets it
to the "current locale" by reading environment variables: */
setlocale(LC_ALL, "");
const struct lconv * const currentlocale = localeconv();
printf("In the current locale, the default currency symbol is: %s\n",
currentlocale->currency_symbol);
return EXIT_SUCCESS;
}
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Спецификация ISO/IEC 9899:1999 (PDF) . п. 204, § 7.11 Локализация .
- ^ Прата, Стивен (2004). C праймер плюс . Издательство Самс. Приложение B, раздел V: Стандартная библиотека ANSI C с дополнениями C99. ISBN 0-672-32696-5 .
- ^ «ИСО/МЭК 9899:201x» (PDF) . 12 апреля 2011 г. с. 181. Архивировано из оригинала (PDF) 29 марта 2018 года.
- ^ "locale.h" . utas.edu.au. инфосис. Архивировано из оригинала 4 июня 2012 года . Проверено 14 сентября 2011 г.
- ^ «openbsd/src» . Гитхаб . Проверено 9 апреля 2018 г.
- ^ «Стандартный локаль C и стандартные локали C++» . Rogue Wave Software, Inc., 1996. Архивировано из оригинала 19 февраля 2020 года . Проверено 10 ноября 2011 г.