Defined in locale.h, the setlocale() function selects the appropriate locale as specified by the category and locale arguments.
char *setlocale(int category, const char *locale);
Use the setlocale() function to change or query part or all of the current locale. The effect of the category argument for each value is:
Affects the behavior of strcoll().
Affects the behavior of the character handling functions.
Affects the monetary formatting information returned by localeconv().
Affects the decimal-point character for the formatted input/output functions and the string conversion functions and the numeric formatting information returned by localeconv().
Can affect the behavior of strftime(). For currently supported locales, the option has no effect.
Affects all locale categories. This is the bitwise OR of all the locale categories.
A value of "C" for locale specifies the minimal environment for C translation. An empty string, "", for locale specifies the implementation-defined native environment. At program startup, the equivalent of setlocale(LC_ALL, "C") is executed.
Valid locale values depend on which __use_X_ctype symbols are imported (__use_iso8859_ctype, __use_sjis_ctype, __use_utf8_ctype), and on user-defined locales.
If a pointer to a string is given for locale and the selection is valid, the string associated with the specified category for the new locale is returned. If the selection cannot be honored, a null pointer is returned and the locale is not changed.
A null pointer for locale causes the string associated with the category for the current locale to be returned and the locale is not changed.
If category is LC_ALL and the most recent successful locale-setting call uses a category other than LC_ALL, a composite string might be returned. The string returned when used in a subsequent call with its associated category restores that part of the program locale. The string returned is not modified by the program, but might be overwritten by a subsequent call to setlocale().