1 | <?php |
||||
2 | |||||
3 | /** |
||||
4 | * adm_locale.php |
||||
5 | * |
||||
6 | * @v1 (c) copyright 2011 by Gorlum for http://supernova.ws |
||||
7 | * |
||||
8 | */ |
||||
9 | |||||
10 | define('INSIDE' , true); |
||||
11 | define('INSTALL' , false); |
||||
12 | define('IN_ADMIN' , true); |
||||
13 | |||||
14 | require('../common.' . substr(strrchr(__FILE__, '.'), 1)); |
||||
15 | |||||
16 | global $lang, $user; |
||||
17 | |||||
18 | SnTemplate::messageBoxAdminAccessDenied(AUTH_LEVEL_ADMINISTRATOR); |
||||
19 | |||||
20 | function adm_lng_assign_string($lang_id, $locale_string_name, $value) { |
||||
21 | global $locale_string_template, $languages_info, $languages, $domain; |
||||
22 | |||||
23 | if(is_array($value)) { |
||||
24 | foreach($value as $sub_key => $sub_value) { |
||||
25 | adm_lng_assign_string($lang_id, "{$locale_string_name}[{$sub_key}]", $sub_value); |
||||
26 | } |
||||
27 | } elseif($value) { |
||||
28 | if(!isset($locale_string_template[$locale_string_name])) { |
||||
29 | $locale_string_template[$locale_string_name] = array(); |
||||
30 | } |
||||
31 | $locale_string_template[$locale_string_name] = array_merge($locale_string_template[$locale_string_name], array("[{$lang_id}]" => htmlentities($value, ENT_COMPAT, 'utf-8'))); |
||||
32 | } |
||||
33 | } |
||||
34 | |||||
35 | function adm_lng_load($full_filename) { |
||||
36 | // $lang_old = $lang; |
||||
37 | // $lang = array(); |
||||
38 | require($full_filename); |
||||
39 | // $lang_new = $lang; |
||||
40 | // $lang = $lang_old; |
||||
41 | // return $lang_new; |
||||
42 | return $a_lang_array; |
||||
0 ignored issues
–
show
Comprehensibility
Best Practice
introduced
by
![]() |
|||||
43 | } |
||||
44 | |||||
45 | function adm_lng_parse_string($string_name, $string_value, $ident = ' ') { |
||||
46 | global $domain, $lang_id; |
||||
47 | |||||
48 | $return = "{$ident}'{$string_name}' => "; |
||||
49 | if(isset($string_value[$lang_id]) && !is_array($string_value[$lang_id])) { |
||||
50 | $return .= "'" . str_replace(array("\\", "'"), array('\\\\', "\\'"), $string_value[$lang_id]) . "',"; |
||||
51 | } else { |
||||
52 | $return .= "array(\r\n"; |
||||
53 | foreach($string_value as $arr_name => $arr_data) { |
||||
54 | $return .= adm_lng_parse_string($arr_name, $arr_data, $ident . ' '); |
||||
55 | } |
||||
56 | $return .= "{$ident}),\r\n"; |
||||
57 | } |
||||
58 | |||||
59 | return $return . "\r\n"; |
||||
60 | } |
||||
61 | |||||
62 | $honor_constants = array( |
||||
63 | 'admin' => array( |
||||
64 | '[adm_opt_ver_response]' => 'SNC_VER_', |
||||
65 | '[adm_opt_ver_response_short]' => 'SNC_VER_', |
||||
66 | ), |
||||
67 | |||||
68 | 'alliance' => array( |
||||
69 | '[ali_dip_relations]' => 'ALLY_DIPLOMACY_', |
||||
70 | ), |
||||
71 | |||||
72 | 'artifacts' => array( |
||||
73 | '[art_moon_create]' => 'ART_', |
||||
74 | ), |
||||
75 | |||||
76 | 'fleet' => array( |
||||
77 | '[fl_attack_error]' => 'ATTACK_', |
||||
78 | '[fl_shrtcup]' => 'PT_', |
||||
79 | '[fl_planettype]' => 'PT_', |
||||
80 | ), |
||||
81 | |||||
82 | 'infos' => array( |
||||
83 | '[info]' => array('TECH_', 'MRC_', 'SHIP_', 'RES_', 'ART_', 'STRUC_'), |
||||
84 | ), |
||||
85 | |||||
86 | 'market' => array( |
||||
87 | '[eco_mrk_errors]' => 'MARKET_', |
||||
88 | ), |
||||
89 | |||||
90 | 'quest' => array( |
||||
91 | '[qst_status_list]' => 'QUEST_STATUS_', |
||||
92 | ), |
||||
93 | |||||
94 | 'tech' => array( |
||||
95 | '[type_mission]' => 'MT_', |
||||
96 | '[tech]' => array('TECH_', 'MRC_', 'SHIP_', 'RES_', 'ART_', 'STRUC_'), |
||||
97 | ), |
||||
98 | |||||
99 | ); |
||||
100 | |||||
101 | function adm_lng_write_string($string_name, $string_value, $ident = ' ', $string_name_prefix = '') { |
||||
102 | global $lang_id, $file_handler, $constants, $honor_constants, $domain; |
||||
103 | |||||
104 | $string_name_new = false; |
||||
105 | |||||
106 | if(isset($honor_constants[$domain][$string_name_prefix])) { |
||||
107 | $found_constants = array_keys($constants, $string_name); |
||||
108 | foreach($found_constants as $constant_name) { |
||||
109 | $honor_prefix_list = is_array($honor_constants[$domain][$string_name_prefix]) ? $honor_constants[$domain][$string_name_prefix] : array($honor_constants[$domain][$string_name_prefix]); |
||||
110 | foreach($honor_prefix_list as $honor_prefix) { |
||||
111 | if(strpos($constant_name, $honor_prefix) === 0) { |
||||
112 | $string_name_new = $constant_name; |
||||
113 | break; |
||||
114 | } |
||||
115 | } |
||||
116 | } |
||||
117 | } |
||||
118 | |||||
119 | $string_name_new = $string_name_new ? $string_name_new : "'{$string_name}'"; |
||||
120 | fwrite($file_handler, "{$ident}{$string_name_new} => "); |
||||
121 | if(isset($string_value[$lang_id]) && !is_array($string_value[$lang_id])) { |
||||
122 | fwrite($file_handler, "'" . str_replace(array("\\", "'"), array('\\\\', "\\'"), $string_value[$lang_id]) . "',"); |
||||
123 | // fwrite($file_handler, "'" . addslashes($string_value[$lang_id]) . "',"); |
||||
124 | } else { |
||||
125 | $string_name_prefix = $string_name_prefix . "[{$string_name}]"; |
||||
126 | fwrite($file_handler, "array(\r\n"); |
||||
127 | foreach($string_value as $arr_name => $arr_data) { |
||||
128 | adm_lng_write_string($arr_name, $arr_data, $ident . ' ', $string_name_prefix); |
||||
129 | } |
||||
130 | fwrite($file_handler, "{$ident}),\r\n"); |
||||
131 | } |
||||
132 | |||||
133 | fwrite($file_handler, "\r\n"); |
||||
134 | } |
||||
135 | |||||
136 | $template = SnTemplate::gettemplate('admin/admin_locale', true); |
||||
0 ignored issues
–
show
true of type true is incompatible with the type null|template expected by parameter $template of SnTemplate::gettemplate() .
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
137 | |||||
138 | lng_include('system'); |
||||
139 | lng_include('tech'); |
||||
140 | lng_include('admin'); |
||||
141 | |||||
142 | $languages = array(); |
||||
143 | $language_domains = array(); |
||||
144 | $languages_info = lng_get_list(); |
||||
145 | $domain = sys_get_param_str('domain'); |
||||
146 | |||||
147 | if($domain) { |
||||
148 | $lang_new = sys_get_param('lang_new'); |
||||
149 | if(!empty($lang_new) && is_array($lang_new)) { |
||||
150 | $constants = get_defined_constants(true); |
||||
151 | $constants = $constants['user']; |
||||
152 | ksort($constants); |
||||
153 | foreach($languages_info as $lang_id => $land_data) { |
||||
154 | $file_handler = fopen(SN_ROOT_PHYSICAL . "language/{$lang_id}/{$domain}.mo.php.new", 'w'); |
||||
155 | fwrite($file_handler, "<?php\r\n\r\n/*\r\n############################################################################# |
||||
156 | # Filename: {$domain}.mo.php |
||||
157 | # Project: SuperNova.WS |
||||
158 | # Website: http://www.supernova.ws |
||||
159 | # Description: Massive Multiplayer Online Browser Space Strategy Game\r\n#\r\n"); |
||||
160 | |||||
161 | foreach($land_data['LANG_COPYRIGHT'] as $lang_copyright) { |
||||
162 | $lang_copyright = str_replace(array('©', '"', '<', '>'), array('©', '"', '<', '>'), $lang_copyright); |
||||
163 | fwrite($file_handler, "# {$lang_copyright}\r\n"); |
||||
164 | } |
||||
165 | fwrite($file_handler, "#############################################################################\r\n*/\r\n |
||||
166 | /**\r\n*\r\n* @package language\r\n* @system [{$land_data['LANG_NAME_ENGLISH']}]\r\n* @version " . SN_VERSION . "\r\n*\r\n*/\r\n |
||||
167 | /**\r\n* DO NOT CHANGE\r\n*/\r\n\r\nif (!defined('INSIDE')) die();\r\n |
||||
168 | \$a_lang_array = array(\r\n"); |
||||
169 | foreach($lang_new as $string_name => $string_value) { |
||||
170 | adm_lng_write_string($string_name, $string_value); |
||||
171 | } |
||||
172 | fwrite($file_handler, ");\r\n"); |
||||
173 | fclose($file_handler); |
||||
174 | } |
||||
175 | |||||
176 | sys_redirect("admin_locale.php?domain={$domain}"); |
||||
177 | } |
||||
178 | |||||
179 | foreach($languages_info as $lang_id => $lang_data) { |
||||
180 | $template->assign_block_vars('language', $lang_data); |
||||
181 | $full_filename = SN_ROOT_PHYSICAL . "language/{$lang_id}/{$domain}.mo.php"; |
||||
182 | $languages[$lang_id] = adm_lng_load($full_filename . (file_exists($full_filename . '.new') ? '.new' : '')); |
||||
183 | foreach($languages[$lang_id] as $locale_string_name => $cork) { |
||||
184 | adm_lng_assign_string($lang_id, "[{$locale_string_name}]", $languages[$lang_id][$locale_string_name]); |
||||
185 | } |
||||
186 | } |
||||
187 | |||||
188 | foreach($locale_string_template as $locale_string_name => $locale_string_list) { |
||||
189 | $template->assign_block_vars('string', array( |
||||
190 | 'NAME' => $locale_string_name, |
||||
191 | )); |
||||
192 | |||||
193 | foreach($languages_info as $lang_id => $cork2) { |
||||
194 | $template->assign_block_vars('string.locale', array( |
||||
195 | 'LANG' => $lang_id, |
||||
196 | 'VALUE' => $locale_string_list["[{$lang_id}]"], |
||||
197 | )); |
||||
198 | } |
||||
199 | } |
||||
200 | |||||
201 | $template->assign_vars(array( |
||||
202 | 'DOMAIN' => $domain, |
||||
203 | )); |
||||
204 | } else { |
||||
205 | $path = SN_ROOT_PHYSICAL . "language/"; |
||||
206 | $dir = dir($path); |
||||
207 | while (false !== ($lang_id = $dir->read())) { |
||||
208 | $full_path = $path . $lang_id; |
||||
209 | if($lang_id[0] != "." && is_dir($full_path)) { |
||||
210 | $lang_file_list = dir($full_path); |
||||
211 | while (false !== ($filename = $lang_file_list->read())) { |
||||
212 | $lang_domain = strtolower(substr($filename, 0, strpos($filename, '.'))); |
||||
213 | if(!$lang_domain) { |
||||
214 | continue; |
||||
215 | } |
||||
216 | |||||
217 | $file_ext = strtolower(substr($filename, strpos($filename, '.'))); |
||||
218 | if($lang_domain != 'language') { |
||||
219 | if($file_ext == '.mo.php.new' || ($file_ext == '.mo.php' && empty($languages[$lang_id][$lang_domain]))) { |
||||
220 | $language_domains[$lang_domain] = $lang_domain; |
||||
221 | $languages[$lang_id][$lang_domain] = $lang_domain; |
||||
222 | } |
||||
223 | } |
||||
224 | } |
||||
225 | } |
||||
226 | } |
||||
227 | $dir->close(); |
||||
228 | |||||
229 | foreach($language_domains as $lang_domain) { |
||||
230 | $template->assign_block_vars('domain', array( |
||||
231 | 'NAME' => $lang_domain, |
||||
232 | )); |
||||
233 | } |
||||
234 | } |
||||
235 | |||||
236 | SnTemplate::display($template, $lang['adm_lng_title']); |
||||
237 |