| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- <?php
- // Translation system - Based on feedback system approach
- require_once 'config.php';
- class Translation {
- private static $translations = [];
- private static $current_lang = DEFAULT_LANGUAGE;
-
- public static function init($lang = 'en') {
- self::$current_lang = $lang;
- $lang_file = __DIR__ . "/../languages/{$lang}.php";
-
- if (file_exists($lang_file)) {
- self::$translations = require $lang_file;
- } else {
- // Fallback to English
- self::$current_lang = 'en';
- self::$translations = require __DIR__ . '/../languages/en.php';
- }
- }
-
- public static function get($key, $params = []) {
- if (!isset(self::$translations[$key])) {
- return $key; // Return key if translation not found
- }
-
- $translation = self::$translations[$key];
-
- if (!empty($params)) {
- foreach ($params as $placeholder => $value) {
- $translation = str_replace('{' . $placeholder . '}', $value, $translation);
- }
- }
-
- return $translation;
- }
-
- public static function getCurrentLang() {
- return self::$current_lang;
- }
-
- public static function getAvailableLanguages() {
- return [
- 'en' => 'English',
- 'fi' => 'Suomi'
- ];
- }
-
- public static function setLanguage($lang) {
- if (in_array($lang, array_keys(self::getAvailableLanguages()))) {
- self::init($lang);
- return true;
- }
- return false;
- }
-
- public static function getLanguageSwitcher($currentPath = '') {
- $current_lang = self::getCurrentLang();
- $languages = self::getAvailableLanguages();
-
- $switcher = '<div class="language-switcher">';
- $switcher .= '<span class="language-label">' . self::get('language') . ':</span>';
-
- foreach ($languages as $code => $name) {
- $separator = strpos($currentPath, '?') !== false ? '&' : '?';
- $switcherUrl = $currentPath . $separator . 'lang=' . $code;
-
- $class = $code === $current_lang ? 'active' : '';
- $switcher .= '<a href="' . htmlspecialchars($switcherUrl) . '" class="language-link ' . $class . '">' . $name . '</a>';
- }
-
- $switcher .= '</div>';
- return $switcher;
- }
- }
- // Helper function for easier translation access
- function t($key, $params = []) {
- return Translation::get($key, $params);
- }
- // Auto-initialize with session language or default from config
- if (session_status() === PHP_SESSION_NONE) {
- session_start();
- }
- // Handle language switching
- if (isset($_GET['lang']) && in_array($_GET['lang'], array_keys(Translation::getAvailableLanguages()))) {
- $_SESSION['language'] = $_GET['lang'];
- Translation::setLanguage($_GET['lang']);
-
- // Redirect back to referring page or remove lang parameter
- $currentUrl = $_SERVER['REQUEST_URI'];
- $parsedUrl = parse_url($currentUrl);
-
- // Build URL without lang parameter
- $redirectUrl = $parsedUrl['path'];
- if (isset($parsedUrl['query'])) {
- parse_str($parsedUrl['query'], $queryParams);
- unset($queryParams['lang']); // Remove lang parameter
-
- if (!empty($queryParams)) {
- $redirectUrl .= '?' . http_build_query($queryParams);
- }
- }
-
- // Only redirect if not in CLI mode
- if (php_sapi_name() !== 'cli') {
- header('Location: ' . $redirectUrl);
- exit;
- }
- }
- // Initialize translation
- $language = $_SESSION['language'] ?? DEFAULT_LANGUAGE;
- Translation::init($language);
- ?>
|