mirror of
https://github.com/autc04/Retro68.git
synced 2024-11-30 19:53:46 +00:00
616 lines
10 KiB
XML
616 lines
10 KiB
XML
<section xmlns="http://docbook.org/ns/docbook" version="5.0"
|
|
xml:id="std.localization.locales.locale" xreflabel="Locale">
|
|
|
|
<info><title>locale</title>
|
|
<keywordset>
|
|
<keyword>ISO C++</keyword>
|
|
<keyword>locale</keyword>
|
|
</keywordset>
|
|
</info>
|
|
|
|
|
|
|
|
<para>
|
|
Describes the basic locale object, including nested
|
|
classes id, facet, and the reference-counted implementation object,
|
|
class _Impl.
|
|
</para>
|
|
|
|
<section xml:id="locales.locale.req"><info><title>Requirements</title></info>
|
|
|
|
|
|
<para>
|
|
Class locale is non-templatized and has two distinct types nested
|
|
inside of it:
|
|
</para>
|
|
|
|
<blockquote>
|
|
<para>
|
|
<emphasis>
|
|
class facet
|
|
22.1.1.1.2 Class locale::facet
|
|
</emphasis>
|
|
</para>
|
|
</blockquote>
|
|
|
|
<para>
|
|
Facets actually implement locale functionality. For instance, a facet
|
|
called numpunct is the data object that can be used to query for the
|
|
thousands separator in the locale.
|
|
</para>
|
|
|
|
<para>
|
|
Literally, a facet is strictly defined:
|
|
</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
Containing the following public data member:
|
|
</para>
|
|
<para>
|
|
<code>static locale::id id;</code>
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
Derived from another facet:
|
|
</para>
|
|
<para>
|
|
<code>class gnu_codecvt: public std::ctype<user-defined-type></code>
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>
|
|
Of interest in this class are the memory management options explicitly
|
|
specified as an argument to facet's constructor. Each constructor of a
|
|
facet class takes a std::size_t __refs argument: if __refs == 0, the
|
|
facet is deleted when the locale containing it is destroyed. If __refs
|
|
== 1, the facet is not destroyed, even when it is no longer
|
|
referenced.
|
|
</para>
|
|
|
|
<blockquote>
|
|
<para>
|
|
<emphasis>
|
|
class id
|
|
22.1.1.1.3 - Class locale::id
|
|
</emphasis>
|
|
</para>
|
|
</blockquote>
|
|
|
|
<para>
|
|
Provides an index for looking up specific facets.
|
|
</para>
|
|
</section>
|
|
|
|
<section xml:id="locales.locale.design"><info><title>Design</title></info>
|
|
|
|
|
|
<para>
|
|
The major design challenge is fitting an object-orientated and
|
|
non-global locale design on top of POSIX and other relevant standards,
|
|
which include the Single Unix (nee X/Open.)
|
|
</para>
|
|
|
|
<para>
|
|
Because C and earlier versions of POSIX fall down so completely,
|
|
portability is an issue.
|
|
</para>
|
|
|
|
</section>
|
|
|
|
<section xml:id="locales.locale.impl"><info><title>Implementation</title></info>
|
|
|
|
|
|
<section xml:id="locale.impl.c"><info><title>Interacting with "C" locales</title></info>
|
|
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
<code>locale -a</code> displays available locales.
|
|
</para>
|
|
<blockquote>
|
|
<programlisting>
|
|
af_ZA
|
|
ar_AE
|
|
ar_AE.utf8
|
|
ar_BH
|
|
ar_BH.utf8
|
|
ar_DZ
|
|
ar_DZ.utf8
|
|
ar_EG
|
|
ar_EG.utf8
|
|
ar_IN
|
|
ar_IQ
|
|
ar_IQ.utf8
|
|
ar_JO
|
|
ar_JO.utf8
|
|
ar_KW
|
|
ar_KW.utf8
|
|
ar_LB
|
|
ar_LB.utf8
|
|
ar_LY
|
|
ar_LY.utf8
|
|
ar_MA
|
|
ar_MA.utf8
|
|
ar_OM
|
|
ar_OM.utf8
|
|
ar_QA
|
|
ar_QA.utf8
|
|
ar_SA
|
|
ar_SA.utf8
|
|
ar_SD
|
|
ar_SD.utf8
|
|
ar_SY
|
|
ar_SY.utf8
|
|
ar_TN
|
|
ar_TN.utf8
|
|
ar_YE
|
|
ar_YE.utf8
|
|
be_BY
|
|
be_BY.utf8
|
|
bg_BG
|
|
bg_BG.utf8
|
|
br_FR
|
|
bs_BA
|
|
C
|
|
ca_ES
|
|
ca_ES@euro
|
|
ca_ES.utf8
|
|
ca_ES.utf8@euro
|
|
cs_CZ
|
|
cs_CZ.utf8
|
|
cy_GB
|
|
da_DK
|
|
da_DK.iso885915
|
|
da_DK.utf8
|
|
de_AT
|
|
de_AT@euro
|
|
de_AT.utf8
|
|
de_AT.utf8@euro
|
|
de_BE
|
|
de_BE@euro
|
|
de_BE.utf8
|
|
de_BE.utf8@euro
|
|
de_CH
|
|
de_CH.utf8
|
|
de_DE
|
|
de_DE@euro
|
|
de_DE.utf8
|
|
de_DE.utf8@euro
|
|
de_LU
|
|
de_LU@euro
|
|
de_LU.utf8
|
|
de_LU.utf8@euro
|
|
el_GR
|
|
el_GR.utf8
|
|
en_AU
|
|
en_AU.utf8
|
|
en_BW
|
|
en_BW.utf8
|
|
en_CA
|
|
en_CA.utf8
|
|
en_DK
|
|
en_DK.utf8
|
|
en_GB
|
|
en_GB.iso885915
|
|
en_GB.utf8
|
|
en_HK
|
|
en_HK.utf8
|
|
en_IE
|
|
en_IE@euro
|
|
en_IE.utf8
|
|
en_IE.utf8@euro
|
|
en_IN
|
|
en_NZ
|
|
en_NZ.utf8
|
|
en_PH
|
|
en_PH.utf8
|
|
en_SG
|
|
en_SG.utf8
|
|
en_US
|
|
en_US.iso885915
|
|
en_US.utf8
|
|
en_ZA
|
|
en_ZA.utf8
|
|
en_ZW
|
|
en_ZW.utf8
|
|
es_AR
|
|
es_AR.utf8
|
|
es_BO
|
|
es_BO.utf8
|
|
es_CL
|
|
es_CL.utf8
|
|
es_CO
|
|
es_CO.utf8
|
|
es_CR
|
|
es_CR.utf8
|
|
es_DO
|
|
es_DO.utf8
|
|
es_EC
|
|
es_EC.utf8
|
|
es_ES
|
|
es_ES@euro
|
|
es_ES.utf8
|
|
es_ES.utf8@euro
|
|
es_GT
|
|
es_GT.utf8
|
|
es_HN
|
|
es_HN.utf8
|
|
es_MX
|
|
es_MX.utf8
|
|
es_NI
|
|
es_NI.utf8
|
|
es_PA
|
|
es_PA.utf8
|
|
es_PE
|
|
es_PE.utf8
|
|
es_PR
|
|
es_PR.utf8
|
|
es_PY
|
|
es_PY.utf8
|
|
es_SV
|
|
es_SV.utf8
|
|
es_US
|
|
es_US.utf8
|
|
es_UY
|
|
es_UY.utf8
|
|
es_VE
|
|
es_VE.utf8
|
|
et_EE
|
|
et_EE.utf8
|
|
eu_ES
|
|
eu_ES@euro
|
|
eu_ES.utf8
|
|
eu_ES.utf8@euro
|
|
fa_IR
|
|
fi_FI
|
|
fi_FI@euro
|
|
fi_FI.utf8
|
|
fi_FI.utf8@euro
|
|
fo_FO
|
|
fo_FO.utf8
|
|
fr_BE
|
|
fr_BE@euro
|
|
fr_BE.utf8
|
|
fr_BE.utf8@euro
|
|
fr_CA
|
|
fr_CA.utf8
|
|
fr_CH
|
|
fr_CH.utf8
|
|
fr_FR
|
|
fr_FR@euro
|
|
fr_FR.utf8
|
|
fr_FR.utf8@euro
|
|
fr_LU
|
|
fr_LU@euro
|
|
fr_LU.utf8
|
|
fr_LU.utf8@euro
|
|
ga_IE
|
|
ga_IE@euro
|
|
ga_IE.utf8
|
|
ga_IE.utf8@euro
|
|
gl_ES
|
|
gl_ES@euro
|
|
gl_ES.utf8
|
|
gl_ES.utf8@euro
|
|
gv_GB
|
|
gv_GB.utf8
|
|
he_IL
|
|
he_IL.utf8
|
|
hi_IN
|
|
hr_HR
|
|
hr_HR.utf8
|
|
hu_HU
|
|
hu_HU.utf8
|
|
id_ID
|
|
id_ID.utf8
|
|
is_IS
|
|
is_IS.utf8
|
|
it_CH
|
|
it_CH.utf8
|
|
it_IT
|
|
it_IT@euro
|
|
it_IT.utf8
|
|
it_IT.utf8@euro
|
|
iw_IL
|
|
iw_IL.utf8
|
|
ja_JP.eucjp
|
|
ja_JP.utf8
|
|
ka_GE
|
|
kl_GL
|
|
kl_GL.utf8
|
|
ko_KR.euckr
|
|
ko_KR.utf8
|
|
kw_GB
|
|
kw_GB.utf8
|
|
lt_LT
|
|
lt_LT.utf8
|
|
lv_LV
|
|
lv_LV.utf8
|
|
mi_NZ
|
|
mk_MK
|
|
mk_MK.utf8
|
|
mr_IN
|
|
ms_MY
|
|
ms_MY.utf8
|
|
mt_MT
|
|
mt_MT.utf8
|
|
nl_BE
|
|
nl_BE@euro
|
|
nl_BE.utf8
|
|
nl_BE.utf8@euro
|
|
nl_NL
|
|
nl_NL@euro
|
|
nl_NL.utf8
|
|
nl_NL.utf8@euro
|
|
nn_NO
|
|
nn_NO.utf8
|
|
no_NO
|
|
no_NO.utf8
|
|
oc_FR
|
|
pl_PL
|
|
pl_PL.utf8
|
|
POSIX
|
|
pt_BR
|
|
pt_BR.utf8
|
|
pt_PT
|
|
pt_PT@euro
|
|
pt_PT.utf8
|
|
pt_PT.utf8@euro
|
|
ro_RO
|
|
ro_RO.utf8
|
|
ru_RU
|
|
ru_RU.koi8r
|
|
ru_RU.utf8
|
|
ru_UA
|
|
ru_UA.utf8
|
|
se_NO
|
|
sk_SK
|
|
sk_SK.utf8
|
|
sl_SI
|
|
sl_SI.utf8
|
|
sq_AL
|
|
sq_AL.utf8
|
|
sr_YU
|
|
sr_YU@cyrillic
|
|
sr_YU.utf8
|
|
sr_YU.utf8@cyrillic
|
|
sv_FI
|
|
sv_FI@euro
|
|
sv_FI.utf8
|
|
sv_FI.utf8@euro
|
|
sv_SE
|
|
sv_SE.iso885915
|
|
sv_SE.utf8
|
|
ta_IN
|
|
te_IN
|
|
tg_TJ
|
|
th_TH
|
|
th_TH.utf8
|
|
tl_PH
|
|
tr_TR
|
|
tr_TR.utf8
|
|
uk_UA
|
|
uk_UA.utf8
|
|
ur_PK
|
|
uz_UZ
|
|
vi_VN
|
|
vi_VN.tcvn
|
|
wa_BE
|
|
wa_BE@euro
|
|
yi_US
|
|
zh_CN
|
|
zh_CN.gb18030
|
|
zh_CN.gbk
|
|
zh_CN.utf8
|
|
zh_HK
|
|
zh_HK.utf8
|
|
zh_TW
|
|
zh_TW.euctw
|
|
zh_TW.utf8
|
|
</programlisting>
|
|
</blockquote>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
<code>`locale`</code> displays environmental variables that
|
|
impact how locale("") will be deduced.
|
|
</para>
|
|
<blockquote>
|
|
<programlisting>
|
|
LANG=en_US
|
|
LC_CTYPE="en_US"
|
|
LC_NUMERIC="en_US"
|
|
LC_TIME="en_US"
|
|
LC_COLLATE="en_US"
|
|
LC_MONETARY="en_US"
|
|
LC_MESSAGES="en_US"
|
|
LC_PAPER="en_US"
|
|
LC_NAME="en_US"
|
|
LC_ADDRESS="en_US"
|
|
LC_TELEPHONE="en_US"
|
|
LC_MEASUREMENT="en_US"
|
|
LC_IDENTIFICATION="en_US"
|
|
LC_ALL=
|
|
</programlisting>
|
|
</blockquote>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>
|
|
From Josuttis, p. 697-698, which says, that "there is only *one*
|
|
relation (of the C++ locale mechanism) to the C locale mechanism: the
|
|
global C locale is modified if a named C++ locale object is set as the
|
|
global locale" (emphasis Paolo), that is:
|
|
</para>
|
|
|
|
<programlisting>std::locale::global(std::locale(""));</programlisting>
|
|
|
|
<para>affects the C functions as if the following call was made:</para>
|
|
|
|
<programlisting>std::setlocale(LC_ALL, "");</programlisting>
|
|
|
|
<para>
|
|
On the other hand, there is *no* vice versa, that is, calling
|
|
setlocale has *no* whatsoever on the C++ locale mechanism, in
|
|
particular on the working of locale(""), which constructs the locale
|
|
object from the environment of the running program, that is, in
|
|
practice, the set of LC_ALL, LANG, etc. variable of the shell.
|
|
</para>
|
|
|
|
</section>
|
|
</section>
|
|
|
|
<section xml:id="locales.locale.future"><info><title>Future</title></info>
|
|
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
Locale initialization: at what point does _S_classic, _S_global
|
|
get initialized? Can named locales assume this initialization
|
|
has already taken place?
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
Document how named locales error check when filling data
|
|
members. I.e., a fr_FR locale that doesn't have
|
|
numpunct::truename(): does it use "true"? Or is it a blank
|
|
string? What's the convention?
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
Explain how locale aliasing happens. When does "de_DE" use "de"
|
|
information? What is the rule for locales composed of just an
|
|
ISO language code (say, "de") and locales with both an ISO
|
|
language code and ISO country code (say, "de_DE").
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
What should non-required facet instantiations do? If the
|
|
generic implementation is provided, then how to end-users
|
|
provide specializations?
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</section>
|
|
|
|
<bibliography xml:id="locales.locale.biblio"><info><title>Bibliography</title></info>
|
|
|
|
|
|
<biblioentry>
|
|
<citetitle>
|
|
The GNU C Library
|
|
</citetitle>
|
|
<author><personname><surname>McGrath</surname><firstname>Roland</firstname></personname></author>
|
|
<author><personname><surname>Drepper</surname><firstname>Ulrich</firstname></personname></author>
|
|
<copyright>
|
|
<year>2007</year>
|
|
<holder>FSF</holder>
|
|
</copyright>
|
|
<pagenums>
|
|
Chapters 6 Character Set Handling and 7 Locales and
|
|
Internationalization
|
|
</pagenums>
|
|
</biblioentry>
|
|
|
|
<biblioentry>
|
|
<citetitle>
|
|
Correspondence
|
|
</citetitle>
|
|
<author><personname><surname>Drepper</surname><firstname>Ulrich</firstname></personname></author>
|
|
<copyright>
|
|
<year>2002</year>
|
|
<holder/>
|
|
</copyright>
|
|
</biblioentry>
|
|
|
|
<biblioentry>
|
|
<citetitle>
|
|
ISO/IEC 14882:1998 Programming languages - C++
|
|
</citetitle>
|
|
<copyright>
|
|
<year>1998</year>
|
|
<holder>ISO</holder>
|
|
</copyright>
|
|
</biblioentry>
|
|
|
|
<biblioentry>
|
|
<citetitle>
|
|
ISO/IEC 9899:1999 Programming languages - C
|
|
</citetitle>
|
|
<copyright>
|
|
<year>1999</year>
|
|
<holder>ISO</holder>
|
|
</copyright>
|
|
</biblioentry>
|
|
|
|
<biblioentry>
|
|
<title>
|
|
<link xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
xlink:href="http://pubs.opengroup.org/onlinepubs/9699919799/">
|
|
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
|
|
</link>
|
|
</title>
|
|
<copyright>
|
|
<year>2008</year>
|
|
<holder>
|
|
The Open Group/The Institute of Electrical and Electronics
|
|
Engineers, Inc.
|
|
</holder>
|
|
</copyright>
|
|
</biblioentry>
|
|
|
|
<biblioentry>
|
|
<citetitle>
|
|
The C++ Programming Language, Special Edition
|
|
</citetitle>
|
|
<author><personname><surname>Stroustrup</surname><firstname>Bjarne</firstname></personname></author>
|
|
<copyright>
|
|
<year>2000</year>
|
|
<holder>Addison Wesley, Inc.</holder>
|
|
</copyright>
|
|
<pagenums>Appendix D</pagenums>
|
|
<publisher>
|
|
<publishername>
|
|
Addison Wesley
|
|
</publishername>
|
|
</publisher>
|
|
</biblioentry>
|
|
|
|
<biblioentry>
|
|
<citetitle>
|
|
Standard C++ IOStreams and Locales
|
|
</citetitle>
|
|
<subtitle>
|
|
Advanced Programmer's Guide and Reference
|
|
</subtitle>
|
|
<author><personname><surname>Langer</surname><firstname>Angelika</firstname></personname></author>
|
|
<author><personname><surname>Kreft</surname><firstname>Klaus</firstname></personname></author>
|
|
<copyright>
|
|
<year>2000</year>
|
|
<holder>Addison Wesley Longman, Inc.</holder>
|
|
</copyright>
|
|
<publisher>
|
|
<publishername>
|
|
Addison Wesley Longman
|
|
</publishername>
|
|
</publisher>
|
|
</biblioentry>
|
|
|
|
</bibliography>
|
|
|
|
</section>
|