Merged revisions 208012,208018-208019,208021,208023-208030,208033,208037,208040-20804...
[official-gcc.git] / main / libstdc++-v3 / doc / html / manual / localization.html
blob19ba126bdcef20a597c8f5d11aa1770d63a6f13e
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 <!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
3 Localization
5 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="strings.html">Prev</a> </td><th width="60%" align="center">Part II. 
6 Standard Contents
7 </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
8 Localization
9 <a id="idm269891625280" class="indexterm"></a>
10 </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>
11 Describes the basic locale object, including nested
12 classes id, facet, and the reference-counted implementation object,
13 class _Impl.
14 </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.req"></a>Requirements</h4></div></div></div><p>
15 Class locale is non-templatized and has two distinct types nested
16 inside of it:
17 </p><div class="blockquote"><blockquote class="blockquote"><p>
18 <span class="emphasis"><em>
19 class facet
20 22.1.1.1.2 Class locale::facet
21 </em></span>
22 </p></blockquote></div><p>
23 Facets actually implement locale functionality. For instance, a facet
24 called numpunct is the data object that can be used to query for the
25 thousands separator in the locale.
26 </p><p>
27 Literally, a facet is strictly defined:
28 </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
29 Containing the following public data member:
30 </p><p>
31 <code class="code">static locale::id id;</code>
32 </p></li><li class="listitem"><p>
33 Derived from another facet:
34 </p><p>
35 <code class="code">class gnu_codecvt: public std::ctype&lt;user-defined-type&gt;</code>
36 </p></li></ul></div><p>
37 Of interest in this class are the memory management options explicitly
38 specified as an argument to facet's constructor. Each constructor of a
39 facet class takes a std::size_t __refs argument: if __refs == 0, the
40 facet is deleted when the locale containing it is destroyed. If __refs
41 == 1, the facet is not destroyed, even when it is no longer
42 referenced.
43 </p><div class="blockquote"><blockquote class="blockquote"><p>
44 <span class="emphasis"><em>
45 class id
46 22.1.1.1.3 - Class locale::id
47 </em></span>
48 </p></blockquote></div><p>
49 Provides an index for looking up specific facets.
50 </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>
51 The major design challenge is fitting an object-orientated and
52 non-global locale design on top of POSIX and other relevant standards,
53 which include the Single Unix (nee X/Open.)
54 </p><p>
55 Because C and earlier versions of POSIX fall down so completely,
56 portability is an issue.
57 </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>
58 <code class="code">`locale -a`</code> displays available locales.
59 </p><div class="blockquote"><blockquote class="blockquote"><pre class="programlisting">
60 af_ZA
61 ar_AE
62 ar_AE.utf8
63 ar_BH
64 ar_BH.utf8
65 ar_DZ
66 ar_DZ.utf8
67 ar_EG
68 ar_EG.utf8
69 ar_IN
70 ar_IQ
71 ar_IQ.utf8
72 ar_JO
73 ar_JO.utf8
74 ar_KW
75 ar_KW.utf8
76 ar_LB
77 ar_LB.utf8
78 ar_LY
79 ar_LY.utf8
80 ar_MA
81 ar_MA.utf8
82 ar_OM
83 ar_OM.utf8
84 ar_QA
85 ar_QA.utf8
86 ar_SA
87 ar_SA.utf8
88 ar_SD
89 ar_SD.utf8
90 ar_SY
91 ar_SY.utf8
92 ar_TN
93 ar_TN.utf8
94 ar_YE
95 ar_YE.utf8
96 be_BY
97 be_BY.utf8
98 bg_BG
99 bg_BG.utf8
100 br_FR
101 bs_BA
103 ca_ES
104 ca_ES@euro
105 ca_ES.utf8
106 ca_ES.utf8@euro
107 cs_CZ
108 cs_CZ.utf8
109 cy_GB
110 da_DK
111 da_DK.iso885915
112 da_DK.utf8
113 de_AT
114 de_AT@euro
115 de_AT.utf8
116 de_AT.utf8@euro
117 de_BE
118 de_BE@euro
119 de_BE.utf8
120 de_BE.utf8@euro
121 de_CH
122 de_CH.utf8
123 de_DE
124 de_DE@euro
125 de_DE.utf8
126 de_DE.utf8@euro
127 de_LU
128 de_LU@euro
129 de_LU.utf8
130 de_LU.utf8@euro
131 el_GR
132 el_GR.utf8
133 en_AU
134 en_AU.utf8
135 en_BW
136 en_BW.utf8
137 en_CA
138 en_CA.utf8
139 en_DK
140 en_DK.utf8
141 en_GB
142 en_GB.iso885915
143 en_GB.utf8
144 en_HK
145 en_HK.utf8
146 en_IE
147 en_IE@euro
148 en_IE.utf8
149 en_IE.utf8@euro
150 en_IN
151 en_NZ
152 en_NZ.utf8
153 en_PH
154 en_PH.utf8
155 en_SG
156 en_SG.utf8
157 en_US
158 en_US.iso885915
159 en_US.utf8
160 en_ZA
161 en_ZA.utf8
162 en_ZW
163 en_ZW.utf8
164 es_AR
165 es_AR.utf8
166 es_BO
167 es_BO.utf8
168 es_CL
169 es_CL.utf8
170 es_CO
171 es_CO.utf8
172 es_CR
173 es_CR.utf8
174 es_DO
175 es_DO.utf8
176 es_EC
177 es_EC.utf8
178 es_ES
179 es_ES@euro
180 es_ES.utf8
181 es_ES.utf8@euro
182 es_GT
183 es_GT.utf8
184 es_HN
185 es_HN.utf8
186 es_MX
187 es_MX.utf8
188 es_NI
189 es_NI.utf8
190 es_PA
191 es_PA.utf8
192 es_PE
193 es_PE.utf8
194 es_PR
195 es_PR.utf8
196 es_PY
197 es_PY.utf8
198 es_SV
199 es_SV.utf8
200 es_US
201 es_US.utf8
202 es_UY
203 es_UY.utf8
204 es_VE
205 es_VE.utf8
206 et_EE
207 et_EE.utf8
208 eu_ES
209 eu_ES@euro
210 eu_ES.utf8
211 eu_ES.utf8@euro
212 fa_IR
213 fi_FI
214 fi_FI@euro
215 fi_FI.utf8
216 fi_FI.utf8@euro
217 fo_FO
218 fo_FO.utf8
219 fr_BE
220 fr_BE@euro
221 fr_BE.utf8
222 fr_BE.utf8@euro
223 fr_CA
224 fr_CA.utf8
225 fr_CH
226 fr_CH.utf8
227 fr_FR
228 fr_FR@euro
229 fr_FR.utf8
230 fr_FR.utf8@euro
231 fr_LU
232 fr_LU@euro
233 fr_LU.utf8
234 fr_LU.utf8@euro
235 ga_IE
236 ga_IE@euro
237 ga_IE.utf8
238 ga_IE.utf8@euro
239 gl_ES
240 gl_ES@euro
241 gl_ES.utf8
242 gl_ES.utf8@euro
243 gv_GB
244 gv_GB.utf8
245 he_IL
246 he_IL.utf8
247 hi_IN
248 hr_HR
249 hr_HR.utf8
250 hu_HU
251 hu_HU.utf8
252 id_ID
253 id_ID.utf8
254 is_IS
255 is_IS.utf8
256 it_CH
257 it_CH.utf8
258 it_IT
259 it_IT@euro
260 it_IT.utf8
261 it_IT.utf8@euro
262 iw_IL
263 iw_IL.utf8
264 ja_JP.eucjp
265 ja_JP.utf8
266 ka_GE
267 kl_GL
268 kl_GL.utf8
269 ko_KR.euckr
270 ko_KR.utf8
271 kw_GB
272 kw_GB.utf8
273 lt_LT
274 lt_LT.utf8
275 lv_LV
276 lv_LV.utf8
277 mi_NZ
278 mk_MK
279 mk_MK.utf8
280 mr_IN
281 ms_MY
282 ms_MY.utf8
283 mt_MT
284 mt_MT.utf8
285 nl_BE
286 nl_BE@euro
287 nl_BE.utf8
288 nl_BE.utf8@euro
289 nl_NL
290 nl_NL@euro
291 nl_NL.utf8
292 nl_NL.utf8@euro
293 nn_NO
294 nn_NO.utf8
295 no_NO
296 no_NO.utf8
297 oc_FR
298 pl_PL
299 pl_PL.utf8
300 POSIX
301 pt_BR
302 pt_BR.utf8
303 pt_PT
304 pt_PT@euro
305 pt_PT.utf8
306 pt_PT.utf8@euro
307 ro_RO
308 ro_RO.utf8
309 ru_RU
310 ru_RU.koi8r
311 ru_RU.utf8
312 ru_UA
313 ru_UA.utf8
314 se_NO
315 sk_SK
316 sk_SK.utf8
317 sl_SI
318 sl_SI.utf8
319 sq_AL
320 sq_AL.utf8
321 sr_YU
322 sr_YU@cyrillic
323 sr_YU.utf8
324 sr_YU.utf8@cyrillic
325 sv_FI
326 sv_FI@euro
327 sv_FI.utf8
328 sv_FI.utf8@euro
329 sv_SE
330 sv_SE.iso885915
331 sv_SE.utf8
332 ta_IN
333 te_IN
334 tg_TJ
335 th_TH
336 th_TH.utf8
337 tl_PH
338 tr_TR
339 tr_TR.utf8
340 uk_UA
341 uk_UA.utf8
342 ur_PK
343 uz_UZ
344 vi_VN
345 vi_VN.tcvn
346 wa_BE
347 wa_BE@euro
348 yi_US
349 zh_CN
350 zh_CN.gb18030
351 zh_CN.gbk
352 zh_CN.utf8
353 zh_HK
354 zh_HK.utf8
355 zh_TW
356 zh_TW.euctw
357 zh_TW.utf8
358 </pre></blockquote></div></li><li class="listitem"><p>
359 <code class="code">`locale`</code> displays environmental variables that
360 impact how locale("") will be deduced.
361 </p><div class="blockquote"><blockquote class="blockquote"><pre class="programlisting">
362 LANG=en_US
363 LC_CTYPE="en_US"
364 LC_NUMERIC="en_US"
365 LC_TIME="en_US"
366 LC_COLLATE="en_US"
367 LC_MONETARY="en_US"
368 LC_MESSAGES="en_US"
369 LC_PAPER="en_US"
370 LC_NAME="en_US"
371 LC_ADDRESS="en_US"
372 LC_TELEPHONE="en_US"
373 LC_MEASUREMENT="en_US"
374 LC_IDENTIFICATION="en_US"
375 LC_ALL=
376 </pre></blockquote></div></li></ul></div><p>
377 From Josuttis, p. 697-698, which says, that "there is only *one*
378 relation (of the C++ locale mechanism) to the C locale mechanism: the
379 global C locale is modified if a named C++ locale object is set as the
380 global locale" (emphasis Paolo), that is:
381 </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>
382 On the other hand, there is *no* vice versa, that is, calling
383 setlocale has *no* whatsoever on the C++ locale mechanism, in
384 particular on the working of locale(""), which constructs the locale
385 object from the environment of the running program, that is, in
386 practice, the set of LC_ALL, LANG, etc. variable of the shell.
387 </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>
388 Locale initialization: at what point does _S_classic, _S_global
389 get initialized? Can named locales assume this initialization
390 has already taken place?
391 </p></li><li class="listitem"><p>
392 Document how named locales error check when filling data
393 members. I.e., a fr_FR locale that doesn't have
394 numpunct::truename(): does it use "true"? Or is it a blank
395 string? What's the convention?
396 </p></li><li class="listitem"><p>
397 Explain how locale aliasing happens. When does "de_DE" use "de"
398 information? What is the rule for locales composed of just an
399 ISO language code (say, "de") and locales with both an ISO
400 language code and ISO country code (say, "de_DE").
401 </p></li><li class="listitem"><p>
402 What should non-required facet instantiations do? If the
403 generic implementation is provided, then how to end-users
404 provide specializations?
405 </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">
406 The GNU C Library
407 </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">
408 Chapters 6 Character Set Handling and 7 Locales and
409 Internationalization
410 . </span></p></div><div class="biblioentry"><a id="idm269891577664"></a><p><span class="citetitle"><em class="citetitle">
411 Correspondence
412 </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">
413 ISO/IEC 14882:1998 Programming languages - C++
414 </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">
415 ISO/IEC 9899:1999 Programming languages - C
416 </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269891570016"></a><p><span class="title"><em>
417 <a class="link" href="http://www.opengroup.org/austin/" target="_top">
418 System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
419 </a>
420 </em>. </span><span class="copyright">Copyright © 2008
421 The Open Group/The Institute of Electrical and Electronics
422 Engineers, Inc.
423 . </span></p></div><div class="biblioentry"><a id="idm269891566784"></a><p><span class="citetitle"><em class="citetitle">
424 The C++ Programming Language, Special Edition
425 </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">
426 Addison Wesley
427 . </span></span></p></div><div class="biblioentry"><a id="idm269891562160"></a><p><span class="citetitle"><em class="citetitle">
428 Standard C++ IOStreams and Locales
429 </em>. </span><span class="subtitle">
430 Advanced Programmer's Guide and Reference
431 . </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">
432 Addison Wesley Longman
433 . </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
434 Strings
436  </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>