Класс Translations.php

Класс Translations

Предназначен для работы с переводами клиентского шаблона.

Функция write_translations()

Код функции (спойлер)
 
    private function write_translations($lang_label, $translations) {
        if (empty($lang_label)) {
            return;
        }
        $dir = __DIR__.'/../design/'.$this->settings->theme.'/lang/';
        if (file_exists($dir)) {
            $content = "<?php\n\n";
            $content .= "\$lang = array();\n";
            foreach($translations as $label=>$value) {
                $content .= "\$lang['".$label."'] = \"".addcslashes($value, "\n\r\\\"")."\";\n";
            }
            $file = fopen($dir.$lang_label.'.php', 'w');
            fwrite($file, $content);
            fclose($file);
        }
    }

Функция записыват перевод в файл, который лежит в активной теме сайта

Функция принимает два аргумента $lang_label, $translations

Параметры которые содержит функция:

  • $lang_label - языковая метка (двузначная, ru,en,ua)
  • $translations - массив с переменными переводов, который редактирует клиент

Функция записывает результат своей работы в файл


Функция init_one()

Код функции (спойлер)
    private function init_one($label = "") {
        if (empty($label)) {
            return false;
        }
        if (!isset($this->vars[$label])) {
            $file = __DIR__.'/../design/'.$this->settings->theme.'/lang/'.$label.'.php';
            if (file_exists($file)) {
                $lang = array();
                require_once $file;
                $this->vars[$label] = $lang;
            } else {
                $this->vars[$label] = array();
            }
        }
        return $this->vars[$label];
    }

Функция инициализации файла переводов для клиентского шаблона

Функция принимает один аргумент $label

Параметры которые содержит функция:

  • $label - метка языка, перевод которого следует подключить

Функция возвращает объект с переводами шаблона


Функция init_translations()

Код функции (спойлер)
    private function init_translations() {
        foreach ($this->languages->get_languages() as $l) {
            $this->init_one($l->label);
        }
        return $this->vars;
    }

Фукнция инициализации переводов


Функция get_translation()

Код функции (спойлер)
    public function get_translation($id) {
        $translation = array();
        foreach ($this->languages->get_languages() as $l) {
            $result = $this->init_one($l->label);
            if (isset($result[$id])) {
                $translation['lang_' . $l->label] = $result[$id];
            }
        }
        if (count($translation) > 0) {
            $translation['id'] = $id;
            $translation['label'] = $id;
            return (object)$translation;
        }
        return false;
    }

Фукнция для выбора конкретной переменной перевода

Функция принимает один аргумент $id

Параметры которые содержит функция:

  • $id - id выбираемого перевода

Функция возвращает объект с переводом переменной,в случае, если они есть


Функция get_translations()

Код функции (спойлер)
    public function get_translations($filter = array()) {
        if (!empty($filter['lang'])) {
            $result = $this->init_one($filter['lang']);
        } else {
            $result = array();
            die('get_translations empty(filter["lang"])');
        }
        if (!empty($filter['sort'])) {
            switch ($filter['sort']) {
                case 'label':
                    ksort($result);
                    break;
                case 'label_desc':
                    krsort($result);
                    break;
                case 'date_desc':
                    $result = array_reverse($result);
                    break;
                case 'translation':
                    asort($result);
                    break;
                case 'translation_desc':
                    arsort($result);
                    break;
            }
        }
        return (object)$result;
    }

Фукнция выборки всех переводов текущего языка (для клиентской части)

Функция принимает один аргумент $filter

Параметры которые содержит функция:

  • $filter['lang'] - язык, для которого нужно выбрать переменные с переводами

Функция возвращает объект с результатами


Функция update_translation()

Код функции (спойлер)
    public function update_translation($id, $data) {
        $data = (array)$data;
        $this->init_translations();
        foreach ($this->vars as $lang_label=>&$translations) {
            if ($id != $data['label']) {
                unset($translations[$id]);
            }
            $translations[$data['label']] = $data['lang_'.$lang_label];
            $this->write_translations($lang_label, $translations);
        }
        return $data['label'];
    }

Фукнция обновления перевода

Функция принимает два аргумента $id, $data

Параметры которые содежит функция:

  • $id - id переменной перевода
  • $data - данные для обновления

Функция возвращает обновленные данные (переводы)


Функция delete_translation()

Код функции (спойлер)
    public function delete_translation($id) {
        if(!empty($id)) {
            $this->init_translations();
            foreach ($this->vars as $lang_label=>&$translations) {
                unset($translations[$id]);
                $this->write_translations($lang_label, $translations);
            }
        }
    }

Фукнция удаления перевода

Функция принимает один аргумент $id

Параметры которые содержит функция:

  • $id - id переменной перевода, которую следует удалить

Функция copy_translations()

Код функции (спойлер)
    public function copy_translations($label_src, $label_dest) {
        if (empty($label_src) || empty($label_dest) || $label_src == $label_dest) {
            return;
        }
        $themes_dir = __DIR__.'/../design/';
        foreach (glob($themes_dir.'*', GLOB_ONLYDIR) as $theme) {
            if (file_exists($theme.'/lang/')) {
                $src = $theme.'/lang/'.$label_src.'.php';
                $dest = $theme.'/lang/'.$label_dest.'.php';
                if (file_exists($src) && !file_exists($dest)) {
                    copy($src, $dest);
                    @chmod($dest, 0664);
                }
            }
        }
    }

Фукнция копирования файлов перевода (при создании новой темы)

Функция принимает два аргумента $label_src, $label_dest

Параметры которые содержит функция:

  • $label_src - источник, откуда следует копировать переводы
  • $label_dest - директория назначения, куда следует поместить файлы переводов