Mercurial > projects > ldc
comparison tango/tango/text/locale/Locale.d @ 132:1700239cab2e trunk
[svn r136] MAJOR UNSTABLE UPDATE!!!
Initial commit after moving to Tango instead of Phobos.
Lots of bugfixes...
This build is not suitable for most things.
author | lindquist |
---|---|
date | Fri, 11 Jan 2008 17:57:40 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
131:5825d48b27d1 | 132:1700239cab2e |
---|---|
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, char format='d') | |
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 } |