C localization functions: Difference between revisions

Content deleted Content added
m dbl redir
Rescuing 2 sources and tagging 0 as dead.) #IABot (v2.0.9.5
 
(79 intermediate revisions by 41 users not shown)
Line 1:
{{Use dmy dates|date=December 2020}}
{{lowercase}}
{{C Standard libraryLibrary}}
In [[computing]], '''locale.h''' is an [[C (programming language)|C]] programming language [[header file]], used for purposes of [[Internationalization and localization|localization]]. The header provides two key function: <code>localeconv</code> and <code>setlocale</code>. The former provides access to the current locale, while the latter allows one to set the current locale. The header also defines the [[C++ classes|struct]] <code>lconv</code>, which stores information about a given locale, including the local preference for the display of numbers and currency.
{{C Standard library}}
==Usage==
===Inclusion===
; C
<code>#include &lt;locale.h&gt;</code>
; C++
<code>#include &lt;clocale&gt;</code>
===Functions===
<code>'''struct''' lconv* localeconv('''void''');</code><br />
<code>'''char'''* setlocale('''int''', '''const char'''*);</code>
===Example===
<source lang="cpp">
#include <iostream>
#include <cstdlib>
#include <clocale>
 
In [[computing]], '''C localization functions''' are a group of functions in the [[C (programming language)|C programming language]] implementing basic localization routines.<ref name="c99">{{cite book | url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf | title=ISO/IEC 9899:1999 specification | at=p. 204, § 7.11 ''Localization'' }}</ref><ref name="c_primer">{{cite book|title=C primer plus | first=Stephen | last=Prata | year=2004 | publisher=Sams Publishing | isbn=0-672-32696-5 | at=Appendix B, Section V: The Standard ANSI C Library with C99 Additions}}</ref> The functions are used in multilingual programs to adapt to the specific locale. In particular, the way of displaying of numbers and currency can be modified. These settings affect the behaviour of [[C file input/output|input/output functions]] in the C Standard Library.<ref>{{Cite web|url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf|title=ISO/IEC 9899:201x|date=12 April 2011|page=181|archive-url=https://web.archive.org/web/20180329042731/http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf|archive-date=29 March 2018|url-status=}}</ref>
int main(int argc, char* argv[])
 
==Overview of functions==
 
C localization functions and types are defined in {{mono|locale.h}} ({{mono|clocale}} header in C++).<ref name=www.utas.edu.au>{{cite web|title=locale.h|url=http://www.utas.edu.au/infosys/info/documentation/C/CStdLib.html#locale.h|work=utas.edu.au|publisher=infosys|accessdate=14 September 2011|archive-date=4 June 2012|archive-url=https://web.archive.org/web/20120604201614/http://www.utas.edu.au/infosys/info/documentation/C/CStdLib.html#locale.h|url-status=dead}}</ref><ref>{{Cite web|url=https://github.com/openbsd/src/blob/master/include/locale.h|title=openbsd/src|website=GitHub|language=en|access-date=2018-04-09}}</ref>
 
{| class="wikitable" style="font-size:0.85em;"
! Function
! Description
|-
! style="font-family:monospace" | {{anchor|setlocale}}[http://en.cppreference.com/w/c/locale/setlocale setlocale]
| sets and gets the current C locale
|-
! style="font-family:monospace" | {{anchor|localeconv}}[http://en.cppreference.com/w/c/locale/localeconv localeconv]
| returns numeric and monetary formatting details of the current locale
|-
|}
 
==Criticism==
 
C standard localization functions are criticized because the localization state is stored globally. This means that in a given program all operations involving a locale can use only one locale at a time. As a result, it is very difficult to implement programs that use more than one locale.<ref>{{cite web | title=The Standard C Locale and the Standard C++ Locales | url=http://www.math.hkbu.edu.hk/parallel/pgi/doc/pgC++_lib/stdlibug/sta_9169.htm | publisher=Rogue Wave Software, Inc. | year=1996 | access-date=10 November 2011 | archive-date=19 February 2020 | archive-url=https://web.archive.org/web/20200219173855/http://www.math.hkbu.edu.hk/parallel/pgi/doc/pgC++_lib/stdlibug/sta_9169.htm | url-status=dead }}</ref>
 
The functions alter the behavior of printf/scanf/strtod which are often used to write saved data to a file or to other programs. The result is that a saved file in one locale will not be readable in another locale, or not be readable ''at all'' due to assumptions such as "numbers end at comma characters". Most large-scale software forces the locale to "C" (or another fixed value) to work around these problems.
 
===Example===
<syntaxhighlight lang="c">
#include <iostreamstdio.h>
#include <cstdlibstdlib.h>
<code>#include &lt;<locale.h&gt;</code>
 
int main(void)
{
/* Locale is set to "C" before this. This call sets it
lconv* currentlocale = localeconv();
to the "current locale" by reading environment variables: */
std::cout<<"In the current locale, the default currency symbol is: " << currentlocale->currency_symbol << std::endl;
setlocale(LC_ALL, "");
return 0;
 
const struct lconv * const currentlocale = localeconv();
 
std::cout<< printf("In the current locale, the default currency symbol is: %s\n" << currentlocale->currency_symbol << std::endl;,
currentlocale->currency_symbol);
 
return 0EXIT_SUCCESS;
}
</syntaxhighlight>
</source>
 
==See also==
*[[Locale (computer software)]]
 
==References==
{{Reflist}}
#[http://www.opengroup.org/onlinepubs/009695399/basedefs/locale.h.html locale.h] by [[OpenGroup]]
#[http://www.opengroup.org/onlinepubs/009695399/functions/localeconv.html localeconv] by [[OpenGroup]]
#[http://www.opengroup.org/onlinepubs/009695399/functions/setlocale.html setlocale] by [[OpenGroup]]
 
[[Category:C standard library]]
[[Category:C programming language]]
 
[[ru:Locale.h]]
[[uk:Locale.h]]