Quick Search:

View

Revision:

Diff

Diff from 1 to:

Annotations

Annotate by Age | Author | Mixed | None
/fisheye/browse/osCommerce/branches/hpdl/oscommerce/includes/classes/language.php

Annotated File View

hpdl
1
1 <?php
2 /*
3   $Id: language.php,v 1.10 2004/11/29 00:07:21 hpdl Exp $
4
5   osCommerce, Open Source E-Commerce Solutions
6   http://www.oscommerce.com
7
8   Copyright (c) 2004 osCommerce
9
10   Released under the GNU General Public License
11 */
12
13   class osC_Language {
14
15 /* Public variables */
16
17     var $language;
18
19 /* Private variables */
20     var $_languages = array();
21
22 /* Class constructor */
23
24     function osC_Language() {
25       global $osC_Database, $osC_Session;
26
27       $Qlanguages = $osC_Database->query('select * from :table_languages order by sort_order, name');
28       $Qlanguages->bindTable(':table_languages', TABLE_LANGUAGES);
29       $Qlanguages->setCache('languages');
30       $Qlanguages->execute();
31
32       while ($Qlanguages->next()) {
33         $this->_languages[$Qlanguages->value('code')] = array('id' => $Qlanguages->valueInt('languages_id'),
34                                                               'name' => $Qlanguages->value('name'),
35                                                               'code' => $Qlanguages->value('code'),
36                                                               'image' => $Qlanguages->value('image'),
37                                                               'directory' => $Qlanguages->value('directory'));
38       }
39
40       $Qlanguages->freeResult();
41
42       if ($osC_Session->exists('language')) {
43         $this->set();
44       } else {
45         $this->setToBrowser();
46       }
47     }
48
49 /* Public methods */
50
51     function set($language = '') {
52       if (PHP_VERSION < 4.1) {
53         global $_COOKIE;
54       }
55
56       global $osC_Session;
57
58       if (empty($language) && $osC_Session->exists('language')) {
59         foreach ($this->_languages as $l) {
60           if ($l['directory'] == $osC_Session->value('language')) {
61             $language = $l['code'];
62             break;
63           }
64         }
65       }
66
67       if (empty($language) || ($this->exists($language) === false)) {
68         $language = DEFAULT_LANGUAGE;
69       }
70
71       $this->language = $this->get($language);
72
73       if (!isset($_COOKIE['language']) || (isset($_COOKIE['language']) && ($_COOKIE['language'] != $this->language['code']))) {
74         tep_setcookie('language', $this->language['code'], time()+60*60*24*90);
75       }
76
77       if (($osC_Session->exists('language') === false) || ($osC_Session->exists('language') && ($osC_Session->value('language') != $this->language['directory']))) {
78         $osC_Session->set('language', $this->language['directory']);
79         $osC_Session->set('languages_id', $this->language['id']);
80       }
81     }
82
83     function setToBrowser() {
84       if (PHP_VERSION < 4.1) {
85         global $_COOKIE, $_SERVER;
86       }
87
88       if (isset($_COOKIE['language'])) {
89         if ($this->exists($_COOKIE['language'])) {
90           $this->set($_COOKIE['language']);
91
92           return true;
93         }
94       }
95
96       $http_accept_language = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
97
98       $browser_languages = array('ar' => 'ar([-_][[:alpha:]]{2})?|arabic',
99                                  'bg' => 'bg|bulgarian',
100                                  'br' => 'pt[-_]br|brazilian portuguese',
101                                  'ca' => 'ca|catalan',
102                                  'cs' => 'cs|czech',
103                                  'da' => 'da|danish',
104                                  'de' => 'de([-_][[:alpha:]]{2})?|german',
105                                  'el' => 'el|greek',
106                                  'en' => 'en([-_][[:alpha:]]{2})?|english',
107                                  'es' => 'es([-_][[:alpha:]]{2})?|spanish',
108                                  'et' => 'et|estonian',
109                                  'fi' => 'fi|finnish',
110                                  'fr' => 'fr([-_][[:alpha:]]{2})?|french',
111                                  'gl' => 'gl|galician',
112                                  'he' => 'he|hebrew',
113                                  'hu' => 'hu|hungarian',
114                                  'id' => 'id|indonesian',
115                                  'it' => 'it|italian',
116                                  'ja' => 'ja|japanese',
117                                  'ko' => 'ko|korean',
118                                  'ka' => 'ka|georgian',
119                                  'lt' => 'lt|lithuanian',
120                                  'lv' => 'lv|latvian',
121                                  'nl' => 'nl([-_][[:alpha:]]{2})?|dutch',
122                                  'no' => 'no|norwegian',
123                                  'pl' => 'pl|polish',
124                                  'pt' => 'pt([-_][[:alpha:]]{2})?|portuguese',
125                                  'ro' => 'ro|romanian',
126                                  'ru' => 'ru|russian',
127                                  'sk' => 'sk|slovak',
128                                  'sr' => 'sr|serbian',
129                                  'sv' => 'sv|swedish',
130                                  'th' => 'th|thai',
131                                  'tr' => 'tr|turkish',
132                                  'uk' => 'uk|ukrainian',
133                                  'tw' => 'zh[-_]tw|chinese traditional',
134                                  'zh' => 'zh|chinese simplified');
135
136       foreach ($http_accept_language as $browser_language) {
137         foreach ($browser_languages as $key => $value) {
138           if (eregi('^(' . $value . ')(;q=[0-9]\\.[0-9])?$', $browser_language) && $this->exists($key)) {
139             $this->set($key);
140
141             return true;
142           }
143         }
144       }
145
146       $this->set(DEFAULT_LANGUAGE);
147     }
148
149     function get($language) {
150       return $this->_languages[$language];
151     }
152
153     function getAll() {
154       return $this->_languages;
155     }
156
157     function exists($language) {
158       if (isset($this->_languages[$language])) {
159         return true;
160       }
161
162       return false;
163     }
164   }
165 ?>