Quantcast
Channel: Блоги в Nulled Warez Scripts
Viewing all articles
Browse latest Browse all 238

[Ебёмcя с DLE] Получаем текущий язык на сайта.

$
0
0
Всем привет! Я начинаю ряд публикаций в помощь разработчикам. Каждый пост будет решать одну проблему, размер которой может быть 1 строчка, а может быть 1 Мб кода... Посты делятся на 3 части: 1) Описание проблемы 2) Размышление на тему 3) Решение проблемы

Как узнать текущий язык на сайте? Как выбирается язык на сайте? Как правильно подключить
Весьма часто при разработке хочется сделать lang-файл для своих модулей, но как получить текущий язык сайта? Видел в интернете предлагают использовать $config['langs']. Значение действительно по началу выдаёт то, что нужно - огорчу, это язык по-умолчанию и не имеет ничего общего с текущим языкам. Просто мало кто тестирует сайт сразу на 2 языках...

Со сменой языка на сайте вообще полная задница... Понятия языка там нет вообще - вместо этого используется шаблоны...

Как же это работает? На сайте язык выбирается на основании настроек шаблона в админ-панели. Т.е. каждый шаблон может работать только с 1 языком - ну не труба ли? Чтобы добавить ещё один язык - создайте копию шаблона и в настройках вбейте другой язык. В коде это выглядит так:

PHP:
if (isset ( $config["lang_" $config['skin']] ) and $config["lang_" $config['skin']] != '') {
    if ( 
file_existsROOT_DIR '/language/' $config["lang_" $config['skin']] . '/website.lng' ) ) {
        include_once 
ROOT_DIR '/language/' $config["lang_" $config['skin']] . '/website.lng';
    } else die(
"Language file not found");
} else {

    include_once 
ROOT_DIR '/language/' $config['langs'] . '/website.lng';

}
Ок, а что с админкой? Вот сколько CMS не встречал - в админке всегда всё хуже, чем в пользовательской части... Но не в этот раз. DLE полностью поддерживает смену языков в админ-панели... В коде это выглядит так:
PHP:
$selected_language $config['langs'];

if (isset( 
$_POST['selected_language'] )) {

    
$_POST['selected_language'] = totranslit$_POST['selected_language'], falsefalse );

    if (
$_POST['selected_language'] != "" AND @is_dir ROOT_DIR '/language/' $_POST['selected_language'] )) {
        
$selected_language $_POST['selected_language'];
        
set_cookie "selected_language"$selected_language365 );

    }

} elseif (isset( 
$_COOKIE['selected_language'] )) { 

    
$_COOKIE['selected_language'] = totranslit$_COOKIE['selected_language'], falsefalse );

    if (
$_COOKIE['selected_language'] != "" AND @is_dir ROOT_DIR '/language/' $_COOKIE['selected_language'] )) {
        
$selected_language $_COOKIE['selected_language'];
    }

}
if ( 
file_existsROOT_DIR '/language/' $selected_language '/adminpanel.lng' ) ) {
    require_once (
ROOT_DIR '/language/' $selected_language '/adminpanel.lng');
} else die(
"Language file not found");
Так как же определить текущий язык?
Да очень просто. В пользовательской части проверяем $config["lang_" . $config['skin']], $config['skin'] - содержит название шаблона, ну а $config["lang_" . $config['skin']] - язык. Если язык не указан - то можно забрать из $config['langs']. В админке всё ещё проще - тупо забираем $selected_language.

И так, как же правильно подключить свой языковой файл?
В пользовательской части не будем оригинальничать и воспользуемся вариантом разработчика:
PHP:
if (isset ( $config["lang_" $config['skin']] ) and $config["lang_" $config['skin']] != '') {
    if ( 
file_existsROOT_DIR '/language/' $config["lang_" $config['skin']] . '/file.lng' ) ) {
        include_once 
ROOT_DIR '/language/' $config["lang_" $config['skin']] . '/file.lng';
    } else die(
"Language file not found");
} else {
    include_once 
ROOT_DIR '/language/' $config['langs'] . '/file.lng';
}
В админской части всё примерно так же:
PHP:
if ( file_existsROOT_DIR '/language/' $selected_language '/file.lng' ) ) {
    require_once (
ROOT_DIR '/language/' $selected_language '/file.lng');
}
else {
    include_once 
ROOT_DIR '/language/' $config['langs'] . '/file.lng';
}
Это интересно:
Разработчик ДЛЕ очень странно ведёт себя с подключением файлов. Так в модуле "Список действий в админпанели" подключение языка выглядит так:
PHP:
if ( file_existsROOT_DIR '/language/' $selected_language '/adminlogs.lng' ) ) {
    require_once (
ROOT_DIR '/language/' $selected_language '/adminlogs.lng');
}
Если где-то подменить $selected_language (каким-нить модулем) - то язык не подключится...

Возникает вопрос: Если ты так доверяешь переменной $selected_language, что не задаёшь варианта "иначе" - зачем проверка? И почему мы не делаем вариант "инваче", ведь если if вернёт flse, то язык не подключится вообще...

Есть идеи для следующей статьи - пиши в личку!

Viewing all articles
Browse latest Browse all 238

Trending Articles