Download Reference Manual
The Developer's Library for D
About Wiki Forums Source Search Contact

root/trunk/tango/text/locale/Locale.d

Revision 3585, 4.3 kB (checked in by kris, 7 months ago)

need to deprecate Integer.format() in favor of a different approach. Given the name-collision issues with templates, this would require a completely different module in order to satisfy the compiler. Go figure :/

Instead of everyone changing their imports, and then changing back again (once the deprecation had expired), it seems less evil to just break the (fewer) cases where the old Style and Flags approach was used explicitly. So that's what we're doing ... the Integer.d API has changed without a deprecation period.

Can only offer humble apologies, with the promise that things won't change once we hit 1.0 (soon)

  • Property svn:mime-type set to text/x-dsrc
  • Property svn:eol-style set to native
Line 
1 /*******************************************************************************
2
3         copyright:      Copyright (c) 2007 Kris. All rights reserved
4
5         license:        BSD style: $(LICENSE)
6
7         version:        Feb 2007: Initial release
8
9         author:         Kris
10
11         This is the Tango I18N gateway, which extends the basic Layout
12         module with support for cuture- and region-specific formatting
13         of numerics, date, time, and currency.
14
15         Use as a standalone formatter in the same manner as Layout, or
16         combine with other entities such as Stdout. To enable a French
17         Stdout, do the following:
18         ---
19         Stdout.layout = new Locale (Culture.getCulture ("fr-FR"));
20         ---
21         
22         Note that Stdout is a shared entity, so every usage of it will
23         be affected by the above example. For applications supporting
24         multiple regions create multiple Locale instances instead, and
25         cache them in an appropriate manner.
26
27         In addition to region-specific currency, date and time, Locale
28         adds more sophisticated formatting option than Layout provides:
29         numeric digit placement using '#' formatting, for example, is
30         supported by Locale - along with placement of '$', '-', and '.'
31         regional-specifics.
32
33         Locale is currently utf8 only. Support for both Utf16 and utf32
34         may be enabled at a later time
35
36 ******************************************************************************/
37
38 module tango.text.locale.Locale;
39
40 private import tango.text.locale.Core,
41                tango.text.locale.Convert;
42
43 private import tango.time.Time;
44
45 private import tango.text.convert.Layout;
46
47 public  import tango.text.locale.Core : Culture;
48
49 /*******************************************************************************
50
51         Locale-enabled wrapper around tango.text.convert.Layout
52
53 *******************************************************************************/
54
55 public class Locale : Layout!(char)
56 {
57         private DateTimeFormat  dateFormat;
58         private NumberFormat    numberFormat;
59
60         /**********************************************************************
61
62         **********************************************************************/
63
64         this (IFormatService formatService = null)
65         {
66                 numberFormat = NumberFormat.getInstance (formatService);
67                 dateFormat = DateTimeFormat.getInstance (formatService);
68         }
69
70         /***********************************************************************
71
72         ***********************************************************************/
73
74         protected override char[] unknown (char[] output, char[] format, TypeInfo type, Arg p)
75         {
76                 switch (type.classinfo.name[9])
77                        {
78                             // Special case for Time.
79                        case TypeCode.STRUCT:
80                             if (type is typeid(Time))
81                                 return formatDateTime (output, *cast(Time*) p, format, dateFormat);
82
83                        return type.toString;
84
85                        default:
86                             break;
87                        }
88
89                 return "{unhandled argument type: " ~ type.toString ~ '}';
90         }
91
92         /**********************************************************************
93
94         **********************************************************************/
95
96         protected override char[] integer (char[] output, long v, char[] alt, ulong mask=ulong.max, char[] format=null)
97         {
98                 return formatInteger (output, v, alt, numberFormat);
99         }
100
101         /**********************************************************************
102
103         **********************************************************************/
104
105         protected override char[] floater (char[] output, real v, char[] format)
106         {
107                 return formatDouble (output, v, format, numberFormat);
108         }
109 }
110
111
112 /*******************************************************************************
113
114 *******************************************************************************/
115
116 debug (Locale)
117 {
118         import tango.io.Console;
119         import tango.time.WallClock;
120
121         void main ()
122         {
123                 auto layout = new Locale (Culture.getCulture ("fr-FR"));
124
125                 Cout (layout ("{:D}", WallClock.now)) ();
126         }
127 }
Note: See TracBrowser for help on using the browser.