Forráskód Böngészése

Changing the translate system

svalavuo 5 napja
szülő
commit
84def0d9fa
2 módosított fájl, 251 hozzáadás és 134 törlés
  1. 74 134
      includes/translation.php
  2. 177 0
      includes/translation_old.php

+ 74 - 134
includes/translation.php

@@ -1,158 +1,71 @@
 <?php
-/**
- * Translation System
- * Handles multi-language support for Finnish and English
- */
+// Translation system - Based on feedback system approach
+require_once 'config.php';
 
 class Translation {
-    private static $instance = null;
-    private $translations = [];
-    private $currentLanguage = 'en';
-    private $defaultLanguage = 'en';
-    private $supportedLanguages = ['en' => 'English', 'fi' => 'Finnish'];
+    private static $translations = [];
+    private static $current_lang = DEFAULT_LANGUAGE;
     
-    private function __construct() {
-        $this->detectLanguage();
-        $this->loadTranslations();
-    }
-    
-    public static function getInstance() {
-        if (self::$instance === null) {
-            self::$instance = new self();
+    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';
         }
-        return self::$instance;
-    }
-    
-    public static function resetInstance() {
-        self::$instance = null;
     }
     
-    private function detectLanguage() {
-        // Check if language is set in cookie
-        if (isset($_COOKIE['language']) && isset($this->supportedLanguages[$_COOKIE['language']])) {
-            $this->currentLanguage = $_COOKIE['language'];
-            return;
-        }
-        
-        // Check URL parameter
-        if (isset($_GET['lang']) && isset($this->supportedLanguages[$_GET['lang']])) {
-            $this->currentLanguage = $_GET['lang'];
-            
-            // Set cookie for language preference (expires in 1 year)
-            setcookie('language', $this->currentLanguage, time() + 31536000, '/', '', false, true);
-            $_COOKIE['language'] = $this->currentLanguage;
-            
-            // Load translations for the new language immediately
-            $this->loadTranslations();
-            
-            // Redirect to same page without language parameter to apply new language
-            $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 to avoid issues during testing
-            if (php_sapi_name() !== 'cli') {
-                // Redirect to clean URL
-                header('Location: ' . $redirectUrl);
-                exit;
-            }
-            return;
-        }
-        
-        // Check browser language preference
-        if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
-            $browserLang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
-            if (isset($this->supportedLanguages[$browserLang])) {
-                $this->currentLanguage = $browserLang;
-                
-                // Set cookie for browser language preference
-                setcookie('language', $this->currentLanguage, time() + 31536000, '/', '', false, true);
-                $_COOKIE['language'] = $this->currentLanguage;
-                return;
-            }
-        }
-        
-        // Check configuration default
-        if (defined('DEFAULT_LANGUAGE') && isset($this->supportedLanguages[DEFAULT_LANGUAGE])) {
-            $this->currentLanguage = DEFAULT_LANGUAGE;
-            return;
+    public static function get($key, $params = []) {
+        if (!isset(self::$translations[$key])) {
+            return $key; // Return key if translation not found
         }
         
-        // Fall back to English as default language
-        $this->currentLanguage = 'en';
-    }
-    
-    private function loadTranslations() {
-        $langFile = __DIR__ . '/../languages/' . $this->currentLanguage . '.php';
+        $translation = self::$translations[$key];
         
-        if (file_exists($langFile)) {
-            $this->translations = require $langFile;
-        } else {
-            // Fall back to English if current language file doesn't exist
-            $fallbackLangFile = __DIR__ . '/../languages/en.php';
-            if (file_exists($fallbackLangFile)) {
-                $this->translations = require $fallbackLangFile;
-            }
-        }
-    }
-    
-    public function translate($key, $params = []) {
-        if (isset($this->translations[$key])) {
-            $translation = $this->translations[$key];
-            
-            // Replace parameters in translation
-            foreach ($params as $param => $value) {
-                $translation = str_replace(':' . $param, $value, $translation);
+        if (!empty($params)) {
+            foreach ($params as $placeholder => $value) {
+                $translation = str_replace('{' . $placeholder . '}', $value, $translation);
             }
-            
-            return $translation;
         }
         
-        // Return key if translation not found
-        return $key;
+        return $translation;
     }
     
-    public function getCurrentLanguage() {
-        return $this->currentLanguage;
+    public static function getCurrentLang() {
+        return self::$current_lang;
     }
     
-    public function getSupportedLanguages() {
-        return $this->supportedLanguages;
+    public static function getAvailableLanguages() {
+        return [
+            'en' => 'English',
+            'fi' => 'Suomi'
+        ];
     }
     
-    public function setLanguage($language) {
-        if (isset($this->supportedLanguages[$language])) {
-            $this->currentLanguage = $language;
-            
-            // Set cookie for language preference (expires in 1 year)
-            setcookie('language', $language, time() + 31536000, '/', '', false, true);
-            $_COOKIE['language'] = $language;
-            
-            $this->loadTranslations();
+    public static function setLanguage($lang) {
+        if (in_array($lang, array_keys(self::getAvailableLanguages()))) {
+            self::init($lang);
             return true;
         }
         return false;
     }
     
-    public function getLanguageSwitcher($currentPath = '') {
+    public static function getLanguageSwitcher($currentPath = '') {
+        $current_lang = self::getCurrentLang();
+        $languages = self::getAvailableLanguages();
+        
         $switcher = '<div class="language-switcher">';
-        $switcher .= '<span class="language-label">' . $this->translate('language') . ':</span>';
+        $switcher .= '<span class="language-label">' . self::get('language') . ':</span>';
         
-        foreach ($this->supportedLanguages as $code => $name) {
+        foreach ($languages as $code => $name) {
             $separator = strpos($currentPath, '?') !== false ? '&' : '?';
             $switcherUrl = $currentPath . $separator . 'lang=' . $code;
             
-            $class = $code === $this->currentLanguage ? 'active' : '';
+            $class = $code === $current_lang ? 'active' : '';
             $switcher .= '<a href="' . htmlspecialchars($switcherUrl) . '" class="language-link ' . $class . '">' . $name . '</a>';
         }
         
@@ -161,17 +74,44 @@ class Translation {
     }
 }
 
-// Global translation function for convenience
+// Helper function for easier translation access
 function t($key, $params = []) {
-    return Translation::getInstance()->translate($key, $params);
+    return Translation::get($key, $params);
 }
 
-// Get current language
-function getCurrentLanguage() {
-    return Translation::getInstance()->getCurrentLanguage();
+// Auto-initialize with session language or default from config
+if (session_status() === PHP_SESSION_NONE) {
+    session_start();
 }
 
-// Get supported languages
-function getSupportedLanguages() {
-    return Translation::getInstance()->getSupportedLanguages();
+// 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);
+?>

+ 177 - 0
includes/translation_old.php

@@ -0,0 +1,177 @@
+<?php
+/**
+ * Translation System
+ * Handles multi-language support for Finnish and English
+ */
+
+class Translation {
+    private static $instance = null;
+    private $translations = [];
+    private $currentLanguage = 'en';
+    private $defaultLanguage = 'en';
+    private $supportedLanguages = ['en' => 'English', 'fi' => 'Finnish'];
+    
+    private function __construct() {
+        $this->detectLanguage();
+        $this->loadTranslations();
+    }
+    
+    public static function getInstance() {
+        if (self::$instance === null) {
+            self::$instance = new self();
+        }
+        return self::$instance;
+    }
+    
+    public static function resetInstance() {
+        self::$instance = null;
+    }
+    
+    private function detectLanguage() {
+        // Check if language is set in cookie
+        if (isset($_COOKIE['language']) && isset($this->supportedLanguages[$_COOKIE['language']])) {
+            $this->currentLanguage = $_COOKIE['language'];
+            return;
+        }
+        
+        // Check URL parameter
+        if (isset($_GET['lang']) && isset($this->supportedLanguages[$_GET['lang']])) {
+            $this->currentLanguage = $_GET['lang'];
+            
+            // Set cookie for language preference (expires in 1 year)
+            setcookie('language', $this->currentLanguage, time() + 31536000, '/', '', false, true);
+            $_COOKIE['language'] = $this->currentLanguage;
+            
+            // Load translations for the new language immediately
+            $this->loadTranslations();
+            
+            // Redirect to same page without language parameter to apply new language
+            $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 to avoid issues during testing
+            if (php_sapi_name() !== 'cli') {
+                // Redirect to clean URL
+                header('Location: ' . $redirectUrl);
+                exit;
+            }
+            return;
+        }
+        
+        // Check browser language preference
+        if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
+            $browserLang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
+            if (isset($this->supportedLanguages[$browserLang])) {
+                $this->currentLanguage = $browserLang;
+                
+                // Set cookie for browser language preference
+                setcookie('language', $this->currentLanguage, time() + 31536000, '/', '', false, true);
+                $_COOKIE['language'] = $this->currentLanguage;
+                return;
+            }
+        }
+        
+        // Check configuration default
+        if (defined('DEFAULT_LANGUAGE') && isset($this->supportedLanguages[DEFAULT_LANGUAGE])) {
+            $this->currentLanguage = DEFAULT_LANGUAGE;
+            return;
+        }
+        
+        // Fall back to English as default language
+        $this->currentLanguage = 'en';
+    }
+    
+    private function loadTranslations() {
+        $langFile = __DIR__ . '/../languages/' . $this->currentLanguage . '.php';
+        
+        if (file_exists($langFile)) {
+            $this->translations = require $langFile;
+        } else {
+            // Fall back to English if current language file doesn't exist
+            $fallbackLangFile = __DIR__ . '/../languages/en.php';
+            if (file_exists($fallbackLangFile)) {
+                $this->translations = require $fallbackLangFile;
+            }
+        }
+    }
+    
+    public function translate($key, $params = []) {
+        if (isset($this->translations[$key])) {
+            $translation = $this->translations[$key];
+            
+            // Replace parameters in translation
+            foreach ($params as $param => $value) {
+                $translation = str_replace(':' . $param, $value, $translation);
+            }
+            
+            return $translation;
+        }
+        
+        // Return key if translation not found
+        return $key;
+    }
+    
+    public function getCurrentLanguage() {
+        return $this->currentLanguage;
+    }
+    
+    public function getSupportedLanguages() {
+        return $this->supportedLanguages;
+    }
+    
+    public function setLanguage($language) {
+        if (isset($this->supportedLanguages[$language])) {
+            $this->currentLanguage = $language;
+            
+            // Set cookie for language preference (expires in 1 year)
+            setcookie('language', $language, time() + 31536000, '/', '', false, true);
+            $_COOKIE['language'] = $language;
+            
+            $this->loadTranslations();
+            return true;
+        }
+        return false;
+    }
+    
+    public function getLanguageSwitcher($currentPath = '') {
+        $switcher = '<div class="language-switcher">';
+        $switcher .= '<span class="language-label">' . $this->translate('language') . ':</span>';
+        
+        foreach ($this->supportedLanguages as $code => $name) {
+            $separator = strpos($currentPath, '?') !== false ? '&' : '?';
+            $switcherUrl = $currentPath . $separator . 'lang=' . $code;
+            
+            $class = $code === $this->currentLanguage ? 'active' : '';
+            $switcher .= '<a href="' . htmlspecialchars($switcherUrl) . '" class="language-link ' . $class . '">' . $name . '</a>';
+        }
+        
+        $switcher .= '</div>';
+        return $switcher;
+    }
+}
+
+// Global translation function for convenience
+function t($key, $params = []) {
+    return Translation::getInstance()->translate($key, $params);
+}
+
+// Get current language
+function getCurrentLanguage() {
+    return Translation::getInstance()->getCurrentLanguage();
+}
+
+// Get supported languages
+function getSupportedLanguages() {
+    return Translation::getInstance()->getSupportedLanguages();
+}