language.php

来自「this the oscommerce 3.0 aplha 4」· PHP 代码 · 共 866 行 · 第 1/3 页

PHP
866
字号
<?php/*  $Id: language.php 1527 2007-03-30 19:20:20Z hpdl $  osCommerce, Open Source E-Commerce Solutions  http://www.oscommerce.com  Copyright (c) 2007 osCommerce  This program is free software; you can redistribute it and/or modify  it under the terms of the GNU General Public License v2 (1991)  as published by the Free Software Foundation.*/  require('../includes/classes/language.php');  class osC_Language_Admin extends osC_Language {/* Public methods */    function loadIniFile($filename = null, $comment = '#', $language_code = null) {      if ( is_null($language_code) ) {        $language_code = $this->_code;      }      if ( $this->_languages[$language_code]['parent_id'] > 0 ) {        $this->loadIniFile($filename, $comment, $this->getCodeFromID($this->_languages[$language_code]['parent_id']));      }      if ( is_null($filename) ) {        if ( file_exists('includes/languages/' . $language_code . '.php') ) {          $contents = file('includes/languages/' . $language_code . '.php');        } else {          return array();        }      } else {        if ( substr(realpath('includes/languages/' . $language_code . '/' . $filename), 0, strlen(realpath('includes/languages/' . $language_code))) != realpath('includes/languages/' . $language_code) ) {          return array();        }        if ( !file_exists('includes/languages/' . $language_code . '/' . $filename) ) {          return array();        }        $contents = file('includes/languages/' . $language_code . '/' . $filename);      }      $ini_array = array();      foreach ( $contents as $line ) {        $line = trim($line);        $firstchar = substr($line, 0, 1);        if ( !empty($line) && ( $firstchar != $comment) ) {          $delimiter = strpos($line, '=');          if ( $delimiter !== false ) {            $key = trim(substr($line, 0, $delimiter));            $value = trim(substr($line, $delimiter + 1));            $ini_array[$key] = $value;          } elseif ( isset($key) ) {            $ini_array[$key] .= trim($line);          }        }      }      unset($contents);      $this->_definitions = array_merge($this->_definitions, $ini_array);    }    function injectDefinitions($file, $language_code = null) {      if ( is_null($language_code) ) {        $language_code = $this->_code;      }      if ( $this->_languages[$language_code]['parent_id'] > 0 ) {        $this->injectDefinitions($file, $this->getCodeFromID($this->_languages[$language_code]['parent_id']));      }      foreach ($this->extractDefinitions($language_code . '/' . $file) as $def) {        $this->_definitions[$def['key']] = $def['value'];      }    }    function &extractDefinitions($xml) {      $definitions = array();      if ( file_exists(dirname(__FILE__) . '/../../../includes/languages/' . $xml) ) {        $osC_XML = new osC_XML(file_get_contents(dirname(__FILE__) . '/../../../includes/languages/' . $xml));        $definitions = $osC_XML->toArray();        if (isset($definitions['language']['definitions']['definition'][0]) === false) {          $definitions['language']['definitions']['definition'] = array($definitions['language']['definitions']['definition']);        }        $definitions = $definitions['language']['definitions']['definition'];      }      return $definitions;    }    function export($id, $groups, $include_language_data = true) {      global $osC_Database, $osC_Currencies;      $language = osC_Language_Admin::getData($id);      $export_array = array();      if ( $include_language_data === true ) {        $export_array['language']['data'] = array('title-CDATA' => $language['name'],                                                  'code-CDATA' => $language['code'],                                                  'locale-CDATA' => $language['locale'],                                                  'character_set-CDATA' => $language['charset'],                                                  'text_direction-CDATA' => $language['text_direction'],                                                  'date_format_short-CDATA' => $language['date_format_short'],                                                  'date_format_long-CDATA' => $language['date_format_long'],                                                  'time_format-CDATA' => $language['time_format'],                                                  'default_currency-CDATA' => $osC_Currencies->getCode($language['currencies_id']),                                                  'numerical_decimal_separator-CDATA' => $language['numeric_separator_decimal'],                                                  'numerical_thousands_separator-CDATA' => $language['numeric_separator_thousands']);        if ( $language['parent_id'] > 0 ) {          $export_array['language']['data']['parent_language_code'] = osC_Language_Admin::getCode($language['parent_id']);        }      }      $Qdefs = $osC_Database->query('select content_group, definition_key, definition_value from :table_languages_definitions where languages_id = :languages_id and content_group in (":content_group") order by content_group, definition_key');      $Qdefs->bindTable(':table_languages_definitions', TABLE_LANGUAGES_DEFINITIONS);      $Qdefs->bindInt(':languages_id', $id);      $Qdefs->bindRaw(':content_group', implode('", "', $groups));      $Qdefs->execute();      while ($Qdefs->next()) {        $export_array['language']['definitions']['definition'][] = array('key' => $Qdefs->value('definition_key'),                                                                         'value-CDATA' => $Qdefs->value('definition_value'),                                                                         'group' => $Qdefs->value('content_group'));      }      $osC_XML = new osC_XML($export_array, $language['charset']);      $xml = $osC_XML->toXML();      header('Content-disposition: attachment; filename=' . $language['code'] . '.xml');      header('Content-Type: application/force-download');      header('Content-Transfer-Encoding: binary');      header('Content-Length: ' . strlen($xml));      header('Pragma: no-cache');      header('Expires: 0');      echo $xml;      exit;    }    function import($file, $type) {      global $osC_Database, $osC_Currencies;      if (file_exists('../includes/languages/' . $file . '.xml')) {        $osC_XML = new osC_XML(file_get_contents('../includes/languages/' . $file . '.xml'));        $source = $osC_XML->toArray();        $language = array('name' => $source['language']['data']['title'],                          'code' => $source['language']['data']['code'],                          'locale' => $source['language']['data']['locale'],                          'charset' => $source['language']['data']['character_set'],                          'date_format_short' => $source['language']['data']['date_format_short'],                          'date_format_long' => $source['language']['data']['date_format_long'],                          'time_format' => $source['language']['data']['time_format'],                          'text_direction' => $source['language']['data']['text_direction'],                          'currency' => $source['language']['data']['default_currency'],                          'numeric_separator_decimal' => $source['language']['data']['numerical_decimal_separator'],                          'numeric_separator_thousands' => $source['language']['data']['numerical_thousands_separator'],                          'parent_language_code' => $source['language']['data']['parent_language_code'],                          'parent_id' => 0                         );        if (!$osC_Currencies->exists($language['currency'])) {          $language['currency'] = DEFAULT_CURRENCY;        }        if ( !empty($language['parent_language_code']) ) {          $Qlanguage = $osC_Database->query('select languages_id from :table_languages where code = :code');          $Qlanguage->bindTable(':table_languages', TABLE_LANGUAGES);          $Qlanguage->bindValue(':code', $language['parent_language_code']);          $Qlanguage->execute();          if ( $Qlanguage->numberOfRows() === 1 ) {            $language['parent_id'] = $Qlanguage->valueInt('languages_id');          }        }        $definitions = array();        if ( isset($source['language']['definitions']['definition']) ) {          $definitions = $source['language']['definitions']['definition'];          if ( isset($definitions['key']) && isset($definitions['value']) && isset($definitions['group']) ) {            $definitions = array(array('key' => $definitions['key'],                                       'value' => $definitions['value'],                                       'group' => $definitions['group']));          }        }        unset($source);        $error = false;        $add_category_and_product_placeholders = true;        $osC_Database->startTransaction();        $Qcheck = $osC_Database->query('select languages_id from :table_languages where code = :code');        $Qcheck->bindTable(':table_languages', TABLE_LANGUAGES);        $Qcheck->bindValue(':code', $language['code']);        $Qcheck->execute();        if ($Qcheck->numberOfRows() === 1) {          $add_category_and_product_placeholders = false;          $language_id = $Qcheck->valueInt('languages_id');          $Qlanguage = $osC_Database->query('update :table_languages set name = :name, code = :code, locale = :locale, charset = :charset, date_format_short = :date_format_short, date_format_long = :date_format_long, time_format = :time_format, text_direction = :text_direction, currencies_id = :currencies_id, numeric_separator_decimal = :numeric_separator_decimal, numeric_separator_thousands = :numeric_separator_thousands, parent_id = :parent_id where languages_id = :languages_id');          $Qlanguage->bindInt(':languages_id', $language_id);        } else {          $Qlanguage = $osC_Database->query('insert into :table_languages (name, code, locale, charset, date_format_short, date_format_long, time_format, text_direction, currencies_id, numeric_separator_decimal, numeric_separator_thousands, parent_id) values (:name, :code, :locale, :charset, :date_format_short, :date_format_long, :time_format, :text_direction, :currencies_id, :numeric_separator_decimal, :numeric_separator_thousands, :parent_id)');        }        $Qlanguage->bindTable(':table_languages', TABLE_LANGUAGES);        $Qlanguage->bindValue(':name', $language['name']);        $Qlanguage->bindValue(':code', $language['code']);        $Qlanguage->bindValue(':locale', $language['locale']);        $Qlanguage->bindValue(':charset', $language['charset']);        $Qlanguage->bindValue(':date_format_short', $language['date_format_short']);        $Qlanguage->bindValue(':date_format_long', $language['date_format_long']);        $Qlanguage->bindValue(':time_format', $language['time_format']);        $Qlanguage->bindValue(':text_direction', $language['text_direction']);        $Qlanguage->bindInt(':currencies_id', $osC_Currencies->getID($language['currency']));        $Qlanguage->bindValue(':numeric_separator_decimal', $language['numeric_separator_decimal']);        $Qlanguage->bindValue(':numeric_separator_thousands', $language['numeric_separator_thousands']);        $Qlanguage->bindInt(':parent_id', $language['parent_id']);        $Qlanguage->setLogging($_SESSION['module'], ($Qcheck->numberOfRows() === 1 ? $language_id : null));        $Qlanguage->execute();        if ($osC_Database->isError()) {          $error = true;        } else {          if ($Qcheck->numberOfRows() !== 1) {            $language_id = $osC_Database->nextID();          }          $default_language_id = osC_Language_Admin::getData(osC_Language_Admin::getID(DEFAULT_LANGUAGE), 'languages_id');          if ($type == 'replace') {            $Qdel =  $osC_Database->query('delete from :table_languages_definitions where languages_id = :languages_id');            $Qdel->bindTable(':table_languages_definitions', TABLE_LANGUAGES_DEFINITIONS);            $Qdel->bindInt(':languages_id', $language_id);            $Qdel->execute();            if ($osC_Database->isError()) {              $error = true;            }          }        }        if ($error === false) {          $osC_DirectoryListing = new osC_DirectoryListing('../includes/languages/' . $file);          $osC_DirectoryListing->setRecursive(true);          $osC_DirectoryListing->setIncludeDirectories(false);          $osC_DirectoryListing->setAddDirectoryToFilename(true);          $osC_DirectoryListing->setCheckExtension('xml');          foreach ($osC_DirectoryListing->getFiles() as $files) {            $definitions = array_merge($definitions, osC_Language_Admin::extractDefinitions($file . '/' . $files['name']));          }          foreach ($definitions as $def) {            $insert = false;            $update = false;            if ($type == 'replace') {              $insert = true;            } else {              $Qcheck = $osC_Database->query('select definition_key, content_group from :table_languages_definitions where definition_key = :definition_key and languages_id = :languages_id and content_group = :content_group');              $Qcheck->bindTable(':table_languages_definitions', TABLE_LANGUAGES_DEFINITIONS);              $Qcheck->bindValue(':definition_key', $def['key']);              $Qcheck->bindInt(':languages_id', $language_id);              $Qcheck->bindValue(':content_group', $def['group']);              $Qcheck->execute();

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?