1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
use Gettext\Translator;
class Init {
public function __construct() { //self define
//default use www /*if (strpos($_SERVER['HTTP_HOST'], 'www') === false) { $protocol = isset($_SERVER['HTTPS']) && filter_var($_SERVER['HTTPS'], FILTER_VALIDATE_BOOLEAN) ? 'https' : 'http';
header("Location: $protocol://www." . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); exit; }*/
//$CI =& get_instance(); //should ignore in member auth action /*if (!empty($_SESSION['member_id']) && strpos($_SERVER['REQUEST_URI'], '/member/auth/') === false) { $CI->load->model('Member_model'); $member_info = $CI->Member_model->select($_SESSION['member_id'], null, 1);
if ($member_info['login_session'] != session_id()) { unset($_SESSION['member_id']); $_SESSION['error_msg'] = '本帳戶已在其他地方登入。'; redirect('member/logout/' . $member_info['id']); } }*/
//TODO:: for testing only if (session_status() == PHP_SESSION_NONE) { session_start(); } $this->set_lang(); }
private function set_lang() {
$CI =& get_instance();
$enable_frontend = config_item('frontend_multiple_language'); $default_frontend_lang = config_item('frontend_default_language'); $frontend_lang_list = config_item('frontend_lang_list'); $enable_backend = config_item('backend_multiple_language'); $default_backend_lang = config_item('backend_default_language'); $backend_lang_list = config_item('backend_lang_list');
/* get the language abbreviation from uri */ $lang_uri = $CI->uri->segment(1); $lang_uri = strtolower(trim($lang_uri));
$lang = $default_frontend_lang; $wlang = $default_backend_lang; $locale = $frontend_lang_list[$default_frontend_lang]; $wlocale = $backend_lang_list[$default_backend_lang];
//Create the translator instance $t = new Translator();
if ($enable_frontend) { if (!empty($lang_uri) && strlen($lang_uri) == 2 && is_array($frontend_lang_list) && array_key_exists($lang_uri, $frontend_lang_list)) { $lang = $lang_uri; if (!empty($frontend_lang_list[$lang_uri])) { $locale = $frontend_lang_list[$lang_uri]; $this->load_translation($t, $locale); } $CI->config->set_item('language', $lang); } }
if ($enable_backend && $lang_uri == 'webadmin') { $lang_uri2 = $CI->uri->segment(2); if (!empty($lang_uri2) && strlen($lang_uri2) == 2 && is_array($backend_lang_list) && array_key_exists($lang_uri2, $backend_lang_list)) { $wlang = $lang_uri2; if (!empty($backend_lang_list[$lang_uri2])) { $wlocale = $backend_lang_list[$lang_uri2]; $this->load_translation($t, $wlocale); }
$CI->config->set_item('language', $wlang); } }
$t->register();
$_SESSION['lang'] = $lang; $_SESSION['wlang'] = $wlang; $_SESSION['locale'] = $locale; $_SESSION['wlocale'] = $wlocale; }
private function load_translation($t, $locale = '') {
if ($locale <> '') { //Load your translations (exported as PhpArray): $translate_file = APPPATH . 'locale/' . $locale . '/' . $locale . '.php'; $po_file = APPPATH . 'locale/' . $locale . '/' . $locale . '.po'; if (file_exists($translate_file)) { if (file_exists($po_file) && date("Y-m-d H:i:s", filemtime($po_file)) > date("Y-m-d H:i:s", filemtime($translate_file))) { //po file updated, need to regenerate php file $translations = Gettext\Translations::fromPoFile($po_file); $translations->toPhpArrayFile($translate_file); }
$t->loadTranslations($translate_file); } elseif (file_exists($po_file)) { //po to php and load file $translations = Gettext\Translations::fromPoFile($po_file); $translations->toPhpArrayFile($translate_file); if (file_exists($translate_file)) { $t->loadTranslations($translate_file); } } } } }
|