ModuleLang

Package engine.modules
Inheritance class ModuleLang » Module » LsObject
Since 1.0
Source Code /engine/modules/lang/Lang.class.php
Модуль поддержки языковых файлов

Protected Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
aLangMsg array Список языковых текстовок ModuleLang
aLangMsgJs array Список текстовок для JS ModuleLang
bIsInit bool Указывает на то, была ли проведенна инициализация модуля Module
oEngine Engine Объект ядра Module
sCurrentLang string Текущий язык ресурса ModuleLang
sDefaultLang string Язык ресурса, используемый по умолчанию ModuleLang
sLangPath string Путь к языковым файлам ModuleLang

Public Methods

Hide inherited methods

MethodDescriptionDefined By
AddLangJs() Добавляет текстовку к JS ModuleLang
AddMessage() Добавить к текстовкам отдельное сообщение ModuleLang
AddMessages() Добавить к текстовкам массив сообщений ModuleLang
Get() Получает текстовку по её имени ModuleLang
GetLang() Получить текущий язык ModuleLang
GetLangDefault() Получить дефолтный язык ModuleLang
GetLangMsg() Получить список текстовок ModuleLang
Init() Инициализация модуля ModuleLang
LoadLangFileTemplate() Загружает языковой файл текущего шаблона ModuleLang
SetInit() Помечает модуль как инициализированный Module
SetLang() Установить текущий язык ModuleLang
Shutdown() Завершаем работу модуля ModuleLang
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля Module
__construct() При создании модуля передаем объект ядра Module
isInit() Возвращает значение флага инициализации модуля Module

Protected Methods

Hide inherited methods

MethodDescriptionDefined By
AssignToJs() Прогружает в шаблон текстовки в виде JS ModuleLang
InitLang() Инициализирует языковой файл ModuleLang
LoadLangFiles() Загружает текстовки из языковых файлов ModuleLang
LoadLangJs() Загружает из конфига текстовки для JS ModuleLang
__clone() Блокируем копирование/клонирование объекта Module

Property Details

aLangMsg property
protected array $aLangMsg;

Список языковых текстовок

aLangMsgJs property
protected array $aLangMsgJs;

Список текстовок для JS

sCurrentLang property
protected string $sCurrentLang;

Текущий язык ресурса

sDefaultLang property
protected string $sDefaultLang;

Язык ресурса, используемый по умолчанию

sLangPath property
protected string $sLangPath;

Путь к языковым файлам

Method Details

AddLangJs() method
public void AddLangJs(array $aKeys)
$aKeys array Список текстовок
Source Code: /engine/modules/lang/Lang.class.php#119 (show)
public function AddLangJs($aKeys) {
    if (!
is_array($aKeys)) {
        
$aKeys=array($aKeys);
    }
    
$this->aLangMsgJs=array_merge($this->aLangMsgJs,$aKeys);
}

Добавляет текстовку к JS

AddMessage() method
public void AddMessage(string $sKey, string $sMessage)
$sKey string Имя текстовки
$sMessage string Значение текстовки
Source Code: /engine/modules/lang/Lang.class.php#289 (show)
public function AddMessage($sKey$sMessage) {
    
$this->aLangMsg[$sKey] = $sMessage;
}

Добавить к текстовкам отдельное сообщение

AddMessages() method
public void AddMessages(array $aMessages, array|null $aParams=NULL)
$aMessages array Список текстовок для добавления
$aParams array|null Параметры, позволяют хранить текстовки в структурированном виде, например, тестовки плагина "test" получать как Get('plugin.name.test')
Source Code: /engine/modules/lang/Lang.class.php#263 (show)
public function AddMessages($aMessages$aParams null) {
    if (
is_array($aMessages)) {
        if (isset(
$aParams['name'])) {
            
$sMsgs=$aMessages;
            if (isset(
$aParams['category'])) {
                if (isset(
$this->aLangMsg[$aParams['category']][$aParams['name']])) {
                    
$sMsgs=array_merge($this->aLangMsg[$aParams['category']][$aParams['name']],$sMsgs);
                }
                
$this->aLangMsg[$aParams['category']][$aParams['name']]=$sMsgs;
            } else {
                if (isset(
$this->aLangMsg[$aParams['name']])) {
                    
$sMsgs=array_merge($this->aLangMsg[$aParams['name']],$sMsgs);
                }
                
$this->aLangMsg[$aParams['name']]=$sMsgs;
            }
        } else {
            
$this->aLangMsg array_merge($this->aLangMsg$aMessages);
        }
    }
}

Добавить к текстовкам массив сообщений

AssignToJs() method
protected void AssignToJs()
Source Code: /engine/modules/lang/Lang.class.php#107 (show)
protected function AssignToJs() {
    
$aLangMsg=array();
    foreach (
$this->aLangMsgJs as $sName) {
        
$aLangMsg[$sName]=$this->Get($sName,array(),false);
    }
    
$this->Viewer_Assign('aLangJs',$aLangMsg);
}

Прогружает в шаблон текстовки в виде JS

Get() method
public string Get(string $sName, array $aReplace=array ( ), bool $bDelete=true)
$sName string Имя текстовки
$aReplace array Список параметром для замены в текстовке
$bDelete bool Удалять или нет параметры, которые не были заменены
{return} string
Source Code: /engine/modules/lang/Lang.class.php#226 (show)
public function Get($sName,$aReplace=array(),$bDelete=true) {
    if (
strpos($sName'.')) {
        
$sLang $this->aLangMsg;
        
$aKeys explode('.'$sName);
        foreach (
$aKeys as $k) {
            if (isset(
$sLang[$k])) {
                
$sLang $sLang[$k];
            } else {
                return  
'NOT_FOUND_LANG_TEXT';
            }
        }
    } else {
        if (isset(
$this->aLangMsg[$sName])) {
            
$sLang=$this->aLangMsg[$sName];
        } else {
            return 
'NOT_FOUND_LANG_TEXT';
        }
    }

    if(
is_array($aReplace)&&count($aReplace)&&is_string($sLang)) {
        foreach (
$aReplace as $sFrom => $sTo) {
            
$aReplacePairs["%%{$sFrom}%%"]=$sTo;
        }
        
$sLang=strtr($sLang,$aReplacePairs);
    }

    if(
Config::Get('module.lang.delete_undefined') and $bDelete and is_string($sLang)) {
        
$sLang=preg_replace("/\%\%[\S]+\%\%/U",'',$sLang);
    }
    return 
$sLang;
}

Получает текстовку по её имени

GetLang() method
public string GetLang()
{return} string
Source Code: /engine/modules/lang/Lang.class.php#199 (show)
public function GetLang() {
    return 
$this->sCurrentLang;
}

Получить текущий язык

GetLangDefault() method
public string GetLangDefault()
{return} string
Source Code: /engine/modules/lang/Lang.class.php#207 (show)
public function GetLangDefault() {
    return 
$this->sDefaultLang;
}

Получить дефолтный язык

GetLangMsg() method
public array GetLangMsg()
{return} array
Source Code: /engine/modules/lang/Lang.class.php#215 (show)
public function GetLangMsg() {
    return 
$this->aLangMsg;
}

Получить список текстовок

Init() method
public void Init()
Source Code: /engine/modules/lang/Lang.class.php#59 (show)
public function Init() {
    
$this->Hook_Run('lang_init_start');

    
$this->sCurrentLang Config::Get('lang.current');
    
$this->sDefaultLang Config::Get('lang.default');
    
$this->sLangPath Config::Get('lang.path');
    
$this->InitLang();
}

Инициализация модуля

InitLang() method
protected void InitLang()
Source Code: /engine/modules/lang/Lang.class.php#71 (show)
protected function InitLang() {
    
/**
     * Если используется кеширование через memcaсhed, то сохраняем данные языкового файла в кеш
     */
    
if (Config::Get('sys.cache.type')=='memory') {
        if (
false === ($this->aLangMsg $this->Cache_Get("lang_{$this->sCurrentLang}_".Config::Get('view.skin')))) {
            
$this->aLangMsg=array();
            
$this->LoadLangFiles($this->sDefaultLang);
            if(
$this->sCurrentLang!=$this->sDefaultLang$this->LoadLangFiles($this->sCurrentLang);
            
$this->Cache_Set($this->aLangMsg"lang_{$this->sCurrentLang}_".Config::Get('view.skin'), array(), 60*60);
        }
    } else {
        
$this->LoadLangFiles($this->sDefaultLang);
        if(
$this->sCurrentLang!=$this->sDefaultLang$this->LoadLangFiles($this->sCurrentLang);
    }

    
$this->LoadLangJs();
    
/**
     * Загружаем в шаблон
     */
    
$this->Viewer_Assign('aLang',$this->aLangMsg);
}

Инициализирует языковой файл

LoadLangFileTemplate() method
public void LoadLangFileTemplate(string $sLangName)
$sLangName string Язык для загрузки
Source Code: /engine/modules/lang/Lang.class.php#179 (show)
public function LoadLangFileTemplate($sLangName) {
    
$sFile=Config::Get('path.smarty.template').'/settings/language/'.$sLangName.'.php';
    if (
file_exists($sFile)) {
        
$this->AddMessages(include($sFile));
    }
}

Загружает языковой файл текущего шаблона

LoadLangFiles() method
protected void LoadLangFiles($sLangName $sLangName)
$sLangName $sLangName Язык для загрузки
Source Code: /engine/modules/lang/Lang.class.php#130 (show)
protected function LoadLangFiles($sLangName) {
    
$sLangFilePath $this->sLangPath.'/'.$sLangName.'.php';
    if(
file_exists($sLangFilePath)) {
        
$this->AddMessages(include($sLangFilePath));
    }
    
/**
     * Ищет языковые файлы модулей и объединяет их с текущим
     */
    
$sDirConfig=$this->sLangPath.'/modules/';
    if (
$hDirConfig opendir($sDirConfig)) {
        while (
false !== ($sDirModule readdir($hDirConfig))) {
            if (
$sDirModule !='.' and $sDirModule !='..' and is_dir($sDirConfig.$sDirModule)) {
                
$sFileConfig=$sDirConfig.$sDirModule.'/'.$sLangName.'.php';
                if (
file_exists($sFileConfig)) {
                    
$this->AddMessages(include($sFileConfig), array('category' =>'module''name' =>$sDirModule));
                }
            }
        }
        
closedir($hDirConfig);
    }
    
/**
     * Ищет языковые файлы актвиированных плагинов
     */
    
if($aPluginList Engine::getInstance()->GetPlugins()) {
        
$aPluginList=array_keys($aPluginList);
        
$sDir=Config::Get('path.root.server').'/plugins/';

        foreach (
$aPluginList as $sPluginName) {
            
$aFiles=glob($sDir.$sPluginName.'/templates/language/'.$sLangName.'.php');
            if(
$aFiles and count($aFiles)) {
                foreach (
$aFiles as $sFile) {
                    if (
file_exists($sFile)) {
                        
$this->AddMessages(include($sFile), array('category' =>'plugin''name' =>$sPluginName));
                    }
                }
            }
        }

    }
    
/**
     * Ищет языковой файл текущего шаблона
     */
    
$this->LoadLangFileTemplate($sLangName);
}

Загружает текстовки из языковых файлов

LoadLangJs() method
protected void LoadLangJs()
Source Code: /engine/modules/lang/Lang.class.php#97 (show)
protected function LoadLangJs() {
    
$aMsg=Config::Get('lang.load_to_js');
    if (
is_array($aMsg) and count($aMsg)) {
        
$this->aLangMsgJs=$aMsg;
    }
}

Загружает из конфига текстовки для JS

SetLang() method
public void SetLang(string $sLang)
$sLang string Название языка
Source Code: /engine/modules/lang/Lang.class.php#190 (show)
public function SetLang($sLang) {
    
$this->sCurrentLang=$sLang;
    
$this->InitLang();
}

Установить текущий язык

Shutdown() method
public void Shutdown()
Source Code: /engine/modules/lang/Lang.class.php#296 (show)
public function Shutdown() {
    
/**
     * Делаем выгрузку необходимых текстовок в шаблон в виде js
     */
    
$this->AssignToJs();
}

Завершаем работу модуля