Added a function to merge language files.
1 files modified
4 files added
New file |
| | |
| | | <?php |
| | | |
| | | /* |
| | | Copyright (c) 2008, Till Brehm, projektfarm Gmbh |
| | | All rights reserved. |
| | | |
| | | Redistribution and use in source and binary forms, with or without modification, |
| | | are permitted provided that the following conditions are met: |
| | | |
| | | * Redistributions of source code must retain the above copyright notice, |
| | | this list of conditions and the following disclaimer. |
| | | * Redistributions in binary form must reproduce the above copyright notice, |
| | | this list of conditions and the following disclaimer in the documentation |
| | | and/or other materials provided with the distribution. |
| | | * Neither the name of ISPConfig nor the names of its contributors |
| | | may be used to endorse or promote products derived from this software without |
| | | specific prior written permission. |
| | | |
| | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
| | | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| | | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
| | | IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, |
| | | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
| | | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| | | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
| | | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| | | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
| | | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| | | */ |
| | | |
| | | /* |
| | | Form Definition |
| | | |
| | | Tabellendefinition |
| | | |
| | | Datentypen: |
| | | - INTEGER (Wandelt Ausdrücke in Int um) |
| | | - DOUBLE |
| | | - CURRENCY (Formatiert Zahlen nach Währungsnotation) |
| | | - VARCHAR (kein weiterer Format Check) |
| | | - TEXT (kein weiterer Format Check) |
| | | - DATE (Datumsformat, Timestamp Umwandlung) |
| | | |
| | | Formtype: |
| | | - TEXT (normales Textfeld) |
| | | - TEXTAREA (normales Textfeld) |
| | | - PASSWORD (Feldinhalt wird nicht angezeigt) |
| | | - SELECT (Gibt Werte als option Feld aus) |
| | | - RADIO |
| | | - CHECKBOX |
| | | - FILE |
| | | |
| | | VALUE: |
| | | - Wert oder Array |
| | | |
| | | Hinweis: |
| | | Das ID-Feld ist nicht bei den Table Values einzufügen. |
| | | |
| | | |
| | | */ |
| | | |
| | | $form["title"] = "Software Repository"; |
| | | $form["description"] = "Software Repositoy which may contain addons or updates"; |
| | | $form["name"] = "software_repo"; |
| | | $form["action"] = "software_repo_edit.php"; |
| | | $form["db_table"] = "software_repo"; |
| | | $form["db_table_idx"] = "software_repo_id"; |
| | | $form["db_history"] = "no"; |
| | | $form["tab_default"] = "software_repo"; |
| | | $form["list_default"] = "software_repo_list.php"; |
| | | $form["auth"] = 'yes'; |
| | | |
| | | $form["auth_preset"]["userid"] = 0; // 0 = id of the user, > 0 id must match with id of current user |
| | | $form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user |
| | | $form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete |
| | | $form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete |
| | | $form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete |
| | | |
| | | $form["tabs"]['software_repo'] = array ( |
| | | 'title' => "Repository", |
| | | 'width' => 80, |
| | | 'template' => "templates/software_repo_edit.htm", |
| | | 'fields' => array ( |
| | | ################################## |
| | | # Beginn Datenbankfelder |
| | | ################################## |
| | | 'repo_name' => array ( |
| | | 'datatype' => 'VARCHAR', |
| | | 'formtype' => 'TEXT', |
| | | 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', |
| | | 'errmsg'=> 'repo_name_empty'), |
| | | 1 => array ( 'type' => 'UNIQUE', |
| | | 'errmsg'=> 'repo_name_unique'), |
| | | ), |
| | | 'default' => '', |
| | | 'value' => '', |
| | | 'separator' => '', |
| | | 'width' => '40', |
| | | 'maxlength' => '40', |
| | | 'rows' => '', |
| | | 'cols' => '' |
| | | ), |
| | | 'repo_url' => array ( |
| | | 'datatype' => 'VARCHAR', |
| | | 'formtype' => 'TEXT', |
| | | 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', |
| | | 'errmsg'=> 'repo_name_empty'), |
| | | 1 => array ( 'type' => 'UNIQUE', |
| | | 'errmsg'=> 'repo_name_unique'), |
| | | ), |
| | | 'default' => '', |
| | | 'value' => '', |
| | | 'separator' => '', |
| | | 'width' => '40', |
| | | 'maxlength' => '40', |
| | | 'rows' => '', |
| | | 'cols' => '' |
| | | ), |
| | | 'repo_username' => array ( |
| | | 'datatype' => 'VARCHAR', |
| | | 'formtype' => 'TEXT', |
| | | 'default' => '', |
| | | 'value' => '', |
| | | 'separator' => '', |
| | | 'width' => '30', |
| | | 'maxlength' => '30', |
| | | 'rows' => '', |
| | | 'cols' => '' |
| | | ), |
| | | 'repo_password' => array ( |
| | | 'datatype' => 'VARCHAR', |
| | | 'formtype' => 'PASSWORD', |
| | | 'encryption' => 'CLEARTEXT', |
| | | 'default' => '', |
| | | 'value' => '', |
| | | 'separator' => '', |
| | | 'width' => '30', |
| | | 'maxlength' => '30', |
| | | 'rows' => '', |
| | | 'cols' => '' |
| | | ), |
| | | 'active' => array ( |
| | | 'datatype' => 'VARCHAR', |
| | | 'formtype' => 'CHECKBOX', |
| | | 'default' => 'y', |
| | | 'value' => array(0 => 'n',1 => 'y') |
| | | ), |
| | | ################################## |
| | | # ENDE Datenbankfelder |
| | | ################################## |
| | | ) |
| | | ); |
| | | ?> |
New file |
| | |
| | | <?php |
| | | /* |
| | | Copyright (c) 2008, Till Brehm, projektfarm Gmbh |
| | | All rights reserved. |
| | | |
| | | Redistribution and use in source and binary forms, with or without modification, |
| | | are permitted provided that the following conditions are met: |
| | | |
| | | * Redistributions of source code must retain the above copyright notice, |
| | | this list of conditions and the following disclaimer. |
| | | * Redistributions in binary form must reproduce the above copyright notice, |
| | | this list of conditions and the following disclaimer in the documentation |
| | | and/or other materials provided with the distribution. |
| | | * Neither the name of ISPConfig nor the names of its contributors |
| | | may be used to endorse or promote products derived from this software without |
| | | specific prior written permission. |
| | | |
| | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
| | | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| | | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
| | | IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, |
| | | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
| | | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| | | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
| | | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| | | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
| | | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| | | */ |
| | | |
| | | require_once('../../lib/config.inc.php'); |
| | | require_once('../../lib/app.inc.php'); |
| | | |
| | | //* Check permissions for module |
| | | $app->auth->check_module_permissions('admin'); |
| | | |
| | | //* This is only allowed for administrators |
| | | if(!$app->auth->is_admin()) die('only allowed for administrators.'); |
| | | |
| | | $app->uses('tpl'); |
| | | |
| | | $app->tpl->newTemplate('form.tpl.htm'); |
| | | $app->tpl->setInclude('content_tpl', 'templates/language_complete.htm'); |
| | | |
| | | //* reading languages |
| | | $language_option = ''; |
| | | $error = ''; |
| | | $msg = ''; |
| | | $selected_language = (isset($_REQUEST['lng_select']))?substr($_REQUEST['lng_select'],0,2):'en'; |
| | | if(!preg_match("/^[a-z]{2}$/i", $selected_language)) die('unallowed characters in selected language name.'); |
| | | |
| | | $handle = opendir(ISPC_ROOT_PATH.'/lib/lang/'); |
| | | while ($file = readdir ($handle)) { |
| | | if ($file != '.' && $file != '..') { |
| | | $tmp_lng = substr($file,0,-4); |
| | | if($tmp_lng !='' && $tmp_lng != 'en') { |
| | | $selected = ($tmp_lng == $selected_language)?'SELECTED':''; |
| | | $language_option .= "<option value='$tmp_lng' $selected>$tmp_lng</option>"; |
| | | //if(isset($_POST['lng_new']) && $_POST['lng_new'] == $tmp_lng) $error = 'Language exists already.'; |
| | | } |
| | | } |
| | | } |
| | | $app->tpl->setVar('language_option',$language_option); |
| | | $app->tpl->setVar('error',$error); |
| | | |
| | | // Export the language file |
| | | if(isset($_POST['lng_select']) && $error == '') { |
| | | |
| | | // complete the global langauge file |
| | | merge_langfile(ISPC_LIB_PATH."/lang/".$selected_language.".lng",ISPC_LIB_PATH."/lang/en.lng"); |
| | | |
| | | // Go trough all language files |
| | | $bgcolor = '#FFFFFF'; |
| | | $language_files_list = array(); |
| | | $handle = @opendir(ISPC_WEB_PATH); |
| | | while ($file = @readdir ($handle)) { |
| | | if ($file != '.' && $file != '..') { |
| | | if(@is_dir(ISPC_WEB_PATH.'/'.$file.'/lib/lang')) { |
| | | $handle2 = opendir(ISPC_WEB_PATH.'/'.$file.'/lib/lang'); |
| | | while ($lang_file = @readdir ($handle2)) { |
| | | if ($lang_file != '.' && $lang_file != '..' && substr($lang_file,0,2) == 'en') { |
| | | $target_lang_file = $selected_language.substr($lang_file,2); |
| | | merge_langfile(ISPC_WEB_PATH.'/'.$file.'/lib/lang/'.$target_lang_file,ISPC_WEB_PATH.'/'.$file.'/lib/lang/'.$lang_file); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | function merge_langfile($langfile,$masterfile) { |
| | | global $msg; |
| | | |
| | | if(is_file($langfile)) { |
| | | |
| | | // Load the english language file |
| | | include($masterfile); |
| | | if(isset($wb) && is_array($wb)) { |
| | | $wb_master = $wb; |
| | | unset($wb); |
| | | } else { |
| | | $wb_master = array(); |
| | | } |
| | | |
| | | // Load the incomplete language file |
| | | $wb = array(); |
| | | include($langfile); |
| | | |
| | | $n = 0; |
| | | foreach($wb_master as $key => $val) { |
| | | if(!isset($wb[$key])) { |
| | | $wb[$key] = $val; |
| | | $n++; |
| | | } |
| | | } |
| | | |
| | | $file_content = "<?php\n"; |
| | | foreach($wb as $key => $val) { |
| | | $val = str_replace("'",'',$val); |
| | | $val = str_replace('"','',$val); |
| | | $file_content .= '$wb['."'$key'".'] = '."'$val';\n"; |
| | | } |
| | | $file_content .= "?>\n"; |
| | | |
| | | $msg .= "Added $n lines to the file $langfile<br />"; |
| | | file_put_contents($langfile ,$file_content); |
| | | } else { |
| | | $msg .= "File does not exist yet. Copied file $masterfile to $langfile<br />"; |
| | | copy($masterfile,$langfile); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | $app->tpl->setVar('msg',$msg); |
| | | |
| | | //* load language file |
| | | $lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_language_complete.lng'; |
| | | include($lng_file); |
| | | $app->tpl->setVar($wb); |
| | | |
| | | $app->tpl_defaults(); |
| | | $app->tpl->pparse(); |
| | | |
| | | |
| | | ?> |
New file |
| | |
| | | <?php |
| | | $wb["list_head_txt"] = 'Merge the selected language file with the english master language file. <br />This adds missing strings from the english master language files to the selected language.'; |
| | | $wb["language_select_txt"] = 'Select language'; |
| | | $wb['btn_save_txt'] = 'Merge files now'; |
| | | $wb['btn_cancel_txt'] = 'Back'; |
| | | ?> |
| | |
| | | 'target' => 'content', |
| | | 'link' => 'admin/language_add.php'); |
| | | |
| | | $items[] = array( 'title' => 'Merge', |
| | | 'target' => 'content', |
| | | 'link' => 'admin/language_complete.php'); |
| | | |
| | | $items[] = array( 'title' => 'Export', |
| | | 'target' => 'content', |
| | | 'link' => 'admin/language_export.php'); |
New file |
| | |
| | | <div class="frmTextHead"><tmpl_var name="list_head_txt"></div><br /> |
| | | <p class="frmText11"> |
| | | <tmpl_var name="language_select_txt">: <select name="lng_select">{tmpl_var name='language_option'}</select> |
| | | </p> |
| | | <tmpl_if name="msg"> |
| | | <p class="msg" ><tmpl_var name="msg"></p> |
| | | </tmpl_if> |
| | | <tmpl_if name="error"> |
| | | <p class="error" ><tmpl_var name="error"></p> |
| | | </tmpl_if> |
| | | <input name="btn_save" type="button" class="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/language_complete.php');"><div class="buttonEnding"></div> |
| | | <input name="btn_cancel" type="button" class="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/language_list.php');"><div class="buttonEnding"></div> |