eliminate some false laziness in FS::Misc::send_email vs. msg_template/email.pm send_...
[freeside.git] / FS / FS / Locales.pm
1 package FS::Locales;
2
3 use strict;
4 use Tie::IxHash;
5
6 =head1 NAME
7
8 FS::Locales - Supported locales
9
10 =head1 SYNOPSIS
11
12   use FS::Locales;
13
14   my @locales = FS::Locales->locales;
15
16 =head1 DESCRIPTION
17
18 FS::Locales provides a list of supported locales.
19
20 =head1 CLASS METHODS
21
22 =over 4
23
24 =item locales
25
26 Returns a list of the available locales.
27
28 =cut
29
30 tie our %locales, 'Tie::IxHash',
31   'en_US', { name => 'English',        country => 'United States', },
32   'en_AU', { name => 'English',        country => 'Australia', },
33   'en_CA', { name => 'English',        country => 'Canada', },
34   'es_ES', { name => 'Spanish',        country => 'Spain', },
35   'es_AR', { name => 'Spanish',        country => 'Argentina', },
36   'es_CU', { name => 'Spanish',        country => 'Cuba', },
37   'es_MX', { name => 'Spanish',        country => 'Mexico', },
38   'es_PA', { name => 'Spanish',        country => 'Panama', },
39   'es_US', { name => 'Spanish',        country => 'United States', },
40   'fr_CA', { name => 'French',         country => 'Canada', },
41   'fr_FR', { name => 'French',         country => 'France', },
42   'fr_HT', { name => 'French',         country => 'Haiti', },
43   'ht_HT', { name => 'Haitian Creole', country => 'Haiti', },
44   'iw_IL', { name => 'Hebrew',         country => 'Israel', rtl=>1, },
45 ;
46
47 $_->{label} = $_->{name} . ' (' . $_->{country} . ')'
48   foreach values %locales;
49
50 sub locales {
51   keys %locales;
52 }
53
54 =item locale_info LOCALE
55
56 Returns a hash of information about a locale.
57
58 =cut
59
60 sub locale_info {
61   my($class, $locale) = @_;
62   if (!$locale) {
63     return ();
64   } elsif (exists $locales{$locale}) {
65     return %{ $locales{$locale} };
66   } else {
67     die "unsupported locale '$locale'\n";
68   }
69 }
70
71 =item description LOCALE
72
73 Returns "Language (Country)" for a locale.
74
75 =cut
76
77 sub description {
78   my($class, $locale) = @_;
79   $locales{$locale}->{'name'} . ' (' . $locales{$locale}->{'country'} . ')';
80 }
81
82 =back
83
84 =head1 BUGS
85
86 =head1 SEE ALSO
87
88 L<FS::Msgcat>
89
90 =cut
91
92 1;
93