mirror of
https://github.com/autc04/Retro68.git
synced 2024-11-30 19:53:46 +00:00
436 lines
16 KiB
HTML
436 lines
16 KiB
HTML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 8. Localization</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="strings.html" title="Chapter 7. Strings" /><link rel="next" href="facets.html" title="Facets" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8.
|
||
Localization
|
||
|
||
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="strings.html">Prev</a> </td><th width="60%" align="center">Part II.
|
||
Standard Contents
|
||
</th><td width="20%" align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.localization"></a>Chapter 8.
|
||
Localization
|
||
<a id="idm269891625280" class="indexterm"></a>
|
||
</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idm269891548288">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.locales"></a>Locales</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.locales.locale"></a>locale</h3></div></div></div><p>
|
||
Describes the basic locale object, including nested
|
||
classes id, facet, and the reference-counted implementation object,
|
||
class _Impl.
|
||
</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.req"></a>Requirements</h4></div></div></div><p>
|
||
Class locale is non-templatized and has two distinct types nested
|
||
inside of it:
|
||
</p><div class="blockquote"><blockquote class="blockquote"><p>
|
||
<span class="emphasis"><em>
|
||
class facet
|
||
22.1.1.1.2 Class locale::facet
|
||
</em></span>
|
||
</p></blockquote></div><p>
|
||
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.
|
||
</p><p>
|
||
Literally, a facet is strictly defined:
|
||
</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
|
||
Containing the following public data member:
|
||
</p><p>
|
||
<code class="code">static locale::id id;</code>
|
||
</p></li><li class="listitem"><p>
|
||
Derived from another facet:
|
||
</p><p>
|
||
<code class="code">class gnu_codecvt: public std::ctype<user-defined-type></code>
|
||
</p></li></ul></div><p>
|
||
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.
|
||
</p><div class="blockquote"><blockquote class="blockquote"><p>
|
||
<span class="emphasis"><em>
|
||
class id
|
||
22.1.1.1.3 - Class locale::id
|
||
</em></span>
|
||
</p></blockquote></div><p>
|
||
Provides an index for looking up specific facets.
|
||
</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.design"></a>Design</h4></div></div></div><p>
|
||
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.)
|
||
</p><p>
|
||
Because C and earlier versions of POSIX fall down so completely,
|
||
portability is an issue.
|
||
</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="locale.impl.c"></a>Interacting with "C" locales</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
|
||
<code class="code">`locale -a`</code> displays available locales.
|
||
</p><div class="blockquote"><blockquote class="blockquote"><pre class="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
|
||
</pre></blockquote></div></li><li class="listitem"><p>
|
||
<code class="code">`locale`</code> displays environmental variables that
|
||
impact how locale("") will be deduced.
|
||
</p><div class="blockquote"><blockquote class="blockquote"><pre class="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=
|
||
</pre></blockquote></div></li></ul></div><p>
|
||
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:
|
||
</p><pre class="programlisting">std::locale::global(std::locale(""));</pre><p>affects the C functions as if the following call was made:</p><pre class="programlisting">std::setlocale(LC_ALL, "");</pre><p>
|
||
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.
|
||
</p></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
|
||
Locale initialization: at what point does _S_classic, _S_global
|
||
get initialized? Can named locales assume this initialization
|
||
has already taken place?
|
||
</p></li><li class="listitem"><p>
|
||
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?
|
||
</p></li><li class="listitem"><p>
|
||
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").
|
||
</p></li><li class="listitem"><p>
|
||
What should non-required facet instantiations do? If the
|
||
generic implementation is provided, then how to end-users
|
||
provide specializations?
|
||
</p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269891582432"></a><p><span class="citetitle"><em class="citetitle">
|
||
The GNU C Library
|
||
</em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">
|
||
Chapters 6 Character Set Handling and 7 Locales and
|
||
Internationalization
|
||
. </span></p></div><div class="biblioentry"><a id="idm269891577664"></a><p><span class="citetitle"><em class="citetitle">
|
||
Correspondence
|
||
</em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idm269891574576"></a><p><span class="citetitle"><em class="citetitle">
|
||
ISO/IEC 14882:1998 Programming languages - C++
|
||
</em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269891572288"></a><p><span class="citetitle"><em class="citetitle">
|
||
ISO/IEC 9899:1999 Programming languages - C
|
||
</em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269891570016"></a><p><span class="title"><em>
|
||
<a class="link" href="http://www.opengroup.org/austin/" target="_top">
|
||
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
|
||
</a>
|
||
</em>. </span><span class="copyright">Copyright © 2008
|
||
The Open Group/The Institute of Electrical and Electronics
|
||
Engineers, Inc.
|
||
. </span></p></div><div class="biblioentry"><a id="idm269891566784"></a><p><span class="citetitle"><em class="citetitle">
|
||
The C++ Programming Language, Special Edition
|
||
</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
|
||
Addison Wesley
|
||
. </span></span></p></div><div class="biblioentry"><a id="idm269891562160"></a><p><span class="citetitle"><em class="citetitle">
|
||
Standard C++ IOStreams and Locales
|
||
</em>. </span><span class="subtitle">
|
||
Advanced Programmer's Guide and Reference
|
||
. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
|
||
Addison Wesley Longman
|
||
. </span></span></p></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="strings.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="std_contents.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 7.
|
||
Strings
|
||
|
||
</td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Facets</td></tr></table></div></body></html> |