<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* MaxSite CMS
* (c) https://max-3000.com/
*
*/
// устанавливаем $MSO->current_lang_dir в которой хранится
// текущий каталог языка. Это второй параметр функции t()
// в связи с изменением алгоритма перевода, функция считается устаревшей
function mso_cur_dir_lang($dir = false)
{
// global $MSO;
// return $MSO->current_lang_dir = $dir;
}
// Языковой перевод MaxSite CMS
// Описание см. ниже для _t()
// перевод только для frontend - фраз сайта.
function tf($w = '', $file = false)
{
return _t($w, $file, 'tf');
}
// перевод только для админки
function t($w = '', $file = false)
{
return _t($w, $file, 't');
}
// функция трансляции (языковой перевод)
// не использовать эту функцию!
// первый параметр - переводимое слово - учитывается регистр полностью
// второй параметр:
// __FILE__ (по нему вычисляется каталог перевода)
// mytemplate - текущий каталог
//
// Всегда подключается /common/language/ЯЗЫК-f.php
// если это админка, то подключается еще и /common/language/ЯЗЫК.php
// Если вторым параметром указан __FILE__ то подключается перевод из каталога language
// откуда была вызвана функция t() или tf().
// Если второй параметр это mytemplate, то подключается language текущего шаблона
// Если второй параметр не указан, то он принимается равным mytemplate, что позволяет использовать перевод в шаблоне
// $label нужна для файла MSO__PLEASE__ADD__FILE_LANG
function _t($w = '', $file = false, $label = '')
{
global $MSO;
static $langs = []; // общий массив перевода
static $file_langs = []; // список уже подключенных файлов
static $all_w = [];
// только для получения переводимых фраз и отладки!
// ОПИСАНИЕ см. в common/language/readme.txt
if (defined('MSO__PLEASE__RETURN__LANGS')) {
if ($w === '__please__return__langs__') return $langs;
if ($w === '__please__return__w__') return array_unique($all_w);
if ($w === '__please__return__file_langs__') return array_unique($file_langs);
if ($w) $all_w[] = $w;
}
// отслеживание всех переводимых фраз — РЕСУРСОЁМКО, ТОЛЬКО ДЛЯ ОТЛАДКИ
if (defined('MSO__PLEASE__ADD__FILE_LANG')) require MSO__PLEASE__ADD__FILE_LANG;
if (!isset($MSO->language)) return $w; // язык вообще не существует, выходим
if (!($current_language = $MSO->language)) return $w; // есть, но не указан язык, выходим
// проверим перевод, возможно он уже есть
if (isset($langs[$w]) and $langs[$w]) return $langs[$w];
/*
на примере en
/common/language/en-f.php - перевод для frontend (функция tf )
/common/language/en.php - перевод для админки (функция t )
всегда загружается ($file_langs['common'])
/common/language/en-f.php
если это админка, ($file_langs['admin']) то
/common/language/en.php - перевод для админки (функция t )
если __FILE__, то загружаем и его.
*/
if (!isset($file_langs['common'])) {
// common был не подключен
$langs = _t_add_file_to_lang($langs, 'common/language/', $current_language . '-f'); // front
$file_langs['common'] = 'common/language/' . $current_language . '-f';
}
// если не указан $file то даём приоритет текущему шаблону
if ($file === false) $file = 'mytemplate';
// в админке подключаем свой перевод автоматом
if (mso_segment(1) == 'admin') {
if (!isset($file_langs['admin'])) {
// admin был не подключен
$langs = _t_add_file_to_lang($langs, 'common/language/', $current_language);
$file_langs['admin'] = 'common/language/' . $current_language;
}
}
if ($file == 'mytemplate' and !isset($file_langs['mytemplate'])) {
// mytemplate был не подключен
$langs = _t_add_file_to_lang($langs, 'templates/' . $MSO->config['template'] . '/language/', $current_language);
$file_langs['mytemplate'] = 'templates/' . $MSO->config['template'] . '/language/' . $current_language;
}
// возможно указан свой каталог в __FILE__
// условия оставляю для совместимости со старым переводом
if ($file and $file != 'admin' and $file != 'plugins' and $file != 'templates' and $file != 'mytemplate') {
// ключ = $file так меньше вычислений
if (!isset($file_langs[$file])) {
// заменим windows \ на /
$fn = str_replace('\\', '/', $file);
$bd = str_replace('\\', '/', $MSO->config['base_dir']);
// если в $file входит base_dir, значит это использован __FILE__
// нужно вычленить base_dir
$pos = strpos($fn, $bd);
if ($pos !== false) {
$fn = str_replace($bd, '', $fn);
$fn = dirname($file) . '/language/';
$langs = _t_add_file_to_lang($langs, $fn, $current_language, true);
}
$file_langs[$file] = true;
}
}
if (isset($langs[$w]) and $langs[$w]) return $langs[$w]; // проверка перевода
// перевода нет :-(
return $w;
}
// служебная функция для _t()
// нигде не использовать!
function _t_add_file_to_lang($langs, $path, $current_language, $full_name = false)
{
global $MSO;
if ($full_name)
$fn = $path . $current_language . '.php';
else
$fn = $MSO->config['base_dir'] . $path . $current_language . '.php';
if (file_exists($fn)) {
require_once $fn; // есть такой файл
if (isset($lang)) $langs = array_merge($langs, $lang); // есть ли в нем $lang ?
}
return $langs;
}
# end of file