root/trunk/lib/SGL/Locale.php

Revision 4374, 5.2 kB (checked in by demian, 4 years ago)

bloody ampersands, die now -3

Line 
1 <?php
2 /* Reminder: always indent with 4 spaces (no tabs). */
3 // +---------------------------------------------------------------------------+
4 // | Copyright (c) 2006, Jacob Singh                                        |
5 // | All rights reserved.                                                      |
6 // |                                                                           |
7 // | Redistribution and use in source and binary forms, with or without        |
8 // | modification, are permitted provided that the following conditions        |
9 // | are met:                                                                  |
10 // |                                                                           |
11 // | o Redistributions of source code must retain the above copyright          |
12 // |   notice, this list of conditions and the following disclaimer.           |
13 // | o Redistributions in binary form must reproduce the above copyright       |
14 // |   notice, this list of conditions and the following disclaimer in the     |
15 // |   documentation and/or other materials provided with the distribution.    |
16 // | o The names of the authors may not be used to endorse or promote          |
17 // |   products derived from this software without specific prior written      |
18 // |   permission.                                                             |
19 // |                                                                           |
20 // | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS       |
21 // | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT         |
22 // | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR     |
23 // | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT      |
24 // | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,     |
25 // | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT          |
26 // | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,     |
27 // | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY     |
28 // | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT       |
29 // | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE     |
30 // | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.      |
31 // |                                                                           |
32 // +---------------------------------------------------------------------------+
33 // | Seagull 1.0                                                               |
34 // +---------------------------------------------------------------------------+
35 // | Locale.php                                                                |
36 // +---------------------------------------------------------------------------+
37 // | Author:   Jacob Singh <jacob@calabashmusic.com>                           |
38 // +---------------------------------------------------------------------------+
39
40 require_once 'I18Nv2.php';
41
42 /**
43  * Wraps PEAR locale package.
44  *
45  * @package SGL
46  * @author  Jacob Singh <jacob@calabashmusic.com>
47  * @version $Revision: 1.6 $
48  */
49 class SGL_Locale
50 {
51     /**
52      * Negotiates the locale from HTTP if necessary.  Gets it from _SESSION and database otherwise.
53      *
54      *   usage:
55      *
56      *   $locale = SGL_Locale::singleton();
57      *   // setting locale here would override defaults.
58      *
59      *   echo $locale->formatCurrency(2000,I18Nv2_CURRENCY_LOCAL);
60      *   echo $locale->formatDate(time());
61      *
62      * @param string $locale Overrides getting the locale from session/usr
63      * @return I18Nv2 Returns a single instance of I18Nv2
64      */
65     function singleton($newLocale = false)
66     {
67         SGL::logMessage(null, PEAR_LOG_DEBUG);
68
69         static $locale;
70         if (!isset($locale)) {
71             if ($newLocale) {
72                 $locale = I18Nv2::createLocale($newLocale);
73             } else {
74                 //  Get the language shortcode from the session
75                 $langCode = SGL::getCurrentLang();
76
77                 $uid = SGL_Session::getUid();
78                 require_once 'I18Nv2/Negotiator.php';
79                 if ($uid && isset($langCode)) {
80                     $dbh = SGL_DB::singleton();
81                     $c = SGL_Config::singleton();
82                     $conf = $c->getAll();
83
84                     $country = $dbh->getOne("SELECT country FROM {$conf['table']['user']} WHERE usr_id = ".$uid);
85                     $country = strtoupper($country);
86
87                     if (!$country) {
88                         $neg = new I18Nv2_Negotiator();
89                         $country = $neg->getCountryMatch($langCode);
90                     }
91                     $localeId = empty($country) ? $langCode : $langCode . "_" . $country;
92
93                 } else {
94                     $neg = new I18Nv2_Negotiator();
95                     $localeId = $neg->getLocaleMatch();
96                 }
97                 $locale = I18Nv2::createLocale($localeId);
98             }
99         }
100         return $locale;
101     }
102
103     function setTimeZone($tzone)
104     {
105         setlocale(LC_TIME, $tzone);
106         @putenv('TZ=' . $tzone);
107     }
108 }
109
110 //  if iconv extension not present, at least fail silently
111 if (!(function_exists('iconv'))) {
112     function iconv($in_charset, $out_charset, $string)
113     {
114         return $string;
115     }
116 }
117 ?>
Note: See TracBrowser for help on using the browser.