1package I18N::Langinfo;
2
3use 5.006;
4use strict;
5use warnings;
6use Carp;
7
8require Exporter;
9require DynaLoader;
10use AutoLoader;
11
12our @ISA = qw(Exporter DynaLoader);
13
14our @EXPORT = qw(langinfo);
15
16our @EXPORT_OK = qw(
17	ABDAY_1
18	ABDAY_2
19	ABDAY_3
20	ABDAY_4
21	ABDAY_5
22	ABDAY_6
23	ABDAY_7
24	ABMON_1
25	ABMON_10
26	ABMON_11
27	ABMON_12
28	ABMON_2
29	ABMON_3
30	ABMON_4
31	ABMON_5
32	ABMON_6
33	ABMON_7
34	ABMON_8
35	ABMON_9
36	ALT_DIGITS
37	AM_STR
38	CODESET
39	CRNCYSTR
40	DAY_1
41	DAY_2
42	DAY_3
43	DAY_4
44	DAY_5
45	DAY_6
46	DAY_7
47	D_FMT
48	D_T_FMT
49	ERA
50	ERA_D_FMT
51	ERA_D_T_FMT
52	ERA_T_FMT
53	MON_1
54	MON_10
55	MON_11
56	MON_12
57	MON_2
58	MON_3
59	MON_4
60	MON_5
61	MON_6
62	MON_7
63	MON_8
64	MON_9
65	NOEXPR
66	NOSTR
67	PM_STR
68	RADIXCHAR
69	THOUSEP
70	T_FMT
71	T_FMT_AMPM
72	YESEXPR
73	YESSTR
74);
75
76our $VERSION = '0.02';
77
78sub AUTOLOAD {
79    # This AUTOLOAD is used to 'autoload' constants from the constant()
80    # XS function.
81
82    my $constname;
83    our $AUTOLOAD;
84    ($constname = $AUTOLOAD) =~ s/.*:://;
85    croak "&I18N::Langinfo::constant not defined" if $constname eq 'constant';
86    my ($error, $val) = constant($constname);
87    if ($error) { croak $error; }
88    {
89	no strict 'refs';
90	# Fixed between 5.005_53 and 5.005_61
91#XXX	if ($] >= 5.00561) {
92#XXX	    *$AUTOLOAD = sub () { $val };
93#XXX	}
94#XXX	else {
95	    *$AUTOLOAD = sub { $val };
96#XXX	}
97    }
98    goto &$AUTOLOAD;
99}
100
101bootstrap I18N::Langinfo $VERSION;
102
1031;
104__END__
105
106=head1 NAME
107
108I18N::Langinfo - query locale information
109
110=head1 SYNOPSIS
111
112  use I18N::Langinfo;
113
114=head1 DESCRIPTION
115
116The langinfo() function queries various locale information that can be
117used to localize output and user interfaces.  The langinfo() requires
118one numeric argument that identifies the locale constant to query:
119if no argument is supplied, C<$_> is used.  The numeric constants
120appropriate to be used as arguments are exportable from I18N::Langinfo.
121
122The following example will import the langinfo() function itself and
123three constants to be used as arguments to langinfo(): a constant for
124the abbreviated first day of the week (the numbering starts from
125Sunday = 1) and two more constants for the affirmative and negative
126answers for a yes/no question in the current locale.
127
128    use I18N::Langinfo qw(langinfo ABDAY_1 YESSTR NOSTR);
129
130    my ($abday_1, $yesstr, $nostr) = map { langinfo } qw(ABDAY_1 YESSTR NOSTR);
131
132    print "$abday_1? [$yesstr/$nostr] ";
133
134In other words, in the "C" (or English) locale the above will probably
135print something like:
136
137    Sun? [yes/no]
138
139but under a French locale
140
141    dim? [oui/non]
142
143The usually available constants are
144
145    ABDAY_1 ABDAY_2 ABDAY_3 ABDAY_4 ABDAY_5 ABDAY_6 ABDAY_7
146    ABMON_1 ABMON_2 ABMON_3 ABMON_4 ABMON_5 ABMON_6
147    ABMON_7 ABMON_8 ABMON_9 ABMON_10 ABMON_11 ABMON_12
148    DAY_1 DAY_2 DAY_3 DAY_4 DAY_5 DAY_6 DAY_7
149    MON_1 MON_2 MON_3 MON_4 MON_5 MON_6
150    MON_7 MON_8 MON_9 MON_10 MON_11 MON_12
151
152for abbreviated and full length days of the week and months of the year,
153
154    D_T_FMT D_FMT T_FMT
155
156for the date-time, date, and time formats used by the strftime() function
157(see L<POSIX>)
158
159    AM_STR PM_STR T_FMT_AMPM
160
161for the locales for which it makes sense to have ante meridiem and post
162meridiem time formats,
163
164    CODESET CRNCYSTR RADIXCHAR
165
166for the character code set being used (such as "ISO8859-1", "cp850",
167"koi8-r", "sjis", "utf8", etc.), for the currency string, for the
168radix character used between the integer and the fractional part
169of decimal numbers (yes, this is redundant with POSIX::localeconv())
170
171    YESSTR YESEXPR NOSTR NOEXPR
172
173for the affirmative and negative responses and expressions, and
174
175    ERA ERA_D_FMT ERA_D_T_FMT ERA_T_FMT
176
177for the Japanese Emperor eras (naturally only defined under Japanese locales).
178
179See your L<langinfo(3)> for more information about the available
180constants.  (Often this means having to look directly at the
181F<langinfo.h> C header file.)
182
183Note that unfortunately none of the above constants are guaranteed
184to be available on a particular platform.  To be on the safe side
185you can wrap the import in an eval like this:
186
187    eval {
188        require I18N::Langinfo;
189        I18N::Langinfo->import(qw(langinfo CODESET));
190        $codeset = langinfo(CODESET()); # note the ()
191    };
192    if (!$@) { ... failed ... }
193
194=head2 EXPORT
195
196Nothing is exported by default.
197
198=head1 SEE ALSO
199
200L<perllocale>, L<POSIX/localeconv>, L<POSIX/setlocale>, L<nl_langinfo(3)>.
201
202The langinfo() is just a wrapper for the C nl_langinfo() interface.
203
204=head1 AUTHOR
205
206Jarkko Hietaniemi, E<lt>jhi@hut.fiE<gt>
207
208=head1 COPYRIGHT AND LICENSE
209
210Copyright 2001 by Jarkko Hietaniemi
211
212This library is free software; you can redistribute it and/or modify
213it under the same terms as Perl itself.
214
215=cut
216