Quick Search:

View

Revision:

Diff

Diff from 196 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 /*
hpdl
120
3   $Id: language.php 196 2005-09-16 12:59:17Z hpdl $
hpdl
1
4
5   osCommerce, Open Source E-Commerce Solutions
6   http://www.oscommerce.com
7
hpdl
120
8   Copyright (c) 2005 osCommerce
hpdl
1
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
hpdl
120
51     function set($lang = '') {
hpdl
1
52       global $osC_Session;
53
hpdl
120
54       if (empty($lang) && $osC_Session->exists('language')) {
hpdl
1
55         foreach ($this->_languages as $l) {
56           if ($l['directory'] == $osC_Session->value('language')) {
hpdl
120
57             $lang = $l['code'];
hpdl
1
58             break;
59           }
60         }
61       }
62
hpdl
120
63       if (empty($lang) || ($this->exists($lang) === false)) {
64         $lang = DEFAULT_LANGUAGE;
hpdl
1
65       }
66
hpdl
120
67       $this->language = $this->get($lang);
hpdl
1
68
69       if (!isset($_COOKIE['language']) || (isset($_COOKIE['language']) && ($_COOKIE['language'] != $this->language['code']))) {
70         tep_setcookie('language', $this->language['code'], time()+60*60*24*90);
71       }
72
73       if (($osC_Session->exists('language') === false) || ($osC_Session->exists('language') && ($osC_Session->value('language') != $this->language['directory']))) {
74         $osC_Session->set('language', $this->language['directory']);
75         $osC_Session->set('languages_id', $this->language['id']);
76       }
77     }
78
79     function setToBrowser() {
80       if (isset($_COOKIE['language'])) {
81         if ($this->exists($_COOKIE['language'])) {
82           $this->set($_COOKIE['language']);
83
84           return true;
85         }
86       }
87
88       $http_accept_language = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
89
90       $browser_languages = array('ar' => 'ar([-_][[:alpha:]]{2})?|arabic',
91                                  'bg' => 'bg|bulgarian',
92                                  'br' => 'pt[-_]br|brazilian portuguese',
93                                  'ca' => 'ca|catalan',
94                                  'cs' => 'cs|czech',
95                                  'da' => 'da|danish',
96                                  'de' => 'de([-_][[:alpha:]]{2})?|german',
97                                  'el' => 'el|greek',
98                                  'en' => 'en([-_][[:alpha:]]{2})?|english',
99                                  'es' => 'es([-_][[:alpha:]]{2})?|spanish',
100                                  'et' => 'et|estonian',
101                                  'fi' => 'fi|finnish',
102                                  'fr' => 'fr([-_][[:alpha:]]{2})?|french',
103                                  'gl' => 'gl|galician',
104                                  'he' => 'he|hebrew',
105                                  'hu' => 'hu|hungarian',
106                                  'id' => 'id|indonesian',
107                                  'it' => 'it|italian',
108                                  'ja' => 'ja|japanese',
109                                  'ko' => 'ko|korean',
110                                  'ka' => 'ka|georgian',
111                                  'lt' => 'lt|lithuanian',
112                                  'lv' => 'lv|latvian',
113                                  'nl' => 'nl([-_][[:alpha:]]{2})?|dutch',
114                                  'no' => 'no|norwegian',
115                                  'pl' => 'pl|polish',
116                                  'pt' => 'pt([-_][[:alpha:]]{2})?|portuguese',
117                                  'ro' => 'ro|romanian',
118                                  'ru' => 'ru|russian',
119                                  'sk' => 'sk|slovak',
120                                  'sr' => 'sr|serbian',
121                                  'sv' => 'sv|swedish',
122                                  'th' => 'th|thai',
123                                  'tr' => 'tr|turkish',
124                                  'uk' => 'uk|ukrainian',
125                                  'tw' => 'zh[-_]tw|chinese traditional',
126                                  'zh' => 'zh|chinese simplified');
127
128       foreach ($http_accept_language as $browser_language) {
129         foreach ($browser_languages as $key => $value) {
130           if (eregi('^(' . $value . ')(;q=[0-9]\\.[0-9])?$', $browser_language) && $this->exists($key)) {
131             $this->set($key);
132
133             return true;
134           }
135         }
136       }
137
138       $this->set(DEFAULT_LANGUAGE);
139     }
140
hpdl
120
141     function get($lang) {
142       return $this->_languages[$lang];
hpdl
1
143     }
144
145     function getAll() {
146       return $this->_languages;
147     }
148
hpdl
120
149     function exists($lang) {
150       return array_key_exists($lang, $this->_languages);
151     }
hpdl
1
152
hpdl
120
153     function getID() {
154       return $this->language['id'];
hpdl
1
155     }
hpdl
120
156
157     function getName() {
158       return $this->language['name'];
159     }
160
161     function getCode() {
162       return $this->language['code'];
163     }
164
165     function getImage() {
166       return $this->language['image'];
167     }
168
169     function getDirectory() {
170       return $this->language['directory'];
171     }
172
173     function load($definition = false) {
174       if (is_string($definition)) {
175         include('includes/languages/' . $this->getDirectory() . '/' . $definition);
176       } else {
177         include('includes/languages/' . $this->getDirectory() . '.php');
178       }
179     }
hpdl
1
180   }
181 ?>