13 require_once 'Pman.php';
15 class Pman_Admin_Translations extends Pman
26 $au = $this->getAuthUser();
28 $this->jerr("Not authenticated", array('authFailure' => true));
30 $this->authUser = $au;
36 // load and parse json file containing all translations...
37 if (isset($_REQUEST['id'])) {
40 if (empty($_REQUEST['lang']) || !preg_match('/^[A-Z_]+$/i', $_REQUEST['lang'])) {
41 $this->jerr("NO LANG / INVALID LANG");
43 $fm = HTML_FlexyFramework::get();
44 $enable = explode(',', $fm->enable);
45 if (empty($_REQUEST['module']) || !in_array($_REQUEST['module'], $enable)) {
46 $this->jerr("NO MODULE / INVALID MODULE");
49 $lang = $_REQUEST['lang'];
50 $module = $_REQUEST['module'];
53 $data = $this->loadOriginalStrings($lang,$module); // what needs translating..
55 $translated_data = $this->loadTranslate($lang, $module); // the 'database!'
59 // overlay translated..
60 if (empty($translated_data)) {
61 // try using old data!!!!
62 $translated_data = $this->loadOld($lang,$data); // phase out???
65 // covert data ready to send back..
68 foreach($data as $k=>$ar) {
69 foreach($ar as $tr=>$trv) {
70 // $hint = isset($hints[$tr]) ? $hints[$tr] : '';
71 $key = md5($k.'-'.$tr);
73 'id' => $lang.'/'.$key,
77 'txt' => isset($translated_data[$key]) ? $translated_data[$key] : '',
95 $fm = HTML_FlexyFramework::get();
96 $enable = explode(',', $fm->enable);
97 if (empty($_REQUEST['module']) || !in_array($_REQUEST['module'], $enable)) {
98 $this->jerr("NO MODULE / INVALID MODULE");
101 //id zh_HK/54e1d44609e3abed11f6e1eb6ae54988
103 list($lang,$id) = explode('/', $_REQUEST['id']);
106 $data = $this->loadTranslate($lang,$_REQUEST['module']);
108 // try using old data!!!!
109 $data = $this->loadOld($lang,$data); // phase out???
112 $data[$id] = $_REQUEST['txt'];
115 $this->writeTransMod($lang,$_REQUEST['module'], $data);
116 // write merged file..
117 //$this->prefix = '_T["'.$lang .'"]=';
118 //file_put_contents($this->fn, $this->prefix. $j->encode($this->data).';');
123 * load strings that need translating..
126 function loadOriginalStrings($lang, $module)
128 // since this can handle errors better.!!?
129 require_once 'Services/JSON.php';
130 $j = new Services_JSON();
133 $trans = file_get_contents(
134 dirname(__FILE__) . '/../' . $module. "/compiled/_translation_.js");
137 return (array) $j->decode('{'. $trans .'}');
145 * Load the user translated strings.
148 function loadTranslate($lang, $module)
151 $fn = $this->getTransFilename($lang,$module);
154 if (!file_exists($fn)) {
158 return (array) json_decode(file_get_contents($fn));
159 //$this->data = (array) $j->decode(substr(file_get_contents($this->fn), strlen($this->prefix), -1));
163 function loadTranslateDB($lang, $module)
165 $d = DB_DataObject('translations');
166 $d->module = $module;
169 while ($d->fetch()) {
170 if (!isset($ret[$d->tfile])) {
171 $ret[$d->tfile] = array( $d->tkey => $d->tval );
174 $ret[$d->tfile][$d->tkey] = $d->tval;
179 function saveTranslateDB($lang, $module, $tfile, $tkey, $tval)
181 $d = DB_DataObject('translations');
182 $d->module = $module;
186 if ($d->find(true)) {
198 function getTransFilename($lang, $module)
200 $fn = dirname(__FILE__).'/../../_translations_/'. $lang . '/'. $module.'.json';
201 if (!file_exists(dirname($fn))) {
203 /// create the direct
204 $oldumask = umask(0);
205 mkdir(dirname($fn), 0770, true);
208 if (!file_exists(dirname($fn))) {
209 $this->jerr("_translations_ directory does not exist in Pman folder");
218 function loadOld($lang,$data)
220 // need the old for hinting..
221 $old = (array) json_decode(file_get_contents(dirname(__FILE__).'/data/oldeng.js'));
223 // contains key/value of data..
224 $prefix = '_T["'.$lang .'"]=';
225 $trans = (array) json_decode(substr(file_get_contents(
226 dirname(__FILE__).'/data/lang.' . $lang . '.js'
227 ), strlen($prefix), -1));
229 // echo '<PRE>';print_r($trans);
232 foreach($old as $k=>$v) {
233 if (isset($trans[$k]) && empty($hints[$v])) {
234 $hints[$v] = $trans[$k];
237 $translated_data = array();
238 foreach($data as $k=>$ar) {
239 foreach($ar as $tr=>$trv) {
240 $key = md5($k.'-'.$tr);
241 if (isset($hints[$tr])) {
242 $translated_data[$key] = $hints[$tr];
246 // $this->writeTransMod($lang, $module, $translated_data);
247 //echo '<PRE>';print_r($hints);
248 return $translated_data;
252 function writeTransMod($lang, $module, $data)
254 $fn = $this->getTransFilename($lang, $module);
255 file_put_contents($fn, json_encode($data));
257 $base = dirname(__FILE__).'/../../_translations_' ;
259 foreach(scandir($base) as $l) {
261 if (!strlen($l) || $l[0] == '.' || !is_dir("$base/$l") || !file_exists("$base/$l/$module.json")) {
265 $out .= "_T.$l= Roo.apply( _T.$l || { }, " . file_get_contents("$base/$l/$module.json") . ");\n";
269 file_put_contents("$base/$module.js", $out);
271 //$this->writeTrans($lang);