<?php
session_start();
// Set default language from database settings or fallback to 'en'
if (!isset($_SESSION['lang'])) {
$def = 'en';
if (file_exists(__DIR__ . '/db.php')) {
try {
require_once 'db.php';
$stmt = $pdo->query("SELECT value FROM settings WHERE name = 'default_lang'");
$val = $stmt->fetchColumn();
if ($val) $def = $val;
} catch (Exception $e) {
}
}
$_SESSION['lang'] = $def;
}
// Handle change
if (isset($_GET['lang'])) {
$lang = $_GET['lang'];
if (in_array($lang, ['en', 'uk', 'ru'])) {
$_SESSION['lang'] = $lang;
}
}
$lang = $_SESSION['lang'];
$translations = [
'en' => [
'login_title' => 'Login',
'register_title' => 'Register',
'username_email' => 'Username or Email',
'username' => 'Username',
'email' => 'Email',
'password' => 'Password',
'login_btn' => 'Login',
'register_btn' => 'Register',
'no_account' => "Don't have an account?",
'has_account' => "Already have an account?",
'error_auth' => 'Invalid credentials.',
'error_fields' => 'All fields are required.',
'error_taken' => 'Username or Email already taken.',
'pass_mismatch' => 'Passwords do not match.',
'welcome' => 'Welcome',
'logout' => 'Logout',
'type_msg' => 'Type a message...',
'online' => 'Online',
'connecting' => 'Connecting...',
'no_online' => 'No one else online',
'typing' => 'is typing...',
'bot_typing' => 'is typing...',
'recording' => 'Recording...',
'voice_message' => 'Voice Message',
'replying_to' => 'Replying to',
'confirm_delete' => 'Delete this message?',
'msg_deleted' => 'Message deleted',
'rooms_title' => 'Rooms',
'new_room_placeholder' => 'New Room',
'rename_room_prompt' => 'New name:',
'delete_room_confirm' => 'Delete this room and its messages?',
'rooms' => 'Rooms',
'new_room' => 'New Room',
'cancel' => 'Cancel',
'room_general' => 'General',
'admin_panel' => 'Admin Panel',
'username' => 'Username',
'password' => 'Password',
'role' => 'Role',
'dashboard' => 'Dashboard',
'users' => 'Users',
'rooms' => 'Rooms',
'settings' => 'Settings',
'back_to_chat' => 'Back to Chat',
'total_users' => 'Total Users',
'total_msgs' => 'Total Messages',
'active_rooms' => 'Active Rooms',
'quick_nav' => 'Quick Navigation',
'admin_welcome' => 'Welcome to the administration panel. Here you can manage users, control chat rooms, and customize the global settings of your application.',
'manage_users' => 'Manage Users',
'create_user' => 'Create New User',
'standard_user' => 'Standard User',
'administrator' => 'Administrator',
'create_account' => 'Create Account',
'last_activity' => 'Last Activity',
'status' => 'Status',
'actions' => 'Actions',
'active' => 'Active',
'blocked' => 'Blocked',
'unblock' => 'Unblock',
'block' => 'Block',
'delete' => 'Delete',
'delete_room_btn' => 'Delete Room',
'site_title' => 'Site Title',
'site_logo' => 'Site Logo / Favicon',
'footer_copyright' => 'Footer Copyright Text',
'primary_lang' => 'Primary Site Language',
'apply_settings' => 'Apply Global Settings',
'settings_updated' => 'Settings updated!',
'user_deleted' => 'User deleted.',
'room_deleted' => 'Room deleted.',
'status_updated' => 'Status updated.',
'role_updated' => 'User role updated to',
'profile' => 'Profile',
'change_avatar' => 'Change Avatar',
'save_changes' => 'Save Changes',
'upload_new_avatar' => 'Upload New Avatar',
'update_success' => 'Profile updated successfully!',
'account_blocked' => 'Your account is blocked. Please contact admin.',
'registration_failed' => 'Registration failed.',
'avatar_optional' => 'Avatar (Optional)',
'user_info' => 'User Info',
'edit_user' => 'Edit User',
'new_nickname' => 'New Nickname',
'new_email' => 'New Email',
'add_bot' => 'Add Bot',
'remove_bot' => 'Remove Bot',
'bot_joined' => 'ChatBot has joined the room!',
'bot_left' => 'ChatBot has left the room.',
'edit_room' => 'Edit Room',
'room_name_new' => 'New Room Name',
'video_call' => 'Video Call',
'start_video_call' => 'Start Video Call',
'incoming_call' => 'Incoming Video Call',
'accept_call' => 'Accept',
'decline_call' => 'Decline',
'end_call' => 'End Call',
'calling' => 'Calling',
'call_ended' => 'Call Ended',
'camera_off' => 'Camera Off',
'camera_on' => 'Camera On',
'mic_off' => 'Microphone Off',
'mic_on' => 'Microphone On',
'call_failed' => 'Call failed. Please try again.',
'close' => 'Close',
'room_members' => 'members',
'save_changes' => 'Save Changes',
'choose_file' => 'Choose file...',
'browse' => 'Browse',
'or_enter_url' => 'Or enter URL below:',
'default_lang_help' => 'This will be the default for new guest users.',
'user_created' => 'User created successfully.',
'connected' => 'Connected',
'video_call_started' => 'Video call started',
'video_call_ended' => 'Video call ended',
'audio_video_calls' => 'Audio & Video Calls',
'next_gen_messenger' => 'NEXT GENERATION MESSENGER',
'video_module_activated' => '[Video Module Activated 💎]',
'video_license' => 'SECURE CONNECTION • END-TO-END ENCRYPTED',
],
'uk' => [
'login_title' => 'Вхід',
'register_title' => 'Реєстрація',
'username_email' => 'Логін або Email',
'username' => 'Логін',
'email' => 'Email',
'password' => 'Пароль',
'login_btn' => 'Увійти',
'register_btn' => 'Зареєструватися',
'no_account' => "Немає аккаунту?",
'has_account' => "Вже є аккаунт?",
'error_auth' => 'Невірні дані.',
'error_fields' => 'Всі поля обов\'язкові.',
'error_taken' => 'Логін або Email вже зайняті.',
'pass_mismatch' => 'Паролі не співпадають.',
'welcome' => 'Вітаємо',
'logout' => 'Вийти',
'type_msg' => 'Введіть повідомлення...',
'online' => 'Онлайн',
'connecting' => 'З\'єднання...',
'no_online' => 'Більше нікого немає',
'typing' => 'друкує...',
'bot_typing' => 'набирає повідомлення...',
'recording' => 'Запис...',
'voice_message' => 'Голосове повідомлення',
'replying_to' => 'Відповідь для',
'confirm_delete' => 'Видалити це повідомлення?',
'msg_deleted' => 'Повідомлення видалено',
'rooms_title' => 'Кімнати',
'new_room_placeholder' => 'Нова кімната',
'rename_room_prompt' => 'Нова назва:',
'delete_room_confirm' => 'Видалити цю кімнату та всі повідомлення?',
'rooms' => 'Кімнати',
'new_room' => 'Нова кімната',
'cancel' => 'Скасувати',
'room_general' => 'Загальна',
'admin_panel' => 'Адмін-панель',
'username' => 'Логін',
'password' => 'Пароль',
'role' => 'Роль',
'dashboard' => 'Дашборд',
'users' => 'Користувачі',
'rooms' => 'Кімнати',
'settings' => 'Налаштування',
'back_to_chat' => 'Назад до чату',
'total_users' => 'Всього користувачів',
'total_msgs' => 'Всього повідомлень',
'active_rooms' => 'Активні кімнати',
'quick_nav' => 'Швидка навігація',
'admin_welcome' => 'Ласкаво просимо до адміністративної панелі. Тут ви можете керувати користувачами, контролювати чат-кімнати та налаштовувати глобальні параметри вашої програми.',
'manage_users' => 'Керування користувачами',
'create_user' => 'Створити нового користувача',
'standard_user' => 'Звичайний користувач',
'administrator' => 'Адміністратор',
'create_account' => 'Створити акаунт',
'last_activity' => 'Остання активність',
'status' => 'Статус',
'actions' => 'Дії',
'active' => 'Активний',
'blocked' => 'Заблокований',
'unblock' => 'Розблокувати',
'block' => 'Блок',
'delete' => 'Видалити',
'delete_room_btn' => 'Видалити кімнату',
'site_title' => 'Заголовок сайту',
'site_logo' => 'Логотип / Favicon',
'footer_copyright' => 'Текст копірайту у футері',
'primary_lang' => 'Основна мова сайту',
'apply_settings' => 'Застосувати налаштування',
'settings_updated' => 'Налаштування оновлено!',
'user_deleted' => 'Користувача видалено.',
'room_deleted' => 'Кімнату видалено.',
'status_updated' => 'Статус оновлено.',
'role_updated' => 'Роль користувача оновлено на',
'profile' => 'Профіль',
'change_avatar' => 'Змінити аватар',
'save_changes' => 'Зберегти зміни',
'upload_new_avatar' => 'Завантажити новий аватар',
'update_success' => 'Профіль успішно оновлено!',
'account_blocked' => 'Ваш акаунт заблоковано. Будь ласка, зверніться до адміністратора.',
'registration_failed' => 'Помилка реєстрації.',
'avatar_optional' => 'Аватар (необов\'язково)',
'user_info' => 'Інформація про користувача',
'edit_user' => 'Редагувати користувача',
'new_nickname' => 'Новий нікнейм',
'new_email' => 'Новий Email',
'add_bot' => 'Додати бота',
'remove_bot' => 'Прибрати бота',
'bot_joined' => 'ChatBot приєднався до кімнати!',
'bot_left' => 'ChatBot покинув кімнату.',
'edit_room' => 'Редагувати кімнату',
'room_name_new' => 'Нова назва кімнати',
'video_call' => 'Відеодзвінок',
'start_video_call' => 'Почати відеодзвінок',
'incoming_call' => 'Вхідний відеодзвінок',
'accept_call' => 'Прийняти',
'decline_call' => 'Відхилити',
'end_call' => 'Завершити дзвінок',
'calling' => 'Дзвінок',
'call_ended' => 'Дзвінок завершено',
'camera_off' => 'Камера вимкнена',
'camera_on' => 'Камера увімкнена',
'mic_off' => 'Мікрофон вимкнений',
'mic_on' => 'Мікрофон увімкнений',
'call_failed' => 'Дзвінок не вдався. Спробуйте ще раз.',
'close' => 'Закрити',
'room_members' => 'учасників',
'save_changes' => 'Зберегти зміни',
'choose_file' => 'Виберіть файл...',
'browse' => 'Огляд',
'or_enter_url' => 'Або введіть URL нижче:',
'dashboard' => 'Дашборд',
'users' => 'Користувачі',
'rooms' => 'Кімнати',
'settings' => 'Налаштування',
'back_to_chat' => 'Назад до чату',
'features' => 'Функціонал',
'enable_voice' => 'Увімкнути голосові повідомлення',
'enable_video' => 'Увімкнути відеодзвінки',
'connected' => 'З\'єднано',
'video_call_started' => 'Відеодзвінок розпочато',
'video_call_ended' => 'Відеодзвінок завершено',
'audio_video_calls' => 'Аудіо та Відео дзвінки',
'next_gen_messenger' => 'МЕСЕНДЖЕР нового покоління',
'video_module_activated' => '[Відеомодуль активовано 💎]',
'video_license' => 'БЕЗПЕЧНЕ З\'ЄДНАННЯ • НАСКРІЗНЕ ШИФРУВАННЯ',
],
'ru' => [
'login_title' => 'Вход',
'register_title' => 'Регистрация',
'username_email' => 'Логин или Email',
'username' => 'Логин',
'email' => 'Email',
'password' => 'Пароль',
'login_btn' => 'Войти',
'register_btn' => 'Зарегистрироваться',
'no_account' => "Нет аккаунта?",
'has_account' => "Уже есть аккаунт?",
'error_auth' => 'Неверные данные.',
'error_fields' => 'Все поля обязательны.',
'error_taken' => 'Логин или Email уже заняты.',
'pass_mismatch' => 'Пароли не совпадают.',
'welcome' => 'Добро пожаловать',
'logout' => 'Выйти',
'type_msg' => 'Введите сообщение...',
'online' => 'Онлайн',
'connecting' => 'Соединение...',
'no_online' => 'Больше никого нет',
'typing' => 'печатает...',
'bot_typing' => 'набирает сообщение...',
'recording' => 'Запись...',
'voice_message' => 'Голосовое сообщение',
'replying_to' => 'Ответ для',
'confirm_delete' => 'Удалить это сообщение?',
'msg_deleted' => 'Сообщение удалено',
'rooms_title' => 'Комнаты',
'new_room_placeholder' => 'Новая комната',
'rename_room_prompt' => 'Новое название:',
'delete_room_confirm' => 'Удалить эту комнату и все сообщения?',
'rooms' => 'Комнаты',
'new_room' => 'Новая комната',
'cancel' => 'Отмена',
'room_general' => 'Общая',
'admin_panel' => 'Админ-панель',
'username' => 'Логин',
'password' => 'Пароль',
'role' => 'Роль',
'dashboard' => 'Дашборд',
'users' => 'Пользователи',
'rooms' => 'Комнаты',
'settings' => 'Настройки',
'back_to_chat' => 'Назад в чат',
'total_users' => 'Всего пользователей',
'total_msgs' => 'Всего сообщений',
'active_rooms' => 'Активные комнаты',
'quick_nav' => 'Быстрая навигация',
'admin_welcome' => 'Добро пожаловать в административную панель. Здесь вы можете управлять пользователями, контролировать чат-комнаты и настраивать глобальные параметры вашего приложения.',
'manage_users' => 'Управление пользователями',
'create_user' => 'Создать пользователя',
'standard_user' => 'Обычный пользователь',
'administrator' => 'Администратор',
'create_account' => 'Создать аккаунт',
'last_activity' => 'Последняя активность',
'status' => 'Статус',
'actions' => 'Действия',
'active' => 'Активен',
'blocked' => 'Заблокирован',
'unblock' => 'Разблокировать',
'block' => 'Блок',
'delete' => 'Удалить',
'delete_room_btn' => 'Удалить комнату',
'site_title' => 'Заголовок сайта',
'site_logo' => 'Логотип / Favicon',
'footer_copyright' => 'Текст копирайта в футере',
'primary_lang' => 'Основной язык сайта',
'apply_settings' => 'Применить настройки',
'settings_updated' => 'Настройки обновлены!',
'user_deleted' => 'Пользователь удален.',
'room_deleted' => 'Комната удалена.',
'status_updated' => 'Статус обновлен.',
'role_updated' => 'Роль пользователя обновлена на',
'profile' => 'Профиль',
'change_avatar' => 'Сменить аватар',
'save_changes' => 'Сохранить изменения',
'upload_new_avatar' => 'Загрузить новый аватар',
'update_success' => 'Профиль успешно обновлен!',
'account_blocked' => 'Ваш аккаунт заблокирован. Пожалуйста, свяжитесь с администратором.',
'registration_failed' => 'Ошибка регистрации.',
'avatar_optional' => 'Аватар (необязательно)',
'user_info' => 'Информация о пользователе',
'edit_user' => 'Редактировать пользователя',
'new_nickname' => 'Новый никнейм',
'new_email' => 'Новый Email',
'add_bot' => 'Добавить бота',
'remove_bot' => 'Убрать бота',
'bot_joined' => 'ChatBot присоединился к комнате!',
'bot_left' => 'ChatBot покинул комнату.',
'edit_room' => 'Редактировать комнату',
'room_name_new' => 'Новое название комнаты',
'video_call' => 'Видеозвонок',
'start_video_call' => 'Начать видеозвонок',
'incoming_call' => 'Входящий видеозвонок',
'accept_call' => 'Принять',
'decline_call' => 'Отклонить',
'end_call' => 'Завершить звонок',
'calling' => 'Звонок',
'call_ended' => 'Звонок завершен',
'camera_off' => 'Камера выключена',
'camera_on' => 'Камера включена',
'mic_off' => 'Микрофон выключен',
'mic_on' => 'Микрофон включен',
'call_failed' => 'Звонок не удался. Попробуйте еще раз.',
'close' => 'Закрыть',
'room_members' => 'участников',
'save_changes' => 'Сохранить изменения',
'choose_file' => 'Выберите файл...',
'browse' => 'Обзор',
'or_enter_url' => 'Или введите URL ниже:',
'dashboard' => 'Дашборд',
'users' => 'Пользователи',
'rooms' => 'Комнаты',
'settings' => 'Настройки',
'back_to_chat' => 'Назад к чату',
'user_created' => 'Пользователь успешно создан.',
'connected' => 'Соединено',
'video_call_started' => 'Видеозвонок начат',
'video_call_ended' => 'Видеозвонок завершен',
'audio_video_calls' => 'Аудио и Видео звонки',
'next_gen_messenger' => 'МЕССЕНДЖЕР нового поколения',
'video_module_activated' => '[Видеомодуль активирован 💎]',
'video_license' => 'БЕЗОПАСНОЕ СОЕДИНЕНИЕ • СКВОЗНОЕ ШИФРОВАНИЕ',
]
];
$t = $translations[$lang];
function lang_links()
{
$uri = strtok($_SERVER["REQUEST_URI"], '?');
$qs = $_GET;
unset($qs['lang']);
$langs = ['en', 'uk', 'ru'];
$html = '<div class="lang-switcher" style="text-align:center; margin-bottom: 1rem;">';
foreach ($langs as $l) {
$qs['lang'] = $l;
$link = $uri . '?' . http_build_query($qs);
$active = ($_SESSION['lang'] === $l) ? 'font-weight:bold; text-decoration:underline;' : '';
$html .= "<a href='$link' style='margin:0 5px; color:var(--text-secondary); $active'>" . strtoupper($l) . "</a>";
}
$html .= '</div>';
return $html;
}