![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/domains/soundstudiopro.com/private_html/includes/ |
<?php
/**
* Translation System for SoundStudioPro
* Supports English and French
*/
// Initialize session if not already started
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
// Define available languages
define('AVAILABLE_LANGUAGES', ['en', 'fr']);
define('DEFAULT_LANGUAGE', 'en');
/**
* Get current language from session or browser preference
*/
function getCurrentLanguage() {
// Check if language is set in session
if (isset($_SESSION['language']) && in_array($_SESSION['language'], AVAILABLE_LANGUAGES)) {
return $_SESSION['language'];
}
// Check if language is set via GET parameter
if (isset($_GET['lang']) && in_array($_GET['lang'], AVAILABLE_LANGUAGES)) {
$_SESSION['language'] = $_GET['lang'];
return $_GET['lang'];
}
// Try to detect from browser Accept-Language header
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
$browserLang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
if (in_array($browserLang, AVAILABLE_LANGUAGES)) {
$_SESSION['language'] = $browserLang;
return $browserLang;
}
}
// Default to English
$_SESSION['language'] = DEFAULT_LANGUAGE;
return DEFAULT_LANGUAGE;
}
/**
* Set language
*/
function setLanguage($lang) {
if (in_array($lang, AVAILABLE_LANGUAGES)) {
$_SESSION['language'] = $lang;
return true;
}
return false;
}
/**
* Load translation file
*/
function loadTranslations($lang) {
static $translations = [];
if (isset($translations[$lang])) {
return $translations[$lang];
}
$translationFile = __DIR__ . '/../lang/' . $lang . '.php';
if (file_exists($translationFile)) {
$translations[$lang] = require $translationFile;
return $translations[$lang];
}
// Fallback to English if translation file doesn't exist
if ($lang !== DEFAULT_LANGUAGE) {
$translationFile = __DIR__ . '/../lang/' . DEFAULT_LANGUAGE . '.php';
if (file_exists($translationFile)) {
$translations[$lang] = require $translationFile;
return $translations[$lang];
}
}
// Return empty array if no translation file exists
return [];
}
/**
* Translation function - main function to use throughout the site
* Usage: t('key') or t('key', ['param' => 'value'])
*/
function t($key, $params = []) {
$lang = getCurrentLanguage();
$translations = loadTranslations($lang);
// Get translation
$translation = $translations[$key] ?? $key;
// Replace parameters if provided
if (!empty($params)) {
foreach ($params as $paramKey => $paramValue) {
$translation = str_replace(':' . $paramKey, $paramValue, $translation);
}
}
return $translation;
}
/**
* Echo translation (shorthand)
*/
function te($key, $params = []) {
echo t($key, $params);
}
/**
* Helper to fetch localized plan names with graceful fallback.
*/
function getPlanLabel($planKey, $defaultName = null) {
$translationKey = 'plans.label.' . $planKey;
$translated = t($translationKey);
if ($translated === $translationKey) {
if ($defaultName !== null) {
return $defaultName;
}
$readable = str_replace('_', ' ', $planKey);
return ucwords($readable);
}
return $translated;
}
/**
* Helper to fetch localized plan target audience text.
*/
function getPlanAudienceLabel($planKey, $defaultDescription = null) {
$translationKey = 'plans.target_audience.' . $planKey;
$translated = t($translationKey);
if ($translated === $translationKey) {
if ($defaultDescription !== null) {
return $defaultDescription;
}
return $translationKey;
}
return $translated;
}
/**
* Get language name
*/
function getLanguageName($lang) {
$names = [
'en' => 'English',
'fr' => 'Français'
];
return $names[$lang] ?? $lang;
}
/**
* Get language direction (for RTL support in future)
*/
function getLanguageDirection($lang = null) {
if ($lang === null) {
$lang = getCurrentLanguage();
}
return 'ltr'; // Both English and French are LTR
}