ModuleLang
Package | engine.modules |
---|---|
Inheritance | class ModuleLang » Module » LsObject |
Since | 1.0 |
Source Code | /engine/modules/lang/Lang.class.php |
Модуль поддержки языковых файлов
Protected Properties
Property | Type | Description | Defined 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
Method | Description | Defined 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
Method | Description | Defined 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();
}
Завершаем работу модуля