C функции локализации - C localization functions

В вычисление, C функции локализации являются группой функций в Язык программирования C реализация базовых процедур локализации.[1][2] Эти функции используются в многоязычных программах для адаптации к конкретному языку. В частности, можно изменить способ отображения чисел и валюты. Эти настройки влияют на поведение функции ввода / вывода в стандартной библиотеке C.[3]

Обзор функций

Функции и типы локализации C определены в locale.h (Clocale заголовок в C ++).[4][5]

ФункцияОписание
setlocaleустанавливает и получает текущую локаль C
localeconvвозвращает сведения о числовом и денежном форматировании для текущего языкового стандарта

Критика

Стандартные функции локализации C подвергаются критике, потому что состояние локализации хранится глобально. Это означает, что в данной программе все операции, связанные с локалью, могут одновременно использовать только одну локаль. В результате очень сложно реализовать программы, использующие более одной локали.[6]

Эти функции изменяют поведение printf / scanf / strtod, которые часто используются для записи сохраненных данных в файл или в другие программы. В результате файл, сохраненный в одной локали, не будет читаться в другой локали или не будет читаться. вообще из-за таких предположений, как «числа заканчиваются символами запятой». Большинство крупномасштабных программ принудительно устанавливают языковой стандарт на «C» (или другое фиксированное значение), чтобы обойти эти проблемы.

Пример

#включают <stdio.h>#включают <stdlib.h>#включают <locale.h>int главный(пустота){    / * Перед этим установлен языковой стандарт "C". Этот звонок устанавливает это       к «текущему языку», прочитав переменные среды: * /    setlocale(LC_ALL, "");    const структура lconv * const currentlocale = localeconv();    printf("В текущем языковом стандарте символ валюты по умолчанию:% s",        currentlocale->символ валюты);    возвращаться EXIT_SUCCESS;}

Смотрите также

Рекомендации

  1. ^ ISO / IEC 9899: 1999 спецификация (PDF). п. 204, § 7.11 Локализация.
  2. ^ Прата, Стивен (2004). C праймер плюс. Самс Паблишинг. Приложение B, раздел V: Стандартная библиотека ANSI C с дополнениями C99. ISBN  0-672-32696-5.
  3. ^ «ISO / IEC 9899: 201x» (PDF). 12 апреля 2011. с. 181. Архивировано с оригинал (PDF) 29 марта 2018 г.
  4. ^ "locale.h". utas.edu.au. информация. Получено 14 сентября 2011.
  5. ^ "openbsd / src". GitHub. Получено 9 апреля 2018.
  6. ^ «Стандартный языковой стандарт C и стандартные языковые стандарты C ++». Rogue Wave Software, Inc. 1996 г.